From: "Gustavo F. Padovan" <[email protected]>

We should disconnect the bluetooh link if sap_modem enabling fails.
---
 plugins/bluetooth.h |    5 ++++-
 plugins/sap.c       |    7 ++++++-
 plugins/telit.c     |    9 ++++++++-
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/plugins/bluetooth.h b/plugins/bluetooth.h
index 78b93e2..089c32f 100644
--- a/plugins/bluetooth.h
+++ b/plugins/bluetooth.h
@@ -43,9 +43,12 @@ struct bluetooth_profile {
        void (*set_alias)(const char *device, const char *);
 };
 
+typedef void (*ConnectFailed)(struct ofono_modem *modem);
+
 struct bluetooth_sap_driver {
        const char *name;
-       int (*enable) (struct ofono_modem *modem, struct ofono_modem 
*sap_modem);
+       int (*enable) (struct ofono_modem *modem, struct ofono_modem *sap_modem,
+                                                       ConnectFailed cb);
        void (*pre_sim) (struct ofono_modem *modem);
        void (*post_sim) (struct ofono_modem *modem);
        void (*set_online) (struct ofono_modem *modem, ofono_bool_t online,
diff --git a/plugins/sap.c b/plugins/sap.c
index e165095..c2a2281 100644
--- a/plugins/sap.c
+++ b/plugins/sap.c
@@ -182,6 +182,11 @@ static void sap_remove(struct ofono_modem *modem)
        ofono_modem_set_data(modem, NULL);
 }
 
+static void sap_failed_cb(struct ofono_modem *modem)
+{
+       DBG("%p", modem);
+}
+
 static void sap_connect_reply(DBusPendingCall *call, gpointer user_data)
 {
        struct ofono_modem *modem = user_data;
@@ -257,7 +262,7 @@ static void sap_connect_reply(DBusPendingCall *call, 
gpointer user_data)
        data->hw_watch = g_io_add_watch(data->hw_io, G_IO_HUP | G_IO_ERR
                                | G_IO_NVAL | G_IO_IN, hw_event_cb, modem);
 
-       data->sap_driver->enable(data->hw_modem, modem);
+       data->sap_driver->enable(data->hw_modem, modem, sap_failed_cb);
 
 done:
        dbus_message_unref(reply);
diff --git a/plugins/telit.c b/plugins/telit.c
index 47a82d9..0c8061f 100644
--- a/plugins/telit.c
+++ b/plugins/telit.c
@@ -69,6 +69,7 @@ struct telit_data {
        struct ofono_sim *sim;
        guint sim_inserted_source;
        struct ofono_modem *sap_modem;
+       ConnectFailed cb;
 };
 
 static void telit_debug(const char *str, void *user_data)
@@ -200,6 +201,7 @@ static void cfun_enable_cb(gboolean ok, GAtResult *result, 
gpointer user_data)
                g_at_chat_unref(data->chat);
                data->chat = NULL;
                ofono_modem_set_powered(m, FALSE);
+               data->cb(data->sap_modem);
                return;
        }
 
@@ -259,6 +261,7 @@ static void telit_rsen_notify(GAtResult *result, gpointer 
user_data)
 
        if (status == 0) {
                ofono_modem_set_powered(data->sap_modem, FALSE);
+               data->cb(data->sap_modem);
                return;
        }
 
@@ -276,6 +279,7 @@ static void rsen_enable_cb(gboolean ok, GAtResult *result, 
gpointer user_data)
                g_at_chat_unref(data->aux);
                data->aux = NULL;
                ofono_modem_set_powered(data->sap_modem, FALSE);
+               data->cb(data->sap_modem);
                return;
        }
 }
@@ -356,7 +360,8 @@ static int telit_sap_open(struct ofono_modem *modem)
 }
 
 static int telit_sap_enable(struct ofono_modem *modem,
-                                       struct ofono_modem *sap_modem)
+                                       struct ofono_modem *sap_modem,
+                                       ConnectFailed cb)
 {
        struct telit_data *data = ofono_modem_get_data(modem);
 
@@ -368,6 +373,8 @@ static int telit_sap_enable(struct ofono_modem *modem,
 
        data->sap_modem = sap_modem;
 
+       data->cb = cb;
+
        g_at_chat_register(data->aux, "#RSEN:", telit_rsen_notify,
                                FALSE, modem, NULL);
 
-- 
1.7.6.2

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

Reply via email to