diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-11-08 20:02:24 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-11-11 16:49:49 +0100 |
commit | f7b0c56d911a0a7a223f7a74418c825dd5520a15 (patch) | |
tree | 35baa15cd1070424867175d6e64431264734e068 | |
parent | beb8316d6e8614d09cb6759cce6ee246d6e42f00 (diff) | |
download | ModemManager-f7b0c56d911a0a7a223f7a74418c825dd5520a15.tar.gz |
huawei: consolidate command support checks
-rw-r--r-- | plugins/huawei/mm-broadband-modem-huawei.c | 76 |
1 files changed, 32 insertions, 44 deletions
diff --git a/plugins/huawei/mm-broadband-modem-huawei.c b/plugins/huawei/mm-broadband-modem-huawei.c index 762d7f167..1ca8bb296 100644 --- a/plugins/huawei/mm-broadband-modem-huawei.c +++ b/plugins/huawei/mm-broadband-modem-huawei.c @@ -65,16 +65,10 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemHuawei, mm_broadband_modem_huawei, MM_TY G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM_TIME, iface_modem_time_init)); typedef enum { - NDISDUP_SUPPORT_UNKNOWN, - NDISDUP_NOT_SUPPORTED, - NDISDUP_SUPPORTED -} NdisdupSupport; - -typedef enum { - RFSWITCH_SUPPORT_UNKNOWN, - RFSWITCH_NOT_SUPPORTED, - RFSWITCH_SUPPORTED -} RfswitchSupport; + FEATURE_SUPPORT_UNKNOWN, + FEATURE_NOT_SUPPORTED, + FEATURE_SUPPORTED +} FeatureSupport; struct _MMBroadbandModemHuaweiPrivate { /* Regex for signal quality related notifications */ @@ -104,11 +98,9 @@ struct _MMBroadbandModemHuaweiPrivate { GRegex *ndisend_regex; GRegex *rfswitch_regex; - NdisdupSupport ndisdup_support; - RfswitchSupport rfswitch_support; - - gboolean sysinfoex_supported; - gboolean sysinfoex_support_checked; + FeatureSupport ndisdup_support; + FeatureSupport rfswitch_support; + FeatureSupport sysinfoex_support; }; /*****************************************************************************/ @@ -231,9 +223,8 @@ run_sysinfoex_ready (MMBaseModem *_self, response = mm_base_modem_at_command_finish (_self, res, &error); if (!response) { /* First time we try, we fallback to ^SYSINFO */ - if (!self->priv->sysinfoex_support_checked) { - self->priv->sysinfoex_support_checked = TRUE; - self->priv->sysinfoex_supported = FALSE; + if (self->priv->sysinfoex_support == FEATURE_SUPPORT_UNKNOWN) { + self->priv->sysinfoex_support = FEATURE_NOT_SUPPORTED; mm_dbg ("^SYSINFOEX failed: %s, assuming unsupported", error->message); g_error_free (error); run_sysinfo (self, simple); @@ -248,9 +239,8 @@ run_sysinfoex_ready (MMBaseModem *_self, return; } - self->priv->sysinfoex_supported = TRUE; - if (!self->priv->sysinfoex_support_checked) - self->priv->sysinfoex_support_checked = TRUE; + if (self->priv->sysinfoex_support == FEATURE_SUPPORT_UNKNOWN) + self->priv->sysinfoex_support = FEATURE_SUPPORTED; result = g_new0 (SysinfoResult, 1); result->extended = TRUE; @@ -300,7 +290,7 @@ sysinfo (MMBroadbandModemHuawei *self, callback, user_data, sysinfo); - if (!self->priv->sysinfoex_support_checked || self->priv->sysinfoex_supported) + if (self->priv->sysinfoex_support == FEATURE_SUPPORT_UNKNOWN) run_sysinfoex (self, result); else run_sysinfo (self, result); @@ -1849,9 +1839,9 @@ static void create_bearer_for_net_port (CreateBearerContext *ctx) { switch (ctx->self->priv->ndisdup_support) { - case NDISDUP_SUPPORT_UNKNOWN: + case FEATURE_SUPPORT_UNKNOWN: g_assert_not_reached (); - case NDISDUP_NOT_SUPPORTED: + case FEATURE_NOT_SUPPORTED: mm_dbg ("^NDISDUP not supported, creating default bearer..."); mm_broadband_bearer_new (MM_BROADBAND_MODEM (ctx->self), ctx->properties, @@ -1859,7 +1849,7 @@ create_bearer_for_net_port (CreateBearerContext *ctx) (GAsyncReadyCallback)broadband_bearer_new_ready, ctx); return; - case NDISDUP_SUPPORTED: + case FEATURE_SUPPORTED: mm_dbg ("^NDISDUP supported, creating huawei bearer..."); mm_broadband_bearer_huawei_new (MM_BROADBAND_MODEM_HUAWEI (ctx->self), ctx->properties, @@ -1891,7 +1881,7 @@ huawei_modem_create_bearer (MMIfaceModem *self, port = mm_base_modem_peek_best_data_port (MM_BASE_MODEM (self), MM_PORT_TYPE_NET); if (port) { /* Check NDISDUP support the first time we need it */ - if (ctx->self->priv->ndisdup_support == NDISDUP_SUPPORT_UNKNOWN) { + if (ctx->self->priv->ndisdup_support == FEATURE_SUPPORT_UNKNOWN) { GUdevDevice *net_port; GUdevClient *client; @@ -1902,10 +1892,10 @@ huawei_modem_create_bearer (MMIfaceModem *self, mm_port_get_device (port))); if (g_udev_device_get_property_as_boolean (net_port, "ID_MM_HUAWEI_NDISDUP_SUPPORTED")) { mm_dbg ("This device (%s) can support ndisdup feature", mm_port_get_device (port)); - ctx->self->priv->ndisdup_support = NDISDUP_SUPPORTED; + ctx->self->priv->ndisdup_support = FEATURE_SUPPORTED; } else { mm_dbg ("This device (%s) can not support ndisdup feature", mm_port_get_device (port)); - ctx->self->priv->ndisdup_support = NDISDUP_NOT_SUPPORTED; + ctx->self->priv->ndisdup_support = FEATURE_NOT_SUPPORTED; } g_object_unref (client); } @@ -2649,10 +2639,10 @@ huawei_rfswitch_check_ready (MMBaseModem *_self, } switch (self->priv->rfswitch_support) { - case RFSWITCH_SUPPORT_UNKNOWN: + case FEATURE_SUPPORT_UNKNOWN: if (error) { mm_dbg ("The device does not support ^RFSWITCH"); - self->priv->rfswitch_support = RFSWITCH_NOT_SUPPORTED; + self->priv->rfswitch_support = FEATURE_NOT_SUPPORTED; g_error_free (error); /* Fall back to parent's load_power_state */ iface_modem_parent->load_power_state (MM_IFACE_MODEM (self), @@ -2662,9 +2652,9 @@ huawei_rfswitch_check_ready (MMBaseModem *_self, } mm_dbg ("The device supports ^RFSWITCH"); - self->priv->rfswitch_support = RFSWITCH_SUPPORTED; + self->priv->rfswitch_support = FEATURE_SUPPORTED; break; - case RFSWITCH_SUPPORTED: + case FEATURE_SUPPORTED: break; default: g_assert_not_reached (); @@ -2708,8 +2698,8 @@ load_power_state (MMIfaceModem *self, load_power_state); switch (MM_BROADBAND_MODEM_HUAWEI (self)->priv->rfswitch_support) { - case RFSWITCH_SUPPORT_UNKNOWN: - case RFSWITCH_SUPPORTED: { + case FEATURE_SUPPORT_UNKNOWN: + case FEATURE_SUPPORTED: { /* Temporarily disable the unsolicited ^RFSWITCH event handler in order to * prevent it from discarding the response to the ^RFSWITCH? command. * It will be re-enabled in huawei_rfswitch_check_ready. @@ -2724,7 +2714,7 @@ load_power_state (MMIfaceModem *self, result); break; } - case RFSWITCH_NOT_SUPPORTED: + case FEATURE_NOT_SUPPORTED: /* Run parent's load_power_state */ iface_modem_parent->load_power_state (self, (GAsyncReadyCallback)parent_load_power_state_ready, @@ -2753,7 +2743,7 @@ huawei_modem_power_up (MMIfaceModem *self, gpointer user_data) { switch (MM_BROADBAND_MODEM_HUAWEI (self)->priv->rfswitch_support) { - case RFSWITCH_NOT_SUPPORTED: + case FEATURE_NOT_SUPPORTED: mm_base_modem_at_command (MM_BASE_MODEM (self), "+CFUN=1", 30, @@ -2761,7 +2751,7 @@ huawei_modem_power_up (MMIfaceModem *self, callback, user_data); break; - case RFSWITCH_SUPPORTED: + case FEATURE_SUPPORTED: mm_base_modem_at_command (MM_BASE_MODEM (self), "^RFSWITCH=1", 30, @@ -2792,7 +2782,7 @@ huawei_modem_power_down (MMIfaceModem *self, gpointer user_data) { switch (MM_BROADBAND_MODEM_HUAWEI (self)->priv->rfswitch_support) { - case RFSWITCH_NOT_SUPPORTED: + case FEATURE_NOT_SUPPORTED: mm_base_modem_at_command (MM_BASE_MODEM (self), "+CFUN=0", 30, @@ -2800,7 +2790,7 @@ huawei_modem_power_down (MMIfaceModem *self, callback, user_data); break; - case RFSWITCH_SUPPORTED: + case FEATURE_SUPPORTED: mm_base_modem_at_command (MM_BASE_MODEM (self), "^RFSWITCH=0", 30, @@ -3040,11 +3030,9 @@ mm_broadband_modem_huawei_init (MMBroadbandModemHuawei *self) self->priv->rfswitch_regex = g_regex_new ("\\r\\n\\^RFSWITCH:.+\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); - self->priv->ndisdup_support = NDISDUP_SUPPORT_UNKNOWN; - self->priv->rfswitch_support = RFSWITCH_SUPPORT_UNKNOWN; - - self->priv->sysinfoex_supported = FALSE; - self->priv->sysinfoex_support_checked = FALSE; + self->priv->ndisdup_support = FEATURE_SUPPORT_UNKNOWN; + self->priv->rfswitch_support = FEATURE_SUPPORT_UNKNOWN; + self->priv->sysinfoex_support = FEATURE_SUPPORT_UNKNOWN; } static void |