Commit Graph

6920 Commits

Author SHA1 Message Date
Claudio Takahasi 850c1811fc handsfree-audio: Add Manager registration
Adds the initial implementation of new experimental Handsfree Audio
Manager interface. This patch adds the interface registration and
the declaration of it's methods.
2013-02-20 21:19:27 -06:00
Denis Kenzior 57a44e8d23 doc: Add experimental handsfree-audio API 2013-02-19 09:47:57 -06:00
Denis Kenzior 7ba9521f10 hfp_hf_bluez5: Ensure active SLC for SCO links
Whenever a SCO connection is attempted, ensure that the SLC link is
already active between us and the same remote peer.
2013-02-14 08:47:10 -06:00
Denis Kenzior 83b43c8abd hfp_hf_bluez5: Remove use of hash table
The number of paired devices is quite small, so the use of the hash
table for lookup seems unnecessary.  The typical user will have no more
than 1-2 devices paired, maybe half a dozen in a less common case.
2013-02-14 08:47:10 -06:00
Denis Kenzior 825feb8cd5 hfp_hf_bluez5: Use faster method of disable() 2013-02-14 08:47:10 -06:00
Denis Kenzior 69820a7136 modem: Implement ofono_modem_find 2013-02-14 08:47:10 -06:00
Denis Kenzior 47b24507fc include: Add ofono_modem_find 2013-02-14 08:47:10 -06:00
Claudio Takahasi 39f1480155 hfp_hf_bluez5: Remove unneeded modem hash lookup
Modem object is created when the Device Proxy is added, and it is
paired. Another path is when the Device "Paired" property changes
to True.
2013-02-14 08:47:10 -06:00
Denis Kenzior 4394a362eb hfp_hf_bluez5: Use some tricks to optimize code 2013-02-14 08:47:10 -06:00
Denis Kenzior 1d4d3f1fb9 gdbus: Add g_dbus_proxy_set_removed_watch 2013-02-14 08:47:10 -06:00
Vinicius Costa Gomes 233b1ecca4 hfp_hf_bluez5: Add support for Enabling/Disabling the modem
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.
2013-02-14 08:47:10 -06:00
Claudio Takahasi a2b698dc40 hfp_hf_bluez5: Add Profile RequestDisconnection
This patch implements RequestDisconnection method of the Profile1
interface. This method gets called when the profile gets disconnected.
The profile implementation needs to cleanup the resources related to
the informed device.
2013-02-14 08:47:10 -06:00
Vinicius Costa Gomes 22f05f7832 bluez5: Add support for Connecting/Disconnecting per UUID
This adds supports for sending the ConnectProfile() and
DisconnectProfile() messages for the org.bluez.Device1 interface.
2013-02-14 08:47:10 -06:00
Claudio Takahasi 86224f5724 bluez5: Rename BlueZ Profile registration functions
This patch renames external profile registration functions replacing the
prefix from 'bluetooth_' to 'bt_' in order to follow the name convention
adopted for bluez5 functions.
2013-02-14 08:47:10 -06:00
Vinicius Costa Gomes f93a6a2d06 gdbus: Fix missing PropertiesChanged signal
If D-Bus ObjectManager is not supported, InterfacesAdded signal
checking needs to be ignored otherwise PropertiesChanged signal
will never be sent.
2013-02-14 15:17:39 +01:00
Marcel Holtmann 8910e64f84 gdbus: Don't call property changed callback during client init
When the client uses ObjectManager to init properties, do not call
property changed callbacks. They should only be called once the proxy
added has been successfully signaled since the proxy itself provides
a full copy of available properties.
2013-02-11 20:22:42 +01:00
Johan Hedberg 0b1694f4ba gdbus: Fix unpublished interface signal emission
If we haven't published an interface yet (i.e. it's in the data->added
list), we should just ignore any property changed indications as the
values for the properties will anyway be part of the InterfacesAdded
signal.
2013-02-01 22:06:14 +01:00
Frédéric Danis e59fed9c96 hfp_ag: Add BlueZ 5 version
This patch adds initial implementation of the D-Bus Profile1
interface and methods responsible for handling Bluetooth connections.

The HFP AG profile interface is registered as soon as a voice capable
modem is registered in oFono.
2013-01-31 16:15:03 -06:00
Claudio Takahasi 39e72e0178 hfp_hf_bluez5: Remove BlueZ devices proxies hash
The hash table to track the devices is not necessary anymore since
dynamic modem registration on NewConnection was removed.
2013-01-31 16:03:48 -06:00
Claudio Takahasi f044c6c1fa hfp_hf_bluez5: Fix registering modem on NewConnection
HFP modem will be registered when Proxy Added callback gets called
or when Pair is True. This patch removes the support for dynamic modem
registration when a new connection is notified and there isn't a modem
associated with the Bluetooth remote device.

BlueZ behaviour has been changed and a NewConnection is not notified
before the service discovery finishes.
2013-01-31 16:01:04 -06:00
Vinicius Costa Gomes 852ea612c8 hfp_hf_bluez5: Remove unneeded error handling
Apart from g_io_channel_unix_new() not setting errno, it never
returns an NULL pointer on error, because in practice it only
calls g_new().
2013-01-31 15:57:55 -06:00
Frédéric Danis 3e9a836afd bluetooth: Rename HFP AG plugin
As BlueZ 5 introduced backwards incompatible API changes, and we want to
keep support for BlueZ 4 based HFP AG plugin for some time, we need to
separate HFP AG plugin which is based on BlueZ 4 from the one based on
BlueZ 5.

The hfp_ag.c plugin is renamed to hfp_ag_bluez4. This will make it easy
to add an HFP AG plugin for BlueZ 5.
2013-01-30 22:09:52 -06:00
Vinicius Costa Gomes 5b56668f1e hfp_hf_bluez5: Only register modems for Paired devices
When there are many devices around that support the HFP AG profile,
we may have a lot of modems that the user will never use.
2013-01-30 21:36:49 -06:00
Claudio Takahasi 5185980fb0 hfp_hf_bluez5: Improve Proxy property changed handling
This patch removes unnecessary GDBusProxy object access when property
changed is triggered. The property name and the argument iterator is
informed in the function callback.
2013-01-30 21:32:47 -06:00
Vinicius Costa Gomes 3a2046c073 TODO: Add task for supporting BlueZ 5 in dundee 2013-01-30 21:31:55 -06:00
Claudio Takahasi 9496fe8e70 hfp_hf_bluez5: Fix missing fd close
This patch fix an unusual scenario, service_level_connection() fails if
GIOChannel or GAtChat memory allocation fails.
2013-01-29 15:58:39 -06:00
Vinicius Costa Gomes b6f92d3074 hfp_hf_bluez5: Rename 'Address' to 'Remote'
Rename this property to better indicate that it is the remote Address
being referred to.
2013-01-29 15:57:48 -06:00
Claudio Takahasi 368b8816ee bluez5: Add RFCOMM socket address declaration
This patch adds a copy of Bluetooth RFCOMM socket declaration.
2013-01-29 09:03:55 -06:00
Claudio Takahasi 6985c798b2 bluez5: Add bt_bacmp()
Adds a copy of BlueZ bacmp() function.
2013-01-29 09:03:04 -06:00
Claudio Takahasi e8621fe8c2 bluez5: Add bt_ba2str()
Adds a copy of BlueZ ba2str() function.
2013-01-29 09:02:45 -06:00
Claudio Takahasi e05b3dfb4d hfp_hf_bluez5: Add SCO listen socket
This patch adds the initial SCO server socket handling. BtIO and BlueZ
functions should not be used, with the new Profile API the objetive is
to get rid of these dependencies.
2013-01-29 09:01:26 -06:00
Claudio Takahasi 5e84f78869 bluez5: Add bt_bacpy()
Adds a copy of BlueZ bacpy() function.
2013-01-29 08:40:33 -06:00
Claudio Takahasi a2376f6c77 bluez5: Add SCO socket declarations
Adds local copy of SCO Bluetooth sockets declarations, since the
objective to avoid including BlueZ library headers.
2013-01-29 08:39:31 -06:00
Vinicius Costa Gomes 3a3e31eef2 hfp_hf_bluez5: Add SLC establishment procedure
When receiving a NewConnection call from BlueZ, initiates the Service
Level Connection using the received file descriptor. The HFP modem
sub-components (devinfo, voicecall, netreg, handsfree and callvolume)
are created at this point.
2013-01-23 17:28:16 -06:00
Vinicius Costa Gomes a90f0441d6 hfp_hf_bluez5: Handle NewConnection from BlueZ
Parse the essential arguments in the message, in this case only the
file descriptor, and register the modem if it is not already
registered. This is necessary because in some cases, we may receive a
NewConnection call, and the SDP process is still taking place.
2013-01-23 14:19:53 -06:00
Vinicius Costa Gomes 71986b67a3 hfp_hf_bluez5: Follow HFP AG device Alias property
If the device Alias property changes we should also change the name of
the modem.
2013-01-23 14:18:18 -06:00
Vinicius Costa Gomes 67cdf33fe8 hfp_hf_bluez5: Register modem for HFP AG devices
Now that we are able to keep track of devices appearing and
disappearing from BlueZ, we are able to register the modem when a
device that supports the HFP AG UUID appears.
2013-01-23 14:16:54 -06:00
Vinicius Costa Gomes 609f194309 bluez5: Add HFP_AG_UUID 2013-01-23 14:16:38 -06:00
Vinicius Costa Gomes 0de672ca78 hfp_hf_bluez5: Add tracking of bluetooth devices
This patch tracks the GDBusProxy for Bluetooth devices in order to be
able to get their properties.
2013-01-23 14:13:37 -06:00
Vinicius Costa Gomes 63cd9a740a hfp_hf_bluez5: Initial GDBusClient for BlueZ
This patch adds the initial callbacks to track when BlueZ connects so
we can register our HFP external profile handler. And tracks the
interfaces added or removed.
2013-01-23 14:13:37 -06:00
Vinicius Costa Gomes cdd99c3d5f bluez5: Add additional defines 2013-01-23 14:13:34 -06:00
Denis Kenzior b262aefe56 bluez5: Fix copy paste error 2013-01-23 13:02:05 -06:00
Denis Kenzior 2fa7a4a66e netreg: Fix broken CMER behavior on MBM 2013-01-21 10:23:34 -06:00
Denis Kenzior 1103f8ae08 mbm: Delay init until EMRDY
If we send these commands before the EMRDY notification has been seen,
they will simply return an error.
2013-01-21 10:22:45 -06:00
Denis Kenzior b9782fedfc hfpmodem: Add comment for previous commit 2013-01-21 09:41:54 -06:00
Mikel Astiz 843bd71169 hfpmodem: Fix release-and-swap without +CIEV
Some phones do not send the corresponding call state update (+CIEV)
after a successful release-and-swap operation (AT+CHLD=1).

This has been observed with a Nokia 500, while testing ReleaseAndSwap()
while an active and a held call exist:

ofonod[20414]: > AT+CLCC\r
ofonod[20414]: < \r\n+CLCC: 1,0,1,0,0,"<number1>",145\r\n
ofonod[20414]: < \r\n+CLCC: 2,0,0,0,0,"<number2>",145\r\n
ofonod[20414]: < \r\nOK\r\n
ofonod[20414]: > AT+CHLD=1\r
ofonod[20414]: < \r\nOK\r\n

After this, no +CIEV is received, but the call has been hung up.

The proposed approach to solve this consists of using AT+CLCC, unless
a call release has been received within a specific time period.

The result fixes the problem as can be seen below:

ofonod[20847]: < \r\n+CLCC: 1,0,1,0,0,"<number1>",145\r\n
ofonod[20847]: < \r\n+CLCC: 2,0,0,0,0,"<number2>",145\r\n
ofonod[20847]: < \r\nOK\r\n
ofonod[20847]: > AT+CHLD=1\r
ofonod[20847]: < \r\nOK\r\n
ofonod[20847]: > AT+CLCC\r
ofonod[20847]: < \r\n+CLCC: 1,0,0,0,0,"<number1>",145\r\n
ofonod[20847]: < \r\nOK\r\n
ofonod[20847]: < \r\n+CIEV: 5,2\r\n
ofonod[20847]: < \r\n+CIEV: 5,0\r\n
2013-01-21 09:41:54 -06:00
Mikel Astiz cbb784e734 hfpmodem: Avoid transitional voicecall states
While processing the result of AT+CLCC, process the differences in a way
that disconnections are reported first, then call state changes and
finally new calls.

The goal is to avoid unnecessary transitional states such as two active
calls existing at the same time.
2013-01-21 09:41:54 -06:00
Mikel Astiz 9726e50d82 hfpmodem: Refactor voicecall notify with foreach
Define a helper function in order to use foreach statements when
ofono_voicecall_notify() needs to be called.
2013-01-21 09:41:54 -06:00
Marcel Holtmann abb54f4aa5 gdbus: Check for valid path before handling properties 2013-01-20 18:45:56 -08:00
Vinicius Costa Gomes a419432c0f hfpmodem: Add support for sending the supported codecs
Right now, only the mandatory CVSD codec is supported. The mSBC
mandatory codec is "temporarily" not supported.

The spec alows this, HFP 1.6 Spec Section 4.34.1 page 92: "If wide band
speech is supported then the mandatory codec (mSBC) shall be included
unless it is temporarily unavailable."
2013-01-17 11:21:16 -06:00