summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-11-08 20:02:24 +0100
committerAleksander Morgado <aleksander@lanedo.com>2013-11-11 16:49:49 +0100
commitf7b0c56d911a0a7a223f7a74418c825dd5520a15 (patch)
tree35baa15cd1070424867175d6e64431264734e068
parentbeb8316d6e8614d09cb6759cce6ee246d6e42f00 (diff)
downloadModemManager-f7b0c56d911a0a7a223f7a74418c825dd5520a15.tar.gz
huawei: consolidate command support checks
-rw-r--r--plugins/huawei/mm-broadband-modem-huawei.c76
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