bearer: new `bearer-state' property
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -117,3 +117,5 @@ m4/xsize.m4
|
|||||||
|
|
||||||
TAGS
|
TAGS
|
||||||
ABOUT-NLS
|
ABOUT-NLS
|
||||||
|
/src/mm-private-enums-types.c
|
||||||
|
/src/mm-private-enums-types.h
|
||||||
|
@@ -53,6 +53,22 @@ libserial_la_SOURCES = \
|
|||||||
mm-qcdm-serial-port.c \
|
mm-qcdm-serial-port.c \
|
||||||
mm-qcdm-serial-port.h
|
mm-qcdm-serial-port.h
|
||||||
|
|
||||||
|
# Daemon specific enum types
|
||||||
|
WITH_ENUMS = mm-bearer.h
|
||||||
|
|
||||||
|
mm-private-enums-types.h: Makefile.am $(WITH_ENUMS) $(top_srcdir)/build-aux/mm-enums-template.h
|
||||||
|
$(AM_V_GEN) glib-mkenums \
|
||||||
|
--fhead "#ifndef __MM_PRIVATE_ENUMS_TYPES_H__\n#define __MM_PRIVATE_ENUMS_TYPES_H__\n" \
|
||||||
|
--template $(top_srcdir)/build-aux/mm-enums-template.h \
|
||||||
|
--ftail "#endif /* __MM_PRIVATE_ENUMS_TYPES_H__ */\n" \
|
||||||
|
$(WITH_ENUMS) > $@
|
||||||
|
|
||||||
|
mm-private-enums-types.c: Makefile.am $(top_srcdir)/include/ModemManager-enums.h $(top_srcdir)/build-aux/mm-enums-template.c mm-private-enums-types.h
|
||||||
|
$(AM_V_GEN) glib-mkenums \
|
||||||
|
--fhead "#include \"mm-bearer.h\"\n#include \"mm-private-enums-types.h\"" \
|
||||||
|
--template $(top_srcdir)/build-aux/mm-enums-template.c \
|
||||||
|
$(WITH_ENUMS) > $@
|
||||||
|
|
||||||
sbin_PROGRAMS = modem-manager
|
sbin_PROGRAMS = modem-manager
|
||||||
|
|
||||||
modem_manager_CPPFLAGS = \
|
modem_manager_CPPFLAGS = \
|
||||||
@@ -101,6 +117,8 @@ modem_manager_SOURCES = \
|
|||||||
main.c \
|
main.c \
|
||||||
mm-log.c \
|
mm-log.c \
|
||||||
mm-log.h \
|
mm-log.h \
|
||||||
|
mm-private-enums-types.h \
|
||||||
|
mm-private-enums-types.c \
|
||||||
mm-callback-info.c \
|
mm-callback-info.c \
|
||||||
mm-callback-info.h \
|
mm-callback-info.h \
|
||||||
$(auth_sources) \
|
$(auth_sources) \
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
#include <ModemManager.h>
|
#include <ModemManager.h>
|
||||||
#include <libmm-common.h>
|
#include <libmm-common.h>
|
||||||
|
|
||||||
|
#include "mm-private-enums-types.h"
|
||||||
#include "mm-iface-modem.h"
|
#include "mm-iface-modem.h"
|
||||||
#include "mm-bearer.h"
|
#include "mm-bearer.h"
|
||||||
#include "mm-base-modem-at.h"
|
#include "mm-base-modem-at.h"
|
||||||
@@ -41,6 +42,7 @@ enum {
|
|||||||
PROP_CONNECTION,
|
PROP_CONNECTION,
|
||||||
PROP_MODEM,
|
PROP_MODEM,
|
||||||
PROP_CONNECTION_ALLOWED,
|
PROP_CONNECTION_ALLOWED,
|
||||||
|
PROP_STATUS,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -55,6 +57,8 @@ struct _MMBearerPrivate {
|
|||||||
gchar *path;
|
gchar *path;
|
||||||
/* Flag to specify whether the bearer can be connected */
|
/* Flag to specify whether the bearer can be connected */
|
||||||
gboolean connection_allowed;
|
gboolean connection_allowed;
|
||||||
|
/* Status of this bearer */
|
||||||
|
MMBearerStatus status;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -67,11 +71,18 @@ handle_connect_ready (MMBearer *self,
|
|||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
if (!MM_BEARER_GET_CLASS (self)->connect_finish (self, res, &error))
|
if (!MM_BEARER_GET_CLASS (self)->connect_finish (self, res, &error)) {
|
||||||
|
mm_dbg ("Couldn't connect bearer '%s'", self->priv->path);
|
||||||
|
self->priv->status = MM_BEARER_STATUS_DISCONNECTED;
|
||||||
g_dbus_method_invocation_take_error (invocation, error);
|
g_dbus_method_invocation_take_error (invocation, error);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
mm_dbg ("Connected bearer '%s'", self->priv->path);
|
||||||
|
self->priv->status = MM_BEARER_STATUS_CONNECTED;
|
||||||
mm_gdbus_bearer_complete_connect (MM_GDBUS_BEARER (self), invocation);
|
mm_gdbus_bearer_complete_connect (MM_GDBUS_BEARER (self), invocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STATUS]);
|
||||||
g_object_unref (invocation);
|
g_object_unref (invocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,6 +102,10 @@ handle_connect (MMBearer *self,
|
|||||||
|
|
||||||
if (MM_BEARER_GET_CLASS (self)->connect != NULL &&
|
if (MM_BEARER_GET_CLASS (self)->connect != NULL &&
|
||||||
MM_BEARER_GET_CLASS (self)->connect_finish != NULL) {
|
MM_BEARER_GET_CLASS (self)->connect_finish != NULL) {
|
||||||
|
/* Connecting! */
|
||||||
|
mm_dbg ("Connecting bearer '%s'", self->priv->path);
|
||||||
|
self->priv->status = MM_BEARER_STATUS_CONNECTING;
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STATUS]);
|
||||||
MM_BEARER_GET_CLASS (self)->connect (
|
MM_BEARER_GET_CLASS (self)->connect (
|
||||||
self,
|
self,
|
||||||
number,
|
number,
|
||||||
@@ -112,11 +127,18 @@ handle_disconnect_ready (MMBearer *self,
|
|||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
if (!MM_BEARER_GET_CLASS (self)->disconnect_finish (self, res, &error))
|
if (!MM_BEARER_GET_CLASS (self)->disconnect_finish (self, res, &error)) {
|
||||||
|
mm_dbg ("Couldn't disconnect bearer '%s'", self->priv->path);
|
||||||
|
self->priv->status = MM_BEARER_STATUS_CONNECTED;
|
||||||
g_dbus_method_invocation_take_error (invocation, error);
|
g_dbus_method_invocation_take_error (invocation, error);
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
mm_dbg ("Disconnected bearer '%s'", self->priv->path);
|
||||||
|
self->priv->status = MM_BEARER_STATUS_DISCONNECTED;
|
||||||
mm_gdbus_bearer_complete_disconnect (MM_GDBUS_BEARER (self), invocation);
|
mm_gdbus_bearer_complete_disconnect (MM_GDBUS_BEARER (self), invocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STATUS]);
|
||||||
g_object_unref (invocation);
|
g_object_unref (invocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,6 +148,10 @@ handle_disconnect (MMBearer *self,
|
|||||||
{
|
{
|
||||||
if (MM_BEARER_GET_CLASS (self)->disconnect != NULL &&
|
if (MM_BEARER_GET_CLASS (self)->disconnect != NULL &&
|
||||||
MM_BEARER_GET_CLASS (self)->disconnect_finish != NULL) {
|
MM_BEARER_GET_CLASS (self)->disconnect_finish != NULL) {
|
||||||
|
/* Disconnecting! */
|
||||||
|
mm_dbg ("Disconnecting bearer '%s'", self->priv->path);
|
||||||
|
self->priv->status = MM_BEARER_STATUS_DISCONNECTING;
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_STATUS]);
|
||||||
MM_BEARER_GET_CLASS (self)->disconnect (
|
MM_BEARER_GET_CLASS (self)->disconnect (
|
||||||
self,
|
self,
|
||||||
(GAsyncReadyCallback)handle_disconnect_ready,
|
(GAsyncReadyCallback)handle_disconnect_ready,
|
||||||
@@ -179,6 +205,12 @@ mm_bearer_unexport (MMBearer *self)
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
MMBearerStatus
|
||||||
|
mm_bearer_get_status (MMBearer *self)
|
||||||
|
{
|
||||||
|
return self->priv->status;
|
||||||
|
}
|
||||||
|
|
||||||
const gchar *
|
const gchar *
|
||||||
mm_bearer_get_path (MMBearer *self)
|
mm_bearer_get_path (MMBearer *self)
|
||||||
{
|
{
|
||||||
@@ -276,6 +308,9 @@ set_property (GObject *object,
|
|||||||
case PROP_CONNECTION_ALLOWED:
|
case PROP_CONNECTION_ALLOWED:
|
||||||
self->priv->connection_allowed = g_value_get_boolean (value);
|
self->priv->connection_allowed = g_value_get_boolean (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_STATUS:
|
||||||
|
self->priv->status = g_value_get_enum (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -303,6 +338,9 @@ get_property (GObject *object,
|
|||||||
case PROP_CONNECTION_ALLOWED:
|
case PROP_CONNECTION_ALLOWED:
|
||||||
g_value_set_boolean (value, self->priv->connection_allowed);
|
g_value_set_boolean (value, self->priv->connection_allowed);
|
||||||
break;
|
break;
|
||||||
|
case PROP_STATUS:
|
||||||
|
g_value_set_enum (value, self->priv->status);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@@ -316,6 +354,7 @@ mm_bearer_init (MMBearer *self)
|
|||||||
self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
|
self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
|
||||||
MM_TYPE_BEARER,
|
MM_TYPE_BEARER,
|
||||||
MMBearerPrivate);
|
MMBearerPrivate);
|
||||||
|
self->priv->status = MM_BEARER_STATUS_DISCONNECTED;
|
||||||
|
|
||||||
/* Set defaults */
|
/* Set defaults */
|
||||||
mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL);
|
mm_gdbus_bearer_set_interface (MM_GDBUS_BEARER (self), NULL);
|
||||||
@@ -396,4 +435,13 @@ mm_bearer_class_init (MMBearerClass *klass)
|
|||||||
FALSE,
|
FALSE,
|
||||||
G_PARAM_READWRITE);
|
G_PARAM_READWRITE);
|
||||||
g_object_class_install_property (object_class, PROP_CONNECTION_ALLOWED, properties[PROP_CONNECTION_ALLOWED]);
|
g_object_class_install_property (object_class, PROP_CONNECTION_ALLOWED, properties[PROP_CONNECTION_ALLOWED]);
|
||||||
|
|
||||||
|
properties[PROP_STATUS] =
|
||||||
|
g_param_spec_enum (MM_BEARER_STATUS,
|
||||||
|
"Bearer status",
|
||||||
|
"Status of the bearer",
|
||||||
|
MM_TYPE_BEARER_STATUS,
|
||||||
|
MM_BEARER_STATUS_DISCONNECTED,
|
||||||
|
G_PARAM_READWRITE);
|
||||||
|
g_object_class_install_property (object_class, PROP_STATUS, properties[PROP_STATUS]);
|
||||||
}
|
}
|
||||||
|
@@ -39,10 +39,18 @@ typedef struct _MMBearerPrivate MMBearerPrivate;
|
|||||||
#define MM_BEARER_CONNECTION "bearer-connection"
|
#define MM_BEARER_CONNECTION "bearer-connection"
|
||||||
#define MM_BEARER_MODEM "bearer-modem"
|
#define MM_BEARER_MODEM "bearer-modem"
|
||||||
#define MM_BEARER_CONNECTION_ALLOWED "bearer-connection-allowed"
|
#define MM_BEARER_CONNECTION_ALLOWED "bearer-connection-allowed"
|
||||||
|
#define MM_BEARER_STATUS "bearer-status"
|
||||||
|
|
||||||
/* Prefix for all bearer object paths */
|
/* Prefix for all bearer object paths */
|
||||||
#define MM_DBUS_BEARER_PREFIX MM_DBUS_PATH "/Bearers"
|
#define MM_DBUS_BEARER_PREFIX MM_DBUS_PATH "/Bearers"
|
||||||
|
|
||||||
|
typedef enum { /*< underscore_name=mm_bearer_status >*/
|
||||||
|
MM_BEARER_STATUS_DISCONNECTED,
|
||||||
|
MM_BEARER_STATUS_DISCONNECTING,
|
||||||
|
MM_BEARER_STATUS_CONNECTING,
|
||||||
|
MM_BEARER_STATUS_CONNECTED,
|
||||||
|
} MMBearerStatus;
|
||||||
|
|
||||||
struct _MMBearer {
|
struct _MMBearer {
|
||||||
MmGdbusBearerSkeleton parent;
|
MmGdbusBearerSkeleton parent;
|
||||||
MMBearerPrivate *priv;
|
MMBearerPrivate *priv;
|
||||||
@@ -80,4 +88,6 @@ void mm_bearer_expose_properties (MMBearer *bearer,
|
|||||||
void mm_bearer_set_connection_allowed (MMBearer *bearer);
|
void mm_bearer_set_connection_allowed (MMBearer *bearer);
|
||||||
void mm_bearer_set_connection_forbidden (MMBearer *bearer);
|
void mm_bearer_set_connection_forbidden (MMBearer *bearer);
|
||||||
|
|
||||||
|
MMBearerStatus mm_bearer_get_status (MMBearer *bearer);
|
||||||
|
|
||||||
#endif /* MM_BEARER_H */
|
#endif /* MM_BEARER_H */
|
||||||
|
Reference in New Issue
Block a user