---
 plugins/mbm.c |   30 ++++++++++++++++++++++++++++--
 1 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/plugins/mbm.c b/plugins/mbm.c
index 62e3ae1..60681df 100644
--- a/plugins/mbm.c
+++ b/plugins/mbm.c
@@ -45,6 +45,7 @@
 #include <ofono/gprs.h>
 #include <ofono/gprs-context.h>
 #include <ofono/log.h>
+#include <ofono/gps.h>
 
 #include <drivers/atmodem/atutil.h>
 #include <drivers/atmodem/vendor.h>
@@ -61,11 +62,13 @@ enum mbm_variant {
 struct mbm_data {
        GAtChat *modem_port;
        GAtChat *data_port;
+       GAtChat *gps_port;
        guint cpin_poll_source;
        guint cpin_poll_count;
        gboolean have_sim;
        struct ofono_gprs *gprs;
        struct ofono_gprs_context *gc;
+       struct ofono_gps *gps;
        guint reopen_source;
        enum mbm_variant variant;
 };
@@ -93,6 +96,7 @@ static void mbm_remove(struct ofono_modem *modem)
 
        ofono_modem_set_data(modem, NULL);
 
+       g_at_chat_unref(data->gps_port);
        g_at_chat_unref(data->data_port);
        g_at_chat_unref(data->modem_port);
 
@@ -354,15 +358,17 @@ static int mbm_enable(struct ofono_modem *modem)
        struct mbm_data *data = ofono_modem_get_data(modem);
        const char *modem_dev;
        const char *data_dev;
+       const char *gps_dev;
 
        DBG("%p", modem);
 
        modem_dev = ofono_modem_get_string(modem, "ModemDevice");
        data_dev = ofono_modem_get_string(modem, "DataDevice");
+       gps_dev = ofono_modem_get_string(modem, "GPSDevice");
 
-       DBG("%s, %s", modem_dev, data_dev);
+       DBG("%s, %s, %s", modem_dev, data_dev, gps_dev);
 
-       if (modem_dev == NULL || data_dev == NULL)
+       if (modem_dev == NULL || data_dev == NULL || gps_dev == NULL)
                return -EINVAL;
 
        data->modem_port = create_port(modem_dev);
@@ -383,6 +389,20 @@ static int mbm_enable(struct ofono_modem *modem)
        if (getenv("OFONO_AT_DEBUG"))
                g_at_chat_set_debug(data->data_port, mbm_debug, "Data: ");
 
+       data->gps_port = create_port(gps_dev);
+       if (data->gps_port == NULL) {
+               g_at_chat_unref(data->data_port);
+               data->data_port = NULL;
+
+               g_at_chat_unref(data->modem_port);
+               data->modem_port = NULL;
+
+               return -EIO;
+       }
+
+       if (getenv("OFONO_AT_DEBUG"))
+               g_at_chat_set_debug(data->gps_port, mbm_debug, "GPS: ");
+
        g_at_chat_set_disconnect_function(data->data_port,
                                                mbm_disconnect, modem);
 
@@ -415,6 +435,9 @@ static void cfun_disable(gboolean ok, GAtResult *result, 
gpointer user_data)
        g_at_chat_unref(data->data_port);
        data->data_port = NULL;
 
+       g_at_chat_unref(data->gps_port);
+       data->gps_port = NULL;
+
        if (ok)
                ofono_modem_set_powered(modem, FALSE);
 }
@@ -541,6 +564,9 @@ static void mbm_post_online(struct ofono_modem *modem)
                                        OFONO_GPRS_CONTEXT_TYPE_MMS);
                ofono_gprs_add_context(data->gprs, data->gc);
        }
+
+       data->gps = ofono_gps_create(modem, 0,
+                                       "mbmmodem", data->gps_port);
 }
 
 static struct ofono_modem_driver mbm_driver = {
-- 
1.7.2.3

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

Reply via email to