platform/upstream/bluez.git
2 years agopolicy: Reconnect audio on controller resume
Abhishek Pandit-Subedi [Fri, 11 Sep 2020 22:30:37 +0000 (15:30 -0700)]
policy: Reconnect audio on controller resume

During system suspend, all peer devices are disconnected. On resume, HID
devices will reconnect but audio devices stay disconnected. As a quality
of life improvement, mark audio devices that were disconnected due to
suspend and attempt to reconnect them when the controller resumes (after
a delay for better co-existence with Wi-Fi).

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agopolicy: Enable reconnect for a2dp-sink in defaults
Abhishek Pandit-Subedi [Fri, 11 Sep 2020 22:30:36 +0000 (15:30 -0700)]
policy: Enable reconnect for a2dp-sink in defaults

Add a2dp-sink to default reconnects list.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadapter: Handle controller resume and notify drivers
Abhishek Pandit-Subedi [Fri, 11 Sep 2020 22:30:35 +0000 (15:30 -0700)]
adapter: Handle controller resume and notify drivers

Register for controller resume notification and notify the adapter
drivers when it occurs. Also adds the resume event kernel feature to
make sure the kernel supports this event.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadapter: Refactor kernel feature globals
Abhishek Pandit-Subedi [Fri, 11 Sep 2020 22:30:34 +0000 (15:30 -0700)]
adapter: Refactor kernel feature globals

Move all the kernel specific feature globals into a single
kernel_features bitfield and replace all uses with the bitfield instead.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agodoc: Update Advertisement Monitor API description
Miao-chen Chou [Sat, 12 Sep 2020 06:51:33 +0000 (23:51 -0700)]
doc: Update Advertisement Monitor API description

This modifies the following description to Advertisement Monitor API.
- Add org.bluez.Error.Failed to RegisterMonitor() method.
- Add more description about the usage of RegisterMonitor() and
UnregisterMonitor() methods.
- Add description about the ranges for the fields in property
RSSIThresholdsAndTimers.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadv_monitor: Handle D-Bus proxy event of an ADV monitor
Miao-chen Chou [Sat, 12 Sep 2020 06:51:31 +0000 (23:51 -0700)]
adv_monitor: Handle D-Bus proxy event of an ADV monitor

This adds two handlers, one for adding and one for removing, of D-Bus proxy
events. The handler of property changes is set to NULL as intended,
since for simplicity no further changes on monitor's properties would
affect the ongoing monitoring.

The following test steps were performed with bluetoothctl.
- After registering the root path, expose two monitors and verify that
the proxy added event are received.
- Have two monitors added, unexpose the monitors, and verify that the
proxy removed events are received for those two monitors.
- Have two monitors added, unregister the monitors and verify that the
proxy removed events are received for those two monitors.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agogdbus: Make g_dbus_proxy_get_path take const proxy
Luiz Augusto von Dentz [Mon, 14 Sep 2020 19:43:09 +0000 (12:43 -0700)]
gdbus: Make g_dbus_proxy_get_path take const proxy

This makes g_dbus_proxy_get_path take const proxy since it doesn't
change anything on the proxy and avoid pointless casts.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadv_monitor: Handle D-Bus client ready events
Miao-chen Chou [Sat, 12 Sep 2020 06:51:29 +0000 (23:51 -0700)]
adv_monitor: Handle D-Bus client ready events

This adds a handler of client ready events. The handler replies to the
RegisterMonitor() method call.

The following tests were performed.
- Call RegisterMonitor() and expect to receive a return.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadv_monitor: Implement UnregisterMonitor()
Miao-chen Chou [Sat, 12 Sep 2020 06:51:27 +0000 (23:51 -0700)]
adv_monitor: Implement UnregisterMonitor()

This implements the UnregisterMonitor() method handler of ADV monitor
manager interface.

The following tests were performed.
- Issue a UnregisterMonitor() call with a nonexistent path and expect
org.bluez.Error.DoesNotExist as the return.
- Issue a UnregisterMonitor() call with a invalid path and expect
org.bluez.Error.InvalidArguments as the return.
- Issue RegisterMonitor() with a path, issue UnregisterMonitor() and
expect a successful method call return.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadv_monitor: Implement RegisterMonitor()
Miao-chen Chou [Sat, 12 Sep 2020 06:51:25 +0000 (23:51 -0700)]
adv_monitor: Implement RegisterMonitor()

This implements the RegisterMonitor() method handler of ADV monitor
manager interface.

The following tests were performed.
- Issue a RegisterMonitor() call with a valid path and expect a
success as return.
- Issue a RegisterMonitor() call with an invalid path and expect
org.bluez.Error.InvalidArguments as return.
- Issue two Registermonitor() calls with the same path and expect
org.bluez.Error.AlreadyExists.
- Verify the values of the registered paths with logging.
- Verify D-Bus disconnection callback was triggered when the client detach
from D-Bus.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadv_monitor: Implement Get functions of Adv monitor manager properties
Miao-chen Chou [Sat, 12 Sep 2020 06:51:23 +0000 (23:51 -0700)]
adv_monitor: Implement Get functions of Adv monitor manager properties

This implements the Get functions of SupportedMonitorTypes and
SupportedFeatures.

The following test was performed.
- Issue dbus-send to read SupportedMonitorTypes and SupportedFeatures.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadv_monitor: Introduce org.bluez.AdvertisementMonitorManager1 interface
Miao-chen Chou [Sat, 12 Sep 2020 06:51:21 +0000 (23:51 -0700)]
adv_monitor: Introduce org.bluez.AdvertisementMonitorManager1 interface

This introduces the org.bluez.AdvertisementMonitorManager1 without
implementing handlers of methods and properties.

The following test was performed.
- Upon adapter registration, the info line of creating an ADV monitor
manager gets printed, and system bus emits the interface events of
org.bluez.AdvertisementMonitorManager1.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoadapter: Remove indirect dependency of headers
Miao-chen Chou [Sat, 12 Sep 2020 06:49:59 +0000 (23:49 -0700)]
adapter: Remove indirect dependency of headers

Given that adapter.h refers symbols from lib/bluetooth.h and lib/sdp.h,
these two headers should be included directly in adapter.h.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agobtpclient: Fix gap reset not sending response
Tedd Ho-Jeong An [Sat, 29 Aug 2020 00:08:03 +0000 (17:08 -0700)]
btpclient: Fix gap reset not sending response

This patch fixes the GAP reset command to response the default settings
after resetting the stack.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agotools/btpclientctl: Add btpclient test application
Tedd Ho-Jeong An [Sat, 29 Aug 2020 00:08:02 +0000 (17:08 -0700)]
tools/btpclientctl: Add btpclient test application

This patch adds a test application for btpclient, which exercises the
BTP API.

Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agobtp: Update connect event structure
Tedd Ho-Jeong An [Sat, 29 Aug 2020 00:08:01 +0000 (17:08 -0700)]
btp: Update connect event structure

This patch updates the connect event struct to align withe the btp spec.

 Opcode 0x82 - Device Connected event
    Controller Index:   <controller id>
    Event parameters:   Address_Type (1 octet)
                        Address (6 octets)
                        Connection Interval (2 octets)
                        Connection Latency (2 octets)
                        Supervision Timeout (2 octets)

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoemulator: Implement LE Remove CIG
Luiz Augusto von Dentz [Fri, 11 Sep 2020 20:20:02 +0000 (13:20 -0700)]
emulator: Implement LE Remove CIG

This adds support for LE Remove CIG command.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agomonitor: Fix decoding of LE Remove CIG
Luiz Augusto von Dentz [Fri, 11 Sep 2020 20:07:57 +0000 (13:07 -0700)]
monitor: Fix decoding of LE Remove CIG

HCI_LE_Remove_CIG does actually returns the CIG_ID in addition to the
status.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoaudio/transport: Don't set volume if it's invalid
Archie Pusaka [Tue, 1 Sep 2020 04:00:00 +0000 (12:00 +0800)]
audio/transport: Don't set volume if it's invalid

Adding a check inside media_transport_update_volume to prevent
the volume being updated with an invalid value.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoavrcp: Add handler for GET_TOTAL_NUMBER_OF_ITEMS
Archie Pusaka [Wed, 2 Sep 2020 04:57:45 +0000 (12:57 +0800)]
avrcp: Add handler for GET_TOTAL_NUMBER_OF_ITEMS

According to the AVRCP spec, section 4.5, GetTotalNumberOfItems PDU
is mandatory for TG supporting category 1 or 3.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoavrcp: Set volume if volume changed event is registered
Yu Liu [Wed, 9 Sep 2020 21:26:43 +0000 (14:26 -0700)]
avrcp: Set volume if volume changed event is registered

Some audio devices don't list the AVRCP TG role in SDP but still support
absolute volume and volume changed event, this change should allow the
stack to control the volumes on these audio devices.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoDisable auto-connect on device remove
Manish Mandlik [Wed, 9 Sep 2020 19:40:01 +0000 (12:40 -0700)]
Disable auto-connect on device remove

Auto-connect is not disabled when a device is removed. So in case the
pairing is cancelled, the device is removed, but it stays in the kernel
auto-connect list. This causes future advertisement from that device to
trigger a pairing even if the user has already cancelled the pairing.

This patch disables auto-connect on device remove.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoFix coverity issue 59/271559/1
Wootak Jung [Wed, 23 Feb 2022 05:19:06 +0000 (14:19 +0900)]
Fix coverity issue

dead_error_condition: The condition op must be true.
CID 1263496 (#1 of 1): Logically dead code (DEADCODE)

Change-Id: I8f62cb261535f20b2f7cb028c57505f9d7a66a3c

2 years agoReset disconnect timer for the incoming connection 50/271550/1
Dohyun Pyun [Wed, 23 Feb 2022 02:16:08 +0000 (11:16 +0900)]
Reset disconnect timer for the incoming connection

Change-Id: I87c614d923b763ba80c0d6bd0049156ddb10a318
Signed-off-by: Dohyun Pyun <dh79.pyun@samsung.com>
2 years agoLE CoC: Add support for L2CAP_LE type socket 62/271162/3
Ayush Garg [Tue, 15 Feb 2022 07:35:15 +0000 (13:05 +0530)]
LE CoC: Add support for L2CAP_LE type socket

This patch adds following
- Implement method to create and remove L2CAP_LE socket
- Implement method to listen and connect to L2CAP_LE socket

Change-Id: I7f4f6ba5fe49b6d3fa05bfbc3a1b2bfdd269c6bb
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoMerge "Fix response_needed setting logic" into tizen
Pyun DoHyun [Wed, 9 Feb 2022 06:19:44 +0000 (06:19 +0000)]
Merge "Fix response_needed setting logic" into tizen

2 years agoFix response_needed setting logic 95/270795/1
Wootak Jung [Wed, 9 Feb 2022 05:59:03 +0000 (14:59 +0900)]
Fix response_needed setting logic

response_needed should be true in case opcode is EXEC_WRITE_REQ.
EXEC_WRITE_REQ is used if the data size to write is bigger than
mtu size. otherwise, WRITE_REQ is used.

Change-Id: Ie9fbbeae9c0f0148c5dbd4938dafb1dbc6078cc2

2 years agoSet the default MTU size as 512 byte for Robot 91/270791/1
Dohyun Pyun [Wed, 9 Feb 2022 05:15:38 +0000 (14:15 +0900)]
Set the default MTU size as 512 byte for Robot

Change-Id: I017e84872e66d909c3365e5e7d233517cb831753
Signed-off-by: Dohyun Pyun <dh79.pyun@samsung.com>
2 years agoAdd the plugin for DA product 12/270712/1 accepted/tizen/unified/20220209.131716 submit/tizen/20220208.221946
dh79pyun [Tue, 8 Feb 2022 03:52:19 +0000 (12:52 +0900)]
Add the plugin for DA product

Change-Id: Ic449dba4202af8e8254f870b85f3ec79fe344af8
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoGATT: Fix crash in ccc_write_cb. 85/270385/2 accepted/tizen/unified/20220208.112116 submit/tizen/20220207.225310
Anuj Jain [Fri, 28 Jan 2022 11:08:38 +0000 (16:38 +0530)]
GATT: Fix crash in ccc_write_cb.

When gatt client is disconnected after notification enable,
The pending_op becomes null which when used in stop_notify_setup
causes bluetoothd to crash.
This patch will fix the same.

Change-Id: I75316e67be6a1b941457066f05e17ddf2db8732d
Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
2 years agoMerge "Don't remove the device, if LE connection exist" into tizen submit/tizen/20220128.020531
Pyun DoHyun [Fri, 28 Jan 2022 01:58:09 +0000 (01:58 +0000)]
Merge "Don't remove the device, if LE connection exist" into tizen

2 years agoDon't remove the device, if LE connection exist 06/270306/1
dh79pyun [Fri, 28 Jan 2022 01:33:54 +0000 (10:33 +0900)]
Don't remove the device, if LE connection exist

Change-Id: Idb006cc0ceebc1a7315443fb3f06513da65b7f50
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoFix Svace issue 76/269076/2 submit/tizen/20220110.224444
Anuj Jain [Fri, 7 Jan 2022 08:01:04 +0000 (13:31 +0530)]
Fix Svace issue

This patch fixes Svace issue:
474931: DEREF_OF_NULL.RET.STAT

Change-Id: Id93e55f8beffba9a35e899a9c5be33d715bfc8dc
Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
2 years agoMerge "a2dp: Fix crash on connection lost" into tizen accepted/tizen/unified/20220104.123146 submit/tizen/20220103.232749
Anupam Roy [Mon, 3 Jan 2022 09:57:51 +0000 (09:57 +0000)]
Merge "a2dp: Fix crash on connection lost" into tizen

2 years agoRevert "Add avdtp ref when disconnect timer is active" 99/268799/1
dh79pyun [Mon, 3 Jan 2022 07:04:56 +0000 (16:04 +0900)]
Revert "Add avdtp ref when disconnect timer is active"

This reverts commit f3f1e150ceb4ada38f3d921ed7d4f1a0e5771abc.

Change-Id: Ie99945ff24d8dbe254fcf51f33a4499b4e74f0c8
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoa2dp: Fix crash on connection lost 48/268648/2
Ayush Garg [Tue, 28 Dec 2021 16:04:42 +0000 (21:34 +0530)]
a2dp: Fix crash on connection lost

when the channel is removed on connection lost, the
setup->chan pointer becomes dangling which causes crash
in find_remote_sep.
So mark this pointer as NULL whenever the channel is removed.

Change-Id: I1b3fe81df18d4ea8eed00739a9db7d0e7232dda0
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoAdd avdtp ref when disconnect timer is active 98/268598/1
Ayush Garg [Mon, 27 Dec 2021 10:28:08 +0000 (15:58 +0530)]
Add avdtp ref when disconnect timer is active

This will be unref either at disconnect_timeout
or remove_disconnect_timer.

Change-Id: I3638ba446200f6c4d82e5f0923c9086f3519c283
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
2 years agoUse g_memdup2 for glib 2.70 upgrade 24/268424/1 accepted/tizen/unified/20211228.140430 submit/tizen/20211226.223329
dh79pyun [Wed, 22 Dec 2021 23:43:11 +0000 (08:43 +0900)]
Use g_memdup2 for glib 2.70 upgrade

Change-Id: I026932523b303f0e21354baaf1301e7bbea144d9
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoRevert "Use g_memdup2 instead of g_memdup" 23/268423/1
dh79pyun [Wed, 22 Dec 2021 23:18:05 +0000 (08:18 +0900)]
Revert "Use g_memdup2 instead of g_memdup"

This reverts commit 82053d0b6c107e3dacb63bcb36c0efe49e45f2bd.

Change-Id: I80b1506ed69fa7a89e7c364047acbebc9e045489
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoRevert "Fix the 64bit build error for g_memdup" 22/268422/1
dh79pyun [Wed, 22 Dec 2021 23:17:19 +0000 (08:17 +0900)]
Revert "Fix the 64bit build error for g_memdup"

This reverts commit 98c664c20bd85ef09e9eb8c94235d37a9172d4f9.

Change-Id: Ifa0b40080c257205012a642e5059a765f169f402
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoFix the 64bit build error for g_memdup 08/267908/2 accepted/tizen/unified/20211222.230711 submit/tizen/20211212.233427
dh79pyun [Mon, 13 Dec 2021 06:42:00 +0000 (15:42 +0900)]
Fix the 64bit build error for g_memdup

Change-Id: Iaf38a435af93c840ecdcbb77b49510da01edcebc
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoUse g_memdup2 instead of g_memdup 97/267897/1
dh79pyun [Mon, 13 Dec 2021 04:40:22 +0000 (13:40 +0900)]
Use g_memdup2 instead of g_memdup

Change-Id: I436d0b0fa3993d3718a745632a265067501d465f
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoSupport the multi-advertisement for the robot reference 12/267812/1 accepted/tizen/unified/20211210.115136 submit/tizen/20211210.052026
dh79pyun [Fri, 10 Dec 2021 04:57:02 +0000 (13:57 +0900)]
Support the multi-advertisement for the robot reference

Change-Id: Id45295d76f7b8afceadf323378cc0fb72fbf401f
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoIncrease the version 11/267811/1 accepted/tizen/6.5/unified/20211212.212914 submit/tizen_6.5/20211210.052054
dh79pyun [Fri, 10 Dec 2021 05:12:42 +0000 (14:12 +0900)]
Increase the version

Change-Id: Iac5203904bfc746077bd50153740aa9895131c12
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoSupport the multi-advertisement for the robot reference 09/267809/1
dh79pyun [Fri, 10 Dec 2021 04:57:02 +0000 (13:57 +0900)]
Support the multi-advertisement for the robot reference

Change-Id: I671fc3d6c5cd87a823e3d4485498bac7a0d2a6fc
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoModify the dbus policy for robot profile 43/266343/3 accepted/tizen/6.5/unified/20211111.224620 submit/tizen/20211114.231048 submit/tizen_6.5/20211111.022315
dh79pyun [Wed, 10 Nov 2021 23:04:00 +0000 (08:04 +0900)]
Modify the dbus policy for robot profile

Change-Id: I16389887221197cd24b1e84445090077d4e4cee6
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoIncrease the version 00/266100/1
dh79pyun [Sun, 7 Nov 2021 23:11:43 +0000 (08:11 +0900)]
Increase the version

Change-Id: Iacc44f2912922fe269d2eaea898d7ad07e52624b
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
2 years agoa2dp: Handle remote SEP disappearing 99/266099/1
Luiz Augusto von Dentz [Thu, 21 Jan 2021 00:25:09 +0000 (16:25 -0800)]
a2dp: Handle remote SEP disappearing

Some devices (Sony WH-1000XM4) seems to dinamically change its endpoints
depending on the configuration which may leave behind endpoints loaded
from cache that are no longer valid.

gh-issue: https://github.com/bluez/bluez/issues/85

Change-Id: I0e5ac965cc09da7e7d1ac1c554d77d75a0d65e22
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
3 years agoIncrease the version 08/266008/1 accepted/tizen/unified/20211108.181239 submit/tizen/20211105.042734
dh79pyun [Wed, 3 Nov 2021 04:08:24 +0000 (13:08 +0900)]
Increase the version

Change-Id: I7e0eed9586d869fc0ad97048adc24c0406144013
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
3 years agoFix A2DP sink disconnection issue on streaming 07/266007/1
dh79pyun [Wed, 3 Nov 2021 02:38:43 +0000 (11:38 +0900)]
Fix A2DP sink disconnection issue on streaming

The logic of disconnect_timeout was changed in bluez 5.55.
So we should modify Tizen specific logic for that.

Change-Id: Ic54b39d08b7f403407ae7dfa9ca6c9207bb1c4c5
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
3 years agoEnable Multi ADV only for wearable profile 25/265225/1 accepted/tizen/unified/20211102.024808 submit/tizen/20211101.051752
dh79pyun [Wed, 13 Oct 2021 02:31:54 +0000 (11:31 +0900)]
Enable Multi ADV only for wearable profile

Change-Id: Ieeec8d5f2278e0cc72e613c81f0725da3a8bab54
Signed-off-by: dh79pyun <dh79.pyun@samsung.com>
3 years agoGATT: Send client address to HAL layer on Notification state change 69/262169/4 accepted/tizen/6.5/unified/20211028.224421 accepted/tizen/unified/20210805.131621 submit/tizen/20210804.223925 submit/tizen_6.5/20211028.163301 tizen_6.5.m2_release
Anuj Jain [Tue, 3 Aug 2021 08:46:59 +0000 (14:16 +0530)]
GATT: Send client address to HAL layer on Notification state change

In gatt Server role Client address is added to dbus method calls
corresponding to StartNotify and StopNotify methods at BLUEZ layer.

This patchset should be merged with the following capi and
bluetooth-frwk's patchset in order to match API and avoid crash:
bluetooth-frwk Change-Id: Ib54ba54c318692b4ee0eaef9b2310c60dadeb661
capi Change-Id: Ic4868234a4fc682f9bff2c66ac1aee2683f3d6c6

Change-Id: I81a0994f2299e988f8ef6428537647c899700fda
Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
3 years agoFix code unreachable issue 19/259819/1 accepted/tizen/unified/20210617.124929 submit/tizen/20210615.223409
Wootak Jung [Tue, 15 Jun 2021 07:31:07 +0000 (16:31 +0900)]
Fix code unreachable issue

Change-Id: Ibe19389b7c27ec24191a3ecb965f741b83fc4c14
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
3 years agoAdd robot conf file 78/259178/1 accepted/tizen/unified/20210607.124421 submit/tizen/20210606.232858
Wootak Jung [Tue, 1 Jun 2021 00:12:07 +0000 (09:12 +0900)]
Add robot conf file

Change-Id: Id601ff4b3972ed3bff86d00b1d35180973366db5
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
3 years agoFix the coverity issue (resource leak) 07/258707/1
Anuj Jain [Mon, 24 May 2021 08:46:43 +0000 (14:16 +0530)]
Fix the coverity issue (resource leak)

Variable str must be free after its usage.
This change fixes the same.

Change-Id: I880aa48cbf31d13a27a47b7fc08807a56af18fd3
Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
3 years agoa2dp: Fix crash on discover_cb 15/258115/5
Wootak Jung [Tue, 11 May 2021 02:10:53 +0000 (11:10 +0900)]
a2dp: Fix crash on discover_cb

There have been reports of crashes on discover_cb where the setup
would most likely already have been freed but discover_cb would still
be called, so instead of assuming the setup pointer would be valid try
to lookup the list of active setups and log a warning when it happens.

Change-Id: Icca1608c48be43174492d69204c8d31b158a99df
Signed-off-by: Wootak Jung <wootak.jung@samsung.com>
3 years agoUpdate the version to 5.55 bluez_upgrade_5.55
Ayush Garg [Mon, 12 Apr 2021 10:15:09 +0000 (15:45 +0530)]
Update the version to 5.55

Change-Id: I9028e219dc378c0f3218d85b267d646541da7ddd
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoRelease 5.55
Marcel Holtmann [Sun, 6 Sep 2020 13:51:06 +0000 (15:51 +0200)]
Release 5.55

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agobuild: Update library version
Marcel Holtmann [Sun, 6 Sep 2020 13:50:53 +0000 (15:50 +0200)]
build: Update library version

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agolib: Update company identifiers
Marcel Holtmann [Sat, 5 Sep 2020 19:18:52 +0000 (21:18 +0200)]
lib: Update company identifiers

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoavrcp: Implement Press/Hold/Release method for MediaPlayer1
Archie Pusaka [Thu, 3 Sep 2020 03:50:39 +0000 (11:50 +0800)]
avrcp: Implement Press/Hold/Release method for MediaPlayer1

This allows us to send any passthrough command, complete with the
support to hold down the key. Using Press() will automatically
release the key, while using Hold() will keep the key held until
an explicit call to Release() is received.

This doesn't allow us to hold multiple keys simultaneously, since
according to the AV/C Panel Subunit Specification, part 9.4, when the
target receive a pressed command without receiving a release command
of the previous key, it will be treated as if the release command is
sent but not received.

Previously, the rewind and fast_forward keys are unique in terms that
they are treated as holdable keys, this patch preserves that behavior
of calling Rewind() and FastForward(). A rewind event which is
reported via the new Press() method will automatically be released
instead.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agodoc/media-api: Add Press/Hold/Release methods for MediaPlayer1
Archie Pusaka [Thu, 3 Sep 2020 03:50:37 +0000 (11:50 +0800)]
doc/media-api: Add Press/Hold/Release methods for MediaPlayer1

This allows us to send any passthrough command. The button can also
be held for an extended amount of time.

Reviewed-by: Michael Sun <michaelfsun@chromium.org>
Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoclient: Fix typo in bluetoothctl
Barry Byford [Sun, 30 Aug 2020 07:11:08 +0000 (08:11 +0100)]
client: Fix typo in bluetoothctl

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agomonitor: Add support for Suspend and Resume events
Abhishek Pandit-Subedi [Sat, 29 Aug 2020 01:02:09 +0000 (18:02 -0700)]
monitor: Add support for Suspend and Resume events

Add support to pretty print Suspend and Resume mgmt events in btmon.

Example:

@ MGMT Event: Controller Suspended (0x002d) plen 1
        Suspend state: Page scanning and/or passive scanning (2)

@ MGMT Event: Controller Resumed (0x002e) plen 8
        Wake reason: Remote wake due to peer device connection (2)
        LE Address: CD:F3:CD:13:C5:9A (OUI CD-F3-CD)

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agomgmt: Add controller suspend and resume events
Abhishek Pandit-Subedi [Sat, 29 Aug 2020 01:02:08 +0000 (18:02 -0700)]
mgmt: Add controller suspend and resume events

Add the controller suspend and resume events.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoprofiles/network: Log connection event after setting device name
edef [Thu, 27 Aug 2020 11:27:59 +0000 (11:27 +0000)]
profiles/network: Log connection event after setting device name

Without reordering these two statements, the logs look like this:

    bnep%d connected
    bnep0 disconnected

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agogatt: Accept empty array in parse_includes()
Jie Jiang [Wed, 26 Aug 2020 06:37:42 +0000 (23:37 -0700)]
gatt: Accept empty array in parse_includes()

Currently parse_includes() will return false if the "Includes" property
is an empty array. Empty array in the "Includes" property should be
treated as valid.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoadapter: Mark device temporary state pairing failure
Yu Liu [Mon, 24 Aug 2020 18:19:03 +0000 (11:19 -0700)]
adapter: Mark device temporary state pairing failure

This caused the device hanging around as a discovered device forever
even if it is turned off or not in present.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agodevice: Fix race condition between device connection and disconnection
Sonny Sasaka [Fri, 21 Aug 2020 18:01:06 +0000 (11:01 -0700)]
device: Fix race condition between device connection and disconnection

When Connect() is called and waiting for return, dev_disconnected may be
called due to MGMT_EV_DEVICE_DISCONNECTED event from kernel. In that
case reply to client that the connection failed otherwise the dbus
method will timeout because bluetoothd never replies.

Tested with simulation of a lot of Connect() to bluetooth devices and
check that error is returned from bluetoothd rather than dbus timeout
when this race condition happens.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoadapter: Fix crash in discovery_disconnect
Sonny Sasaka [Fri, 21 Aug 2020 17:58:38 +0000 (10:58 -0700)]
adapter: Fix crash in discovery_disconnect

discovery_disconnect crashed because the adapter pointer has been freed
before. This patch makes sure that discovery list is cleaned up before
adapter pointer is freed.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoinput/device: Unregister all UHID event listeners at UHID_DESTROY
Sonny Sasaka [Fri, 21 Aug 2020 04:35:36 +0000 (21:35 -0700)]
input/device: Unregister all UHID event listeners at UHID_DESTROY

When destroying UHID, we should also unregister all event listeners so
that they don't get double registered at reconnection. It fixes a bug
where battery report is not available to kernel after reconnection and
also prevents memory leak.

Tested with Logitech M535 mouse:
* Connect mouse to the device running BlueZ
* cat /sys/class/power_supply/hid-{addr}-battery/capacity # works
* Disconnect mouse
* Reconnect mouse
* cat /sys/class/power_supply/hid-{addr}-battery/capacity # still works

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoclient: Add cancel-pairing command
Miao-chen Chou [Fri, 21 Aug 2020 07:28:12 +0000 (00:28 -0700)]
client: Add cancel-pairing command

This adds cancel-pairing command which can be used to cancel the ongoing
pairing.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agomain: add configurable refresh_discovery parameter
Archie Pusaka [Tue, 18 Aug 2020 07:34:10 +0000 (15:34 +0800)]
main: add configurable refresh_discovery parameter

This is to configure the default behavior of issuing SDP query
to update the services upon profile connection.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agodevice: Don't browse SDP if HIDSDPDisable is set
Archie Pusaka [Tue, 18 Aug 2020 07:34:09 +0000 (15:34 +0800)]
device: Don't browse SDP if HIDSDPDisable is set

According to the HID1.1 spec, part 5.3.4.9:
The HIDSDPDisable attribute is a Boolean value, which indicates
whether connection to the SDP channel and Control or Interrupt
channels are mutually exclusive. This feature supports Bluetooth
HID devices that have minimal resources, and multiplex those
resources between servicing the initialization (SDP) and runtime
(Control and Interrupt) channels.

However, Bluez still tries to connect SDP upon HID connection,
regardless of the existence of the HIDSDPDisable attribute.

This patch prevents the connection of SDP after HID has been
established, if the device has HIDSDPDisable attribute.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/ad: move MAX_ADV_DATA_LEN macro to the header
Miao-chen Chou [Tue, 18 Aug 2020 06:19:39 +0000 (23:19 -0700)]
shared/ad: move MAX_ADV_DATA_LEN macro to the header

This moves MAX_ADV_DATA_LEN macro to src/shared/ad.h and rename it to
BT_AD_MAX_DATA_LEN.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoadvertising: Fix dbus response for over-advertising
Daniel Winkler [Fri, 14 Aug 2020 22:58:18 +0000 (15:58 -0700)]
advertising: Fix dbus response for over-advertising

client_free would always send a dbus method_return to fix the case where
a request to Unregister occurred before the MGMT call returned. However,
in the code path where too many advertisements are registered, this
method_return prevents the failure from being sent properly. This patch
makes sure the reference to the register_advertisement DBusMessage is
not stored in the client structure until the end of
register_advertisement. This ensures that we only respond once, either
in register_advertisement or in client_free, not both.

It also changes the dbus response in the fast unregister_advertisement
case from a method_return to a btd_error_failed, since the registration
was never allowed to complete, and thus was not successful.

The patch was tested in the following ways:

To verify it did not break the segfault fix in
caff2b48ca54bbc57b5da3f63317767489aa5b48, I repro'd the failure by
quickly unregistering after registering, and verified that the segfault
is still fixed with this change.

Ran through our automated tests that register too many advertisements
and verify that the registration fails with the intended "Maximum
Advertisements Reached" error response.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoavrcp: include all player settings in notif event
Howard Chung [Wed, 5 Aug 2020 02:05:36 +0000 (10:05 +0800)]
avrcp: include all player settings in notif event

According to AVRCP 1.6.2 spec section 6.7.2 table 6.39, all player
application settings should be returned to the CT and let CT to
determine which settings have changed. Currently bluez only returns
the changed attribute instead. This patch also addresses a potential
issue on which the number of application settings mismatches with
the actual number returned.

Change-Id: I3fbedd0d73f72c9de5d24af173aded4adf0b9a19
Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoinput/device: Send UHID_DESTROY upon disconnection
Archie Pusaka [Mon, 3 Aug 2020 06:52:24 +0000 (14:52 +0800)]
input/device: Send UHID_DESTROY upon disconnection

According to the uhid documentation: "If your device disconnects,
you should send an UHID_DESTROY event"

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoinput/device: Implement handle for UHID_SET_REPORT
Archie Pusaka [Mon, 3 Aug 2020 06:52:23 +0000 (14:52 +0800)]
input/device: Implement handle for UHID_SET_REPORT

This patch listens to UHID_SET_REPORT event and forwards this
message to the hid device. Upon reply, we also send a report back
to the kernel as UHID_SET_REPORT_REPLY.

hidp_send_set_report no longer listen UHID_OUTPUT events, that is
handled by hidp_send_output instead.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoinput/device: Replace UHID_FEATURE with UHID_GET_REPORT
Archie Pusaka [Mon, 3 Aug 2020 06:52:22 +0000 (14:52 +0800)]
input/device: Replace UHID_FEATURE with UHID_GET_REPORT

According to kernel's uhid.h, UHID_FEATURE is obsolete and is
replaced with UHID_GET_REPORT.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoinput: Remove bonding info when receiving virtual cable unplug
Archie Pusaka [Thu, 16 Jul 2020 18:04:33 +0000 (02:04 +0800)]
input: Remove bonding info when receiving virtual cable unplug

From Bluetooth HID Profile 1.1 Spec: If a Virtual Cable is
unplugged via a HID control Virtual Unplug command, then both the
Bluetooth HID device and Bluetooth HID Host shall destroy or
invalidate all Bluetooth bonding and Virtual Cable information
that was previously stored in persistent memory for the respective
Virtually Cabled devices and hosts.

This patch removes the bonding information upon receiving and/or
sending a "virtual cable unplug".

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agodevice: add device_remove_bonding function
Archie Pusaka [Thu, 16 Jul 2020 18:04:32 +0000 (02:04 +0800)]
device: add device_remove_bonding function

This patch splits the "bonding removal" function in device.c,
because we need to remove bonding information when receiving
"virtual cable unplug" in HID profile.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoinput: encrypt on receive conn req if classic_bonded_only
Archie Pusaka [Wed, 22 Jul 2020 16:20:33 +0000 (00:20 +0800)]
input: encrypt on receive conn req if classic_bonded_only

According to bluetooth HID1.1 spec, section 5.4.3.5.3:
If the Bluetooth HID Host is bonded to a Bluetooth HID device:
If encryption is not already enabled, the Bluetooth HID Host shall
enable encryption with the Bluetooth HID device before sending an
L2CAP Connect Response with a result code of “Connection Successful”
(0x0000) after an L2CAP Connect Request is received.

This patch raises the security level to medium when listening for
incoming connection if the flag classic_bonded_only is set,
effectively starting encryption.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoinput: authenticate when connecting to a bonded device
Archie Pusaka [Wed, 22 Jul 2020 16:20:32 +0000 (00:20 +0800)]
input: authenticate when connecting to a bonded device

According to bluetooth HID1.1 spec, part 5.4.3.4.3:
If the Bluetooth HID Host is bonded to a Bluetooth HID device:
If encryption is not already enabled, the Bluetooth HID Host shall
enable encryption with the Bluetooth HID device before sending an
L2CAP Connect Request to open the HID L2CAP Control channel.

When creating connection, this patch checks whether the target
device is bonded, if yes then we use the medium security level
instead of the low one to enable encryption.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoaudio/transport: supply volume on transport init
Archie Pusaka [Thu, 23 Jul 2020 07:23:40 +0000 (15:23 +0800)]
audio/transport: supply volume on transport init

Sometimes the response of RegisterNotification for volume change
event came before we create the transport for the corresponding
device. If that happens, the volume will be stuck to an
uninitialized invalid value. The property Volume of
MediaTransport1 will also be left unaccessible.

This patch supplies the initial volume when creating a new
transport. The value is obtained from the media_player object.
However, since the avrcp session might not be created by the time
the transport is created, we also try to initialize the volume
when creating avrcp session.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoaudio/transport: change volume to 8bit
Archie Pusaka [Thu, 23 Jul 2020 07:23:39 +0000 (15:23 +0800)]
audio/transport: change volume to 8bit

The valid range of volume is 0 - 127, yet it is stored in 16bit
data type. This patch modifies it so we use 8bit data type to
store volume instead. Furthermore we also use signed type, so
negative values can be used to indicate invalid volume.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoadapter: Don't remove temporary devices on disconnect
Luiz Augusto von Dentz [Sat, 18 Jul 2020 00:34:38 +0000 (17:34 -0700)]
adapter: Don't remove temporary devices on disconnect

This makes the disconnect logic just update last seen field of the
device so in case it is temporary it would trigger its timer and be
removed after the timeout which is consistent with the discovery
session givin a grace time for application to react to such events.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agodevice: Fix not removing temporary timer when connected
Luiz Augusto von Dentz [Sat, 18 Jul 2020 00:25:52 +0000 (17:25 -0700)]
device: Fix not removing temporary timer when connected

Devices with random addresses will not have its temporary flag (as they
cannot be persisted in storage) reset even in case they are connected
which could cause and unintended disconnection.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/gatt-client: Consolidate code parsing services
Luiz Augusto von Dentz [Sat, 18 Jul 2020 00:22:08 +0000 (17:22 -0700)]
shared/gatt-client: Consolidate code parsing services

This makes code parsing primary/secondary services which was mostly
duplicated into a function so it can be reused.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/gatt-client: Fix possible crash
Luiz Augusto von Dentz [Fri, 17 Jul 2020 21:09:42 +0000 (14:09 -0700)]
shared/gatt-client: Fix possible crash

This fixes the following crash which was the cause of CI failing with
the latest changes:

Invalid read of size 8
   at 0x15A5ED: queue_remove_if (queue.c:289)
   by 0x15181E: chrc_removed (gatt-client.c:278)
   by 0x15A4BC: queue_foreach (queue.c:220)
   by 0x157870: notify_attribute_changed (gatt-db.c:396)
   by 0x157870: notify_service_changed (gatt-db.c:407)
   by 0x15793C: gatt_db_service_destroy (gatt-db.c:433)
   by 0x15A741: queue_remove_all (queue.c:354)
   by 0x15A774: queue_destroy (queue.c:73)
   by 0x15776F: gatt_db_destroy (gatt-db.c:459)
   by 0x15776F: gatt_db_unref (gatt-db.c:471)
   by 0x15776F: gatt_db_unref (gatt-db.c:463)
   by 0x15211A: bt_gatt_client_free (gatt-client.c:2250)
   by 0x152565: notify_cb (gatt-client.c:2228)
   by 0x14D0F8: handle_notify (att.c:972)
   by 0x14D0F8: can_read_data (att.c:1063)
   by 0x1597F4: watch_callback (io-glib.c:170)
   by 0x48B67AE: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.6400.3)
   by 0x48B6B37: ??? (in /usr/lib64/libglib-2.0.so.0.6400.3)
   by 0x48B6E52: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.6400.3)
   by 0x159DE4: mainloop_run (mainloop-glib.c:79)
   by 0x15A1C1: mainloop_run_with_signal (mainloop-notify.c:201)
   by 0x14B27B: tester_run (tester.c:870)
   by 0x147C8E: main (test-gatt.c:4488)
 Address 0x4f51498 is 8 bytes inside a block of size 32 free'd
   at 0x483B9F5: free (vg_replace_malloc.c:538)
   by 0x1520A8: bt_gatt_client_free (gatt-client.c:2235)
   by 0x152565: notify_cb (gatt-client.c:2228)
   by 0x14D0F8: handle_notify (att.c:972)
   by 0x14D0F8: can_read_data (att.c:1063)
   by 0x1597F4: watch_callback (io-glib.c:170)
   by 0x48B67AE: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.6400.3)
   by 0x48B6B37: ??? (in /usr/lib64/libglib-2.0.so.0.6400.3)
   by 0x48B6E52: g_main_loop_run (in /usr/lib64/libglib-2.0.so.0.6400.3)
   by 0x159DE4: mainloop_run (mainloop-glib.c:79)
   by 0x15A1C1: mainloop_run_with_signal (mainloop-notify.c:201)
   by 0x14B27B: tester_run (tester.c:870)
   by 0x147C8E: main (test-gatt.c:4488)

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoprofile: Add exception to battery profile for external access
Sonny Sasaka [Wed, 15 Jul 2020 22:47:40 +0000 (15:47 -0700)]
profile: Add exception to battery profile for external access

This gives exception to battery profile to be shared both internally and
externally.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agogatt: Support DeviceInfo Service when vid/pid is specified
Alain Michaud [Fri, 17 Jul 2020 14:40:07 +0000 (14:40 +0000)]
gatt: Support DeviceInfo Service when vid/pid is specified

This patch adds support for the PNPID characteristic when configured in
main.conf.

This was validated as read correclty both by manually reading the valud
and confirming in the Ellisys Analyzer.

ATT Read (PnP ID: Source=Bluetooth ID, Vendor=224, Product=50181,
ATT Read Response Packet (Source=Bluetooth ID, Vendor=224,
Product=50181, Version=86)     | OK     | 7 bytes (01 E0 00 05 C4 56 00)

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/gatt-client: Fix handling of service changed
Luiz Augusto von Dentz [Fri, 17 Jul 2020 19:08:14 +0000 (12:08 -0700)]
shared/gatt-client: Fix handling of service changed

When handling multiple service changed multiple discovery operations
would be performed but at the end of each one the hash would be read
which not only would create extra traffic but also prevents the code
to properly detection services disappering.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/gatt-client: Don't remove active services
Luiz Augusto von Dentz [Fri, 17 Jul 2020 19:07:01 +0000 (12:07 -0700)]
shared/gatt-client: Don't remove active services

If discovery was aborted (i.e due to a disconnect) check if pending
services were active so only staled services which were not completed
fetched are removed.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/gatt-client: Remove notification if its attribute is removed
Luiz Augusto von Dentz [Thu, 16 Jul 2020 22:07:42 +0000 (15:07 -0700)]
shared/gatt-client: Remove notification if its attribute is removed

If the attribute is being removed from the database it means the
notification shall also be dropped, that way users don't have to
cleanup its subscriptions themselves.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/gatt-db: Add support for notifying attribute changes
Luiz Augusto von Dentz [Thu, 16 Jul 2020 22:02:27 +0000 (15:02 -0700)]
shared/gatt-db: Add support for notifying attribute changes

This enables to get notified when an attribute has been changed e.g.
it is being removed so the code can detect changes changes at attribute
level.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoshared/att: Fix possible crash on disconnect
Luiz Augusto von Dentz [Thu, 16 Jul 2020 01:25:37 +0000 (18:25 -0700)]
shared/att: Fix possible crash on disconnect

If there are pending request while disconnecting they would be notified
but clients may endup being freed in the proccess which will then be
calling bt_att_cancel to cancal its requests causing the following
trace:

Invalid read of size 4
   at 0x1D894C: enable_ccc_callback (gatt-client.c:1627)
   by 0x1D247B: disc_att_send_op (att.c:417)
   by 0x1CCC17: queue_remove_all (queue.c:354)
   by 0x1D47B7: disconnect_cb (att.c:635)
   by 0x1E0707: watch_callback (io-glib.c:170)
   by 0x48E963B: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.6400.4)
   by 0x48E9AC7: ??? (in /usr/lib/libglib-2.0.so.0.6400.4)
   by 0x48E9ECF: g_main_loop_run (in /usr/lib/libglib-2.0.so.0.6400.4)
   by 0x1E0E97: mainloop_run (mainloop-glib.c:79)
   by 0x1E13B3: mainloop_run_with_signal (mainloop-notify.c:201)
   by 0x12BC3B: main (main.c:770)
 Address 0x7d40a28 is 24 bytes inside a block of size 32 free'd
   at 0x484A2E0: free (vg_replace_malloc.c:540)
   by 0x1CCC17: queue_remove_all (queue.c:354)
   by 0x1CCC83: queue_destroy (queue.c:73)
   by 0x1D7DD7: bt_gatt_client_free (gatt-client.c:2209)
   by 0x16497B: batt_free (battery.c:77)
   by 0x16497B: batt_remove (battery.c:286)
   by 0x1A0013: service_remove (service.c:176)
   by 0x1A9B7B: device_remove_gatt_service (device.c:3691)
   by 0x1A9B7B: gatt_service_removed (device.c:3805)
   by 0x1CC90B: queue_foreach (queue.c:220)
   by 0x1DE27B: notify_service_changed.isra.0.part.0 (gatt-db.c:369)
   by 0x1DE387: notify_service_changed (gatt-db.c:361)
   by 0x1DE387: gatt_db_service_destroy (gatt-db.c:385)
   by 0x1DE3EF: gatt_db_remove_service (gatt-db.c:519)
   by 0x1D674F: discovery_op_complete (gatt-client.c:388)
   by 0x1D6877: discover_primary_cb (gatt-client.c:1260)
   by 0x1E220B: discovery_op_complete (gatt-helpers.c:628)
   by 0x1E249B: read_by_grp_type_cb (gatt-helpers.c:730)
   by 0x1D247B: disc_att_send_op (att.c:417)
   by 0x1CCC17: queue_remove_all (queue.c:354)
   by 0x1D47B7: disconnect_cb (att.c:635)

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoadapter: Remove timer for removing temporary devices
Luiz Augusto von Dentz [Wed, 15 Jul 2020 20:29:24 +0000 (13:29 -0700)]
adapter: Remove timer for removing temporary devices

Now that each temporary device object can cleanup after it has detected
that it has disappeared it is no longer necessary to keep this logic as
well in the adapter.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agodevice: Add timer for removing temporary devices
Luiz Augusto von Dentz [Wed, 15 Jul 2020 20:23:23 +0000 (13:23 -0700)]
device: Add timer for removing temporary devices

This adds a timer for how long to keep temporary devices, it is updated
everytime the device is seen so devices will be removed even during an
active discovery session which means the discovering for a long period
will no longer just grow without removing devices that disappeared.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
3 years agoaudio/avrcp: Always update transport volume regardless of player
Marijn Suijten [Sat, 11 Jul 2020 11:50:31 +0000 (13:50 +0200)]
audio/avrcp: Always update transport volume regardless of player

`Volume` is a special property that not only exists on players but also
on the transport (see org.bluez.MediaTransport1). A player is not
attached when the controller does not support FEATURE_CATEGORY_1, which
is common on headphones without media browsing capabilities.

On such audio devices (headphones, in-ears and the like) Absolute Volume
is not available unless an external player is registered
(org.bluez.Media1.RegisterPlayer) and the device sends a volume event
back after that to set a2dp->volume in transport.c to a valid value
(causing volume_exists to finally return true).

This [1] mail thread denoting the same issue has a solution to at least
request capabilities from the controller, but the proposed player object
is not created on category 2 devices. Any notifications received on
AVRCP_EVENT_VOLUME_CHANGED (avrcp_volume_changed) that is subsequently
registered, or handling the result of avrcp_set_volume in
avrcp_handle_set_volume will be ignored unless said player is present.

This issue is not addressed by adding a fake player but instead dealing
with the fact that volume is "special" and available on the transport
regardless of the existence of a player. This is confirmed in
avrcp_get_capabilities_resp as well which requires a player to register
any event except AVRCP_EVENT_VOLUME_CHANGED.

The applied solution moves media_transport_update_device_volume out of
the player and into avrcp_volume_changed/avrcp_handle_set_volume where
it is unconditionally called. These functions are the only users of
avrcp_player->set_volume.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>