hfp_hf_bluez5: Add support for Enabling/Disabling the modem
authorVinicius Costa Gomes <vinicius.gomes@openbossa.org>
Fri, 1 Feb 2013 23:33:09 +0000 (20:33 -0300)
committerDenis Kenzior <denkenz@gmail.com>
Thu, 14 Feb 2013 14:47:10 +0000 (08:47 -0600)
Now that we have the support for sending the correct messages
to BlueZ, we are able to dynamically power up/down the HFP modem.

We add another property to the modem to be able to get the D-Bus
object path that represents the remote device.

plugins/hfp_hf_bluez5.c

index 0d6bdd9..de580f2 100644 (file)
@@ -180,6 +180,7 @@ static struct ofono_modem *modem_register(const char *device,
                return NULL;
 
        ofono_modem_set_string(modem, "Remote", device_address);
+       ofono_modem_set_string(modem, "DevicePath", device);
 
        ofono_modem_set_name(modem, alias);
        ofono_modem_register(modem);
@@ -219,19 +220,53 @@ static void hfp_remove(struct ofono_modem *modem)
        ofono_modem_set_data(modem, NULL);
 }
 
+static void connect_cb(gboolean success, gpointer user_data)
+{
+       struct ofono_modem *modem = user_data;
+
+       if (success)
+               return;
+
+       ofono_modem_set_powered(modem, FALSE);
+}
+
 /* power up hardware */
 static int hfp_enable(struct ofono_modem *modem)
 {
+       const char *path;
+
        DBG("%p", modem);
 
-       return 0;
+       path = ofono_modem_get_string(modem, "DevicePath");
+
+       /*
+        * We call Device1.ConnectProfile() with our UUID, and we hope for the
+        * NewConnection() method to be called, if ConnectProfile() fails we
+        * force the modem to powered off
+        */
+       bt_connect_profile(ofono_dbus_get_connection(), path, HFP_AG_UUID,
+                                                       connect_cb, modem);
+
+       return -EINPROGRESS;
 }
 
 static int hfp_disable(struct ofono_modem *modem)
 {
+       const char *path;
+
        DBG("%p", modem);
 
-       return 0;
+       path = ofono_modem_get_string(modem, "DevicePath");
+
+       /*
+        * We call Device1.DisconnectProfile() for the connection to be
+        * dropped, which will cause the profile RequestDisconnection() method
+        * to be called which will bring the modem down
+        */
+       bt_disconnect_profile(ofono_dbus_get_connection(), path, HFP_AG_UUID,
+                                                       NULL, NULL);
+
+       return -EINPROGRESS;
 }
 
 static void hfp_pre_sim(struct ofono_modem *modem)