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.
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.
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.
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.
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.
This patch declares the external HFP Profile handler. It contains the
initial implementation of the D-Bus Profile1 interface and methods
responsible for handling Bluetooth connections.
This patch adds the initial file to support external HFP profile and
BlueZ 5. "hfp_hf_bluez5" plugin will implement an external Bluetooth
profile compatible with BlueZ 5, and "hfp_hf_bluez4" plugin will keep
the compatibility with BlueZ 4.
As BlueZ 5 introduced backwards incompatible API changes, and we want to
keep support for BlueZ 4 based plugins for some time, we need to separate
the plugins that are based on BlueZ 4 from the ones based on BlueZ 5.
The bluetooth.c plugin has now been renamed to bluez4.c and the hfp_hf.c
plugin is renamed to hfp_hf_bluez4. This will make it easy to add a
HFP HF plugin for BlueZ 5.
The newer IFX firmware was changed, it no longer accepts AT commands
until the UA frame has been sent back to the AP. The commands are
simply dropped on the floor. This requires a proper fix in GAtMux, but
until then simply bump up the timeout to get around this issue.
When performing a SIM REFRESH, particularly NAA Initialization, we need
to wait until the modem sends XSIMSTATE: 7, not XSIMSTATE:2. Even on
normal initialization it seems safer to wait until XSIMSTATE:2.
Use AT#QSS=2 instead of AT#QSS=1 to get an URC when the SIM is not only
inserted but also when PIN is unlocked and when SMS + phonebook are
ready to be used.
Disable sim state notification in telit_enable() so that we sure get a
notification when we enable it later again. This way we don't have to
query the state the first time. Without this the Telit modem does not
always send an URC when AT#QSS=2 is sent.
Remove sim_inserted_source and sim_inserted_timeout_cb which are not
needed anymore as a consequence.
By the way the 1 second timeout was an ugly hack.
Don't query current SIM status in cfun_enable_cb() as the SIM is
disabled due to prior AT+CFUN=4.
Register '#QSS:' before enabling sim state notifications.
Remove telit_qss_cb() which was used as a callback for querying the
current SIM status.
Move sms atom creation into switch_sim_state_status() and add creation
of phonebook atom. These are created when QSS: 3 is received.
Avoid a reset when switching between online and offline (airplane)
mode in telit_set_online(). +CFUN accepts a second parameter (0), which
disables a reset: AT+CFUN=x,0.
Telit software user guide says:
USB AUX doesn't support any flow control method. Therefore, this port
isn't suitable for DATA service port.
We recommend this port should be used only for AT command and URC
processing.
Calling ofono_remove_modem() while iterating the hash table is not safe
given that it can modify the table in hfp_remove().
A simple way to reproduce the problem is to pair some Bluetooth phones
and remove the Bluetooth adapter, triggering a GLib-CRITICAL assertion.
This patch just removes the update of the hash table inside
hfp_remove(). This can be safe as long as all calls to
ofono_modem_remove() are accompanied by a hash table update. The only
example of this kind right now is hfp_agent_release().
Add speedup_set_online.
Add a polling mechanism since most speedup dongles failed in couple of
AT commands following the CFUN=1 when they are offline.
Cleanup online polling in case modem is removed during online process.