Luiz Augusto von Dentz [Tue, 13 Jun 2023 20:25:34 +0000 (13:25 -0700)]
btdev: Fix build error
This fixes the following build error:
emulator/btdev.c: In function ‘le_cis_estabilished’:
emulator/btdev.c:5947:22: error: ‘cis_idx’ may be used
uninitialized [-Werror=maybe-uninitialized]
5947 | int cig_idx, cis_idx;
| ^~~~~~~
Silviu Florian Barbulescu [Wed, 7 Jun 2023 08:23:00 +0000 (11:23 +0300)]
bap: Add broadcast source support
This updates BAP plugin with broadcast source support.
Silviu Florian Barbulescu [Wed, 7 Jun 2023 08:22:59 +0000 (11:22 +0300)]
shared/bap: Add initial code for BAP broadcast source
This adds initial support for BAP broadcast source.
Silviu Florian Barbulescu [Wed, 7 Jun 2023 08:22:58 +0000 (11:22 +0300)]
client/player: Add support for broadcast source
This adds bluetoothctl support for broadcast source.
To test the current implementation use bluetoothctl with the commands:
endpoint.register
00001852-0000-1000-8000-
00805f9b34fb 0x06
endpoint.config <created endpoint> <local endpoint> 16_2_1
transport.acquire <created transport>
transport.send <created transport> <file.wav>
Silviu Florian Barbulescu [Wed, 7 Jun 2023 08:22:57 +0000 (11:22 +0300)]
shared/bap: Split unicast and broadcast structures
This splits bt_bap_qos structure into unicast and broadcast structures.
Arkadiusz Bokowy [Sat, 27 May 2023 23:14:58 +0000 (01:14 +0200)]
media: Register app objects in proxy_added_cb()
The proxy_added_cb() function is called every time a new client is added
to the application object manager. Registering media endpoint and player
in that proxy_added_cb() callback function will allow to register new
endpoints and players not only during the initial RegisterApplication
call, but also during the application lifetime. For instance, this might
allow to dynamically enable/disable support for additional codecs.
Arkadiusz Bokowy [Sun, 28 May 2023 07:44:45 +0000 (09:44 +0200)]
battery: Check interface before getting property
Client can export other interfaces than the BatteryProvide1 on the
registered object manager. So, before getting battery provider specific
property, validate that we are operating on the right interface.
This change will allow client to implement only one object manger for
media applications, players and battery providers without triggering
error message.
Luiz Augusto von Dentz [Thu, 1 Jun 2023 23:28:09 +0000 (16:28 -0700)]
shared/bap: Don't overwrite attribute declaration
The attribute declaration (e.g. characteristic properties) shall not be
overwritten as they are part of the information that is part of the
cache beside the same information is already stored as part of the
bt_bap instance.
Luiz Augusto von Dentz [Thu, 1 Jun 2023 23:26:15 +0000 (16:26 -0700)]
monitor: Only print credentials if PID is set
If PID is not set don't print anything since this is likely a packet
originated by the kernel itself.
Iulia Tanasescu [Mon, 29 May 2023 08:46:50 +0000 (11:46 +0300)]
unit: Introduce test-bass
This adds 3 unit tests for BASS server, to simulate the
Generic GATT Integrated Test suite for BASS.
Test Summary
------------
BASS/SR/SGGIT/SER/BV-01-C Passed
BASS/SR/SGGIT/CHA/BV-01-C Passed
BASS/SR/SGGIT/CHA/BV-02-C Passed
Total: 3, Passed: 3 (100.0%), Failed: 0, Not Run: 0
Iulia Tanasescu [Mon, 29 May 2023 08:46:49 +0000 (11:46 +0300)]
shared/bass: Add Write Without Response property to the CP characteristic
This adds the Write Without Response property to the Broadcast Audio
Scan Control Point characteristic, which is mandatory according to
specification.
Iulia Tanasescu [Mon, 29 May 2023 06:24:58 +0000 (09:24 +0300)]
iso-tester: Add BAP Broadcast AC tests
This adds the following tests based on BAP Broadcast Audio Configurations:
ISO Broadcaster AC 12 - Success
ISO Broadcaster AC 13 - Success
ISO Broadcaster AC 14 - Success
Iulia Tanasescu [Mon, 29 May 2023 06:24:57 +0000 (09:24 +0300)]
btdev: Support multiple BIS
This adds support for creating a BIG with multiple BISes.
Iulia Tanasescu [Mon, 29 May 2023 06:27:34 +0000 (09:27 +0300)]
isotest: Add support for creating/synchronizing to multiple BISes
This adds an additional command line option for the Broadcast exercise,
so that the user can indicate the number of BISes to create as part of a
BIG (Broadcast Source), or the number of BISes to synchronize
to (Broadcast Sink).
For the Broadcast Source exercise, issue the following command,
in order to create a BIG with handle 0x01, associated with the
advertising handle 0x01, with 2 BISes:
tools/isotest -i hci0 -s 00:00:00:00:00:00 -N 2 -G 1 -T 1
The isotest and btmon logs will look something like this:
isotest[7178]: mgmt socket: fd 3
isotest[7178]: mgmt_set_le: err 0
isotest[7178]: mgmt_set_experimental: err 0
isotest[7179]: Exit
isotest[7178]: Connecting 00:00:00:00:00:00 ...
isotest[7178]: Connected [00:00:00:00:00:00]
isotest[7178]: QoS [BIG 0x01 BIS 0x01 Packing 0x00 Framing 0x00 Encryption 0x00]
isotest[7178]: Input QoS [Interval 10000 us Latency 10 ms SDU 0 PHY 0x00 RTN 2]
isotest[7178]: Output QoS [Interval 10000 us Latency 10 ms SDU 40 PHY 0x02 RTN 2]
isotest[7178]: Connecting 00:00:00:00:00:00 ...
isotest[7178]: Connected [00:00:00:00:00:00]
isotest[7178]: QoS [BIG 0x01 BIS 0x01 Packing 0x00 Framing 0x00 Encryption 0x00]
isotest[7178]: Input QoS [Interval 10000 us Latency 10 ms SDU 0 PHY 0x00 RTN 2]
isotest[7178]: Output QoS [Interval 10000 us Latency 10 ms SDU 40 PHY 0x02 RTN 2]
isotest[7183]: Sending ...
isotest[7183]: Number of packets: 1
isotest[7183]: Socket jitter buffer: 80 buffer
isotest[7183]: [seq 0] 40 bytes buffered 92 (3712 bytes)
isotest[7184]: Sending ...
isotest[7184]: Number of packets: 1
isotest[7184]: Socket jitter buffer: 80 buffer
isotest[7184]: [seq 0] 40 bytes buffered 92 (3712 bytes)
isotest[7178]: Exit
< HCI Command: LE Create Broadcast Isochronous Group (0x08|0x0068) plen 31
Handle: 0x01
Advertising Handle: 0x01
Number of BIS: 2
SDU Interval: 10000 us (0x002710)
Maximum SDU size: 40
Maximum Latency: 10 ms (0x000a)
RTN: 0x02
PHY: LE 2M (0x02)
Packing: Sequential (0x00)
Framing: Unframed (0x00)
Encryption: 0x00
Broadcast Code:
00000000000000000000000000000000
> HCI Event: Command Status (0x0f) plen 4
LE Create Broadcast Isochronous Group (0x08|0x0068) ncmd 1
Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 23
LE Broadcast Isochronous Group Complete (0x1b)
Status: Success (0x00)
Handle: 0x01
BIG Synchronization Delay: 1974 us (0x0007b6)
Transport Latency: 1974 us (0x0007b6)
PHY: LE 2M (0x02)
NSE: 3
BN: 1
PTO: 1
IRC: 3
Maximum PDU: 40
ISO Interval: 10.00 msec (0x0008)
Connection Handle #0: 10
Connection Handle #1: 11
< HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13
Handle: 10
Data Path Direction: Input (Host to Controller) (0x00)
Data Path: HCI (0x00)
Coding Format: Transparent (0x03)
Company Codec ID: Ericsson Technology Licensing (0)
Vendor Codec ID: 0
Controller Delay: 0 us (0x000000)
Codec Configuration Length: 0
Codec Configuration:
> HCI Event: Command Complete (0x0e) plen 6
LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
Status: Success (0x00)
Handle: 10
< HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13
Handle: 11
Data Path Direction: Input (Host to Controller) (0x00)
Data Path: HCI (0x00)
Coding Format: Transparent (0x03)
Company Codec ID: Ericsson Technology Licensing (0)
Vendor Codec ID: 0
Controller Delay: 0 us (0x000000)
Codec Configuration Length: 0
Codec Configuration:
> HCI Event: Command Complete (0x0e) plen 6
LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
Status: Success (0x00)
Handle: 11
< ISO Data TX: Handle 10 flags 0x02 dlen 44
< ISO Data TX: Handle 11 flags 0x02 dlen 44
> HCI Event: Number of Completed Packets (0x13) plen 5
Num handles: 1
Handle: 10
Count: 1
> HCI Event: Number of Completed Packets (0x13) plen 5
Num handles: 1
Handle: 11
Count: 1
For the Broadcast Sink exercise, issue the following command,
in order to synchronize to the BISes created by the source:
tools/isotest -i hci1 -r 36:13:00:E1:1B:F0 -V le_random -N 2 -G 1
The flow is shown by the isotest log and the filtered btmon snippet below:
isotest[4033]: mgmt socket: fd 3
isotest[4034]: Exit
isotest[4033]: mgmt_set_le: err 0
isotest[4033]: mgmt_set_experimental: err 0
isotest[4033]: Waiting for connection 36:13:00:E1:1B:F0...
isotest[4036]: Connected [36:13:00:E1:1B:F0]
isotest[4036]: QoS [BIG 0x01 BIS 0x00 Packing 0x00 Framing 0x00 Encryption 0x00]
isotest[4036]: Input QoS [Interval 1974 us Latency 10 ms SDU 40 PHY 0x00 RTN 0]
isotest[4036]: Output QoS [Interval 0 us Latency 0 ms SDU 0 PHY 0x00 RTN 0]
isotest[4036]: Receiving ...
isotest[4037]: Connected [36:13:00:E1:1B:F0]
isotest[4037]: QoS [BIG 0x01 BIS 0x00 Packing 0x00 Framing 0x00 Encryption 0x00]
isotest[4037]: Input QoS [Interval 1974 us Latency 10 ms SDU 40 PHY 0x00 RTN 0]
isotest[4037]: Output QoS [Interval 0 us Latency 0 ms SDU 0 PHY 0x00 RTN 0]
isotest[4037]: Receiving ...
isotest[4037]: [seq 0] 280 bytes in 6.48 sec speed 0.34 kb/s
isotest[4036]: [seq 0] 280 bytes in 6.54 sec speed 0.33 kb/s
isotest[4037]: [seq 1] 280 bytes in 7.01 sec speed 0.31 kb/s
isotest[4036]: [seq 1] 280 bytes in 7.02 sec speed 0.31 kb/s
isotest[4037]: [seq 2] 280 bytes in 7.06 sec speed 0.31 kb/s
isotest[4036]: [seq 2] 280 bytes in 7.04 sec speed 0.31 kb/s
< HCI Command: LE Periodic Advertising Create Sync (0x08|0x0044) plen 14
Options: 0x0000
Use advertising SID, Advertiser Address Type and address
Reporting initially enabled
SID: 0x00
Adv address type: Random (0x01)
Adv address: 36:13:00:E1:1B:F0 (Non-Resolvable)
Skip: 0x0000
Sync timeout: 163840 msec (0x4000)
Sync CTE type: 0x0000
> HCI Event: Command Status (0x0f) plen 4
LE Periodic Advertising Create Sync (0x08|0x0044) ncmd 1
Status: Success (0x00)
< HCI Command: LE Set Extended Scan Parameters (0x08|0x0041) plen 13
Own address type: Public (0x00)
Filter policy: Ignore not in accept list (0x01)
PHYs: 0x05
Entry 0: LE 1M
Type: Passive (0x00)
Interval: 60.000 msec (0x0060)
Window: 30.000 msec (0x0030)
Entry 1: LE Coded
Type: Passive (0x00)
Interval: 60.000 msec (0x0060)
Window: 30.000 msec (0x0030)
> HCI Event: Command Complete (0x0e) plen 4
LE Set Extended Scan Parameters (0x08|0x0041) ncmd 1
Status: Success (0x00)
< HCI Command: LE Set Extended Scan Enable (0x08|0x0042) plen 6
Extended scan: Enabled (0x01)
Filter duplicates: Enabled (0x01)
Duration: 0 msec (0x0000)
Period: 0.00 sec (0x0000)
> HCI Event: Command Complete (0x0e) plen 4
LE Set Extended Scan Enable (0x08|0x0042) ncmd 1
Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 16
LE Periodic Advertising Sync Established (0x0e)
Status: Success (0x00)
Sync handle: 0
Advertising SID: 0x00
Advertiser address type: Random (0x01)
Advertiser address: 36:13:00:E1:1B:F0 (Non-Resolvable)
Advertiser PHY: LE 2M (0x02)
Periodic advertising interval: 10.00 msec (0x0008)
Advertiser clock accuracy: 0x00
> HCI Event: LE Meta Event (0x3e) plen 8
LE Periodic Advertising Report (0x0f)
Sync handle: 0
TX power: 127 dbm (0x7f)
RSSI: -47 dBm (0xd1)
CTE Type: No Constant Tone Extension (0xff)
Data status: Complete
Data length: 0x00
> HCI Event: LE Meta Event (0x3e) plen 20
LE Broadcast Isochronous Group Info Advertising Report (0x22)
Sync Handle: 0x0000
Number BIS: 2
NSE: 3
ISO Interval: 10.00 msec (0x0008)
BN: 1
PTO: 1
IRC: 3
Maximum PDU: 40
SDU Interval: 10000 us (0x002710)
Maximum SDU: 40
PHY: LE 2M (0x02)
Framing: Unframed (0x00)
Encryption: 0x00
< HCI Command: LE Broadcast Isochronous Group Create Sync (0x08|0x006b) plen 26
BIG Handle: 0x01
BIG Sync Handle: 0x0000
Encryption: Unencrypted (0x00)
Broadcast Code:
00000000000000000000000000000000
Maximum Number Subevents: 0x00
Timeout: 163840 ms (0x4000)
Number of BIS: 2
BIS ID: 0x01
BIS ID: 0x02
> HCI Event: LE Meta Event (0x3e) plen 19
LE Broadcast Isochronous Group Sync Estabilished (0x1d)
Status: Success (0x00)
BIG Handle: 0x01
Transport Latency: 1974 us (0x0007b6)
NSE: 3
BN: 1
PTO: 1
IRC: 3
Maximum PDU: 40
ISO Interval: 10.00 msec (0x0008)
Connection Handle #0: 10
Connection Handle #1: 11
< HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13
Handle: 10
Data Path Direction: Output (Controller to Host) (0x01)
Data Path: HCI (0x00)
Coding Format: Transparent (0x03)
Company Codec ID: Ericsson Technology Licensing (0)
Vendor Codec ID: 0
Controller Delay: 0 us (0x000000)
Codec Configuration Length: 0
Codec Configuration:
> HCI Event: Command Complete (0x0e) plen 6
LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
Status: Success (0x00)
Handle: 10
< HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13
Handle: 11
Data Path Direction: Output (Controller to Host) (0x01)
Data Path: HCI (0x00)
Coding Format: Transparent (0x03)
Company Codec ID: Ericsson Technology Licensing (0)
Vendor Codec ID: 0
Controller Delay: 0 us (0x000000)
Codec Configuration Length: 0
Codec Configuration:
> HCI Event: Command Complete (0x0e) plen 6
LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
Status: Success (0x00)
Handle: 11
> ISO Data RX: Handle 10 flags 0x06 dlen 48
> ISO Data RX: Handle 11 flags 0x06 dlen 48
Pauli Virtanen [Sun, 28 May 2023 17:39:16 +0000 (17:39 +0000)]
test-runner: enable no_hash_pointers=1
Set no_hash_pointers=1 to avoid printk printing "___ptrval___" for %p.
This happens with test-runner since the kernel is not running long
enough to gather entropy and so refuses to print addresses, and makes
debugging harder. As test-runner is only used for testing and
debugging, pointer hashing is not needed.
Pauli Virtanen [Sun, 28 May 2023 17:39:15 +0000 (17:39 +0000)]
btdev: check LE Create CIS error conditions
Check LE Create CIS input parameter are valid and return correct status
codes (Core v5.3 Vol 4 Part E Sec. 7.8.99).
On current bluetooth-next kernel, this results to
ISO AC 6(i) - Success Failed
ISO AC 7(i) - Success Failed
ISO AC 8(i) - Success Failed
ISO AC 9(i) - Success Failed
ISO AC 11(i) - Success Failed
as in these tests the kernel is sending new Create CIS commands before
it has seen all events from the previous, which is not allowed:
< HCI Command: LE Create Co.. (0x08|0x0064) plen 9 #129 [hci0]
Number of CIS: 2
CIS Handle: 257
ACL Handle: 42
CIS Handle: 258
ACL Handle: 42
> HCI Event: Command Status (0x0f) plen 4 #130 [hci0]
LE Create Connected Isochronous Stream (0x08|0x0064) ncmd 1
Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 29 #131 [hci0]
LE Connected Isochronous Stream Established (0x19)
Status: Success (0x00)
Connection Handle: 257
...
< HCI Command: LE Setup Is.. (0x08|0x006e) plen 13 #132 [hci0]
...
> HCI Event: Command Complete (0x0e) plen 6 #133 [hci0]
LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
...
< HCI Command: LE Create Co.. (0x08|0x0064) plen 5 #134 [hci0]
Number of CIS: 1
CIS Handle: 258
ACL Handle: 42
> HCI Event: Command Status (0x0f) plen 4 #135 [hci0]
LE Create Connected Isochronous Stream (0x08|0x0064) ncmd 1
Status: ACL Connection Already Exists (0x0b)
> HCI Event: LE Meta Event (0x3e) plen 29 #136 [hci0]
LE Connected Isochronous Stream Established (0x19)
Status: Success (0x00)
Connection Handle: 258
...
The emulator uses Already Exists error code here, not Command
Disallowed, since the Established events are logically generated
immediately after the first status event, even though the kernel hasn't
yet processed them.
Pauli Virtanen [Sun, 28 May 2023 17:39:14 +0000 (17:39 +0000)]
btdev: fix inactive CIG configurable status
CIG shall not be configurable after the first Create CIS until Remove
CIG is issued (Core v5.3 Vol 6 Part B Sec. 4.5.14.3). We currently have
it configurable in the inactive state (Create CIS done and all CIS
closed), which is incorrect.
Track CIG state and allow reconfigure only in nonexistent/configured
state, i.e., when no CIS have been created yet.
Pauli Virtanen [Sun, 28 May 2023 17:39:13 +0000 (17:39 +0000)]
iso-tester: Add tests for AC configuration reconnect
Add test for reconnecting a CIG with two CIS, either both with same peer
or with different peers.
ISO Reconnect AC 6(i) - Success
ISO Reconnect AC 6(ii) - Success
Silviu Florian Barbulescu [Thu, 25 May 2023 15:34:50 +0000 (18:34 +0300)]
btio: Add support for setsockopt (BT_IO_OPT_BASE)
This adds btio support for setting the BT_IO_OPT_BASE socket option.
Silviu Florian Barbulescu [Thu, 25 May 2023 15:34:48 +0000 (18:34 +0300)]
lib: Add macro definitions for BAP broadcast source support
This adds macro definitions for BAP broadcast source support.
Silviu Florian Barbulescu [Thu, 25 May 2023 15:34:49 +0000 (18:34 +0300)]
monitor: Decode broadcast bits of MGMT settings
This adds bits for broadcast support to mgmt_settings_table.
Silviu Florian Barbulescu [Thu, 25 May 2023 15:34:47 +0000 (18:34 +0300)]
doc: Update Docs for BAP broadcast source
This adds broadcast properties to the SetConfiguration method and
bits for Broadcast support to the Supported_Settings bitmask.
Luiz Augusto von Dentz [Thu, 25 May 2023 20:30:42 +0000 (13:30 -0700)]
monitor: Print process information
This prints the process information when available:
bluetoothd[35]: @ MGMT Command: Rea.. (0x0001) plen 0 {0x0001}
@ MGMT Event: Command Complete (0x0001) plen 6 {0x0001}
Read Management Version Information (0x0001) plen 3
Luiz Augusto von Dentz [Tue, 23 May 2023 20:48:05 +0000 (13:48 -0700)]
monitor: Add latency information per channel
This attempts to print latency information per channel in addition to
per connection/handle:
> HCI Event: Number of Completed Packets (0x13) plen 5
Num handles: 1
Handle: 256 Address: XX:XX:XX:XX:XX:XX
Count: 1
Latency: 15 msec (3-39 msec ~18 msec)
Channel: 68 [PSM 25 mode Basic (0x00)] {chan 2}
Channel Latency: 15 msec (6-35 msec ~18 msec)
Luiz Augusto von Dentz [Tue, 23 May 2023 17:47:09 +0000 (10:47 -0700)]
iso-tester: Make QoS parameters reflect the tests names
AC 1 + 2 tests shall use their respective QoS parameters.
Pauli Virtanen [Sun, 21 May 2023 15:27:38 +0000 (15:27 +0000)]
iso-tester: Add tests for AC 1 + 2
Add tests connecting two CIS using different CIG_ID, with fixed and
auto-allocated IDs.
ISO AC 1 + 2 - Success
ISO AC 1 + 2 CIG 0x01/0x02 - Success
The CIS are connected sequentially so that the first is closed after the
second is connected. In the auto/auto case the kernel shall pick a new
CIG_ID since the first CIG_ID is no longer in a configurable state.
Pauli Virtanen [Sun, 21 May 2023 15:27:37 +0000 (15:27 +0000)]
btdev: report right reason for local Disconnect complete
Disconnect initiated by local host should get Connection Terminated by
Local Host (0x16) as termination reason.
Pauli Virtanen [Sun, 21 May 2023 15:27:36 +0000 (15:27 +0000)]
btdev: support multiple CIG
Add support for more than one CIG simultaneously.
Pauli Virtanen [Sun, 21 May 2023 15:27:35 +0000 (15:27 +0000)]
shared/tester: retain test failure status
If a test has called tester_test_failed, consider the test failed, even
if the test also called tester_test_passed/abort.
This avoids reporting success for misbehaving tests that call the
status report functions multiple times.
Pauli Virtanen [Sun, 21 May 2023 15:27:34 +0000 (15:27 +0000)]
iso-tester: always use DEFER_SETUP for multiple CIS in same CIG
There is a race between multiple connect() for CIS in the same CIG.
connect() will both reconfigure the CIG and connect the CIS, but CIG
cannot be reconfigured once one CIS has already connected. That these
tests pass currently relies on some timing/event ordering in the
emulator.
Connecting multiple CIS in same CIG is meant to be done using
DEFER_SETUP, so change the tests to use it, so we test the intended
usage.
Luiz Augusto von Dentz [Thu, 18 May 2023 23:14:49 +0000 (16:14 -0700)]
monitor: Add latency when decoding BT_HCI_EVT_NUM_COMPLETED_PACKETS
This adds latency, min-max, and median information when decoding
BT_HCI_EVT_NUM_COMPLETED_PACKETS so it works similarly to --analyze:
> HCI Event: Number of Completed Packets (0x13) plen 5
Num handles: 1
Handle: 256 Address: XX:XX:XX:XX:XX:XX
Count: 1
Latency: 23 msec (2-66 msec ~19 msec)
Luiz Augusto von Dentz [Thu, 18 May 2023 16:53:12 +0000 (09:53 -0700)]
monitor: Fix not parsing BT_HCI_EVT_NUM_COMPLETED_PACKETS properly
BT_HCI_EVT_NUM_COMPLETED_PACKETS may contain multiple handles but the
code was just parsing the very first one.
Luiz Augusto von Dentz [Wed, 17 May 2023 21:27:14 +0000 (14:27 -0700)]
monitor: Fix using PACKET_FILTER_SHOW_SCO_DATA for ISO packets
This fixes the uses of PACKET_FILTER_SHOW_SCO_DATA for ISO packets and
introduce a dedicated flag for it in the form of
PACKET_FILTER_SHOW_ISO_DATA which can be enabled with use of -I/--iso.
Pauli Virtanen [Sat, 13 May 2023 16:08:37 +0000 (16:08 +0000)]
tools/test-runner: add option to start Pipewire inside the VM
Add option for launching Pipewire inside the VM to serve Bluetooth
endpoints, which can be used in tests.
Make the option to optionally take path to the audio daemon, so e.g.
Pulseaudio support can be added later.
Pauli Virtanen [Sat, 13 May 2023 16:08:36 +0000 (16:08 +0000)]
test-runner: revert udevd and audio support
Tests running inside the VM don't need access to sound cards running on
the host.
This reverts commit
91a48af52efb0751fab396b2b9026c9186b10b88
This reverts commit
e20e7e0b05c7edb74255c9b092916ac5bb99c97f
Luiz Augusto von Dentz [Tue, 16 May 2023 17:05:05 +0000 (10:05 -0700)]
main: Rework config option parsing
This rework config option parsing adding helper function to make it
simpler to parse new options.
Luiz Augusto von Dentz [Tue, 16 May 2023 17:12:19 +0000 (10:12 -0700)]
admin: Mark driver as experimental
This uses the btd_profile.experimental to mark the driver as
experimental.
Luiz Augusto von Dentz [Tue, 16 May 2023 17:33:24 +0000 (10:33 -0700)]
adapter: Add support for experimental flag
This adds experimental field to btd_adapter_driver so the plugin can
indicate drivers that depends on experimental to be enabled.
Luiz Augusto von Dentz [Mon, 15 May 2023 21:02:33 +0000 (14:02 -0700)]
plugin: Treat -ENOTSUP as -ENOSYS
If plugin .init returns -ENOTSUP treat it as the system doesn't
support the driver since that is the error returned by
btd_profile_register when experimental is disabled.
Luiz Augusto von Dentz [Mon, 15 May 2023 21:01:28 +0000 (14:01 -0700)]
vcp: Mark driver as experimental
This uses the btd_profile.experimental to mark the driver as
experimental.
Luiz Augusto von Dentz [Mon, 15 May 2023 20:51:15 +0000 (13:51 -0700)]
csip: Mark driver as experimental
This uses the btd_profile.experimental to mark the driver as
experimental.
Luiz Augusto von Dentz [Mon, 15 May 2023 20:50:47 +0000 (13:50 -0700)]
bass: Mark driver as experimental
This uses the btd_profile.experimental to mark the driver as
experimental.
Luiz Augusto von Dentz [Mon, 15 May 2023 20:49:27 +0000 (13:49 -0700)]
bap: Mark driver as experimental
This uses the btd_profile.experimental to mark the driver as
experimental.
Luiz Augusto von Dentz [Mon, 15 May 2023 20:22:51 +0000 (13:22 -0700)]
profile: Add support for experimental flag
This adds experimental field to btd_profile so the plugin can indicate
drivers that depends on experimental to be enabled.
Luiz Augusto von Dentz [Thu, 11 May 2023 23:43:34 +0000 (16:43 -0700)]
client/player: Add codec as parameter to endpoint.presets
This changes endpoint.presets command to take codec as parameter.
Luiz Augusto von Dentz [Thu, 11 May 2023 20:23:40 +0000 (13:23 -0700)]
client/player: Fix not checking for SupportedUUIDs
When registering an endpoint it should always check for SupportedUUIDs.
Luiz Augusto von Dentz [Thu, 16 Mar 2023 23:33:07 +0000 (16:33 -0700)]
client/player: Add support to Max Transports in endpoint.register
[bluetooth]# endpoint.register
00002bc9-0000-1000-8000-
00805f9b34fb 0x06
[/local/endpoint/ep0] Auto Accept (yes/no): y
[/local/endpoint/ep0] Max Transports (auto/value): 1
[/local/endpoint/ep0] CIG (auto/value): a
[/local/endpoint/ep0] CIS (auto/value): a
Luiz Augusto von Dentz [Wed, 10 May 2023 23:54:54 +0000 (16:54 -0700)]
shared/bap: Fix not sending ASE Receiver Stop Ready
This fixes not sending ASE Receiver Stop Ready if stream is on disabling
state when CIS is disconnected.
Fixes: https://github.com/bluez/bluez/issues/516
Luiz Augusto von Dentz [Wed, 10 May 2023 23:29:55 +0000 (16:29 -0700)]
client/player: Fix crashes accessing metadata
If metadata is not set the respective iovec is left NULL so it needs to
be checked before accessing its fields.
Inga Stotland [Fri, 5 May 2023 19:39:31 +0000 (12:39 -0700)]
mesh: Update the behavior of --io option
This aligns the behavior of command line option --io to
add new "auto" value and modify the behavior of "generic"
value:
*auto* - Use first available controller: via MGMT interface
if kernel supports it, otherwise, via raw HCI socket (i.e.,
default to *generic*).
*generic:[hci]<index>* - Use generic HCI io on interface hci<index>
The default value is now *auto*, whereas *generic* is used
only if the specific HCI controller is explicitly specified.
Luiz Augusto von Dentz [Tue, 9 May 2023 21:07:42 +0000 (14:07 -0700)]
monitor/intel: Skip packet/error counters if 0
This skips printing TLVs related to packet/error count if they are 0 and
also update the missing TLVs:
> HCI Event: Vendor (0xff) plen 188
Vendor Prefix (0x8780)
Intel Extended Telemetry (0x03)
Extended event type (0x01): Perform Stats (0x05)
ACL connection handle (0x4a): 0x0100
Rx HEC errors (0x4b): 3
Packets from host (0x4d): 375
Tx packets (0x4e): 375
Tx packets 0 retries (0x4f): 354
Tx packets 1 retries (0x50): 20
Tx packets 3 retries (0x52): 1
Tx 3DH5 packets (0x5c): 375
Rx packets (0x5d): 400
ACL link throughput (bps) (0x5e): 533419
ACL max packet latency (us) (0x5f): 36875
ACL avg packet latency (us) (0x60): 19441
ACL RX RSSI moving avg (0x61): 65329
ACL RX SNR Bad Margin Counter (0x62): 1M 59 2M 0 3M 0
ACL RX RSSI Bad Counter (0x63): 1M 1711 2M 0 3M 0
ACL TX RSSI Bad Counter (0x64): 1M 1024 2M 0 3M 0
Luiz Augusto von Dentz [Tue, 9 May 2023 20:59:42 +0000 (13:59 -0700)]
monitor/intel: Fix not skipping unknown TLV types
The code was stopping at first time it detected an unknown TLV type when
it could continue:
> HCI Event: Vendor (0xff) plen 82
Vendor Prefix (0x8780)
Intel Extended Telemetry (0x03)
Extended event type (0x01): Audio Link Quality Report Type (0x05)
Unknown extended subevent 0x81
01 01 05 81 04 88 13 00 00 82 10 6a e6 6c 00 00 ...........j.l..
00 00 00 4b 45 53 00 00 00 00 00 83 04 00 00 00 ...KES..........
00 84 04 01 03 07 19 85 04 3f 08 00 00 86 08 00 .........?......
00 00 00 00 00 00 00 87 04 00 00 00 00 88 04 00 ................
00 00 00 89 04 00 00 00 00 8a 04 b9 49 0c 00 ............I..
So this changes it to:
> HCI Event: Vendor (0xff) plen 82
Vendor Prefix (0x8780)
Intel Extended Telemetry (0x03)
Extended event type (0x01): Audio Link Quality Report Type (0x05)
Unknown extended subevent 0x81
88 13 00 00 ....
Unknown extended subevent 0x82
04 97 6c 00 00 00 00 00 68 44 53 00 00 00 00 00 ..l.....hDS.....
Unknown extended subevent 0x83
00 00 00 00 ....
Unknown extended subevent 0x84
01 03 07 19 ....
Unknown extended subevent 0x85
3a 08 00 00 :...
Unknown extended subevent 0x86
00 00 00 00 00 00 00 00 ........
Unknown extended subevent 0x87
00 00 00 00 ....
Unknown extended subevent 0x88
00 00 00 00 ....
Unknown extended subevent 0x89
00 00 00 00 ....
Unknown extended subevent 0x8a
9f 1a 2f 00 ../.
Luiz Augusto von Dentz [Fri, 5 May 2023 20:20:25 +0000 (13:20 -0700)]
monitor: Fix misaligment errors
This fixes the following errors:
monitor/packet.c:11968:27: runtime error: member access within
misaligned address 0x565448026d55 for type
'const struct monitor_l2cap_hdr', which requires 2 byte alignment
monitor/packet.c:11968:4: runtime error: member access within
misaligned address 0x565448026d55 for type
'const struct monitor_l2cap_hdr', which requires 2 byte alignment
Luiz Augusto von Dentz [Fri, 5 May 2023 00:07:44 +0000 (17:07 -0700)]
monitor/att: Attempt to insert discovered attributes
This attempts to insert discovered attributes into monitor gatt_db
instance if their respective discover procedures are used which enables
decoding traces injected by user via unit testing:
> sudo unit/test-bap -m -s "34
= test-bap: BAP/UCL/SCC/BV-034-C [UCL SNK Config Codec, VS] - run
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x0003 Type: Sink PAC (0x2bc9)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 8
Handle: 0x0003 Type: Sink PAC (0x2bc9)
Value:
01ff010001000000
Number of PAC(s): 1
PAC #0:
Codec: Vendor specific (0xff)
Codec Company ID: Nokia Mobile Phones (0x0001)
Codec Vendor ID: 0x0001
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x0006 Type: Sink Audio Locations (0x2bca)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 4
Handle: 0x0006 Type: Sink Audio Locations (0x2bca)
Value:
03000000
Location: 0x00000003
Front Left (0x00000001)
Front Right (0x00000002)
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x0009 Type: Source PAC (0x2bcb)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 8
Handle: 0x0009 Type: Source PAC (0x2bcb)
Value:
01ff010001000000
Number of PAC(s): 1
PAC #0:
Codec: Vendor specific (0xff)
Codec Company ID: Nokia Mobile Phones (0x0001)
Codec Vendor ID: 0x0001
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x000c Type: Source Audio Locations (0x2bcc)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 4
Handle: 0x000c Type: Source Audio Locations (0x2bcc)
Value:
03000000
Location: 0x00000003
Front Left (0x00000001)
Front Right (0x00000002)
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x000f Type: Available Audio Contexts (0x2bcd)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 4
Handle: 0x000f Type: Available Audio Contexts (0x2bcd)
Value:
ff0f0e00
Sink Context: 0x0fff
Unspecified (0x0001)
Conversational (0x0002)
Media (0x0004)
Game (0x0008)
Instructional (0x0010)
Voice Assistants (0x0020)
Live (0x0040)
Sound Effects (0x0080)
Notifications (0x0100)
Ringtone (0x0200)
Alerts (0x0400)
Emergency alarm (0x0800)
Source Context: 0x000e
Conversational (0x0002)
Media (0x0004)
Game (0x0008)
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x0012 Type: Supported Audio Contexts (0x2bce)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 4
Handle: 0x0012 Type: Supported Audio Contexts (0x2bce)
Value:
ff0f0e00
Sink Context: 0x0fff
Unspecified (0x0001)
Conversational (0x0002)
Media (0x0004)
Game (0x0008)
Instructional (0x0010)
Voice Assistants (0x0020)
Live (0x0040)
Sound Effects (0x0080)
Notifications (0x0100)
Ringtone (0x0200)
Alerts (0x0400)
Emergency alarm (0x0800)
Source Context: 0x000e
Conversational (0x0002)
Media (0x0004)
Game (0x0008)
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x0016 Type: Sink ASE (0x2bc4)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 2
Handle: 0x0016 Type: Sink ASE (0x2bc4)
Value: 0100
ASE ID: 1
State: Idle (0x00)
> test-bap: User Data RX
ATT: Write Request (0x12) len 4
Handle: 0x0017
Data: 0100
< test-bap: User Data TX
ATT: Write Response (0x13) len 0
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x0019 Type: Sink ASE (0x2bc4)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 2
Handle: 0x0019 Type: Sink ASE (0x2bc4)
Value: 0200
ASE ID: 2
State: Idle (0x00)
> test-bap: User Data RX
ATT: Write Request (0x12) len 4
Handle: 0x001a
Data: 0100
< test-bap: User Data TX
ATT: Write Response (0x13) len 0
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x001c Type: Source ASE (0x2bc5)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 2
Handle: 0x001c Type: Source ASE (0x2bc5)
Value: 0300
ASE ID: 3
State: Idle (0x00)
> test-bap: User Data RX
ATT: Write Request (0x12) len 4
Handle: 0x001d
Data: 0100
< test-bap: User Data TX
ATT: Write Response (0x13) len 0
> test-bap: User Data RX
ATT: Read Request (0x0a) len 2
Handle: 0x001f Type: Source ASE (0x2bc5)
< test-bap: User Data TX
ATT: Read Response (0x0b) len 2
Handle: 0x001f Type: Source ASE (0x2bc5)
Value: 0400
ASE ID: 4
State: Idle (0x00)
> test-bap: User Data RX
ATT: Write Request (0x12) len 4
Handle: 0x0020
Data: 0100
< test-bap: User Data TX
ATT: Write Response (0x13) len 0
> test-bap: User Data RX
ATT: Write Request (0x12) len 4
Handle: 0x0023
Data: 0100
< test-bap: User Data TX
ATT: Write Response (0x13) len 0
> test-bap: User Data RX
ATT: Write Command (0x52) len 13
Handle: 0x0022 Type: ASE Control Point (0x2bc6)
Data:
0101030202ff0100010000
Opcode: Codec Configuration (0x01)
Number of ASE(s): 1
ASE: #0
ASE ID: 0x03
Target Latency: Balance Latency/Reliability (0x02)
PHY: 0x02
LE 2M PHY (0x02)
Codec: Vendor specific (0xff)
Codec Company ID: Nokia Mobile Phones (0x0001)
Codec Vendor ID: 0x0001
< test-bap: User Data TX
ATT: Handle Value Notification (0x1b) len 7
Handle: 0x0022 Type: ASE Control Point (0x2bc6)
Data:
0101030000
Opcode: Codec Configuration (0x01)
Number of ASE(s): 1
ASE: #0
ASE ID: 0x03
ASE Response Code: Success (0x00)
ASE Response Reason: None (0x00)
< test-bap: User Data TX
ATT: Handle Value Notification (0x1b) len 27
Handle: 0x001c Type: Source ASE (0x2bc5)
Data: 03010102010a00204e00409c00204e00409c00ff0100010000
ASE ID: 3
State: Codec Configured (0x01)
Framing: Unframed PDUs not supported (0x01)
PHY: 0x02
LE 2M PHY preffered (0x02)
RTN: 1
Max Transport Latency: 10
Presentation Delay Min: 20000 us
Presentation Delay Max: 40000 us
Preferred Presentation Delay Min: 20000 us
Preferred Presentation Delay Max: 40000 us
Codec: Vendor specific (0xff)
Codec Company ID: Nokia Mobile Phones (0x0001)
Codec Vendor ID: 0x0001
Iulia Tanasescu [Fri, 5 May 2023 08:29:43 +0000 (11:29 +0300)]
profiles: Add initial code for BASS plugin
This adds initial code for BASS plugin.
Iulia Tanasescu [Fri, 5 May 2023 08:29:42 +0000 (11:29 +0300)]
shared/bass: Add initial code for handling BASS
This adds initial code for Broadcast Audio Scan Service.
Iulia Tanasescu [Fri, 5 May 2023 08:29:41 +0000 (11:29 +0300)]
shared/util: Add iovec helpers
This adds iovec helper functions for handling byteorder and alignment
in place.
Iulia Tanasescu [Fri, 5 May 2023 08:29:40 +0000 (11:29 +0300)]
shared/att-types: Add BT_ERROR_WRITE_REQUEST_REJECTED error code
This adds Write Request Rejected Common Profile and Service
Error Code.
Iulia Tanasescu [Fri, 5 May 2023 08:29:39 +0000 (11:29 +0300)]
lib/uuid: Add BASS UUIDs
This adds BASS UUIDs which will be used by Basic Audio Profile.
Luiz Augusto von Dentz [Mon, 1 May 2023 22:42:49 +0000 (15:42 -0700)]
shared/shell: Fix smatch warning
This fixes the following warning:
src/shared/shell.c:615:21: warning: non-ANSI function declaration of
function 'bt_shell_usage'
Luiz Augusto von Dentz [Mon, 1 May 2023 19:59:57 +0000 (12:59 -0700)]
shared/shell: Fix not releasing prompt
This fixes not releasing prompt when queueing a line to be executed
since it can be considered as user input if the init script is
attempting to enter it as response to prompt input.
Luiz Augusto von Dentz [Mon, 1 May 2023 19:27:20 +0000 (12:27 -0700)]
client/player: Fix crash when RegisterEndpoint fails
If RegisterEndpoint fails when there are multiple adapters it would
attempt to free the same endpoint multiple times.
Abhay Maheta [Thu, 29 Dec 2022 15:53:05 +0000 (21:23 +0530)]
client/player: Add support for Metadata in BAP Profile
This adds support for Metadata in BAP profile.
In order to register zero Metadata, 0 shall be
entered when prompted.
[bluetooth]# endpoint.register
00002bc9-0000-1000-8000-
00805f9b34fb 0x06
[/local/endpoint/ep0] Enter Metadata (value/no): n
[/local/endpoint/ep0] Auto Accept (yes/no): y
[/local/endpoint/ep0] CIG (auto/value): a
[/local/endpoint/ep0] CIS (auto/value): a
Capabilities:
03 01 ff 00 02 02 03 02 03 03 05 04 1e 00 f0 00 ................
Endpoint /local/endpoint/ep0 registered
Luiz Augusto von Dentz [Thu, 27 Apr 2023 19:07:07 +0000 (12:07 -0700)]
test-bap: Add SCC tests for Vendor-Specific codec
4.8.2 Unicast Client Initiates a Config Codec Operation –
Vendor-Specific (page 42):
Test Purpose:
Verify that a Unicast Client IUT can initiate a Config Codec
operation for a vendor-specific codec.
Test Case Configuration:
BAP/UCL/SCC/BV-033-C [UCL SRC Config Codec, VS]
BAP/UCL/SCC/BV-034-C [UCL SNK Config Codec, VS]
Pass verdict:
The IUT successfully writes to the ASE Control Point characteristic
with the opcode set to 0x01 (Config Codec) and the specified
parameters. The Codec_ID parameter is formatted with octet 0 set to
0xFF, octets 1–2 set to TSPX_VS_Company_ID, and octets 3–4 set to
TSPX_VS_Codec_ID.
Test Summary
------------
BAP/UCL/SCC/BV-033-C [UCL SRC Config Codec, VS] Passed
BAP/UCL/SCC/BV-034-C [UCL SNK Config Codec, VS] Passed
Total: 2, Passed: 2 (100.0%), Failed: 0, Not Run: 0
Luiz Augusto von Dentz [Thu, 27 Apr 2023 19:02:52 +0000 (12:02 -0700)]
shared/util: Fix runtime error
This fixes the following errors:
src/shared/util.c:271:2: runtime error: null pointer passed as argument
2, which is declared to never be null
Luiz Augusto von Dentz [Tue, 25 Apr 2023 20:44:02 +0000 (13:44 -0700)]
test-bap: Introduce SCC tests for LC3
4.8.1 Unicast Client Initiates a Config Codec Operation – LC3
(Page 39):
Test Purpose:
Verify that a Unicast Client IUT can initiate a Config Codec
operation for an LC3 codec.
Test Case Configuration:
BAP/UCL/SCC/BV-001-C [UCL SRC Config Codec, LC3 8_1]
BAP/UCL/SCC/BV-002-C [UCL SRC Config Codec, LC3 8_2]
BAP/UCL/SCC/BV-003-C [UCL SRC Config Codec, LC3 16_1]
BAP/UCL/SCC/BV-004-C [UCL SRC Config Codec, LC3 16_2]
BAP/UCL/SCC/BV-005-C [UCL SRC Config Codec, LC3 24_1]
BAP/UCL/SCC/BV-006-C [UCL SRC Config Codec, LC3 24_2]
BAP/UCL/SCC/BV-007-C [UCL SRC Config Codec, LC3 32_1]
BAP/UCL/SCC/BV-008-C [UCL SRC Config Codec, LC3 32_2]
BAP/UCL/SCC/BV-009-C [UCL SRC Config Codec, LC3 44.1_1]
BAP/UCL/SCC/BV-010-C [UCL SRC Config Codec, LC3 44.1_2]
BAP/UCL/SCC/BV-011-C [UCL SRC Config Codec, LC3 48_1]
BAP/UCL/SCC/BV-012-C [UCL SRC Config Codec, LC3 48_2]
BAP/UCL/SCC/BV-013-C [UCL SRC Config Codec, LC3 48_3]
BAP/UCL/SCC/BV-014-C [UCL SRC Config Codec, LC3 48_4]
BAP/UCL/SCC/BV-015-C [UCL SRC Config Codec, LC3 48_5]
BAP/UCL/SCC/BV-016-C [UCL SRC Config Codec, LC3 48_6]
BAP/UCL/SCC/BV-017-C [UCL SNK Config Codec, LC3 8_1]
BAP/UCL/SCC/BV-018-C [UCL SNK Config Codec, LC3 8_2]
BAP/UCL/SCC/BV-019-C [UCL SNK Config Codec, LC3 16_1]
BAP/UCL/SCC/BV-020-C [UCL SNK Config Codec, LC3 16_2]
BAP/UCL/SCC/BV-021-C [UCL SNK Config Codec, LC3 24_1]
BAP/UCL/SCC/BV-022-C [UCL SNK Config Codec, LC3 24_2]
BAP/UCL/SCC/BV-023-C [UCL SNK Config Codec, LC3 32_1]
BAP/UCL/SCC/BV-024-C [UCL SNK Config Codec, LC3 32_2]
BAP/UCL/SCC/BV-025-C [UCL SNK Config Codec, LC3 44.1_1]
BAP/UCL/SCC/BV-026-C [UCL SNK Config Codec, LC3 44.1_2]
BAP/UCL/SCC/BV-027-C [UCL SNK Config Codec, LC3 48_1]
BAP/UCL/SCC/BV-028-C [UCL SNK Config Codec, LC3 48_2]
BAP/UCL/SCC/BV-029-C [UCL SNK Config Codec, LC3 48_3]
BAP/UCL/SCC/BV-030-C [UCL SNK Config Codec, LC3 48_4]
BAP/UCL/SCC/BV-031-C [UCL SNK Config Codec, LC3 48_5]
BAP/UCL/SCC/BV-032-C [UCL SNK Config Codec, LC3 48_6]
Pass verdict:
The IUT successfully writes to the ASE Control point with the opcode
set to 0x01 (Config Codec) and correctly formatted parameter values
from Table 4.9.
The Codec_ID field is a 5-octet field with octet 0 set to the LC3
Coding_Format value defined in Bluetooth Assigned Numbers, octets 1–4
set to 0x0000.
Test Summary
------------
BAP/UCL/SCC/BV-001-C [UCL SRC Config Codec, LC3 8_1] Passed
BAP/UCL/SCC/BV-002-C [UCL SRC Config Codec, LC3 8_2] Passed
BAP/UCL/SCC/BV-003-C [UCL SRC Config Codec, LC3 16_1] Passed
BAP/UCL/SCC/BV-004-C [UCL SRC Config Codec, LC3 16_2] Passed
BAP/UCL/SCC/BV-005-C [UCL SRC Config Codec, LC3 24_1] Passed
BAP/UCL/SCC/BV-006-C [UCL SRC Config Codec, LC3 24_2] Passed
BAP/UCL/SCC/BV-007-C [UCL SRC Config Codec, LC3 32_1] Passed
BAP/UCL/SCC/BV-008-C [UCL SRC Config Codec, LC3 32_2] Passed
BAP/UCL/SCC/BV-009-C [UCL SRC Config Codec, LC3 44.1_1] Passed
BAP/UCL/SCC/BV-010-C [UCL SRC Config Codec, LC3 44.1_2] Passed
BAP/UCL/SCC/BV-011-C [UCL SRC Config Codec, LC3 48_1] Passed
BAP/UCL/SCC/BV-012-C [UCL SRC Config Codec, LC3 48_2] Passed
BAP/UCL/SCC/BV-013-C [UCL SRC Config Codec, LC3 48_3] Passed
BAP/UCL/SCC/BV-014-C [UCL SRC Config Codec, LC3 48_4] Passed
BAP/UCL/SCC/BV-015-C [UCL SRC Config Codec, LC3 48_5] Passed
BAP/UCL/SCC/BV-016-C [UCL SRC Config Codec, LC3 48_6] Passed
BAP/UCL/SCC/BV-017-C [UCL SNK Config Codec, LC3 8_1] Passed
BAP/UCL/SCC/BV-018-C [UCL SNK Config Codec, LC3 8_2] Passed
BAP/UCL/SCC/BV-019-C [UCL SNK Config Codec, LC3 16_1] Passed
BAP/UCL/SCC/BV-020-C [UCL SNK Config Codec, LC3 16_2] Passed
BAP/UCL/SCC/BV-021-C [UCL SNK Config Codec, LC3 24_1] Passed
BAP/UCL/SCC/BV-022-C [UCL SNK Config Codec, LC3 24_2] Passed
BAP/UCL/SCC/BV-023-C [UCL SNK Config Codec, LC3 32_1] Passed
BAP/UCL/SCC/BV-024-C [UCL SNK Config Codec, LC3 32_2] Passed
BAP/UCL/SCC/BV-025-C [UCL SNK Config Codec, LC3 44.1_1] Passed
BAP/UCL/SCC/BV-026-C [UCL SNK Config Codec, LC3 44.1_2] Passed
BAP/UCL/SCC/BV-027-C [UCL SNK Config Codec, LC3 48_1] Passed
BAP/UCL/SCC/BV-028-C [UCL SNK Config Codec, LC3 48_2] Passed
BAP/UCL/SCC/BV-029-C [UCL SNK Config Codec, LC3 48_3] Passed
BAP/UCL/SCC/BV-030-C [UCL SNK Config Codec, LC3 48_4] Passed
BAP/UCL/SCC/BV-031-C [UCL SNK Config Codec, LC3 48_5] Passed
BAP/UCL/SCC/BV-032-C [UCL SNK Config Codec, LC3 48_6] Passed
Total: 32, Passed: 32 (100.0%), Failed: 0, Not Run: 0
Luiz Augusto von Dentz [Tue, 25 Apr 2023 20:40:42 +0000 (13:40 -0700)]
shared/lc3: Update configuration to use iovec
This use iovec as expected storage for capabilities and configuration
so it is inline with what bluetoothctl has been using making it simpler
to reuse these definitions.
Luiz Augusto von Dentz [Tue, 25 Apr 2023 20:38:40 +0000 (13:38 -0700)]
shared/bap: Fix typo
Fix typo s/BT_BAP_CONFIG_LATENCY_BALACED/BT_BAP_CONFIG_LATENCY_BALANCED
Luiz Augusto von Dentz [Tue, 25 Apr 2023 00:15:00 +0000 (17:15 -0700)]
shared/tester: Add support for NULL PDUs
This adds support for NULL PDUs which can be used to skip a round of
TX/RX.
Luiz Augusto von Dentz [Mon, 24 Apr 2023 23:30:31 +0000 (16:30 -0700)]
share/bap: Fix not removing timeout on bap_free
This fixes not removing the process_id timeout when freeing the session
which can cause the following crash:
Invalid read of size 8
at 0x18EB39: bap_debug (bap.c:553)
by 0x1913A8: bap_process_queue (bap.c:3542)
by 0x1A8630: timeout_callback (timeout-glib.c:25)
Address 0x55e0650 is 128 bytes inside a block of size 160 free'd
at 0x48480E4: free (vg_replace_malloc.c:872)
Luiz Augusto von Dentz [Mon, 24 Apr 2023 23:05:06 +0000 (16:05 -0700)]
shared/bap: Fix crash detaching streams
If a stream is being detached but bt_bap reference is already 0 don't
attempt to detach the stream as they would be freed anyway:
Invalid read of size 8
at 0x19A360: bap_free (bap.c:2576)
by 0x19A360: bt_bap_unref (bap.c:2735)
by 0x19A360: bt_bap_unref (bap.c:2727)
by 0x160E9A: test_teardown (test-bap.c:412)
by 0x1A8BCA: teardown_callback (tester.c:434)
Address 0x55e05e0 is 16 bytes inside a block of size 160 free'd
at 0x48480E4: free (vg_replace_malloc.c:872)
by 0x1AD5F6: queue_foreach (queue.c:207)
by 0x19A1C5: bt_bap_detach (bap.c:3879)
by 0x19A1C5: bt_bap_detach (bap.c:3855)
by 0x19A33F: bap_free (bap.c:2574)
Luiz Augusto von Dentz [Mon, 24 Apr 2023 18:45:23 +0000 (11:45 -0700)]
media: Fix not storing Preferred Delay properly
Preferred Delay properties were being stored as qos->pd_* instead of
qos->ppd_*.
Pauli Virtanen [Sat, 22 Apr 2023 17:05:57 +0000 (17:05 +0000)]
bap: add Location parameter to SelectProperties
Add relevant PACS Location field as a parameter to SelectProperties.
SelectProperties may set Audio_Channel_Allocation, which shall be chosen
from the bits set in Sink/Source Audio Locations (BAP v1.0.1 Sec. 4.4.1,
Sec 4.4.2). Hence, audio server needs to know the supported values,
which it previously could not.
Pauli Virtanen [Sat, 22 Apr 2023 17:05:56 +0000 (17:05 +0000)]
shared/bap: add function to get location from PAC
Add function to get the PACS Sink/Source Audio Locations field relevant
for a given PAC.
Guiting Shen [Fri, 21 Apr 2023 02:47:31 +0000 (10:47 +0800)]
obexd: agent: Use if-elseif instead of multi-if to check error message
The obex agent will return only one error message at the same time.So
we should use if-elseif instead of multi-if to check error message which
maybe DEBUG_ERROR_NO_REPLY or OBEX_ERROR_REJECT in agent_reply().
Guiting Shen [Thu, 20 Apr 2023 09:55:57 +0000 (17:55 +0800)]
obexd: AuthorizePush: Support to return folder name for file storage
The obex agent usually returns the full path by getting the default
folder and filename from the Filename property of the transfer object
which is not convenient.
The patch helps that the obex agent can return the folder name suffixed
with '/' or new full path or even null which will use the default name
if new_name is NULL and the default folder if the new_folder is NULL in
opp_chkput().
Iulia Tanasescu [Wed, 19 Apr 2023 13:43:54 +0000 (16:43 +0300)]
tools/iso-tester: Add Broadcast tests for encrypted BIG
This adds the following tests for encrypted broadcast:
ISO Broadcaster Encrypted - Success
ISO Broadcaster Receiver Encrypted - Success
Iulia Tanasescu [Wed, 19 Apr 2023 13:43:53 +0000 (16:43 +0300)]
tools/isotest: Add BIG encryption options
Add command line options for BIG encryption and broadcast code.
Iulia Tanasescu [Wed, 19 Apr 2023 13:43:52 +0000 (16:43 +0300)]
monitor/packet: Fix BIG encryption decoding
Fix incorrect decoding of the encryption parameter when logging
the LE BIG Create Sync command.
Luiz Augusto von Dentz [Thu, 13 Apr 2023 00:43:51 +0000 (17:43 -0700)]
iso-tester: Add BAP Audio Configuration tests
This adds the following tests based on BAP Audio Configurations:
ISO AC 1 & 4 - Success
ISO AC 2 & 10 - Success
ISO AC 3 & 5 - Success
ISO AC 6(i) - Success
ISO AC 6(ii) - Success
ISO AC 7(i) - Success
ISO AC 7(ii) - Success
ISO AC 8(i) - Success
ISO AC 8(ii) - Success
ISO AC 9(i) - Success
ISO AC 9(ii) - Success
ISO AC 11(i) - Success
ISO AC 11(ii) - Success
Luiz Augusto von Dentz [Thu, 13 Apr 2023 00:39:03 +0000 (17:39 -0700)]
btdev: Fix not setting CIS parameters properly
The code was assuming only index 0 was to be used which doesn't work
when there are multiple CIS being programmed with different parameters.
Luiz Augusto von Dentz [Wed, 7 Sep 2022 23:49:00 +0000 (16:49 -0700)]
mgmt-tester: Fix Get/Set PHY tests
This fixes the following tests now that all supported PHYs are enabled
by default:
Start Discovery LE - (Ext Scan Param) Failed
Get PHY Success Failed
Set PHY 1m 2m coded Succcess Timed out
Luiz Augusto von Dentz [Wed, 5 Apr 2023 23:04:28 +0000 (16:04 -0700)]
client/advertising: Add support for advertise.rsi command
This adds support for advertise.rsi command which can be used to request
the generation of RSI and include it as part of advertising data:
[bluetooth]# advertise.rsi --help
Show/Enable/Disable RSI to be advertised
Usage:
rsi [on/off]
[bluetooth]# advertise.rsi
RSI: on
[bluetooth]# advertise on
...
Advertising object registered
Tx Power: off
Name: off
Appearance: off
Discoverable: on
RSI: on
[bluetooth]#
Luiz Augusto von Dentz [Wed, 5 Apr 2023 22:59:47 +0000 (15:59 -0700)]
advertising: Add support for rsi as Includes
This adds support for "rsi" when a SIRK has been set on main.conf, the
clients can then enable it via Includes property which will make the
daemon to automatically generate an RSI (hash+random) and include it as
part of the advertising data:
< HCI Command: LE Set Extended Advertising Data (0x08|0x0037) plen 15
Handle: 0x01
Operation: Complete extended advertising data (0x03)
Fragment preference: Minimize fragmentation (0x01)
Data length: 0x0b
Resolvable Set Identifier: E2-4E-AA-1B-2B-61
Hash: 0x1b2b61
Random: 0xe24eaa
Flags: 0x06
LE General Discoverable Mode
BR/EDR Not Supported
Luiz Augusto von Dentz [Wed, 5 Apr 2023 22:56:11 +0000 (15:56 -0700)]
advertising-api: Add rsi to SupportedIncludes
This adds "rsi" as possible value to SupportedIncludes so when it is
available it means client and set it on its Includes property so a
proper RSI is generated and included as part of the Advertising Data.
Luiz Augusto von Dentz [Wed, 5 Apr 2023 22:53:12 +0000 (15:53 -0700)]
shared/ad: Fix bt_ad_has_data not matching when only type is passed
bt_ad_has_data attempts to match the data portion even when not set
which is useful the user is only interested in actually mataching the
type alone.
Luiz Augusto von Dentz [Wed, 5 Apr 2023 22:51:37 +0000 (15:51 -0700)]
main.conf: Fix parsing of CSIS group
There was a typo in the group name using CSIP instead of CSIS.
Iulia Tanasescu [Wed, 5 Apr 2023 10:54:42 +0000 (13:54 +0300)]
monitor/att: Add decoding support for BASS
This adds decoding support for BASS attributes:
> ACL Data RX: Handle 0 flags 0x02 dlen 7
ATT: Read Request (0x0a) len 2
Handle: 0x003a Type: Broadcast Receive State (0x2bc8)
< ACL Data TX: Handle 0 flags 0x00 dlen 45
ATT: Read Response (0x0b) len 40
Handle: 0x003a Type: Broadcast Receive State (0x2bc8)
Value: 0100f2698be807c0013a6501020101000000000403020400
Source_ID: 1
Source_Address_Type: 0
Source_Address: C0:07:E8:8B:69:F2
Source_Adv_SID: 1
Broadcast_ID: 0x01653a
PA_Sync_State: Synchronized to PA
BIG_Encryption: Broadcast_Code required
Num_Subgroups: 1
Subgroup #0:
BIS_Sync State: 0x00000000
Metadata #0: len 0x03 type 0x02
Metadata: 0400
> ACL Data RX: Handle 0 flags 0x02 dlen 7
ATT: Read Request (0x0a) len 2
Handle: 0x003d Type: Broadcast Receive State (0x2bc8)
< ACL Data TX: Handle 0 flags 0x00 dlen 5
ATT: Read Response (0x0b) len 0
Handle: 0x003d Type: Broadcast Receive State (0x2bc8)
Value:
Empty characteristic
> ACL Data RX: Handle 0 flags 0x02 dlen 8
ATT: Write Request (0x12) len 3
Handle: 0x0040 Type: Broadcast Audio Scan Control Point (0x2bc7)
Data: 00
Opcode: Remote Scan Stopped (0x00)
< ACL Data TX: Handle 0 flags 0x00 dlen 9
ATT: Error Response (0x01) len 4
Write Request (0x12)
Handle: 0x0040
Error: Reserved (0x80)
> ACL Data RX: Handle 0 flags 0x02 dlen 8
ATT: Write Request (0x12) len 3
Handle: 0x0040 Type: Broadcast Audio Scan Control Point (0x2bc7)
Data: 01
Opcode: Remote Scan Started (0x01)
< ACL Data TX: Handle 0 flags 0x00 dlen 9
ATT: Error Response (0x01) len 4
Write Request (0x12)
Handle: 0x0040
Error: Reserved (0x80)
> ACL Data RX: Handle 0 flags 0x01 dlen 5
ATT: Write Request (0x12) len 27
Handle: 0x0040 Type: Broadcast Audio Scan Control Point (0x2bc7)
Data: 0200f2698be807c0013a650100ffff01000000000403020400
Opcode: Add Source (0x02)
Source_Address_Type: 0
Source_Address: C0:07:E8:8B:69:F2
Source_Adv_SID: 1
Broadcast_ID: 0x01653a
PA_Sync_State: Do not synchronize to PA
PA_Interval: 0xffff
Num_Subgroups: 1
Subgroup #0:
BIS_Sync State: 0x00000000
Metadata #0: len 0x03 type 0x02
Metadata: 0400
< ACL Data TX: Handle 0 flags 0x00 dlen 9
ATT: Error Response (0x01) len 4
Write Request (0x12)
Handle: 0x0040
Error: Reserved (0x80)
> ACL Data RX: Handle 0 flags 0x02 dlen 22
ATT: Write Request (0x12) len 17
Handle: 0x0040 Type: Broadcast Audio Scan Control Point (0x2bc7)
Data:
030102780001000000000403040400
Opcode: Modify Source (0x03)
Source_ID: 1
PA_Sync_State: Synchronize to PA - PAST not available
PA_Interval: 0x0078
Num_Subgroups: 1
Subgroup #0:
BIS_Sync State: 0x00000000
Metadata #0: len 0x03 type 0x04
Metadata: 0400
< ACL Data TX: Handle 0 flags 0x00 dlen 9
ATT: Error Response (0x01) len 4
Write Request (0x12)
Handle: 0x0040
Error: Reserved (0x80)
> ACL Data RX: Handle 0 flags 0x02 dlen 25
ATT: Write Request (0x12) len 20
Handle: 0x0040 Type: Broadcast Audio Scan Control Point (0x2bc7)
Data:
0401b803eac6afbb65a25a41f15305680201
Opcode: Set Broadcast_Code (0x04)
Source_ID: 1
Broadcast_Code:
b803eac6afbb65a25a41f15305680201
< ACL Data TX: Handle 0 flags 0x00 dlen 5
ATT: Write Response (0x13) len 0
< ACL Data TX: Handle 0 flags 0x00 dlen 33
ATT: Handle Multiple Value Notification (0x23) len 28
Length: 0x0018
Handle: 0x003a Type: Broadcast Receive State (0x2bc8)
Data: 0100f2698be807c0013a6501020201000000000403020400
Source_ID: 1
Source_Address_Type: 0
Source_Address: C0:07:E8:8B:69:F2
Source_Adv_SID: 1
Broadcast_ID: 0x01653a
PA_Sync_State: Synchronized to PA
BIG_Encryption: Decrypting
Num_Subgroups: 1
Subgroup #0:
BIS_Sync State: 0x00000000
Metadata #0: len 0x03 type 0x02
Metadata: 0400
> ACL Data RX: Handle 0 flags 0x02 dlen 9
ATT: Write Request (0x12) len 4
Handle: 0x0040 Type: Broadcast Audio Scan Control Point (0x2bc7)
Data: 0501
Opcode: Remove Source (0x05)
Source_ID: 1
< ACL Data TX: Handle 0 flags 0x00 dlen 9
ATT: Error Response (0x01) len 4
Write Request (0x12)
Handle: 0x0040
Error: Reserved (0x80)
Luiz Augusto von Dentz [Mon, 3 Apr 2023 18:50:36 +0000 (11:50 -0700)]
set: Fix not attempt to connect devices with RSI
If a device advertising with RSI is only found later after the set was
already create we shall still attempt to connect to it.
Inga Stotland [Sat, 1 Apr 2023 00:16:02 +0000 (17:16 -0700)]
mesh: Tighten IO and fix out-of-bounds array access
This fixes the out-of-bounds array access in mesh-io-mgmt.c caught
by address sanitizer. Similar fixes were applied earlier to
generic and unit IOs. With this patch, the common code is factored
into a centralized location.
Hans de Goede [Fri, 31 Mar 2023 20:03:29 +0000 (22:03 +0200)]
adapter: Use regular discovery for filters which only have discoverable set
discovery_filter_to_mgmt_cp() does not add discovery_filter.discoverable
to the created mgmt_cp_start_service_discovery struct.
Instead update_discovery_filter() separately checks
client->discovery_filter->discoverable for all clients.
This means that for discovery-filters which only have the discoverable
flag set, to put the adapter in discoverable mode while discovering,
the created mgmt_cp_start_service_discovery struct is empty.
This empty mgmt_cp_start_service_discovery struct then gets sent
to the kernel as part of a MGMT_OP_START_SERVICE_DISCOVERY msg
by start_discovery_timeout().
This use of an empty filter with MGMT_OP_START_SERVICE_DISCOVERY
causes some bluetooth devices to not get seen with some (most?)
Broadcom bluetooth adapters. This problem has been observed with
the following Broadcom models: BCM4343A0, BCM43430A1, BCM43341B0 .
On these models the following 2 devices were not being discovered
when starting a scan with a filter with just discoverable set
in the filter (as gnome-bluetooth does):
Device 09:02:01:03:0F:87 (public)
Name: Bluetooth 3.0 Keyboard
Alias: Bluetooth 3.0 Keyboard
Class: 0x00000540
Icon: input-keyboard
Paired: yes
Bonded: yes
Trusted: yes
Blocked: no
Connected: yes
WakeAllowed: yes
LegacyPairing: yes
UUID: Service Discovery Serve.. (
00001000-0000-1000-8000-
00805f9b34fb)
UUID: Human Interface Device... (
00001124-0000-1000-8000-
00805f9b34fb)
UUID: PnP Information (
00001200-0000-1000-8000-
00805f9b34fb)
Modalias: bluetooth:v05ACp022Cd011B
Device 00:60:D1:00:00:34 (public)
Name: Bluetooth Mouse
Alias: Bluetooth Mouse
Class: 0x00002580
Icon: input-mouse
Paired: yes
Bonded: yes
Trusted: yes
Blocked: no
Connected: yes
WakeAllowed: yes
LegacyPairing: no
UUID: Human Interface Device... (
00001124-0000-1000-8000-
00805f9b34fb)
UUID: PnP Information (
00001200-0000-1000-8000-
00805f9b34fb)
Modalias: usb:v0103p0204d001E
Since setting the discoverable flag on a filter only is a way to
automatically put the adapter in discoverable mode itself while
it is discovering; and since this does not any device filtering
at all; modify merge_discovery_filters() to treat discovery with
such filters as regular unfiltered discovery.
This results in start_discovery_timeout() starting regular
discovery through a MGMT_OP_START_DISCOVERY message and this
fixes these 2 example devices not getting discovered by the
mentioned Broadcom BT adapter models.
Link: https://gitlab.gnome.org/GNOME/gnome-bluetooth/-/merge_requests/163
Reviewed-by: Bastien Nocera <hadess@hadess.net>
Iulia Tanasescu [Fri, 31 Mar 2023 15:39:27 +0000 (18:39 +0300)]
Split bt_iso_qos into dedicated structures
Split bt_iso_qos into dedicated unicast and broadcast
structures and add additional broadcast parameters.
Luiz Augusto von Dentz [Wed, 22 Mar 2023 18:34:24 +0000 (11:34 -0700)]
avrcp: Fix crash while handling unsupported events
The following crash can be observed if the remote peer send and
unsupported event:
ERROR: AddressSanitizer: heap-use-after-free on address 0x60b000148f11
at pc 0x559644552088 bp 0x7ffe28b3c7b0 sp 0x7ffe28b3c7a0
WRITE of size 1 at 0x60b000148f11 thread T0
#0 0x559644552087 in avrcp_handle_event profiles/audio/avrcp.c:3907
#1 0x559644536c22 in control_response profiles/audio/avctp.c:939
#2 0x5596445379ab in session_cb profiles/audio/avctp.c:1108
#3 0x7fbcb3e51c43 in g_main_context_dispatch (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x55c43)
#4 0x7fbcb3ea66c7 (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0xaa6c7)
#5 0x7fbcb3e512b2 in g_main_loop_run (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x552b2)
#6 0x559644754ab6 in mainloop_run src/shared/mainloop-glib.c:66
#7 0x559644755606 in mainloop_run_with_signal src/shared/mainloop-notify.c:188
#8 0x5596445bb963 in main src/main.c:1289
#9 0x7fbcb3bafd8f in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
#10 0x7fbcb3bafe3f in __libc_start_main_impl ../csu/libc-start.c:392
#11 0x5596444e8224 in _start (/usr/local/libexec/bluetooth/bluetoothd+0xf0224)
Manish Mandlik [Thu, 30 Mar 2023 06:08:03 +0000 (23:08 -0700)]
mgmt-tester: Add devcoredump tests
Add mgmt-tester tests for hci devcoredump. These testa trigger the
devcoredump with a test data and verifies the generated devcoredump
file for the test data and correct devcoredump header fields.
Manish Mandlik [Thu, 30 Mar 2023 06:08:02 +0000 (23:08 -0700)]
vhci: Add support to trigger devcoredump and read the dump file
Add vhci support to trigger the hci devcoredump by writing to
force_devcoredump debugfs entry and read the generated devcoredump
file.
Luiz Augusto von Dentz [Wed, 29 Mar 2023 20:27:05 +0000 (13:27 -0700)]
device: Fix not setting initiator flag when auto-connecting
If the device is marked as auto-connect the kernel may initiate the
connection spontaneously causing new connections to not have set the
state->initiator flag properly.
Luiz Augusto von Dentz [Wed, 29 Mar 2023 19:55:16 +0000 (12:55 -0700)]
bap: Mark devices to auto-connect
This makes devices with BAP support to auto-connect once they start
advertising.
Simon Mikuda [Tue, 28 Mar 2023 05:26:19 +0000 (07:26 +0200)]
l2test: Fix setting mode for BR/EDR l2cap socket
BT_MODE_* enums are used only for socket SOL_BLUETOOTH, option BT_MODE
Otherwise we should use L2CAP_MODE_* enums.
Simon Mikuda [Tue, 28 Mar 2023 05:26:18 +0000 (07:26 +0200)]
l2test: Enable hex input for PSM
Luiz Augusto von Dentz [Fri, 24 Mar 2023 23:38:56 +0000 (16:38 -0700)]
monitor: Cache IRK being parsed
This caches any IRK being parsed so they can be used to resolve
addresses later which fixes the problem of only being able to resolve
addresses if the monitor happens to be active while SMP exchange the
keys.