diff options
author | Dan Williams <dcbw@redhat.com> | 2009-07-02 13:48:30 -0400 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2009-07-02 13:48:30 -0400 |
commit | 52da9990eef279bbc349685a7558d26cf4b7893b (patch) | |
tree | f84433872729aafef296eebae46ace57eb9c8d82 | |
parent | 4e7548e496d580f26a763bcdaeca7e7af75d5141 (diff) |
plugins: allow plugins to more easily suggest port types
ZTE modems need to use udev rules to assign port type hints,
so generalize that and port all the plugins over to suggested
port types in the MMModem interface's grab_port() function.
-rw-r--r-- | plugins/77-mm-zte-port-types.rules | 75 | ||||
-rw-r--r-- | plugins/Makefile.am | 4 | ||||
-rw-r--r-- | plugins/mm-modem-hso.c | 3 | ||||
-rw-r--r-- | plugins/mm-modem-huawei.c | 8 | ||||
-rw-r--r-- | plugins/mm-modem-mbm.c | 17 | ||||
-rw-r--r-- | plugins/mm-modem-nokia.c | 12 | ||||
-rw-r--r-- | plugins/mm-modem-novatel-gsm.c | 17 | ||||
-rw-r--r-- | plugins/mm-modem-sierra.c | 12 | ||||
-rw-r--r-- | plugins/mm-modem-zte.c | 12 | ||||
-rw-r--r-- | plugins/mm-plugin-generic.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-gobi.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-hso.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-huawei.c | 10 | ||||
-rw-r--r-- | plugins/mm-plugin-mbm.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-moto-c.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-nokia.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-novatel.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-option.c | 4 | ||||
-rw-r--r-- | plugins/mm-plugin-sierra.c | 13 | ||||
-rw-r--r-- | plugins/mm-plugin-zte.c | 11 | ||||
-rw-r--r-- | src/mm-generic-cdma.c | 19 | ||||
-rw-r--r-- | src/mm-generic-gsm.c | 18 | ||||
-rw-r--r-- | src/mm-modem.c | 3 | ||||
-rw-r--r-- | src/mm-modem.h | 4 |
24 files changed, 191 insertions, 79 deletions
diff --git a/plugins/77-mm-zte-port-types.rules b/plugins/77-mm-zte-port-types.rules new file mode 100644 index 00000000..9a98f87f --- /dev/null +++ b/plugins/77-mm-zte-port-types.rules @@ -0,0 +1,75 @@ +# do not edit this file, it will be overwritten on update + +ACTION!="add|change", GOTO="mm_zte_port_types_end" +SUBSYSTEM!="tty", GOTO="mm_zte_port_types_end" +SUBSYSTEMS!="usb", GOTO="mm_zte_port_types_end" +ATTRS{idVendor}!="19d2", GOTO="mm_zte_port_types_end" + +ATTRS{idProduct}=="0001", ATTRS{bInterfaceNumber}=="00", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0001", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0002", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0002", ATTRS{bInterfaceNumber}=="04", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0012", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0012", ATTRS{bInterfaceNumber}=="04", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0015", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0015", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0016", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0016", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0017", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0017", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0021", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0021", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0025", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0025", ATTRS{bInterfaceNumber}=="04", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0030", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0030", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0031", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0031", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0033", ATTRS{bInterfaceNumber}=="04", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0033", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0042", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0042", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0043", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0043", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0048", ATTRS{bInterfaceNumber}=="04", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0048", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0049", ATTRS{bInterfaceNumber}=="04", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0049", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0052", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0052", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0055", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0055", ATTRS{bInterfaceNumber}=="04", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0061", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0061", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0063", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0063", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0064", ATTRS{bInterfaceNumber}=="02", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0064", ATTRS{bInterfaceNumber}=="00", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="0066", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="0066", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +ATTRS{idProduct}=="2002", ATTRS{bInterfaceNumber}=="03", ENV{ID_MM_ZTE_PORT_TYPE_MODEM}="1" +ATTRS{idProduct}=="2002", ATTRS{bInterfaceNumber}=="01", ENV{ID_MM_ZTE_PORT_TYPE_AUX}="1" + +LABEL="mm_zte_port_types_end" + diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 98450bcc..2e17fcf4 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -213,7 +213,9 @@ libmm_plugin_zte_la_LDFLAGS = \ udevrulesdir = $(UDEV_BASE_DIR)/rules.d -udevrules_DATA = 77-mm-ericsson-mbm.rules +udevrules_DATA = \ + 77-mm-ericsson-mbm.rules \ + 77-mm-zte-port-types.rules BUILT_SOURCES = \ mm-modem-gsm-hso-glue.h diff --git a/plugins/mm-modem-hso.c b/plugins/mm-modem-hso.c index 39c3e42b..f1132d43 100644 --- a/plugins/mm-modem-hso.c +++ b/plugins/mm-modem-hso.c @@ -564,6 +564,7 @@ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -601,7 +602,7 @@ grab_port (MMModem *modem, if (g_file_get_contents (hsotype_path, &contents, NULL, NULL)) { if (g_str_has_prefix (contents, "Control")) ptype = MM_PORT_TYPE_PRIMARY; - else + else if (g_str_has_prefix (contents, "Application") || g_str_has_prefix (contents, "Application2")) ptype = MM_PORT_TYPE_SECONDARY; g_free (contents); } diff --git a/plugins/mm-modem-huawei.c b/plugins/mm-modem-huawei.c index 43ee34d1..08ba7d84 100644 --- a/plugins/mm-modem-huawei.c +++ b/plugins/mm-modem-huawei.c @@ -496,11 +496,11 @@ handle_status_change (MMSerialPort *port, /*****************************************************************************/ -/* user_data != NULL means the port is a secondary port */ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -533,16 +533,14 @@ grab_port (MMModem *modem, if (usbif == 0) { if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) ptype = MM_PORT_TYPE_PRIMARY; - } else if (user_data) { + } else if (suggested_type == MM_PORT_TYPE_SECONDARY) { if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) ptype = MM_PORT_TYPE_SECONDARY; } port = mm_generic_gsm_grab_port (gsm, subsys, name, ptype, error); - if (!port) - goto out; - if (MM_IS_SERIAL_PORT (port)) { + if (port && MM_IS_SERIAL_PORT (port)) { g_object_set (G_OBJECT (port), MM_PORT_CARRIER_DETECT, FALSE, NULL); if (ptype == MM_PORT_TYPE_SECONDARY) { GRegex *regex; diff --git a/plugins/mm-modem-mbm.c b/plugins/mm-modem-mbm.c index 4fa22fab..1867829d 100644 --- a/plugins/mm-modem-mbm.c +++ b/plugins/mm-modem-mbm.c @@ -668,6 +668,7 @@ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -676,17 +677,17 @@ grab_port (MMModem *modem, MMPort *port = NULL; if (!strcmp (subsys, "tty")) { - if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) - ptype = MM_PORT_TYPE_PRIMARY; - else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) - ptype = MM_PORT_TYPE_SECONDARY; + if (suggested_type == MM_PORT_TYPE_UNKNOWN) { + if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) + ptype = MM_PORT_TYPE_PRIMARY; + else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) + ptype = MM_PORT_TYPE_SECONDARY; + } else + ptype = suggested_type; } port = mm_generic_gsm_grab_port (gsm, subsys, name, ptype, error); - if (!port) - return FALSE; - - if (MM_IS_SERIAL_PORT (port) && (ptype == MM_PORT_TYPE_PRIMARY)) { + if (port && MM_IS_SERIAL_PORT (port) && (ptype == MM_PORT_TYPE_PRIMARY)) { GRegex *regex; mm_generic_gsm_set_unsolicited_registration (MM_GENERIC_GSM (modem), TRUE); diff --git a/plugins/mm-modem-nokia.c b/plugins/mm-modem-nokia.c index a37c1143..379fba09 100644 --- a/plugins/mm-modem-nokia.c +++ b/plugins/mm-modem-nokia.c @@ -43,6 +43,7 @@ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -50,10 +51,13 @@ grab_port (MMModem *modem, MMPortType ptype = MM_PORT_TYPE_IGNORED; MMPort *port = NULL; - if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) - ptype = MM_PORT_TYPE_PRIMARY; - else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) - ptype = MM_PORT_TYPE_SECONDARY; + if (suggested_type == MM_PORT_TYPE_UNKNOWN) { + if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) + ptype = MM_PORT_TYPE_PRIMARY; + else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) + ptype = MM_PORT_TYPE_SECONDARY; + } else + ptype = suggested_type; port = mm_generic_gsm_grab_port (gsm, subsys, name, ptype, error); if (port && MM_IS_SERIAL_PORT (port)) { diff --git a/plugins/mm-modem-novatel-gsm.c b/plugins/mm-modem-novatel-gsm.c index 265810c3..2d2a96eb 100644 --- a/plugins/mm-modem-novatel-gsm.c +++ b/plugins/mm-modem-novatel-gsm.c @@ -159,6 +159,7 @@ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -166,16 +167,16 @@ grab_port (MMModem *modem, MMPortType ptype = MM_PORT_TYPE_IGNORED; MMPort *port = NULL; - if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) - ptype = MM_PORT_TYPE_PRIMARY; - else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) - ptype = MM_PORT_TYPE_SECONDARY; + if (suggested_type == MM_PORT_TYPE_UNKNOWN) { + if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) + ptype = MM_PORT_TYPE_PRIMARY; + else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) + ptype = MM_PORT_TYPE_SECONDARY; + } else + ptype = suggested_type; port = mm_generic_gsm_grab_port (gsm, subsys, name, ptype, error); - if (!port) - return FALSE; - - if (MM_IS_SERIAL_PORT (port) && (ptype == MM_PORT_TYPE_PRIMARY)) { + if (port && MM_IS_SERIAL_PORT (port) && (ptype == MM_PORT_TYPE_PRIMARY)) { /* Flip secondary ports to AT mode */ if (mm_serial_port_open (MM_SERIAL_PORT (port), NULL)) mm_serial_port_queue_command (MM_SERIAL_PORT (port), "$NWDMAT=1", 2, dmat_callback, NULL); diff --git a/plugins/mm-modem-sierra.c b/plugins/mm-modem-sierra.c index 69a7af30..e567a5da 100644 --- a/plugins/mm-modem-sierra.c +++ b/plugins/mm-modem-sierra.c @@ -128,11 +128,11 @@ enable (MMModem *modem, } } -/* user_data != NULL means the port is a secondary port */ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -140,13 +140,13 @@ grab_port (MMModem *modem, MMPortType ptype = MM_PORT_TYPE_IGNORED; MMPort *port; - if (user_data) { - if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) - ptype = MM_PORT_TYPE_SECONDARY; - } else { + if (suggested_type == MM_PORT_TYPE_UNKNOWN) { if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) ptype = MM_PORT_TYPE_PRIMARY; - } + else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) + ptype = MM_PORT_TYPE_SECONDARY; + } else + ptype = suggested_type; port = mm_generic_gsm_grab_port (gsm, subsys, name, ptype, error); diff --git a/plugins/mm-modem-zte.c b/plugins/mm-modem-zte.c index f2c0a342..087da567 100644 --- a/plugins/mm-modem-zte.c +++ b/plugins/mm-modem-zte.c @@ -151,6 +151,7 @@ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -158,10 +159,13 @@ grab_port (MMModem *modem, MMPortType ptype = MM_PORT_TYPE_IGNORED; MMPort *port = NULL; - if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) - ptype = MM_PORT_TYPE_PRIMARY; - else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) - ptype = MM_PORT_TYPE_SECONDARY; + if (suggested_type == MM_PORT_TYPE_UNKNOWN) { + if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_PRIMARY)) + ptype = MM_PORT_TYPE_PRIMARY; + else if (!mm_generic_gsm_get_port (gsm, MM_PORT_TYPE_SECONDARY)) + ptype = MM_PORT_TYPE_SECONDARY; + } else + ptype = suggested_type; port = mm_generic_gsm_grab_port (gsm, subsys, name, ptype, error); if (port && MM_IS_SERIAL_PORT (port)) { diff --git a/plugins/mm-plugin-generic.c b/plugins/mm-plugin-generic.c index 208a61f2..802ab888 100644 --- a/plugins/mm-plugin-generic.c +++ b/plugins/mm-plugin-generic.c @@ -144,7 +144,7 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } @@ -152,7 +152,7 @@ grab_port (MMPluginBase *base, } else { if (caps & (MM_PLUGIN_BASE_PORT_CAP_GSM | CAP_CDMA)) { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } } diff --git a/plugins/mm-plugin-gobi.c b/plugins/mm-plugin-gobi.c index 6e5bfd9c..6c24cec4 100644 --- a/plugins/mm-plugin-gobi.c +++ b/plugins/mm-plugin-gobi.c @@ -134,7 +134,7 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } @@ -142,7 +142,7 @@ grab_port (MMPluginBase *base, } else { if (caps & (MM_PLUGIN_BASE_PORT_CAP_GSM | CAP_CDMA)) { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } } diff --git a/plugins/mm-plugin-hso.c b/plugins/mm-plugin-hso.c index b038b5ef..8493c9c1 100644 --- a/plugins/mm-plugin-hso.c +++ b/plugins/mm-plugin-hso.c @@ -148,14 +148,14 @@ grab_port (MMPluginBase *base, mm_plugin_base_supports_task_get_driver (task), mm_plugin_get_name (MM_PLUGIN (base))); if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } } } else { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } diff --git a/plugins/mm-plugin-huawei.c b/plugins/mm-plugin-huawei.c index 4ef8c578..1ca67c68 100644 --- a/plugins/mm-plugin-huawei.c +++ b/plugins/mm-plugin-huawei.c @@ -298,21 +298,21 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } } } else { HuaweiSupportsInfo *info; - gboolean huawei_is_secondary = FALSE; + MMPortType ptype = MM_PORT_TYPE_UNKNOWN; info = g_object_get_data (G_OBJECT (task), TAG_SUPPORTS_INFO); - if (info && (product != 0x1001)) - huawei_is_secondary = info->secondary; + if (info && info->secondary && (product != 0x1001)) + ptype = MM_PORT_TYPE_SECONDARY; modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, GUINT_TO_POINTER (huawei_is_secondary), error)) + if (!mm_modem_grab_port (modem, subsys, name, ptype, NULL, error)) return NULL; } diff --git a/plugins/mm-plugin-mbm.c b/plugins/mm-plugin-mbm.c index 2af7eed7..a380f987 100644 --- a/plugins/mm-plugin-mbm.c +++ b/plugins/mm-plugin-mbm.c @@ -143,14 +143,14 @@ grab_port (MMPluginBase *base, mm_plugin_base_supports_task_get_driver (task), mm_plugin_get_name (MM_PLUGIN (base))); if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } } } else { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } diff --git a/plugins/mm-plugin-moto-c.c b/plugins/mm-plugin-moto-c.c index 3e253613..af78ca91 100644 --- a/plugins/mm-plugin-moto-c.c +++ b/plugins/mm-plugin-moto-c.c @@ -128,14 +128,14 @@ grab_port (MMPluginBase *base, mm_plugin_get_name (MM_PLUGIN (base))); if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } } } else { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } diff --git a/plugins/mm-plugin-nokia.c b/plugins/mm-plugin-nokia.c index 06232209..3e4757c0 100644 --- a/plugins/mm-plugin-nokia.c +++ b/plugins/mm-plugin-nokia.c @@ -143,7 +143,7 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } @@ -151,7 +151,7 @@ grab_port (MMPluginBase *base, } else { if (caps & (MM_PLUGIN_BASE_PORT_CAP_GSM | CAP_CDMA)) { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } } diff --git a/plugins/mm-plugin-novatel.c b/plugins/mm-plugin-novatel.c index 33ab393b..d1f45f59 100644 --- a/plugins/mm-plugin-novatel.c +++ b/plugins/mm-plugin-novatel.c @@ -147,7 +147,7 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } @@ -155,7 +155,7 @@ grab_port (MMPluginBase *base, } else { if (caps & (MM_PLUGIN_BASE_PORT_CAP_GSM | CAP_CDMA)) { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } } diff --git a/plugins/mm-plugin-option.c b/plugins/mm-plugin-option.c index 6f4aaa97..520308ce 100644 --- a/plugins/mm-plugin-option.c +++ b/plugins/mm-plugin-option.c @@ -135,7 +135,7 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) { g_object_unref (modem); return NULL; } @@ -143,7 +143,7 @@ grab_port (MMPluginBase *base, } else { if (caps & MM_PLUGIN_BASE_PORT_CAP_GSM) { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, MM_PORT_TYPE_UNKNOWN, NULL, error)) return NULL; } } diff --git a/plugins/mm-plugin-sierra.c b/plugins/mm-plugin-sierra.c index e3d1bafb..471b20e8 100644 --- a/plugins/mm-plugin-sierra.c +++ b/plugins/mm-plugin-sierra.c @@ -127,7 +127,7 @@ grab_port (MMPluginBase *base, MMModem *modem = NULL; const char *name, *subsys, *devfile, *sysfs_path; guint32 caps; - gpointer gsm_data = NULL; + MMPortType ptype = MM_PORT_TYPE_UNKNOWN; port = mm_plugin_base_supports_task_get_port (task); g_assert (port); @@ -151,11 +151,11 @@ grab_port (MMPluginBase *base, /* Is it a GSM secondary port? */ if (g_object_get_data (G_OBJECT (task), TAG_SIERRA_SECONDARY_PORT)) - gsm_data = GUINT_TO_POINTER (TRUE); + ptype = MM_PORT_TYPE_SECONDARY; caps = mm_plugin_base_supports_task_get_probed_capabilities (task); if (!existing) { - if ((caps & MM_PLUGIN_BASE_PORT_CAP_GSM) || gsm_data) { + if ((caps & MM_PLUGIN_BASE_PORT_CAP_GSM) || (ptype != MM_PORT_TYPE_UNKNOWN)) { modem = mm_modem_sierra_new (sysfs_path, mm_plugin_base_supports_task_get_driver (task), mm_plugin_get_name (MM_PLUGIN (base))); @@ -166,15 +166,16 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, gsm_data, error)) { + if (!mm_modem_grab_port (modem, subsys, name, ptype, NULL, error)) { g_object_unref (modem); return NULL; } } } else { - if ((caps & (MM_PLUGIN_BASE_PORT_CAP_GSM | CAP_CDMA)) || gsm_data) { + if ( (caps & (MM_PLUGIN_BASE_PORT_CAP_GSM | CAP_CDMA)) + || (ptype != MM_PORT_TYPE_UNKNOWN)) { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, gsm_data, error)) + if (!mm_modem_grab_port (modem, subsys, name, ptype, NULL, error)) return NULL; } } diff --git a/plugins/mm-plugin-zte.c b/plugins/mm-plugin-zte.c index e830823f..08493dca 100644 --- a/plugins/mm-plugin-zte.c +++ b/plugins/mm-plugin-zte.c @@ -109,10 +109,17 @@ grab_port (MMPluginBase *base, MMModem *modem = NULL; const char *name, *subsys, *sysfs_path; guint32 caps; + MMPortType ptype = MM_PORT_TYPE_UNKNOWN; port = mm_plugin_base_supports_task_get_port (task); g_assert (port); + /* Look for port type hints */ + if (g_udev_device_get_property_as_boolean (port, "ID_MM_ZTE_PORT_TYPE_MODEM")) + ptype = MM_PORT_TYPE_PRIMARY; + else if (g_udev_device_get_property_as_boolean (port, "ID_MM_ZTE_PORT_TYPE_AUX")) + ptype = MM_PORT_TYPE_SECONDARY; + physdev = mm_plugin_base_supports_task_get_physdev (task); g_assert (physdev); sysfs_path = g_udev_device_get_sysfs_path (physdev); @@ -137,7 +144,7 @@ grab_port (MMPluginBase *base, } if (modem) { - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) { + if (!mm_modem_grab_port (modem, subsys, name, ptype, NULL, error)) { g_object_unref (modem); return NULL; } @@ -145,7 +152,7 @@ grab_port (MMPluginBase *base, } else { if (caps & (MM_PLUGIN_BASE_PORT_CAP_GSM | CAP_CDMA)) { modem = existing; - if (!mm_modem_grab_port (modem, subsys, name, NULL, error)) + if (!mm_modem_grab_port (modem, subsys, name, ptype, NULL, error)) return NULL; } } diff --git a/src/mm-generic-cdma.c b/src/mm-generic-cdma.c index 7d731384..5d58a81f 100644 --- a/src/mm-generic-cdma.c +++ b/src/mm-generic-cdma.c @@ -85,6 +85,7 @@ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -94,24 +95,28 @@ grab_port (MMModem *modem, MMPort *port; g_return_val_if_fail (!strcmp (subsys, "net") || !strcmp (subsys, "tty"), FALSE); + if (priv->primary) + g_return_val_if_fail (suggested_type != MM_PORT_TYPE_PRIMARY, FALSE); if (!strcmp (subsys, "tty")) { - if (!priv->primary) - ptype = MM_PORT_TYPE_PRIMARY; - else if (!priv->secondary) - ptype = MM_PORT_TYPE_SECONDARY; + if (suggested_type != MM_PORT_TYPE_UNKNOWN) + ptype = suggested_type; + else { + if (!priv->primary) + ptype = MM_PORT_TYPE_PRIMARY; + else if (!priv->secondary) + ptype = MM_PORT_TYPE_SECONDARY; + } } port = mm_modem_base_add_port (MM_MODEM_BASE (self), subsys, name, ptype); - if (MM_IS_SERIAL_PORT (port)) { + if (port && MM_IS_SERIAL_PORT (port)) { g_object_set (G_OBJECT (port), MM_PORT_CARRIER_DETECT, FALSE, NULL); mm_serial_port_set_response_parser (MM_SERIAL_PORT (port), mm_serial_parser_v1_parse, mm_serial_parser_v1_new (), mm_serial_parser_v1_destroy); - } - if (MM_IS_SERIAL_PORT (port)) { if (ptype == MM_PORT_TYPE_PRIMARY) { priv->primary = MM_SERIAL_PORT (port); if (!priv->data) { diff --git a/src/mm-generic-gsm.c b/src/mm-generic-gsm.c index 71d24c2f..8435ee8e 100644 --- a/src/mm-generic-gsm.c +++ b/src/mm-generic-gsm.c @@ -217,7 +217,7 @@ mm_generic_gsm_grab_port (MMGenericGsm *self, g_return_val_if_fail (!strcmp (subsys, "net") || !strcmp (subsys, "tty"), FALSE); port = mm_modem_base_add_port (MM_MODEM_BASE (self), subsys, name, ptype); - if (MM_IS_SERIAL_PORT (port)) { + if (port && MM_IS_SERIAL_PORT (port)) { mm_serial_port_set_response_parser (MM_SERIAL_PORT (port), mm_serial_parser_v1_parse, mm_serial_parser_v1_new (), @@ -252,6 +252,7 @@ static gboolean grab_port (MMModem *modem, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -259,11 +260,18 @@ grab_port (MMModem *modem, MMGenericGsmPrivate *priv = MM_GENERIC_GSM_GET_PRIVATE (self); MMPortType ptype = MM_PORT_TYPE_IGNORED; + if (priv->primary) + g_return_val_if_fail (suggested_type != MM_PORT_TYPE_PRIMARY, FALSE); + if (!strcmp (subsys, "tty")) { - if (!priv->primary) - ptype = MM_PORT_TYPE_PRIMARY; - else if (!priv->secondary) - ptype = MM_PORT_TYPE_SECONDARY; + if (suggested_type != MM_PORT_TYPE_UNKNOWN) + ptype = suggested_type; + else { + if (!priv->primary) + ptype = MM_PORT_TYPE_PRIMARY; + else if (!priv->secondary) + ptype = MM_PORT_TYPE_SECONDARY; + } } return !!mm_generic_gsm_grab_port (self, subsys, name, ptype, error); diff --git a/src/mm-modem.c b/src/mm-modem.c index 3a566d08..e5275020 100644 --- a/src/mm-modem.c +++ b/src/mm-modem.c @@ -300,6 +300,7 @@ gboolean mm_modem_grab_port (MMModem *self, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error) { @@ -309,7 +310,7 @@ mm_modem_grab_port (MMModem *self, g_return_val_if_fail (name, FALSE); g_assert (MM_MODEM_GET_INTERFACE (self)->grab_port); - return MM_MODEM_GET_INTERFACE (self)->grab_port (self, subsys, name, user_data, error); + return MM_MODEM_GET_INTERFACE (self)->grab_port (self, subsys, name, suggested_type, user_data, error); } void diff --git a/src/mm-modem.h b/src/mm-modem.h index 9222b703..df2480ac 100644 --- a/src/mm-modem.h +++ b/src/mm-modem.h @@ -5,6 +5,8 @@ #include <glib-object.h> +#include "mm-port.h" + #define MM_TYPE_MODEM (mm_modem_get_type ()) #define MM_MODEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MM_TYPE_MODEM, MMModem)) #define MM_IS_MODEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MM_TYPE_MODEM)) @@ -78,6 +80,7 @@ struct _MMModem { gboolean (*grab_port) (MMModem *self, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error); @@ -117,6 +120,7 @@ gboolean mm_modem_owns_port (MMModem *self, gboolean mm_modem_grab_port (MMModem *self, const char *subsys, const char *name, + MMPortType suggested_type, gpointer user_data, GError **error); |