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