This patch consolidates a the setup functions for several USB device
types.  These are the "simple" types that only map a couple of interfaces
to modem functions; the more complex types will be moved to this model
in a later patch.

A new function setup_usb_modem is added that maps udev-labelled interfaces
to ofono modem atoms.  The drivers will use the atoms that they know about
and ignore any others; the udev labelling should, however, normally
ensure that the only labelled interfaces are those that the driver
actually cares about (though that's not actually the case today as there
are labelled interfaces that ofono doesn't use).
---
 plugins/udevng.c | 269 ++++++-------------------------------------------------
 1 file changed, 27 insertions(+), 242 deletions(-)

diff --git a/plugins/udevng.c b/plugins/udevng.c
index 555261e..2af7e77 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -150,9 +150,10 @@ static gboolean setup_mbm(struct modem_info *modem)
        return TRUE;
 }
 
-static gboolean setup_hso(struct modem_info *modem)
+static gboolean setup_usb_modem(struct modem_info* modem)
 {
        const char *ctl = NULL, *app = NULL, *mdm = NULL, *net = NULL;
+       const char *aux = NULL, *gps = NULL;
        GSList *list;
 
        DBG("%s", modem->syspath);
@@ -161,23 +162,33 @@ static gboolean setup_hso(struct modem_info *modem)
                struct device_info *info = list->data;
 
                DBG("%s %s %s %s %s", info->devnode, info->interface,
-                               info->number, info->label, info->sysattr);
+                               info->number, info->label, info->subsystem);
 
                if (g_strcmp0(info->label, "control") == 0)
                        ctl = info->devnode;
-               else if (g_strcmp0(info->label, "app") == 0)
-                       app = info->devnode;
                else if (g_strcmp0(info->label, "modem") == 0)
                        mdm = info->devnode;
+               else if (g_strcmp0(info->label, "aux") == 0)
+                       aux = info->devnode;
+               else if (g_strcmp0(info->label, "app") == 0)
+                       app = info->devnode;
+               else if (g_strcmp0(info->label, "net") == 0)
+                       net = info->devnode;
+               else if (g_strcmp0(info->label, "gps") == 0)
+                       gps = info->devnode;
        }
 
-       DBG("control=%s application=%s modem=%s network=%s",
-                                               ctl, app, mdm, net);
+       DBG("driver=%s control=%s application=%s"
+           " modem=%s aux=%s network=%s gps=%s",
+               modem->driver,
+               ctl, app, mdm, aux, net, gps);
 
        ofono_modem_set_string(modem->modem, "Control", ctl);
        ofono_modem_set_string(modem->modem, "Application", app);
        ofono_modem_set_string(modem->modem, "Modem", mdm);
+       ofono_modem_set_string(modem->modem, "Aux", aux);
        ofono_modem_set_string(modem->modem, "NetworkInterface", net);
+       ofono_modem_set_string(modem->modem, "GPS", gps);
 
        return TRUE;
 }
@@ -313,177 +324,6 @@ done:
        return TRUE;
 }
 
-static gboolean setup_speedup(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0) {
-                       aux = info->devnode;
-                       if (mdm != NULL)
-                               break;
-               } else if (g_strcmp0(info->label, "modem") == 0) {
-                       mdm = info->devnode;
-                       if (aux != NULL)
-                               break;
-               }
-       }
-
-       DBG("aux=%s modem=%s", aux, mdm);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-
-       return TRUE;
-}
-
-static gboolean setup_linktop(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0)
-                       aux = info->devnode;
-               else if (g_strcmp0(info->label, "modem") == 0)
-                       mdm = info->devnode;
-       }
-
-       DBG("aux=%s modem=%s", aux, mdm);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-
-       return TRUE;
-}
-
-static gboolean setup_icera(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL, *net = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0)
-                       aux = info->devnode;
-               else if (g_strcmp0(info->label, "modem") == 0)
-                       mdm = info->devnode;
-               else if (g_strcmp0(info->label, "net") == 0)
-                       mdm = info->devnode;
-       }
-
-       DBG("aux=%s modem=%s net=%s", aux, mdm, net);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-       ofono_modem_set_string(modem->modem, "NetworkInterface", net);
-
-       return TRUE;
-}
-
-static gboolean setup_alcatel(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0) {
-                       aux = info->devnode;
-               } else if (g_strcmp0(info->label, "modem") == 0) {
-                       mdm = info->devnode;
-               }
-       }
-
-       DBG("aux=%s modem=%s", aux, mdm);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-
-       return TRUE;
-}
-
-static gboolean setup_novatel(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0)
-                       aux = info->devnode;
-               else if (g_strcmp0(info->label, "modem") == 0)
-                       mdm = info->devnode;
-       }
-
-       DBG("aux=%s modem=%s", aux, mdm);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-
-       return TRUE;
-}
-
-static gboolean setup_nokia(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0)
-                       aux = info->devnode;
-               else if (g_strcmp0(info->label, "modem") == 0)
-                       mdm = info->devnode;
-       }
-
-       DBG("aux=%s modem=%s", aux, mdm);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-
-       return TRUE;
-}
-
 static gboolean setup_telit(struct modem_info *modem)
 {
        const char *mdm = NULL, *aux = NULL, *gps = NULL, *net = NULL;
@@ -591,33 +431,6 @@ static gboolean setup_simcom(struct modem_info *modem)
        return TRUE;
 }
 
-static gboolean setup_zte(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0)
-                       aux = info->devnode;
-               else if (g_strcmp0(info->label, "modem") == 0)
-                       mdm = info->devnode;
-       }
-
-       DBG("aux=%s modem=%s", aux, mdm);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-
-       return TRUE;
-}
-
 static gboolean setup_samsung(struct modem_info *modem)
 {
        const char *control = NULL, *network = NULL;
@@ -648,34 +461,6 @@ static gboolean setup_samsung(struct modem_info *modem)
        return TRUE;
 }
 
-static gboolean setup_quectel(struct modem_info *modem)
-{
-       const char *aux = NULL, *mdm = NULL;
-       GSList *list;
-
-       DBG("%s", modem->syspath);
-
-       for (list = modem->devices; list; list = list->next) {
-               struct device_info *info = list->data;
-
-               DBG("%s %s %s %s", info->devnode, info->interface,
-                                               info->number, info->label);
-
-               if (g_strcmp0(info->label, "aux") == 0) {
-                       aux = info->devnode;
-               } else if (g_strcmp0(info->label, "modem") == 0) {
-                       mdm = info->devnode;
-               }
-       }
-
-       DBG("aux=%s modem=%s", aux, mdm);
-
-       ofono_modem_set_string(modem->modem, "Aux", aux);
-       ofono_modem_set_string(modem->modem, "Modem", mdm);
-
-       return TRUE;
-}
-
 static gboolean setup_serial_modem(struct modem_info* modem)
 {
        struct serial_device_info* info;
@@ -858,23 +643,23 @@ static struct {
 } driver_list[] = {
        { "isiusb",     setup_isi,      },
        { "mbm",        setup_mbm,      "device/interface"      },
-       { "hso",        setup_hso,      "hsotype"               },
+       { "hso",        setup_usb_modem },
        { "gobi",       setup_gobi      },
        { "sierra",     setup_sierra    },
        { "huawei",     setup_huawei    },
-       { "speedupcdma",setup_speedup   },
-       { "speedup",    setup_speedup   },
-       { "linktop",    setup_linktop   },
-       { "alcatel",    setup_alcatel   },
-       { "novatel",    setup_novatel   },
-       { "nokia",      setup_nokia     },
+       { "speedupcdma",setup_usb_modem },
+       { "speedup",    setup_usb_modem },
+       { "linktop",    setup_usb_modem },
+       { "alcatel",    setup_usb_modem },
+       { "novatel",    setup_usb_modem },
+       { "nokia",      setup_usb_modem },
        { "telit",      setup_telit,    "device/interface"      },
        { "telitqmi",   setup_telitqmi  },
        { "simcom",     setup_simcom    },
-       { "zte",        setup_zte       },
-       { "icera",      setup_icera     },
+       { "zte",        setup_usb_modem },
+       { "icera",      setup_usb_modem },
        { "samsung",    setup_samsung   },
-       { "quectel",    setup_quectel   },
+       { "quectel",    setup_usb_modem },
        { "ublox",      setup_ublox     },
        { "gemalto",    setup_gemalto   },
        /* Following are non-USB modems */
-- 
2.9.3

_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to