diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem.c | 20 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 80 | ||||
-rw-r--r-- | src/mm-iface-modem.h | 7 |
3 files changed, 73 insertions, 34 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index a4a25c67..b9052fd7 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -208,9 +208,9 @@ create_capabilities_string (MMModemCapability caps) } static MMModemCapability -load_modem_capabilities_finish (MMIfaceModem *self, - GAsyncResult *res, - GError **error) +load_current_capabilities_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error) { GVariant *result; MMModemCapability caps; @@ -222,7 +222,7 @@ load_modem_capabilities_finish (MMIfaceModem *self, caps = (MMModemCapability)g_variant_get_uint32 (result); caps_str = create_capabilities_string (caps); - mm_dbg ("loaded modem capabilities: %s", caps_str); + mm_dbg ("loaded current capabilities: %s", caps_str); g_free (caps_str); g_variant_unref (result); @@ -238,11 +238,11 @@ static const MMAtCommand capabilities[] = { }; static void -load_modem_capabilities (MMIfaceModem *self, - GAsyncReadyCallback callback, - gpointer user_data) +load_current_capabilities (MMIfaceModem *self, + GAsyncReadyCallback callback, + gpointer user_data) { - mm_dbg ("loading modem capabilities..."); + mm_dbg ("loading current capabilities..."); mm_at_sequence (G_OBJECT (self), mm_base_modem_get_port_primary (MM_BASE_MODEM (self)), (MMAtCommand *)capabilities, @@ -911,8 +911,8 @@ dispose (GObject *object) static void iface_modem_init (MMIfaceModem *iface) { - iface->load_modem_capabilities = load_modem_capabilities; - iface->load_modem_capabilities_finish = load_modem_capabilities_finish; + iface->load_current_capabilities = load_current_capabilities; + iface->load_current_capabilities_finish = load_current_capabilities_finish; iface->load_manufacturer = load_manufacturer; iface->load_manufacturer_finish = load_manufacturer_finish; iface->load_model = load_model; diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index b26b6466..a5f28509 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -695,8 +695,8 @@ mm_iface_modem_signal_quality_check (MMIfaceModem *self, typedef enum { INITIALIZATION_STEP_FIRST, - INITIALIZATION_STEP_MODEM_CAPABILITIES, INITIALIZATION_STEP_CURRENT_CAPABILITIES, + INITIALIZATION_STEP_MODEM_CAPABILITIES, INITIALIZATION_STEP_MAX_BEARERS, INITIALIZATION_STEP_MAX_ACTIVE_BEARERS, INITIALIZATION_STEP_MANUFACTURER, @@ -809,8 +809,31 @@ interface_initialization_finish (MMIfaceModem *self, interface_initialization_step (ctx); \ } +static void +load_current_capabilities_ready (MMIfaceModem *self, + GAsyncResult *res, + InitializationContext *ctx) +{ + GError *error = NULL; + + /* We have the property in the interface bound to the property in the + * skeleton. */ + g_object_set (self, + MM_IFACE_MODEM_CURRENT_CAPABILITIES, + MM_IFACE_MODEM_GET_INTERFACE (self)->load_current_capabilities_finish (self, res, &error), + NULL); + + if (error) { + mm_warn ("couldn't load Current Capabilities: '%s'", error->message); + g_error_free (error); + } + + /* Go on to next step */ + ctx->step++; + interface_initialization_step (ctx); +} + UINT_REPLY_READY_FN (modem_capabilities, "Modem Capabilities") -UINT_REPLY_READY_FN (current_capabilities, "Current Capabilities") UINT_REPLY_READY_FN (max_bearers, "Max Bearers") UINT_REPLY_READY_FN (max_active_bearers, "Max Active Bearers") STR_REPLY_READY_FN (manufacturer, "Manufacturer") @@ -935,6 +958,22 @@ interface_initialization_step (InitializationContext *ctx) break; } + case INITIALIZATION_STEP_CURRENT_CAPABILITIES: + /* Current capabilities may change during runtime, i.e. if new firmware reloaded; but we'll + * try to handle that by making sure the capabilities are cleared when the new firmware is + * reloaded. So if we're asked to re-initialize, if we already have current capabilities loaded, + * don't try to load them again. */ + if (mm_gdbus_modem_get_current_capabilities (ctx->skeleton) == MM_MODEM_CAPABILITY_NONE && + MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_current_capabilities && + MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_current_capabilities_finish) { + MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_current_capabilities ( + ctx->self, + (GAsyncReadyCallback)load_current_capabilities_ready, + ctx); + return; + } + break; + case INITIALIZATION_STEP_MODEM_CAPABILITIES: /* Modem capabilities are meant to be loaded only once during the whole * lifetime of the modem. Therefore, if we already have them loaded, @@ -948,22 +987,9 @@ interface_initialization_step (InitializationContext *ctx) ctx); return; } - break; - - case INITIALIZATION_STEP_CURRENT_CAPABILITIES: - /* In theory, this property is able to change during runtime, so if - * possible we'll reload it. */ - if (MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_current_capabilities && - MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_current_capabilities_finish) { - MM_IFACE_MODEM_GET_INTERFACE (ctx->self)->load_current_capabilities ( - ctx->self, - (GAsyncReadyCallback)load_current_capabilities_ready, - ctx); - return; - } - /* If no specific way of getting current capabilities, assume they are - * equal to the modem capabilities */ - mm_gdbus_modem_set_current_capabilities ( + /* If no specific way of getting modem capabilities, assume they are + * equal to the current capabilities */ + mm_gdbus_modem_set_modem_capabilities ( ctx->skeleton, mm_gdbus_modem_get_current_capabilities (ctx->skeleton)); break; @@ -1340,7 +1366,6 @@ mm_iface_modem_initialize (MMIfaceModem *self, /* Set all initial property defaults */ mm_gdbus_modem_set_sim (skeleton, NULL); mm_gdbus_modem_set_modem_capabilities (skeleton, MM_MODEM_CAPABILITY_NONE); - mm_gdbus_modem_set_current_capabilities (skeleton, MM_MODEM_CAPABILITY_NONE); mm_gdbus_modem_set_max_bearers (skeleton, 0); mm_gdbus_modem_set_max_active_bearers (skeleton, 0); mm_gdbus_modem_set_manufacturer (skeleton, NULL); @@ -1362,13 +1387,17 @@ mm_iface_modem_initialize (MMIfaceModem *self, mm_gdbus_modem_set_allowed_bands (skeleton, MM_MODEM_BAND_ANY); /* 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); + /* Bind our Capabilities property */ + g_object_bind_property (self, MM_IFACE_MODEM_CURRENT_CAPABILITIES, + skeleton, "current-capabilities", + G_BINDING_DEFAULT); - /* Keep a reference to it */ g_object_set (self, + MM_IFACE_MODEM_STATE, modem_state, + MM_IFACE_MODEM_CURRENT_CAPABILITIES, MM_MODEM_CAPABILITY_NONE, MM_IFACE_MODEM_DBUS_SKELETON, skeleton, NULL); } @@ -1462,6 +1491,15 @@ iface_modem_init (gpointer g_iface) MM_MODEM_STATE_UNKNOWN, G_PARAM_READWRITE)); + g_object_interface_install_property + (g_iface, + g_param_spec_flags (MM_IFACE_MODEM_CURRENT_CAPABILITIES, + "Current capabilities", + "Current capabilities of the modem", + MM_TYPE_MODEM_CAPABILITY, + MM_MODEM_CAPABILITY_NONE, + G_PARAM_READWRITE)); + initialized = TRUE; } diff --git a/src/mm-iface-modem.h b/src/mm-iface-modem.h index de1baf78..2008119b 100644 --- a/src/mm-iface-modem.h +++ b/src/mm-iface-modem.h @@ -24,9 +24,10 @@ #define MM_IS_IFACE_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_IFACE_MODEM)) #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" -#define MM_IFACE_MODEM_SIM "iface-modem-sim" +#define MM_IFACE_MODEM_DBUS_SKELETON "iface-modem-dbus-skeleton" +#define MM_IFACE_MODEM_CURRENT_CAPABILITIES "iface-modem-current-capabilities" +#define MM_IFACE_MODEM_STATE "iface-modem-state" +#define MM_IFACE_MODEM_SIM "iface-modem-sim" typedef struct _MMIfaceModem MMIfaceModem; |