aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2011-11-22 18:01:09 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-15 14:14:23 +0100
commitca15a10629b4d977177bc8406e833b49a5f5aee2 (patch)
treefc2d825a98faae740177f224dc9591edcf4723bc
parent48babcf97648e71b329bb5e809a08e1fd2c783d2 (diff)
iface-modem: new `State' property, bound to the one in the MmGDbusModem skeleton
-rw-r--r--src/mm-iface-modem.c38
-rw-r--r--src/mm-iface-modem.h1
2 files changed, 38 insertions, 1 deletions
diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c
index bbaebad8..511d1760 100644
--- a/src/mm-iface-modem.c
+++ b/src/mm-iface-modem.c
@@ -17,6 +17,7 @@
#include <ModemManager.h>
#include <mm-gdbus-modem.h>
+#include <mm-enums-types.h>
#include <mm-errors-types.h>
#include "mm-iface-modem.h"
@@ -151,7 +152,26 @@ set_lock_status (MMIfaceModem *self,
MmGdbusModem *skeleton,
MMModemLock lock)
{
+ MMModemLock old_lock;
+
+ old_lock = mm_gdbus_modem_get_unlock_required (skeleton);
mm_gdbus_modem_set_unlock_required (skeleton, lock);
+
+ if (lock == MM_MODEM_LOCK_NONE) {
+ if (old_lock != MM_MODEM_LOCK_NONE) {
+ /* Notify transition from UNKNOWN/LOCKED to DISABLED */
+ g_object_set (self,
+ MM_IFACE_MODEM_STATE, MM_MODEM_STATE_DISABLED,
+ NULL);
+ }
+ } else {
+ if (old_lock == MM_MODEM_LOCK_UNKNOWN) {
+ /* Notify transition from UNKNOWN to LOCKED */
+ g_object_set (self,
+ MM_IFACE_MODEM_STATE, MM_MODEM_STATE_LOCKED,
+ NULL);
+ }
+ }
}
MMModemLock
@@ -803,10 +823,12 @@ mm_iface_modem_initialize (MMIfaceModem *self,
case INTERFACE_STATUS_INITIALIZED:
case INTERFACE_STATUS_SHUTDOWN: {
MmGdbusModem *skeleton = NULL;
+ MMModemState modem_state = MM_MODEM_STATE_UNKNOWN;
/* Did we already create it? */
g_object_get (self,
MM_IFACE_MODEM_DBUS_SKELETON, &skeleton,
+ MM_IFACE_MODEM_STATE, &modem_state,
NULL);
if (!skeleton) {
skeleton = mm_gdbus_modem_skeleton_new ();
@@ -834,7 +856,12 @@ mm_iface_modem_initialize (MMIfaceModem *self,
mm_gdbus_modem_set_preferred_mode (skeleton, MM_MODEM_MODE_NONE);
mm_gdbus_modem_set_supported_bands (skeleton, MM_MODEM_BAND_UNKNOWN);
mm_gdbus_modem_set_allowed_bands (skeleton, MM_MODEM_BAND_ANY);
- mm_gdbus_modem_set_state (skeleton, MM_MODEM_STATE_UNKNOWN);
+
+ /* Bind our State property */
+ mm_gdbus_modem_set_state (skeleton, modem_state);
+ g_object_bind_property (self, MM_IFACE_MODEM_STATE,
+ skeleton, "state",
+ G_BINDING_DEFAULT);
/* Keep a reference to it */
g_object_set (self,
@@ -910,6 +937,15 @@ iface_modem_init (gpointer g_iface)
MM_GDBUS_TYPE_MODEM_SKELETON,
G_PARAM_READWRITE));
+ g_object_interface_install_property
+ (g_iface,
+ g_param_spec_enum (MM_IFACE_MODEM_STATE,
+ "State",
+ "State of the modem",
+ MM_TYPE_MODEM_STATE,
+ MM_MODEM_STATE_UNKNOWN,
+ G_PARAM_READWRITE));
+
initialized = TRUE;
}
diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h
index fe72ae74..2fdd5bfa 100644
--- a/src/mm-iface-modem.h
+++ b/src/mm-iface-modem.h
@@ -25,6 +25,7 @@
#define MM_IFACE_MODEM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), MM_TYPE_IFACE_MODEM, MMIfaceModem))
#define MM_IFACE_MODEM_DBUS_SKELETON "iface-modem-dbus-skeleton"
+#define MM_IFACE_MODEM_STATE "iface-modem-state"
typedef struct _MMIfaceModem MMIfaceModem;