summaryrefslogtreecommitdiffstats
path: root/binding/bluetooth-api.c
AgeCommit message (Collapse)AuthorFilesLines
2020-07-13fix segfaults due to races & missing adapterRaquel Medina1-14/+57
During start up, there are races between the bluetooth, persistence, bluetooth-map and bluetooth-pbap bindings; on top of it, in the case there's no bluetooth controller in the system, various key parameters can exhibit a null value. The combination of these races and the lack of bluetooth controller can manifest in a number of segfaults in the bluetooth binding (it's very easy to reproduce on qemu). This commit brings in several changes to make the bluetooth binding resilient to the races and lack of bluetooth controller: * on startup, retrieve the default adapter from the persistence binding from the init thread * store the system default adapter in the service init data structure, and store the active adapter in the bluetooth state structure. * update get_default_adapter to return value obtained from persistence biding, without further processing; * add guards to make sure the userdata retrieved from the application framework is valid; * on verbs processing, ensure the caller provides an adapter to apply the verb to, or that at least there's a valid adapter associated to the bluetooth state structure; * initialize agent_data's device_path following free operation; * add guards for mediaplayer_path. Bug-AGL: SPEC-3301 Signed-off-by: Raquel Medina <raquel.medina@konsulko.com> Change-Id: Ia5a0dc9a61024ff43cd247216d0dff6918046f7e
2020-07-13distinguish between no controller and no bluez serviceRaquel Medina1-2/+6
The initialization sequence for dbus services is not fixed, and some races have been observed between blutoothd and agl-service-bluetooth when running on qemu: sometimes Bluetooth-Manager can be ready before org.bluez and this results in reporting no adapter, even though it's not accurate. Also, although this issue has been seen only using qemu, the race is there and it could also manifest in other platforms with a bluetooth controller attached. This patch simply provides the logic to discern between 'no org.bluez service found' and 'no bluetooth controller present': - in the case of no org.bluez service detected, an error is returned to allow for retries, - in the case of no controller present, no error is returned and agl-service-bluetooth completes the initialization. Bug-AGL: SPEC-3301 Signed-off-by: Raquel Medina <raquel.medina@konsulko.com> Change-Id: I4868803bcfbd36fb65028cea5c997c4f174675a0
2020-07-09unregister agent if previously registeredRaquel Medina1-1/+2
Only unregister agent on exit path if it had been registered beforehand. Bug-AGL: SPEC-3301 Signed-off-by: Raquel Medina <raquel.medina@konsulko.com> Change-Id: I60fc2af01800521e0d5b026dbf7404b445eff6f9
2020-07-08force init completion if no controllerRaquel Medina1-8/+35
Add logic to obtain the number of bluetooth controllers in the system, if there's at least one, then apply the existing logic: register the agent, etc; if there's none, simply add a line to record this case in the journal, skip agent registration and signal that the Bluetooth-Manager service initialization completed without errors, to keep the service running. Also fixed indentation on 2 lines on the same file where the mentioned changes are applied: binding/bluetooth-api.c. Bug-AGL: SPEC-3301 Signed-off-by: Raquel Medina <raquel.medina@konsulko.com> Change-Id: I43a7aac709845bef71295ebd470546f252db8fa0
2020-02-17binding: bluetooth: remove unused version verbMatt Ranostay1-14/+0
No other applications/bindings check the version verb to figure which schema version to use. Bug-AGL: SPEC-3156 Change-Id: I5baea8d7a38101bc9378f90c40981e73074ed558 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-05-06binding: bluetooth: use BLUEZ_AT_DEVICE for call_work_create()halibut_7.99.1halibut/7.99.17.99.1Matt Ranostay1-2/+2
Use the BLUEZ_AT_DEVICE macro instead of explicit string references. Bug-AGL: SPEC-2361 Change-Id: I2e892a7b6e2d838765cfa12dadd970e34c2f5d86 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-05-05binding: bluetooth: add missing g_variant_unref() on repliesMatt Ranostay1-0/+1
To avoid memory leaks g_variant_unref() needs to be called on dbus replies. Bug-AGL: SPEC-2361 Change-Id: Ie8db961f182e77fe5a36c91acddff1e549e7f60a Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-04-28binding: bluetooth: use BLUEZ_AT_DEVICE macroMatt Ranostay1-5/+5
Use the BLUEZ_AT_DEVICE macro instead of explicit string references. Bug-AGL: SPEC-2361 Change-Id: Icddf5914433123e65d2a7d40629bab362b60c1c1 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-04-05binding: bluetooth: remove versioning references in structsMatt Ranostay1-2/+2
In order to upgrade to future versions easier don't use versioned structs but the respective typedefs Change-Id: Ic789dc7c74e0a2a1352effa1cfeea4998cbc56f3 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-04-02binding: bluetooth: add changed action for adapter_changes eventMatt Ranostay1-13/+10
Report back property changes in the adapter_changes event, which is required for detecting when an adapter is truly powered on. Bug-AGL: SPEC-2295 Change-Id: I58441369277d2e778f2bb077e7b1be4aa3a3b1b4 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-03-27binding: bluetooth: allow multiple paths for org.bluez.MediaPlayer1 interfacesMatt Ranostay1-3/+7
Previously org.bluez.MediaPlayer1 paths could only resolve to player0 but certain phones request another instance for another application (e.g. player1). This patchset changes the default media player path to last connected, and which in theory should be from the media application in use on the phone. From limited experiments not in use interfaces will be reaped shortly after going idle. Bug-AGL: SPEC-2281 Change-Id: Id4bdc89cd395d5cd3ac043394761a95b306e5c6d Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-02-25binding: bluetooth: add adapter_changes eventMatt Ranostay1-3/+23
adapter_changes event allows clients to know when an adapter's status changes as in addition or removal. Bug-AGL: SPEC-1763 Change-Id: I7a442ece7cf6b508d6290130a939fccc1bddebb9 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-02-14binding: bluetooth: fix segfault when no adapters are connectedMatt Ranostay1-0/+4
Bug-AGL: SPEC-2047 Change-Id: I55a080af35dad1514ee0423eff80e65331891bc7 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-01-14binding: bluetooth: replace rfkill code with network servicehalibut_7.90.0halibut/7.90.0guppy_6.99.4guppy/6.99.47.90.06.99.4Matt Ranostay1-2/+11
Remove bluetooth-rfkill.c and replace with agl-service-network calls which in turn allows ConnMan to correctly manage bluetooth rfkill state. Bug-AGL: SPEC-2124 Change-Id: Ibe0460be0f29957f99ea06975a1fa12d01840080 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2019-01-02binding: bluetooth: add Transport parameter to discovery filterMatt Ranostay1-12/+25
Allow clients to select what Bluetooth transport they want a discovery scan to attempt to detect. This will improve scanning in for example when a client only wants to detect bredr or ble devices . Bug-AGL: SPEC-2094 Change-Id: I2a983f5243aefcb582a7476bbae34d6ba88c39a6 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-12-10binding: bluetooth: add MediaTransport1 supportMatt Ranostay1-13/+62
Bug-AGL: SPEC-1630 Change-Id: I6ad1f85d4edc00239f891edf6994db416e8a2dbd Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-12-07binding: bluetooth: add default_adapter verbMatt Ranostay1-3/+38
Allow setting of default adapter for use by other verbs within the binding. This allows to select an adapter on boards with more than one. Bug-AGL: SPEC-1630 Change-Id: Iec77b0abaa9f4c092dc5c827522efb1744953fce Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-12-07binding: bluetooth: add connect/disconnect actions to avrcp_controlsMatt Ranostay1-1/+26
Allow subscribers to connect/disconnect to a2dp/avrcp Bluetoothp profiles Bug-AGL: SPEC-1630 Change-Id: I5c4c2a2f06636b2b74cb453a3af576beb8026ab1 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-14binding: bluetooth: add MediaPlayer1 interface media eventsguppy_6.99.2guppy_6.99.1guppy/6.99.2guppy/6.99.16.99.26.99.1Matt Ranostay1-14/+98
Report back MediaPlayer1 interface events for A2DP media playback Bug-AGL: SPEC-1630 Change-Id: I777f19af2de247fe676d5bede4bacbbad8ca9844 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add new avrcp controls verbMatt Ranostay1-0/+43
Since MediaPlayer1 controls are part of bluez it makes sense to keep them here for now Bug-AGL: SPEC-1630 Change-Id: Ia02341179a322082357b0e7eff07264e34197d57 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add autoconnect featureMatt Ranostay1-0/+2
Attempt connection on each paired device till one is successful on startup. Bug-AGL: SPEC-1630 Change-Id: I213876f65528d0eaeaa5b55a745f541b286f26b5 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add power adapter change eventsMatt Ranostay1-0/+12
Bug-AGL: SPEC-1630 Change-Id: I615cbf19d180556b0650dbf6b5ba48848be49f97 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: change api name to old case sensitive formatMatt Ranostay1-1/+1
Bug-AGL: SPEC-1630 Change-Id: Iae18f069b7a8091331efda97a270b70d05de3e79 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add initial discovery filter supportMatt Ranostay1-1/+35
Allow clients to request devices only with certain profile UUIDs to be displayed in an discovery scan. This allows to filter out things like location tokens, smart scales, and etc which can't possibly have a2dp or hfp profiles for instance. NOTE: This is a write only setting. In the future should be read/write to see current discovery filters. Bug-AGL: SPEC-1630 Change-Id: Ic8b18656f84ac8047b170d6e601fcc2e63786af0 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add BLUEZ_DEFAULT_ADAPTERMatt Ranostay1-14/+5
Bug-AGL: SPEC-1630 Change-Id: I8e55d273ab58992e6f6327523853c6d330505278 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add return_bluez_path functionMatt Ranostay1-21/+34
Concatenate adapter and device parameters to return a bluez path for usage within the binding's dbus calls. Bug-AGL: SPEC-1630 Change-Id: I4c96fa48baaf12b23aac98ba35f1ca82f7005bcb Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add check to be sure GError has been setMatt Ranostay1-4/+4
segfaults can happen if the dbus call reply fails but doesn't set a GError. Bug-AGL: SPEC-1630 Change-Id: I83ea2f7997a8fcef1cdd73a7df2cf9ad97e00d91 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: return adapter/device versus bluez pathMatt Ranostay1-6/+5
To allow this binding API to be bluetooth stack agnostic remove pure bluez paths, and replace with generic fields. Bug-AGL: SPEC-1630 Change-Id: Iadba73782b6339df2ca5937e16a654e7ef3e477b Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: don't send empty PropertiesChanged messagesMatt Ranostay1-1/+11
Possible to have an PropertiesChanged events that produces no changes that are useful to report. Bug-AGL: SPEC-1630 Change-Id: I09b25943e3676abd5dd0f1c8caa2c0a2414f409f Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: add version verbMatt Ranostay1-0/+14
Report API as 2.0 to middleware + application clients Bug-AGL: SPEC-1630 Change-Id: I4ce889a06a0cd287af2d08068a59bbc7d359c20b Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
2018-11-12binding: bluetooth: initial commit of binding rewriteMatt Ranostay1-0/+1034
Bug-AGL: SPEC-1630 Change-Id: I33cfec70283fa29f47b76f9e6be3e8e6cd6a2f54 Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>