Hi Gustavo,
On 08/04/2010 05:22 AM, Gustavo F. Padovan wrote:
When setting Powered to 0 the link rfcomm is disconnected.
---
plugins/dun.c | 42 ++++++++++++++++++++++++++++++++++++++++--
1 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/plugins/dun.c b/plugins/dun.c
index 60d0271..3d1e5c4 100644
--- a/plugins/dun.c
+++ b/plugins/dun.c
@@ -203,10 +203,48 @@ static int dun_enable(struct ofono_modem *modem)
return -EINPROGRESS;
}
+static void dun_power_down(DBusPendingCall *call, gpointer user_data)
+{
+ struct ofono_modem *modem = user_data;
+ struct dun_data *data = ofono_modem_get_data(modem);
+ DBusMessage *reply;
+ DBusError derr;
+
+ reply = dbus_pending_call_steal_reply(call);
+
+ dbus_error_init(&derr);
+ if (dbus_set_error_from_message(&derr, reply)) {
+ DBG("Disconnect reply: %s", derr.message);
+ dbus_error_free(&derr);
+ goto done;
+ }
+
+ ofono_modem_set_powered(modem, FALSE);
+
+done:
+ g_free(data->rfcomm);
+
+ dbus_message_unref(reply);
+}
+
static int dun_disable(struct ofono_modem *modem)
{
- DBG("%p", modem);
- return 0;
+ struct dun_data *data = ofono_modem_get_data(modem);
+ int status;
+
+ if (!ofono_modem_get_powered(modem))
+ return 0;
Again, please don't do this part. If the core messes up, I want to know
early.
+
+ status = bluetooth_send_with_reply(data->dun_path,
+ BLUEZ_SERIAL_INTERFACE, "Disconnect",
+ dun_power_down, modem, NULL, DBUS_TIMEOUT,
+ DBUS_TYPE_STRING, &data->rfcomm,
+ DBUS_TYPE_INVALID);
+
+ if (status < 0)
+ return -EINVAL;
+
+ return -EINPROGRESS;
}
static struct ofono_modem_driver dun_driver = {
Regards,
-Denis