* [PATCH BlueZ v3 0/8] Add 'broadcasting' state
@ 2024-07-30 10:53 Vlad Pruteanu
2024-07-30 10:53 ` [PATCH BlueZ v3 1/8] doc/media: Add 'broadcasting' state and 'select' method Vlad Pruteanu
` (7 more replies)
0 siblings, 8 replies; 14+ messages in thread
From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw)
To: linux-bluetooth
Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu,
luiz.dentz, pav, Vlad Pruteanu
This series adds a new 'broadcasting' state for transports created by
the Broadcast Sink device as a result of scanning a Broadcast Source.
Such transports will remain in the 'idle' state until the user
selects them, at which point they will be moved to 'broadcasting'.
PipeWire detects these transports and automatically acquires them.
The transport selection is done using the 'transport.select' method,
that this series implements. This allows the user to select the desired
stream when running the setup with PipeWire since it acquires any
transport that is broadcasting.
Termination of the sync to a BIS is done using the 'transport.unselect'
method, that also involves a 2 step process. The first step is the call
to this method, which changes the transport's state to idle, with the
second step being done by the audio server which detects this change
and releases the transport.
Vlad Pruteanu (8):
doc/media: Add 'broadcasting' state and 'select' method
transport: Add 'broadcasting' state
transport: Add "select" method
client/player: Expose transport "select" method to the user
transport: Broadcast sink: wait for user to select transport
doc/media: Add 'unselect' method
transport: Add "unselect" method
client/player: Expose transport "unselect" method to the user
client/player.c | 100 +++++++++++++++++++++++++++++++
doc/org.bluez.MediaTransport.rst | 31 +++++++++-
profiles/audio/transport.c | 90 ++++++++++++++++++++++++----
3 files changed, 207 insertions(+), 14 deletions(-)
--
2.40.1
^ permalink raw reply [flat|nested] 14+ messages in thread* [PATCH BlueZ v3 1/8] doc/media: Add 'broadcasting' state and 'select' method 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 2024-07-30 12:37 ` Add 'broadcasting' state bluez.test.bot 2024-07-30 10:53 ` [PATCH BlueZ v3 2/8] transport: " Vlad Pruteanu ` (6 subsequent siblings) 7 siblings, 1 reply; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds a new state for transports created by the Broadcast Sink. Such transports will remain in the 'idle' state until the user calls 'select' on them, at which point they will be moved to 'broadcasting'. This allows the user to select the desired BIS as the audio server automatically acquires transports that are in this state. --- doc/org.bluez.MediaTransport.rst | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/org.bluez.MediaTransport.rst b/doc/org.bluez.MediaTransport.rst index 6e95df8f2..2a3fc6411 100644 --- a/doc/org.bluez.MediaTransport.rst +++ b/doc/org.bluez.MediaTransport.rst @@ -7,7 +7,7 @@ BlueZ D-Bus MediaTransport API documentation -------------------------------------------- :Version: BlueZ -:Date: September 2023 +:Date: July 2024 :Manual section: 5 :Manual group: Linux System Administration @@ -51,6 +51,20 @@ void Release() Releases file descriptor. +void Select_transport() +````````````` + + Applicable only for transports created by a broadcast sink. This moves + the transport from 'idle' to 'broadcasting'. This allows the user to + select which BISes he wishes to sync to via a 2 step process: + 1) the user calls this method, changing the transport's state to idle + 2) the audio server detects that the transport is in the 'broadcasting' + state and automatically acquires it + + Possible Errors: + + :org.bluez.Error.NotAuthorized: + Properties ---------- @@ -84,6 +98,8 @@ string State [readonly] :"idle": not streaming :"pending": streaming but not acquired + :"broadcasting": streaming but not acquired, applicable only for transports + created by a broadcast sink :"active": streaming and acquired uint16 Delay [readwrite, optional] -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: Add 'broadcasting' state 2024-07-30 10:53 ` [PATCH BlueZ v3 1/8] doc/media: Add 'broadcasting' state and 'select' method Vlad Pruteanu @ 2024-07-30 12:37 ` bluez.test.bot 0 siblings, 0 replies; 14+ messages in thread From: bluez.test.bot @ 2024-07-30 12:37 UTC (permalink / raw) To: linux-bluetooth, vlad.pruteanu [-- Attachment #1: Type: text/plain, Size: 34648 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=875031 ---Test result--- Test Summary: CheckPatch FAIL 3.38 seconds GitLint PASS 2.13 seconds BuildEll PASS 25.09 seconds BluezMake FAIL 116.90 seconds MakeCheck FAIL 2085.99 seconds MakeDistcheck FAIL 11.45 seconds CheckValgrind FAIL 86.58 seconds CheckSmatch FAIL 202.02 seconds bluezmakeextell FAIL 77.81 seconds IncrementalBuild FAIL 1585.67 seconds ScanBuild FAIL 802.01 seconds Details ############################## Test: CheckPatch - FAIL Desc: Run checkpatch.pl script Output: [BlueZ,v3,3/8] transport: Add "select" method ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ /github/workspace/src/src/13747250.patch total: 3 errors, 0 warnings, 42 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. /github/workspace/src/src/13747250.patch has style problems, please review. NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS. ############################## Test: BluezMake - FAIL Desc: Build BlueZ Output: tools/mgmt-tester.c: In function ‘main’: tools/mgmt-tester.c:12725:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 12725 | int main(int argc, char *argv[]) | ^~~~ doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[1]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:4674: all] Error 2 ############################## Test: MakeCheck - FAIL Desc: Run Bluez Make Check Output: unit/test-avdtp.c: In function ‘main’: unit/test-avdtp.c:766:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 766 | int main(int argc, char *argv[]) | ^~~~ unit/test-avrcp.c: In function ‘main’: unit/test-avrcp.c:989:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 989 | int main(int argc, char *argv[]) | ^~~~ doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[1]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make: *** [Makefile:12303: check] Error 2 ############################## Test: MakeDistcheck - FAIL Desc: Run Bluez Make Distcheck Output: doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[2]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [Makefile:12136: distdir] Error 2 make: *** [Makefile:12212: dist] Error 2 ############################## Test: CheckValgrind - FAIL Desc: Run Bluez Make Check with Valgrind Output: tools/mgmt-tester.c: In function ‘main’: tools/mgmt-tester.c:12725:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 12725 | int main(int argc, char *argv[]) | ^~~~ doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[1]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:12303: check] Error 2 ############################## Test: CheckSmatch - FAIL Desc: Run smatch tool with source Output: src/shared/crypto.c:271:21: warning: Variable length array is used. src/shared/crypto.c:272:23: warning: Variable length array is used. src/shared/gatt-helpers.c:768:31: warning: Variable length array is used. src/shared/gatt-helpers.c:830:31: warning: Variable length array is used. src/shared/gatt-helpers.c:1323:31: warning: Variable length array is used. src/shared/gatt-helpers.c:1354:23: warning: Variable length array is used. src/shared/gatt-server.c:278:25: warning: Variable length array is used. src/shared/gatt-server.c:618:25: warning: Variable length array is used. src/shared/gatt-server.c:716:25: warning: Variable length array is used. src/shared/bap.c:288:25: warning: array of flexible structures src/shared/bap.c: note: in included file: ./src/shared/ascs.h:88:25: warning: array of flexible structures src/shared/shell.c: note: in included file (through /usr/include/readline/readline.h): /usr/include/readline/rltypedefs.h:35:23: warning: non-ANSI function declaration of function 'Function' /usr/include/readline/rltypedefs.h:36:25: warning: non-ANSI function declaration of function 'VFunction' /usr/include/readline/rltypedefs.h:37:27: warning: non-ANSI function declaration of function 'CPFunction' /usr/include/readline/rltypedefs.h:38:29: warning: non-ANSI function declaration of function 'CPPFunction' src/shared/crypto.c:271:21: warning: Variable length array is used. src/shared/crypto.c:272:23: warning: Variable length array is used. src/shared/gatt-helpers.c:768:31: warning: Variable length array is used. src/shared/gatt-helpers.c:830:31: warning: Variable length array is used. src/shared/gatt-helpers.c:1323:31: warning: Variable length array is used. src/shared/gatt-helpers.c:1354:23: warning: Variable length array is used. src/shared/gatt-server.c:278:25: warning: Variable length array is used. src/shared/gatt-server.c:618:25: warning: Variable length array is used. src/shared/gatt-server.c:716:25: warning: Variable length array is used. src/shared/bap.c:288:25: warning: array of flexible structures src/shared/bap.c: note: in included file: ./src/shared/ascs.h:88:25: warning: array of flexible structures src/shared/shell.c: note: in included file (through /usr/include/readline/readline.h): /usr/include/readline/rltypedefs.h:35:23: warning: non-ANSI function declaration of function 'Function' /usr/include/readline/rltypedefs.h:36:25: warning: non-ANSI function declaration of function 'VFunction' /usr/include/readline/rltypedefs.h:37:27: warning: non-ANSI function declaration of function 'CPFunction' /usr/include/readline/rltypedefs.h:38:29: warning: non-ANSI function declaration of function 'CPPFunction' tools/mesh-cfgtest.c:1453:17: warning: unknown escape sequence: '\%' tools/sco-tester.c: note: in included file: ./lib/bluetooth.h:219:15: warning: array of flexible structures ./lib/bluetooth.h:224:31: warning: array of flexible structures tools/bneptest.c:634:39: warning: unknown escape sequence: '\%' tools/seq2bseq.c:57:26: warning: Variable length array is used. tools/obex-client-tool.c: note: in included file (through /usr/include/readline/readline.h): /usr/include/readline/rltypedefs.h:35:23: warning: non-ANSI function declaration of function 'Function' /usr/include/readline/rltypedefs.h:36:25: warning: non-ANSI function declaration of function 'VFunction' /usr/include/readline/rltypedefs.h:37:27: warning: non-ANSI function declaration of function 'CPFunction' /usr/include/readline/rltypedefs.h:38:29: warning: non-ANSI function declaration of function 'CPPFunction' android/avctp.c:505:34: warning: Variable length array is used. android/avctp.c:556:34: warning: Variable length array is used. unit/test-avrcp.c:373:26: warning: Variable length array is used. unit/test-avrcp.c:398:26: warning: Variable length array is used. unit/test-avrcp.c:414:24: warning: Variable length array is used. android/avrcp-lib.c:1085:34: warning: Variable length array is used. android/avrcp-lib.c:1583:34: warning: Variable length array is used. android/avrcp-lib.c:1612:34: warning: Variable length array is used. android/avrcp-lib.c:1638:34: warning: Variable length array is used. mesh/mesh-io-mgmt.c:523:67: warning: Variable length array is used. doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[1]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:4674: all] Error 2 ############################## Test: bluezmakeextell - FAIL Desc: Build Bluez with External ELL Output: doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[1]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:4674: all] Error 2 ############################## Test: IncrementalBuild - FAIL Desc: Incremental build with the patches in the series Output: [BlueZ,v3,1/8] doc/media: Add 'broadcasting' state and 'select' method tools/mgmt-tester.c: In function ‘main’: tools/mgmt-tester.c:12725:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 12725 | int main(int argc, char *argv[]) | ^~~~ unit/test-avdtp.c: In function ‘main’: unit/test-avdtp.c:766:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 766 | int main(int argc, char *argv[]) | ^~~~ unit/test-avrcp.c: In function ‘main’: unit/test-avrcp.c:989:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 989 | int main(int argc, char *argv[]) | ^~~~ doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[1]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:4674: all] Error 2 ############################## Test: ScanBuild - FAIL Desc: Run Scan Build Output: src/shared/gatt-client.c:451:21: warning: Use of memory after it is freed gatt_db_unregister(op->client->db, op->db_id); ^~~~~~~~~~ src/shared/gatt-client.c:696:2: warning: Use of memory after it is freed discovery_op_complete(op, false, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:996:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1102:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1296:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1361:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1636:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1641:2: warning: Use of memory after it is freed discover_all(op); ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2145:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2153:8: warning: Use of memory after it is freed discovery_op_ref(op), ^~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3242:2: warning: Use of memory after it is freed complete_write_long_op(req, success, 0, false); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3264:2: warning: Use of memory after it is freed request_unref(req); ^~~~~~~~~~~~~~~~~~ 12 warnings generated. src/shared/gatt-client.c:451:21: warning: Use of memory after it is freed gatt_db_unregister(op->client->db, op->db_id); ^~~~~~~~~~ src/shared/gatt-client.c:696:2: warning: Use of memory after it is freed discovery_op_complete(op, false, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:996:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1102:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1296:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1361:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1636:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1641:2: warning: Use of memory after it is freed discover_all(op); ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2145:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2153:8: warning: Use of memory after it is freed discovery_op_ref(op), ^~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3242:2: warning: Use of memory after it is freed complete_write_long_op(req, success, 0, false); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3264:2: warning: Use of memory after it is freed request_unref(req); ^~~~~~~~~~~~~~~~~~ 12 warnings generated. tools/hciattach.c:816:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 10)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:864:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 4)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:886:8: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 10)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:908:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 4)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:929:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 4)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:973:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 6)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 warnings generated. src/oui.c:50:2: warning: Value stored to 'hwdb' is never read hwdb = udev_hwdb_unref(hwdb); ^ ~~~~~~~~~~~~~~~~~~~~~ src/oui.c:53:2: warning: Value stored to 'udev' is never read udev = udev_unref(udev); ^ ~~~~~~~~~~~~~~~~ 2 warnings generated. tools/hcidump.c:180:9: warning: Potential leak of memory pointed to by 'dp' if (fds[i].fd == sock) ^~~ tools/hcidump.c:248:17: warning: Assigned value is garbage or undefined dh->ts_sec = htobl(frm.ts.tv_sec); ^ ~~~~~~~~~~~~~~~~~~~~ tools/hcidump.c:326:9: warning: 1st function call argument is an uninitialized value if (be32toh(dp.flags) & 0x02) { ^~~~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:341:20: warning: 1st function call argument is an uninitialized value frm.data_len = be32toh(dp.len); ^~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:346:14: warning: 1st function call argument is an uninitialized value opcode = be32toh(dp.flags) & 0xffff; ^~~~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:384:17: warning: Assigned value is garbage or undefined frm.data_len = btohs(dh.len); ^ ~~~~~~~~~~~~~ tools/hcidump.c:394:11: warning: Assigned value is garbage or undefined frm.len = frm.data_len; ^ ~~~~~~~~~~~~ tools/hcidump.c:398:9: warning: 1st function call argument is an uninitialized value ts = be64toh(ph.ts); ^~~~~~~~~~~~~~ /usr/include/endian.h:51:22: note: expanded from macro 'be64toh' # define be64toh(x) __bswap_64 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:403:13: warning: 1st function call argument is an uninitialized value frm.in = be32toh(dp.flags) & 0x01; ^~~~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:408:11: warning: Assigned value is garbage or undefined frm.in = dh.in; ^ ~~~~~ tools/hcidump.c:437:7: warning: Null pointer passed to 1st parameter expecting 'nonnull' fd = open(file, open_flags, 0644); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 warnings generated. tools/rfcomm.c:234:3: warning: Value stored to 'i' is never read i = execvp(cmdargv[0], cmdargv); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rfcomm.c:234:7: warning: Null pointer passed to 1st parameter expecting 'nonnull' i = execvp(cmdargv[0], cmdargv); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rfcomm.c:354:8: warning: Although the value stored to 'fd' is used in the enclosing expression, the value is never actually read from 'fd' if ((fd = open(devname, O_RDONLY | O_NOCTTY)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rfcomm.c:497:14: warning: Assigned value is garbage or undefined req.channel = raddr.rc_channel; ^ ~~~~~~~~~~~~~~~~ tools/rfcomm.c:515:8: warning: Although the value stored to 'fd' is used in the enclosing expression, the value is never actually read from 'fd' if ((fd = open(devname, O_RDONLY | O_NOCTTY)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5 warnings generated. src/sdp-xml.c:126:10: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:300:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:338:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ 3 warnings generated. tools/ciptool.c:350:7: warning: 5th function call argument is an uninitialized value sk = do_connect(ctl, dev_id, &src, &dst, psm, (1 << CMTP_LOOPBACK)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. tools/sdptool.c:941:26: warning: Result of 'malloc' is converted to a pointer of type 'uint32_t', which is incompatible with sizeof operand type 'int' uint32_t *value_int = malloc(sizeof(int)); ~~~~~~~~~~ ^~~~~~ ~~~~~~~~~~~ tools/sdptool.c:980:4: warning: 1st function call argument is an uninitialized value free(allocArray[i]); ^~~~~~~~~~~~~~~~~~~ tools/sdptool.c:3777:2: warning: Potential leak of memory pointed to by 'si.name' return add_service(0, &si); ^~~~~~~~~~~~~~~~~~~~~~~~~~ tools/sdptool.c:4112:4: warning: Potential leak of memory pointed to by 'context.svc' return -1; ^~~~~~~~~ 4 warnings generated. tools/avtest.c:225:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:235:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:244:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:258:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:265:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:272:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:279:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:291:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:295:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:304:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:308:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:317:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:324:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:346:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:350:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:359:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:363:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:376:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:380:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:387:4: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:397:4: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:562:3: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:570:3: warning: Value stored to 'len' is never read len = write(sk, buf, invalid ? 2 : 3); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/avtest.c:584:3: warning: Value stored to 'len' is never read len = write(sk, buf, 4 + sizeof(media_transport)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/avtest.c:597:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:607:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:619:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:634:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:646:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:655:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:662:3: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:698:2: warning: Value stored to 'len' is never read len = write(sk, buf, AVCTP_HEADER_LENGTH + sizeof(play_pressed)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 warnings generated. tools/btproxy.c:836:15: warning: Null pointer passed to 1st parameter expecting 'nonnull' tcp_port = atoi(optarg); ^~~~~~~~~~~~ tools/btproxy.c:839:8: warning: Null pointer passed to 1st parameter expecting 'nonnull' if (strlen(optarg) > 3 && !strncmp(optarg, "hci", 3)) ^~~~~~~~~~~~~~ 2 warnings generated. tools/create-image.c:76:3: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ tools/create-image.c:84:3: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ tools/create-image.c:92:3: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ tools/create-image.c:105:2: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ 4 warnings generated. tools/btgatt-client.c:1824:2: warning: Value stored to 'argv' is never read argv += optind; ^ ~~~~~~ 1 warning generated. tools/btgatt-server.c:1212:2: warning: Value stored to 'argv' is never read argv -= optind; ^ ~~~~~~ 1 warning generated. tools/check-selftest.c:42:3: warning: Value stored to 'ptr' is never read ptr = fgets(result, sizeof(result), fp); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. tools/gatt-service.c:294:2: warning: 2nd function call argument is an uninitialized value chr_write(chr, value, len); ^~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. tools/obex-server-tool.c:133:13: warning: Null pointer passed to 1st parameter expecting 'nonnull' data->fd = open(name, O_WRONLY | O_CREAT | O_NOCTTY, 0600); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/obex-server-tool.c:192:13: warning: Null pointer passed to 1st parameter expecting 'nonnull' data->fd = open(name, O_RDONLY | O_NOCTTY, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. tools/btpclientctl.c:402:3: warning: Value stored to 'bit' is never read bit = 0; ^ ~ tools/btpclientctl.c:1655:2: warning: Null pointer passed to 2nd parameter expecting 'nonnull' memcpy(cp->data, ad_data, ad_len); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. src/sdpd-request.c:211:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint16_t' pElem = malloc(sizeof(uint16_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ src/sdpd-request.c:239:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint32_t' pElem = malloc(sizeof(uint32_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ 2 warnings generated. android/avrcp-lib.c:1968:3: warning: 1st function call argument is an uninitialized value g_free(text[i]); ^~~~~~~~~~~~~~~ 1 warning generated. profiles/health/hdp.c:644:3: warning: Use of memory after it is freed hdp_tmp_dc_data_unref(dc_data); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ profiles/health/hdp.c:800:19: warning: Use of memory after it is freed path = g_strdup(chan->path); ^~~~~~~~~~ profiles/health/hdp.c:1779:6: warning: Use of memory after it is freed hdp_tmp_dc_data_ref(hdp_conn), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ profiles/health/hdp.c:1836:30: warning: Use of memory after it is freed reply = g_dbus_create_error(data->msg, ERROR_INTERFACE ".HealthError", ^~~~~~~~~ 4 warnings generated. profiles/health/hdp_util.c:1052:2: warning: Use of memory after it is freed conn_data->func(conn_data->data, gerr); ^~~~~~~~~~~~~~~ 1 warning generated. attrib/gatt.c:970:2: warning: Potential leak of memory pointed to by 'long_write' return prepare_write(long_write); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. src/sdpd-request.c:211:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint16_t' pElem = malloc(sizeof(uint16_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ src/sdpd-request.c:239:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint32_t' pElem = malloc(sizeof(uint32_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ 2 warnings generated. src/sdp-xml.c:126:10: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:300:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:338:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ 3 warnings generated. src/sdp-client.c:353:14: warning: Access to field 'cb' results in a dereference of a null pointer (*ctxt)->cb = cb; ~~~~~~~~~~~~^~~~ 1 warning generated. src/gatt-database.c:1155:10: warning: Value stored to 'bits' during its initialization is never read uint8_t bits[] = { BT_GATT_CHRC_CLI_FEAT_ROBUST_CACHING, ^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. gobex/gobex-header.c:67:2: warning: Null pointer passed to 2nd parameter expecting 'nonnull' memcpy(to, from, count); ^~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. gobex/gobex-transfer.c:423:7: warning: Use of memory after it is freed if (!g_slist_find(transfers, transfer)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. mesh/main.c:161:3: warning: Value stored to 'optarg' is never read optarg += strlen("auto"); ^ ~~~~~~~~~~~~~~ 1 warning generated. doc/org.bluez.MediaTransport.rst:55: (WARNING/2) Title underline too short. void Select_transport() ````````````` Exiting due to level-2 (WARNING) system message. make[1]: *** [Makefile:13885: doc/org.bluez.MediaTransport.5] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:4674: all] Error 2 --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH BlueZ v3 2/8] transport: Add 'broadcasting' state 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 1/8] doc/media: Add 'broadcasting' state and 'select' method Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 3/8] transport: Add "select" method Vlad Pruteanu ` (5 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds a new state for transports created by the Broadcast Sink device as a result of scanning a Broadcast Source. Such transports will remain in the 'idle' state until the user selects them using 'transport.select', at which point they will be moved to 'broadcasting'. --- profiles/audio/transport.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index 922911cf3..0a890c0ac 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -51,6 +51,10 @@ typedef enum { TRANSPORT_STATE_IDLE, /* Not acquired and suspended */ TRANSPORT_STATE_PENDING, /* Playing but not acquired */ + /* Playing but not acquired, applicable only for transports + * created by a broadcast sink + */ + TRANSPORT_STATE_BROADCASTING, TRANSPORT_STATE_REQUESTING, /* Acquire in progress */ TRANSPORT_STATE_ACTIVE, /* Acquired and playing */ TRANSPORT_STATE_SUSPENDING, /* Release in progress */ @@ -59,6 +63,7 @@ typedef enum { static const char *str_state[] = { "TRANSPORT_STATE_IDLE", "TRANSPORT_STATE_PENDING", + "TRANSPORT_STATE_BROADCASTING", "TRANSPORT_STATE_REQUESTING", "TRANSPORT_STATE_ACTIVE", "TRANSPORT_STATE_SUSPENDING", @@ -139,6 +144,8 @@ static const char *state2str(transport_state_t state) return "idle"; case TRANSPORT_STATE_PENDING: return "pending"; + case TRANSPORT_STATE_BROADCASTING: + return "broadcasting"; case TRANSPORT_STATE_ACTIVE: case TRANSPORT_STATE_SUSPENDING: return "active"; @@ -152,6 +159,7 @@ static gboolean state_in_use(transport_state_t state) switch (state) { case TRANSPORT_STATE_IDLE: case TRANSPORT_STATE_PENDING: + case TRANSPORT_STATE_BROADCASTING: return FALSE; case TRANSPORT_STATE_REQUESTING: case TRANSPORT_STATE_ACTIVE: @@ -679,7 +687,8 @@ static DBusMessage *try_acquire(DBusConnection *conn, DBusMessage *msg, if (transport->state >= TRANSPORT_STATE_REQUESTING) return btd_error_not_authorized(msg); - if (transport->state != TRANSPORT_STATE_PENDING) + if ((transport->state != TRANSPORT_STATE_PENDING) && + (transport->state != TRANSPORT_STATE_BROADCASTING)) return btd_error_not_available(msg); owner = media_owner_create(msg); @@ -1281,7 +1290,8 @@ static void transport_update_playing(struct media_transport *transport, str_state[transport->state], playing); if (playing == FALSE) { - if (transport->state == TRANSPORT_STATE_PENDING) + if ((transport->state == TRANSPORT_STATE_PENDING) || + (transport->state == TRANSPORT_STATE_BROADCASTING)) transport_set_state(transport, TRANSPORT_STATE_IDLE); else if (transport->state == TRANSPORT_STATE_ACTIVE) { /* Remove owner */ -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH BlueZ v3 3/8] transport: Add "select" method 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 1/8] doc/media: Add 'broadcasting' state and 'select' method Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 2/8] transport: " Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 4/8] client/player: Expose transport "select" method to the user Vlad Pruteanu ` (4 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds the "select" method for Broadcast transports. It's role is to change the transport's state from idle to broadcasting. This allows the user to select the desired stream when running the setup with PipeWire since it acquires any transport that is broadcasting. --- profiles/audio/transport.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index 0a890c0ac..bf2215a0f 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -972,6 +972,9 @@ static gboolean get_endpoint(const GDBusPropertyTable *property, return TRUE; } +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, + void *data); + static const GDBusMethodTable transport_methods[] = { { GDBUS_ASYNC_METHOD("Acquire", NULL, @@ -984,6 +987,8 @@ static const GDBusMethodTable transport_methods[] = { { "mtu_w", "q" }), try_acquire) }, { GDBUS_ASYNC_METHOD("Release", NULL, NULL, release) }, + { GDBUS_ASYNC_METHOD("Select", + NULL, NULL, select_transport) }, { }, }; @@ -1302,6 +1307,25 @@ static void transport_update_playing(struct media_transport *transport, transport_set_state(transport, TRANSPORT_STATE_PENDING); } +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, + void *data) +{ + struct media_transport *transport = data; + + if (transport->owner != NULL) + return btd_error_not_authorized(msg); + + if (transport->state >= TRANSPORT_STATE_REQUESTING) + return btd_error_not_authorized(msg); + + if (!strcmp(media_endpoint_get_uuid(transport->endpoint), + BAA_SERVICE_UUID)) { + transport_update_playing(transport, TRUE); + } + + return NULL; +} + static void sink_state_changed(struct btd_service *service, sink_state_t old_state, sink_state_t new_state, -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH BlueZ v3 4/8] client/player: Expose transport "select" method to the user 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu ` (2 preceding siblings ...) 2024-07-30 10:53 ` [PATCH BlueZ v3 3/8] transport: Add "select" method Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 5/8] transport: Broadcast sink: wait for user to select transport Vlad Pruteanu ` (3 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This exposes the "select" method for Broadcast transports. This allows the user to select the desired stream when running the setup with PipeWire since it acquires any transport that is broadcasting. --- client/player.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/client/player.c b/client/player.c index 2480ed64b..cc30022e1 100644 --- a/client/player.c +++ b/client/player.c @@ -4634,6 +4634,23 @@ static void acquire_reply(DBusMessage *message, void *user_data) return bt_shell_noninteractive_quit(EXIT_FAILURE); } +static void select_reply(DBusMessage *message, void *user_data) +{ + DBusError error; + + dbus_error_init(&error); + + if (dbus_set_error_from_message(&error, message) == TRUE) { + bt_shell_printf("Failed to select: %s\n", error.name); + dbus_error_free(&error); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } + + bt_shell_printf("Select successful"); + + return bt_shell_noninteractive_quit(EXIT_SUCCESS); +} + static void prompt_acquire(const char *input, void *user_data) { GDBusProxy *proxy = user_data; @@ -4855,6 +4872,38 @@ static void cmd_acquire_transport(int argc, char *argv[]) return bt_shell_noninteractive_quit(EXIT_SUCCESS); } +static void transport_select(GDBusProxy *proxy, bool prompt) +{ + if (!g_dbus_proxy_method_call(proxy, "Select", NULL, + select_reply, proxy, NULL)) { + bt_shell_printf("Failed select transport\n"); + return; + } +} + +static void cmd_select_transport(int argc, char *argv[]) +{ + GDBusProxy *proxy; + int i; + + for (i = 1; i < argc; i++) { + proxy = g_dbus_proxy_lookup(transports, NULL, argv[i], + BLUEZ_MEDIA_TRANSPORT_INTERFACE); + if (!proxy) { + bt_shell_printf("Transport %s not found\n", argv[i]); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } + + if (find_transport(proxy)) { + bt_shell_printf("Transport %s already acquired\n", + argv[i]); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } + + transport_select(proxy, false); + } +} + static void release_reply(DBusMessage *message, void *user_data) { struct transport *transport = user_data; @@ -5283,6 +5332,9 @@ static const struct bt_shell_menu transport_menu = { { "volume", "<transport> [value]", cmd_volume_transport, "Get/Set transport volume", transport_generator }, + { "select", "<transport> [transport1...]", cmd_select_transport, + "Select Transport", + transport_generator }, {} }, }; -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH BlueZ v3 5/8] transport: Broadcast sink: wait for user to select transport 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu ` (3 preceding siblings ...) 2024-07-30 10:53 ` [PATCH BlueZ v3 4/8] client/player: Expose transport "select" method to the user Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 6/8] doc/media: Add 'unselect' method Vlad Pruteanu ` (2 subsequent siblings) 7 siblings, 0 replies; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This changes the flow for transports created on broadcast sink side. Transports are not automatically changed to pending anymore, instead the user must first run transport.select on them which updates the state to 'broadcasting'. This allows for the selection of the desired stream when running the setup with PipeWire, which acquires any transport that is broadcasting. --- profiles/audio/transport.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index bf2215a0f..80e4f564c 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -1303,8 +1303,14 @@ static void transport_update_playing(struct media_transport *transport, if (transport->owner != NULL) media_transport_remove_owner(transport); } - } else if (transport->state == TRANSPORT_STATE_IDLE) - transport_set_state(transport, TRANSPORT_STATE_PENDING); + } else if (transport->state == TRANSPORT_STATE_IDLE) { + if (!strcmp(media_endpoint_get_uuid(transport->endpoint), + BAA_SERVICE_UUID)) + transport_set_state(transport, + TRANSPORT_STATE_BROADCASTING); + else + transport_set_state(transport, TRANSPORT_STATE_PENDING); + } } static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, @@ -1686,10 +1692,7 @@ static void bap_state_changed(struct bt_bap_stream *stream, uint8_t old_state, bap_update_qos(transport); else if (bt_bap_stream_io_dir(stream) != BT_BAP_BCAST_SOURCE) bap_update_bcast_qos(transport); - if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE) - transport_update_playing(transport, TRUE); - else - transport_update_playing(transport, FALSE); + transport_update_playing(transport, FALSE); return; case BT_BAP_STREAM_STATE_DISABLING: return; -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH BlueZ v3 6/8] doc/media: Add 'unselect' method 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu ` (4 preceding siblings ...) 2024-07-30 10:53 ` [PATCH BlueZ v3 5/8] transport: Broadcast sink: wait for user to select transport Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 7/8] transport: Add "unselect" method Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 8/8] client/player: Expose transport "unselect" method to the user Vlad Pruteanu 7 siblings, 0 replies; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds the documentation for a new method, exclusive to transports created by the Broadcast Sink. It would allow the user to terminate the sync to a BIS, via a 2 step process. The first step is the call to this method, which changes the transport's state to idle, with the second step being done by the audio server which detects this change and releases the transport. --- doc/org.bluez.MediaTransport.rst | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/doc/org.bluez.MediaTransport.rst b/doc/org.bluez.MediaTransport.rst index 2a3fc6411..f7faba969 100644 --- a/doc/org.bluez.MediaTransport.rst +++ b/doc/org.bluez.MediaTransport.rst @@ -57,7 +57,7 @@ void Select_transport() Applicable only for transports created by a broadcast sink. This moves the transport from 'idle' to 'broadcasting'. This allows the user to select which BISes he wishes to sync to via a 2 step process: - 1) the user calls this method, changing the transport's state to idle + 1) the user calls the method, changing the transport's state to broadcasting 2) the audio server detects that the transport is in the 'broadcasting' state and automatically acquires it @@ -65,6 +65,19 @@ void Select_transport() :org.bluez.Error.NotAuthorized: +void Unselect_transport() +``````````````` + + Applicable only for transports created by a broadcast sink. This moves + the transport from 'broadcasting' or 'active' to 'idle'. This allows the + user to terminate the sync to a BIS to via a 2 step process: + 1) the user calls this method, changing the transport's state to idle + 2) the audio server detects this event and releases the transport + + Possible Errors: + + :org.bluez.Error.NotAuthorized: + Properties ---------- -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH BlueZ v3 7/8] transport: Add "unselect" method 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu ` (5 preceding siblings ...) 2024-07-30 10:53 ` [PATCH BlueZ v3 6/8] doc/media: Add 'unselect' method Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 8/8] client/player: Expose transport "unselect" method to the user Vlad Pruteanu 7 siblings, 0 replies; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds a new method, exclusive to transports created by the Broadcast Sink. It allows the user to terminate the sync to a BIS, via a 2 step process. The first step is the call to this method, which changes the transport's state to idle, with the second step being done by the audio server which detects this change and releases the transport. --- profiles/audio/transport.c | 41 +++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index 80e4f564c..300145794 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -975,6 +975,9 @@ static gboolean get_endpoint(const GDBusPropertyTable *property, static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, void *data); +static DBusMessage *unselect_transport(DBusConnection *conn, DBusMessage *msg, + void *data); + static const GDBusMethodTable transport_methods[] = { { GDBUS_ASYNC_METHOD("Acquire", NULL, @@ -989,6 +992,8 @@ static const GDBusMethodTable transport_methods[] = { { GDBUS_ASYNC_METHOD("Release", NULL, NULL, release) }, { GDBUS_ASYNC_METHOD("Select", NULL, NULL, select_transport) }, + { GDBUS_ASYNC_METHOD("Unselect", + NULL, NULL, unselect_transport) }, { }, }; @@ -1295,13 +1300,22 @@ static void transport_update_playing(struct media_transport *transport, str_state[transport->state], playing); if (playing == FALSE) { - if ((transport->state == TRANSPORT_STATE_PENDING) || - (transport->state == TRANSPORT_STATE_BROADCASTING)) - transport_set_state(transport, TRANSPORT_STATE_IDLE); - else if (transport->state == TRANSPORT_STATE_ACTIVE) { - /* Remove owner */ - if (transport->owner != NULL) - media_transport_remove_owner(transport); + if (!strcmp(media_endpoint_get_uuid(transport->endpoint), + BCAA_SERVICE_UUID)) { + if ((transport->state == + TRANSPORT_STATE_BROADCASTING) || + (transport->state == TRANSPORT_STATE_ACTIVE)) + transport_set_state(transport, + TRANSPORT_STATE_IDLE); + } else { + if (transport->state == TRANSPORT_STATE_PENDING) + transport_set_state(transport, + TRANSPORT_STATE_IDLE); + else if (transport->state == TRANSPORT_STATE_ACTIVE) { + /* Remove owner */ + if (transport->owner != NULL) + media_transport_remove_owner(transport); + } } } else if (transport->state == TRANSPORT_STATE_IDLE) { if (!strcmp(media_endpoint_get_uuid(transport->endpoint), @@ -1332,6 +1346,19 @@ static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, return NULL; } +static DBusMessage *unselect_transport(DBusConnection *conn, DBusMessage *msg, + void *data) +{ + struct media_transport *transport = data; + + if (!strcmp(media_endpoint_get_uuid(transport->endpoint), + BAA_SERVICE_UUID)) { + transport_update_playing(transport, FALSE); + } + + return NULL; +} + static void sink_state_changed(struct btd_service *service, sink_state_t old_state, sink_state_t new_state, -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH BlueZ v3 8/8] client/player: Expose transport "unselect" method to the user 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu ` (6 preceding siblings ...) 2024-07-30 10:53 ` [PATCH BlueZ v3 7/8] transport: Add "unselect" method Vlad Pruteanu @ 2024-07-30 10:53 ` Vlad Pruteanu 7 siblings, 0 replies; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 10:53 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This exposes the "unselect" method for Broadcast transports. This allows the user to terminate the sync to a specific BIS, via a 2 step process. The first step is the call to this method, which changes the transport's state to idle, with the second step being done by the audio server which detects this change and releases the transport. --- client/player.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/client/player.c b/client/player.c index cc30022e1..51b9eeea5 100644 --- a/client/player.c +++ b/client/player.c @@ -4651,6 +4651,24 @@ static void select_reply(DBusMessage *message, void *user_data) return bt_shell_noninteractive_quit(EXIT_SUCCESS); } +static void unselect_reply(DBusMessage *message, void *user_data) +{ + DBusError error; + + dbus_error_init(&error); + + if (dbus_set_error_from_message(&error, message) == TRUE) { + bt_shell_printf("Failed to unselect: %s\n", error.name); + dbus_error_free(&error); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } + + bt_shell_printf("Select successful"); + + return bt_shell_noninteractive_quit(EXIT_SUCCESS); +} + + static void prompt_acquire(const char *input, void *user_data) { GDBusProxy *proxy = user_data; @@ -4881,6 +4899,16 @@ static void transport_select(GDBusProxy *proxy, bool prompt) } } +static void transport_unselect(GDBusProxy *proxy, bool prompt) +{ + if (!g_dbus_proxy_method_call(proxy, "Unselect", NULL, + unselect_reply, proxy, NULL)) { + bt_shell_printf("Failed unselect transport\n"); + return; + } +} + + static void cmd_select_transport(int argc, char *argv[]) { GDBusProxy *proxy; @@ -4904,6 +4932,23 @@ static void cmd_select_transport(int argc, char *argv[]) } } +static void cmd_unselect_transport(int argc, char *argv[]) +{ + GDBusProxy *proxy; + int i; + + for (i = 1; i < argc; i++) { + proxy = g_dbus_proxy_lookup(transports, NULL, argv[i], + BLUEZ_MEDIA_TRANSPORT_INTERFACE); + if (!proxy) { + bt_shell_printf("Transport %s not found\n", argv[i]); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } + + transport_unselect(proxy, false); + } +} + static void release_reply(DBusMessage *message, void *user_data) { struct transport *transport = user_data; @@ -5335,6 +5380,9 @@ static const struct bt_shell_menu transport_menu = { { "select", "<transport> [transport1...]", cmd_select_transport, "Select Transport", transport_generator }, + { "unselect", "<transport> [transport1...]", cmd_unselect_transport, + "Unselect Transport", + transport_generator }, {} }, }; -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH BlueZ v5 1/8] doc/media: Add 'broadcasting' state and 'Select' method @ 2024-07-31 6:17 Vlad Pruteanu 2024-07-31 11:12 ` Add 'broadcasting' state bluez.test.bot 0 siblings, 1 reply; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-31 6:17 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds a new state for transports created by the Broadcast Sink. Such transports will remain in the 'idle' state until the user calls 'Select' on them, at which point they will be moved to 'broadcasting'. This allows the user to select the desired BIS as the audio server automatically acquires transports that are in this state. --- doc/org.bluez.MediaTransport.rst | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/org.bluez.MediaTransport.rst b/doc/org.bluez.MediaTransport.rst index 6e95df8f2..c8aca0223 100644 --- a/doc/org.bluez.MediaTransport.rst +++ b/doc/org.bluez.MediaTransport.rst @@ -7,7 +7,7 @@ BlueZ D-Bus MediaTransport API documentation -------------------------------------------- :Version: BlueZ -:Date: September 2023 +:Date: July 2024 :Manual section: 5 :Manual group: Linux System Administration @@ -51,6 +51,20 @@ void Release() Releases file descriptor. +void Select() +````````````` + + Applicable only for transports created by a broadcast sink. This moves + the transport from 'idle' to 'broadcasting'. This allows the user to + select which BISes he wishes to sync to via a 2 step process: + 1) the user calls this method, changing the transport's state to idle + 2) the audio server detects that the transport is in the 'broadcasting' + state and automatically acquires it + + Possible Errors: + + :org.bluez.Error.NotAuthorized: + Properties ---------- @@ -84,6 +98,8 @@ string State [readonly] :"idle": not streaming :"pending": streaming but not acquired + :"broadcasting": streaming but not acquired, applicable only for transports + created by a broadcast sink :"active": streaming and acquired uint16 Delay [readwrite, optional] -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: Add 'broadcasting' state 2024-07-31 6:17 [PATCH BlueZ v5 1/8] doc/media: Add 'broadcasting' state and 'Select' method Vlad Pruteanu @ 2024-07-31 11:12 ` bluez.test.bot 0 siblings, 0 replies; 14+ messages in thread From: bluez.test.bot @ 2024-07-31 11:12 UTC (permalink / raw) To: linux-bluetooth, vlad.pruteanu [-- Attachment #1: Type: text/plain, Size: 2401 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=875317 ---Test result--- Test Summary: CheckPatch FAIL 3.86 seconds GitLint PASS 2.45 seconds BuildEll PASS 24.94 seconds BluezMake PASS 1679.68 seconds MakeCheck PASS 12.88 seconds MakeDistcheck PASS 179.69 seconds CheckValgrind PASS 253.70 seconds CheckSmatch PASS 359.35 seconds bluezmakeextell PASS 136.78 seconds IncrementalBuild PASS 12881.18 seconds ScanBuild PASS 1021.66 seconds Details ############################## Test: CheckPatch - FAIL Desc: Run checkpatch.pl script Output: [BlueZ,v5,3/8] transport: Add 'Select' method ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ /github/workspace/src/src/13748132.patch total: 3 errors, 0 warnings, 42 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. /github/workspace/src/src/13748132.patch has style problems, please review. NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS. --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH BlueZ v4 1/8] doc/media: Add 'broadcasting' state and 'select' method @ 2024-07-30 14:09 Vlad Pruteanu 2024-07-30 18:47 ` Add 'broadcasting' state bluez.test.bot 0 siblings, 1 reply; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-30 14:09 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds a new state for transports created by the Broadcast Sink. Such transports will remain in the 'idle' state until the user calls 'select' on them, at which point they will be moved to 'broadcasting'. This allows the user to select the desired BIS as the audio server automatically acquires transports that are in this state. --- doc/org.bluez.MediaTransport.rst | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/doc/org.bluez.MediaTransport.rst b/doc/org.bluez.MediaTransport.rst index 6e95df8f2..c23d1f59f 100644 --- a/doc/org.bluez.MediaTransport.rst +++ b/doc/org.bluez.MediaTransport.rst @@ -7,7 +7,7 @@ BlueZ D-Bus MediaTransport API documentation -------------------------------------------- :Version: BlueZ -:Date: September 2023 +:Date: July 2024 :Manual section: 5 :Manual group: Linux System Administration @@ -51,6 +51,20 @@ void Release() Releases file descriptor. +void Select_transport() +``````````````````````` + + Applicable only for transports created by a broadcast sink. This moves + the transport from 'idle' to 'broadcasting'. This allows the user to + select which BISes he wishes to sync to via a 2 step process: + 1) the user calls this method, changing the transport's state to idle + 2) the audio server detects that the transport is in the 'broadcasting' + state and automatically acquires it + + Possible Errors: + + :org.bluez.Error.NotAuthorized: + Properties ---------- @@ -84,6 +98,8 @@ string State [readonly] :"idle": not streaming :"pending": streaming but not acquired + :"broadcasting": streaming but not acquired, applicable only for transports + created by a broadcast sink :"active": streaming and acquired uint16 Delay [readwrite, optional] -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: Add 'broadcasting' state 2024-07-30 14:09 [PATCH BlueZ v4 1/8] doc/media: Add 'broadcasting' state and 'select' method Vlad Pruteanu @ 2024-07-30 18:47 ` bluez.test.bot 0 siblings, 0 replies; 14+ messages in thread From: bluez.test.bot @ 2024-07-30 18:47 UTC (permalink / raw) To: linux-bluetooth, vlad.pruteanu [-- Attachment #1: Type: text/plain, Size: 2401 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=875092 ---Test result--- Test Summary: CheckPatch FAIL 3.29 seconds GitLint PASS 2.08 seconds BuildEll PASS 24.72 seconds BluezMake PASS 1729.78 seconds MakeCheck PASS 13.71 seconds MakeDistcheck PASS 182.09 seconds CheckValgrind PASS 251.51 seconds CheckSmatch PASS 355.43 seconds bluezmakeextell PASS 121.61 seconds IncrementalBuild PASS 12670.36 seconds ScanBuild PASS 1027.60 seconds Details ############################## Test: CheckPatch - FAIL Desc: Run checkpatch.pl script Output: [BlueZ,v4,3/8] transport: Add "select" method ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ /github/workspace/src/src/13747448.patch total: 3 errors, 0 warnings, 42 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. /github/workspace/src/src/13747448.patch has style problems, please review. NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS. --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH BlueZ v2 1/5] doc/media: Add 'broadcasting' state and 'Select' method @ 2024-07-25 11:58 Vlad Pruteanu 2024-07-25 15:39 ` Add 'broadcasting' state bluez.test.bot 0 siblings, 1 reply; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-25 11:58 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds a new state for transports created by the Broadcast Sink. Such transports will remain in the 'idle' state until the user calls 'Select' on them, at which point they will be moved to 'broadcasting'. This allows the user to select the desired BIS as the audio server automatically acquires transports that are in this state. --- doc/org.bluez.MediaTransport.rst | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/doc/org.bluez.MediaTransport.rst b/doc/org.bluez.MediaTransport.rst index 6e95df8f2..47346d36b 100644 --- a/doc/org.bluez.MediaTransport.rst +++ b/doc/org.bluez.MediaTransport.rst @@ -7,7 +7,7 @@ BlueZ D-Bus MediaTransport API documentation -------------------------------------------- :Version: BlueZ -:Date: September 2023 +:Date: July 2024 :Manual section: 5 :Manual group: Linux System Administration @@ -51,6 +51,18 @@ void Release() Releases file descriptor. +void Select() +`````````````` + + Applicable only for transports created by a broadcast sink. This moves + the transport from 'idle' to 'broadcasting'. Since the audio server + automatically acquires transports that are in this state, the user can + thus select which BISes he wishes to sync to. + + Possible Errors: + + :org.bluez.Error.NotAuthorized: + Properties ---------- @@ -84,6 +96,8 @@ string State [readonly] :"idle": not streaming :"pending": streaming but not acquired + :"broadcasting": streaming but not acquired, applicable only for transports + created by a broadcast sink :"active": streaming and acquired uint16 Delay [readwrite, optional] -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: Add 'broadcasting' state 2024-07-25 11:58 [PATCH BlueZ v2 1/5] doc/media: Add 'broadcasting' state and 'Select' method Vlad Pruteanu @ 2024-07-25 15:39 ` bluez.test.bot 0 siblings, 0 replies; 14+ messages in thread From: bluez.test.bot @ 2024-07-25 15:39 UTC (permalink / raw) To: linux-bluetooth, vlad.pruteanu [-- Attachment #1: Type: text/plain, Size: 2399 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=873820 ---Test result--- Test Summary: CheckPatch FAIL 1.78 seconds GitLint PASS 1.47 seconds BuildEll PASS 24.43 seconds BluezMake PASS 1678.94 seconds MakeCheck PASS 13.63 seconds MakeDistcheck PASS 176.04 seconds CheckValgrind PASS 249.84 seconds CheckSmatch PASS 352.51 seconds bluezmakeextell PASS 118.54 seconds IncrementalBuild PASS 7869.54 seconds ScanBuild PASS 986.14 seconds Details ############################## Test: CheckPatch - FAIL Desc: Run checkpatch.pl script Output: [BlueZ,v2,3/5] transport: Add "select" method ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:975: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ /github/workspace/src/src/13741852.patch total: 3 errors, 0 warnings, 42 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. /github/workspace/src/src/13741852.patch has style problems, please review. NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS. --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH BlueZ 1/4] transport: Add 'broadcasting' state @ 2024-07-24 14:34 Vlad Pruteanu 2024-07-24 16:09 ` bluez.test.bot 0 siblings, 1 reply; 14+ messages in thread From: Vlad Pruteanu @ 2024-07-24 14:34 UTC (permalink / raw) To: linux-bluetooth Cc: mihai-octavian.urzica, iulia.tanasescu, andrei.istodorescu, luiz.dentz, pav, Vlad Pruteanu This adds a new state for transports created by the Broadcast Sink device as a result of scanning a Broadcast Source. Such transports will remain in the 'idle' state until the user selects them using 'transport.select', at which point they will be moved to 'broadcasting'. --- profiles/audio/transport.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index 922911cf3..017e60fe9 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -51,6 +51,7 @@ typedef enum { TRANSPORT_STATE_IDLE, /* Not acquired and suspended */ TRANSPORT_STATE_PENDING, /* Playing but not acquired */ + TRANSPORT_STATE_BROADCASTING,/* Bcast source waiting to be selected */ TRANSPORT_STATE_REQUESTING, /* Acquire in progress */ TRANSPORT_STATE_ACTIVE, /* Acquired and playing */ TRANSPORT_STATE_SUSPENDING, /* Release in progress */ @@ -59,6 +60,7 @@ typedef enum { static const char *str_state[] = { "TRANSPORT_STATE_IDLE", "TRANSPORT_STATE_PENDING", + "TRANSPORT_STATE_BROADCASTING", "TRANSPORT_STATE_REQUESTING", "TRANSPORT_STATE_ACTIVE", "TRANSPORT_STATE_SUSPENDING", @@ -139,6 +141,8 @@ static const char *state2str(transport_state_t state) return "idle"; case TRANSPORT_STATE_PENDING: return "pending"; + case TRANSPORT_STATE_BROADCASTING: + return "broadcasting"; case TRANSPORT_STATE_ACTIVE: case TRANSPORT_STATE_SUSPENDING: return "active"; @@ -679,7 +683,8 @@ static DBusMessage *try_acquire(DBusConnection *conn, DBusMessage *msg, if (transport->state >= TRANSPORT_STATE_REQUESTING) return btd_error_not_authorized(msg); - if (transport->state != TRANSPORT_STATE_PENDING) + if ((transport->state != TRANSPORT_STATE_PENDING) && + (transport->state != TRANSPORT_STATE_BROADCASTING)) return btd_error_not_available(msg); owner = media_owner_create(msg); @@ -1281,7 +1286,8 @@ static void transport_update_playing(struct media_transport *transport, str_state[transport->state], playing); if (playing == FALSE) { - if (transport->state == TRANSPORT_STATE_PENDING) + if ((transport->state == TRANSPORT_STATE_PENDING) || + (transport->state == TRANSPORT_STATE_BROADCASTING)) transport_set_state(transport, TRANSPORT_STATE_IDLE); else if (transport->state == TRANSPORT_STATE_ACTIVE) { /* Remove owner */ -- 2.40.1 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* RE: Add 'broadcasting' state 2024-07-24 14:34 [PATCH BlueZ 1/4] transport: " Vlad Pruteanu @ 2024-07-24 16:09 ` bluez.test.bot 0 siblings, 0 replies; 14+ messages in thread From: bluez.test.bot @ 2024-07-24 16:09 UTC (permalink / raw) To: linux-bluetooth, vlad.pruteanu [-- Attachment #1: Type: text/plain, Size: 45313 bytes --] This is automated email and please do not reply to this email! Dear submitter, Thank you for submitting the patches to the linux bluetooth mailing list. This is a CI test results with your patch series: PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=873560 ---Test result--- Test Summary: CheckPatch FAIL 2.47 seconds GitLint PASS 1.53 seconds BuildEll PASS 28.21 seconds BluezMake PASS 1811.67 seconds MakeCheck PASS 13.74 seconds MakeDistcheck PASS 180.28 seconds CheckValgrind PASS 255.03 seconds CheckSmatch PASS 361.48 seconds bluezmakeextell PASS 121.01 seconds IncrementalBuild FAIL 1579.92 seconds ScanBuild FAIL 1011.17 seconds Details ############################## Test: CheckPatch - FAIL Desc: Run checkpatch.pl script Output: [BlueZ,2/4] transport: Add "select" method ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:971: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:971: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ ERROR:SPACING: need consistent spacing around '*' (ctx:WxV) #128: FILE: profiles/audio/transport.c:971: +static DBusMessage *select_transport(DBusConnection *conn, DBusMessage *msg, ^ /github/workspace/src/src/13741023.patch total: 3 errors, 0 warnings, 42 lines checked NOTE: For some of the reported defects, checkpatch may be able to mechanically convert to the typical style using --fix or --fix-inplace. /github/workspace/src/src/13741023.patch has style problems, please review. NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO NOTE: If any of the errors are false positives, please report them to the maintainer, see CHECKPATCH in MAINTAINERS. ############################## Test: IncrementalBuild - FAIL Desc: Incremental build with the patches in the series Output: [BlueZ,1/4] transport: Add 'broadcasting' state tools/mgmt-tester.c: In function ‘main’: tools/mgmt-tester.c:12725:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 12725 | int main(int argc, char *argv[]) | ^~~~ unit/test-avdtp.c: In function ‘main’: unit/test-avdtp.c:766:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 766 | int main(int argc, char *argv[]) | ^~~~ unit/test-avrcp.c: In function ‘main’: unit/test-avrcp.c:989:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without 989 | int main(int argc, char *argv[]) | ^~~~ profiles/audio/transport.c: In function ‘state_in_use’: profiles/audio/transport.c:156:2: error: enumeration value ‘TRANSPORT_STATE_BROADCASTING’ not handled in switch [-Werror=switch] 156 | switch (state) { | ^~~~~~ cc1: all warnings being treated as errors make[1]: *** [Makefile:10224: profiles/audio/bluetoothd-transport.o] Error 1 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:4674: all] Error 2 ############################## Test: ScanBuild - FAIL Desc: Run Scan Build Output: src/shared/gatt-client.c:451:21: warning: Use of memory after it is freed gatt_db_unregister(op->client->db, op->db_id); ^~~~~~~~~~ src/shared/gatt-client.c:696:2: warning: Use of memory after it is freed discovery_op_complete(op, false, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:996:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1102:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1296:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1361:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1636:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1641:2: warning: Use of memory after it is freed discover_all(op); ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2145:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2153:8: warning: Use of memory after it is freed discovery_op_ref(op), ^~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3242:2: warning: Use of memory after it is freed complete_write_long_op(req, success, 0, false); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3264:2: warning: Use of memory after it is freed request_unref(req); ^~~~~~~~~~~~~~~~~~ 12 warnings generated. src/shared/gatt-client.c:451:21: warning: Use of memory after it is freed gatt_db_unregister(op->client->db, op->db_id); ^~~~~~~~~~ src/shared/gatt-client.c:696:2: warning: Use of memory after it is freed discovery_op_complete(op, false, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:996:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1102:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1296:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1361:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1636:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1641:2: warning: Use of memory after it is freed discover_all(op); ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2145:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2153:8: warning: Use of memory after it is freed discovery_op_ref(op), ^~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3242:2: warning: Use of memory after it is freed complete_write_long_op(req, success, 0, false); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3264:2: warning: Use of memory after it is freed request_unref(req); ^~~~~~~~~~~~~~~~~~ 12 warnings generated. tools/hciattach.c:816:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 10)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:864:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 4)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:886:8: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 10)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:908:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 4)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:929:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 4)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/hciattach.c:973:7: warning: Although the value stored to 'n' is used in the enclosing expression, the value is never actually read from 'n' if ((n = read_hci_event(fd, resp, 6)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 warnings generated. src/oui.c:50:2: warning: Value stored to 'hwdb' is never read hwdb = udev_hwdb_unref(hwdb); ^ ~~~~~~~~~~~~~~~~~~~~~ src/oui.c:53:2: warning: Value stored to 'udev' is never read udev = udev_unref(udev); ^ ~~~~~~~~~~~~~~~~ 2 warnings generated. tools/hcidump.c:180:9: warning: Potential leak of memory pointed to by 'dp' if (fds[i].fd == sock) ^~~ tools/hcidump.c:248:17: warning: Assigned value is garbage or undefined dh->ts_sec = htobl(frm.ts.tv_sec); ^ ~~~~~~~~~~~~~~~~~~~~ tools/hcidump.c:326:9: warning: 1st function call argument is an uninitialized value if (be32toh(dp.flags) & 0x02) { ^~~~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:341:20: warning: 1st function call argument is an uninitialized value frm.data_len = be32toh(dp.len); ^~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:346:14: warning: 1st function call argument is an uninitialized value opcode = be32toh(dp.flags) & 0xffff; ^~~~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:384:17: warning: Assigned value is garbage or undefined frm.data_len = btohs(dh.len); ^ ~~~~~~~~~~~~~ tools/hcidump.c:394:11: warning: Assigned value is garbage or undefined frm.len = frm.data_len; ^ ~~~~~~~~~~~~ tools/hcidump.c:398:9: warning: 1st function call argument is an uninitialized value ts = be64toh(ph.ts); ^~~~~~~~~~~~~~ /usr/include/endian.h:51:22: note: expanded from macro 'be64toh' # define be64toh(x) __bswap_64 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:403:13: warning: 1st function call argument is an uninitialized value frm.in = be32toh(dp.flags) & 0x01; ^~~~~~~~~~~~~~~~~ /usr/include/endian.h:46:22: note: expanded from macro 'be32toh' # define be32toh(x) __bswap_32 (x) ^~~~~~~~~~~~~~ tools/hcidump.c:408:11: warning: Assigned value is garbage or undefined frm.in = dh.in; ^ ~~~~~ tools/hcidump.c:437:7: warning: Null pointer passed to 1st parameter expecting 'nonnull' fd = open(file, open_flags, 0644); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ 11 warnings generated. tools/rfcomm.c:234:3: warning: Value stored to 'i' is never read i = execvp(cmdargv[0], cmdargv); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rfcomm.c:234:7: warning: Null pointer passed to 1st parameter expecting 'nonnull' i = execvp(cmdargv[0], cmdargv); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rfcomm.c:354:8: warning: Although the value stored to 'fd' is used in the enclosing expression, the value is never actually read from 'fd' if ((fd = open(devname, O_RDONLY | O_NOCTTY)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rfcomm.c:497:14: warning: Assigned value is garbage or undefined req.channel = raddr.rc_channel; ^ ~~~~~~~~~~~~~~~~ tools/rfcomm.c:515:8: warning: Although the value stored to 'fd' is used in the enclosing expression, the value is never actually read from 'fd' if ((fd = open(devname, O_RDONLY | O_NOCTTY)) < 0) { ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5 warnings generated. src/sdp-xml.c:126:10: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:300:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:338:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ 3 warnings generated. tools/ciptool.c:350:7: warning: 5th function call argument is an uninitialized value sk = do_connect(ctl, dev_id, &src, &dst, psm, (1 << CMTP_LOOPBACK)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. tools/sdptool.c:941:26: warning: Result of 'malloc' is converted to a pointer of type 'uint32_t', which is incompatible with sizeof operand type 'int' uint32_t *value_int = malloc(sizeof(int)); ~~~~~~~~~~ ^~~~~~ ~~~~~~~~~~~ tools/sdptool.c:980:4: warning: 1st function call argument is an uninitialized value free(allocArray[i]); ^~~~~~~~~~~~~~~~~~~ tools/sdptool.c:3777:2: warning: Potential leak of memory pointed to by 'si.name' return add_service(0, &si); ^~~~~~~~~~~~~~~~~~~~~~~~~~ tools/sdptool.c:4112:4: warning: Potential leak of memory pointed to by 'context.svc' return -1; ^~~~~~~~~ 4 warnings generated. tools/avtest.c:225:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:235:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:244:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:258:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:265:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:272:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:279:5: warning: Value stored to 'len' is never read len = write(sk, buf, ^ ~~~~~~~~~~~~~~ tools/avtest.c:291:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:295:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:304:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:308:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:317:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:324:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:346:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:350:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:359:5: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:363:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:376:5: warning: Value stored to 'len' is never read len = write(sk, buf, 4); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:380:5: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:387:4: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:397:4: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:562:3: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:570:3: warning: Value stored to 'len' is never read len = write(sk, buf, invalid ? 2 : 3); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/avtest.c:584:3: warning: Value stored to 'len' is never read len = write(sk, buf, 4 + sizeof(media_transport)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/avtest.c:597:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:607:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:619:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:634:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:646:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:655:3: warning: Value stored to 'len' is never read len = write(sk, buf, 3); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:662:3: warning: Value stored to 'len' is never read len = write(sk, buf, 2); ^ ~~~~~~~~~~~~~~~~~ tools/avtest.c:698:2: warning: Value stored to 'len' is never read len = write(sk, buf, AVCTP_HEADER_LENGTH + sizeof(play_pressed)); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 warnings generated. tools/btproxy.c:836:15: warning: Null pointer passed to 1st parameter expecting 'nonnull' tcp_port = atoi(optarg); ^~~~~~~~~~~~ tools/btproxy.c:839:8: warning: Null pointer passed to 1st parameter expecting 'nonnull' if (strlen(optarg) > 3 && !strncmp(optarg, "hci", 3)) ^~~~~~~~~~~~~~ 2 warnings generated. tools/create-image.c:76:3: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ tools/create-image.c:84:3: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ tools/create-image.c:92:3: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ tools/create-image.c:105:2: warning: Value stored to 'fd' is never read fd = -1; ^ ~~ 4 warnings generated. tools/btgatt-client.c:1824:2: warning: Value stored to 'argv' is never read argv += optind; ^ ~~~~~~ 1 warning generated. tools/btgatt-server.c:1212:2: warning: Value stored to 'argv' is never read argv -= optind; ^ ~~~~~~ 1 warning generated. tools/check-selftest.c:42:3: warning: Value stored to 'ptr' is never read ptr = fgets(result, sizeof(result), fp); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. tools/gatt-service.c:294:2: warning: 2nd function call argument is an uninitialized value chr_write(chr, value, len); ^~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. tools/obex-server-tool.c:133:13: warning: Null pointer passed to 1st parameter expecting 'nonnull' data->fd = open(name, O_WRONLY | O_CREAT | O_NOCTTY, 0600); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/obex-server-tool.c:192:13: warning: Null pointer passed to 1st parameter expecting 'nonnull' data->fd = open(name, O_RDONLY | O_NOCTTY, 0); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. tools/btpclientctl.c:402:3: warning: Value stored to 'bit' is never read bit = 0; ^ ~ tools/btpclientctl.c:1655:2: warning: Null pointer passed to 2nd parameter expecting 'nonnull' memcpy(cp->data, ad_data, ad_len); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. src/sdpd-request.c:211:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint16_t' pElem = malloc(sizeof(uint16_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ src/sdpd-request.c:239:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint32_t' pElem = malloc(sizeof(uint32_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ 2 warnings generated. android/avrcp-lib.c:1968:3: warning: 1st function call argument is an uninitialized value g_free(text[i]); ^~~~~~~~~~~~~~~ 1 warning generated. profiles/health/hdp.c:644:3: warning: Use of memory after it is freed hdp_tmp_dc_data_unref(dc_data); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ profiles/health/hdp.c:800:19: warning: Use of memory after it is freed path = g_strdup(chan->path); ^~~~~~~~~~ profiles/health/hdp.c:1779:6: warning: Use of memory after it is freed hdp_tmp_dc_data_ref(hdp_conn), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ profiles/health/hdp.c:1836:30: warning: Use of memory after it is freed reply = g_dbus_create_error(data->msg, ERROR_INTERFACE ".HealthError", ^~~~~~~~~ 4 warnings generated. profiles/health/hdp_util.c:1052:2: warning: Use of memory after it is freed conn_data->func(conn_data->data, gerr); ^~~~~~~~~~~~~~~ 1 warning generated. attrib/gatt.c:970:2: warning: Potential leak of memory pointed to by 'long_write' return prepare_write(long_write); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. src/sdpd-request.c:211:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint16_t' pElem = malloc(sizeof(uint16_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ src/sdpd-request.c:239:13: warning: Result of 'malloc' is converted to a pointer of type 'char', which is incompatible with sizeof operand type 'uint32_t' pElem = malloc(sizeof(uint32_t)); ^~~~~~ ~~~~~~~~~~~~~~~~ 2 warnings generated. src/sdp-xml.c:126:10: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:300:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ src/sdp-xml.c:338:11: warning: Assigned value is garbage or undefined buf[1] = data[i + 1]; ^ ~~~~~~~~~~~ 3 warnings generated. src/sdp-client.c:353:14: warning: Access to field 'cb' results in a dereference of a null pointer (*ctxt)->cb = cb; ~~~~~~~~~~~~^~~~ 1 warning generated. src/gatt-database.c:1155:10: warning: Value stored to 'bits' during its initialization is never read uint8_t bits[] = { BT_GATT_CHRC_CLI_FEAT_ROBUST_CACHING, ^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. gobex/gobex-header.c:67:2: warning: Null pointer passed to 2nd parameter expecting 'nonnull' memcpy(to, from, count); ^~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. gobex/gobex-transfer.c:423:7: warning: Use of memory after it is freed if (!g_slist_find(transfers, transfer)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. mesh/main.c:161:3: warning: Value stored to 'optarg' is never read optarg += strlen("auto"); ^ ~~~~~~~~~~~~~~ 1 warning generated. lib/hci.c:97:4: warning: Value stored to 'ptr' is never read ptr += sprintf(ptr, "%s", m->str); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. gdbus/watch.c:226:3: warning: Attempt to free released memory g_free(l->data); ^~~~~~~~~~~~~~~ 1 warning generated. lib/sdp.c:509:17: warning: Dereference of undefined pointer value uint8_t dtd = *(uint8_t *) dtds[i]; ^~~~~~~~~~~~~~~~~~~~ lib/sdp.c:539:17: warning: Dereference of undefined pointer value uint8_t dtd = *(uint8_t *) dtds[i]; ^~~~~~~~~~~~~~~~~~~~ lib/sdp.c:1885:26: warning: Potential leak of memory pointed to by 'ap' for (; pdlist; pdlist = pdlist->next) { ^~~~~~ lib/sdp.c:1899:6: warning: Potential leak of memory pointed to by 'pds' ap = sdp_list_append(ap, pds); ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ lib/sdp.c:1944:10: warning: Potential leak of memory pointed to by 'u' *seqp = sdp_list_append(*seqp, u); ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ lib/sdp.c:2049:4: warning: Potential leak of memory pointed to by 'lang' sdp_list_free(*langSeq, free); ^~~~~~~~~~~~~ lib/sdp.c:2138:9: warning: Potential leak of memory pointed to by 'profDesc' return 0; ^ lib/sdp.c:3270:8: warning: Potential leak of memory pointed to by 'pSvcRec' pSeq = sdp_list_append(pSeq, pSvcRec); ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lib/sdp.c:3271:9: warning: Potential leak of memory pointed to by 'pSeq' pdata += sizeof(uint32_t); ~~~~~~^~~~~~~~~~~~~~~~~~~ lib/sdp.c:4607:13: warning: Potential leak of memory pointed to by 'rec_list' } while (scanned < attr_list_len && pdata_len > 0); ^~~~~~~ lib/sdp.c:4903:40: warning: Potential leak of memory pointed to by 'tseq' for (d = sdpdata->val.dataseq; d; d = d->next) { ^ lib/sdp.c:4939:8: warning: Potential leak of memory pointed to by 'subseq' tseq = sdp_list_append(tseq, subseq); ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 12 warnings generated. src/shared/gatt-client.c:451:21: warning: Use of memory after it is freed gatt_db_unregister(op->client->db, op->db_id); ^~~~~~~~~~ src/shared/gatt-client.c:696:2: warning: Use of memory after it is freed discovery_op_complete(op, false, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:996:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1102:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1296:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1361:2: warning: Use of memory after it is freed discovery_op_complete(op, success, att_ecode); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1636:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:1641:2: warning: Use of memory after it is freed discover_all(op); ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2145:6: warning: Use of memory after it is freed if (read_db_hash(op)) { ^~~~~~~~~~~~~~~~ src/shared/gatt-client.c:2153:8: warning: Use of memory after it is freed discovery_op_ref(op), ^~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3242:2: warning: Use of memory after it is freed complete_write_long_op(req, success, 0, false); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/shared/gatt-client.c:3264:2: warning: Use of memory after it is freed request_unref(req); ^~~~~~~~~~~~~~~~~~ 12 warnings generated. monitor/l2cap.c:1638:4: warning: Value stored to 'data' is never read data += len; ^ ~~~ monitor/l2cap.c:1639:4: warning: Value stored to 'size' is never read size -= len; ^ ~~~ 2 warnings generated. monitor/hwdb.c:59:2: warning: Value stored to 'hwdb' is never read hwdb = udev_hwdb_unref(hwdb); ^ ~~~~~~~~~~~~~~~~~~~~~ monitor/hwdb.c:64:2: warning: Value stored to 'udev' is never read udev = udev_unref(udev); ^ ~~~~~~~~~~~~~~~~ monitor/hwdb.c:106:2: warning: Value stored to 'hwdb' is never read hwdb = udev_hwdb_unref(hwdb); ^ ~~~~~~~~~~~~~~~~~~~~~ monitor/hwdb.c:111:2: warning: Value stored to 'udev' is never read udev = udev_unref(udev); ^ ~~~~~~~~~~~~~~~~ 4 warnings generated. tools/rctest.c:747:9: warning: Null pointer passed to 1st parameter expecting 'nonnull' if (!strncasecmp(optarg, "hci", 3)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rctest.c:759:9: warning: Null pointer passed to 1st parameter expecting 'nonnull' if (!strncasecmp(optarg, "hci", 3)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/rctest.c:766:14: warning: Null pointer passed to 1st parameter expecting 'nonnull' channel = atoi(optarg); ^~~~~~~~~~~~ tools/rctest.c:770:9: warning: Null pointer passed to 1st parameter expecting 'nonnull' if (!strcasecmp(optarg, "spp")) ^~~~~~~~~~~~~~~~~~~~~~~~~ tools/rctest.c:795:13: warning: Null pointer passed to 1st parameter expecting 'nonnull' linger = atoi(optarg); ^~~~~~~~~~~~ tools/rctest.c:799:18: warning: Null pointer passed to 1st parameter expecting 'nonnull' defer_setup = atoi(optarg); ^~~~~~~~~~~~ tools/rctest.c:811:17: warning: Null pointer passed to 1st parameter expecting 'nonnull' num_frames = atoi(optarg); ^~~~~~~~~~~~ tools/rctest.c:815:12: warning: Null pointer passed to 1st parameter expecting 'nonnull' count = atoi(optarg); ^~~~~~~~~~~~ tools/rctest.c:819:12: warning: Null pointer passed to 1st parameter expecting 'nonnull' delay = atoi(optarg) * 1000; ^~~~~~~~~~~~ tools/rctest.c:823:15: warning: Null pointer passed to 1st parameter expecting 'nonnull' priority = atoi(optarg); ^~~~~~~~~~~~ 10 warnings generated. tools/bluemoon.c:1101:8: warning: Null pointer passed to 1st parameter expecting 'nonnull' if (strlen(optarg) > 3 && !strncmp(optarg, "hci", 3)) ^~~~~~~~~~~~~~ 1 warning generated. tools/meshctl.c:326:19: warning: Access to field 'mesh_devices' results in a dereference of a null pointer (loaded from variable 'default_ctrl') g_list_free_full(default_ctrl->mesh_devices, g_free); ^~~~~~~~~~~~~~~~~~~~~~~~~~ tools/meshctl.c:762:2: warning: 2nd function call argument is an uninitialized value bt_shell_printf("Attempting to disconnect from %s\n", addr); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tools/meshctl.c:1957:2: warning: Value stored to 'len' is never read len = len + extra + strlen("local_node.json"); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3 warnings generated. In file included from tools/mesh-gatt/crypto.c:32: ./src/shared/util.h:240:9: warning: 1st function call argument is an uninitialized value return be32_to_cpu(get_unaligned((const uint32_t *) ptr)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./src/shared/util.h:33:26: note: expanded from macro 'be32_to_cpu' #define be32_to_cpu(val) bswap_32(val) ^~~~~~~~~~~~~ /usr/include/byteswap.h:34:21: note: expanded from macro 'bswap_32' #define bswap_32(x) __bswap_32 (x) ^~~~~~~~~~~~~~ In file included from tools/mesh-gatt/crypto.c:32: ./src/shared/util.h:250:9: warning: 1st function call argument is an uninitialized value return be64_to_cpu(get_unaligned((const uint64_t *) ptr)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./src/shared/util.h:34:26: note: expanded from macro 'be64_to_cpu' #define be64_to_cpu(val) bswap_64(val) ^~~~~~~~~~~~~ /usr/include/byteswap.h:37:21: note: expanded from macro 'bswap_64' #define bswap_64(x) __bswap_64 (x) ^~~~~~~~~~~~~~ 2 warnings generated. ell/util.c:782:8: warning: The left operand of '>' is a garbage value if (x > UINT8_MAX) ~ ^ ell/util.c:800:8: warning: The left operand of '>' is a garbage value if (x > UINT16_MAX) ~ ^ 2 warnings generated. ell/pem.c:131:8: warning: Dereference of null pointer (loaded from variable 'eol') if (*eol == '\r' || *eol == '\n') ^~~~ ell/pem.c:166:18: warning: Dereference of null pointer (loaded from variable 'eol') if (buf_len && *eol == '\r' && *buf_ptr == '\n') { ^~~~ ell/pem.c:166:34: warning: Dereference of null pointer (loaded from variable 'buf_ptr') if (buf_len && *eol == '\r' && *buf_ptr == '\n') { ^~~~~~~~ ell/pem.c:304:11: warning: 1st function call argument is an uninitialized value result = pem_load_buffer(file.data, file.st.st_size, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ell/pem.c:469:9: warning: 1st function call argument is an uninitialized value list = l_pem_load_certificate_list_from_data(file.data, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5 warnings generated. ell/cert.c:644:41: warning: Access to field 'asn1_len' results in a dereference of a null pointer (loaded from variable 'cert') key = l_key_new(L_KEY_RSA, cert->asn1, cert->asn1_len); ^~~~~~~~~~~~~~ 1 warning generated. ell/gvariant-util.c:143:18: warning: The left operand of '>' is a garbage value if (alignment > max_alignment) ~~~~~~~~~ ^ ell/gvariant-util.c:456:5: warning: Dereference of null pointer !children[0].fixed_size) { ^~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. ell/ecc-external.c:68:24: warning: The left operand of '&' is a garbage value return (vli[bit / 64] & ((uint64_t) 1 << (bit % 64))); ~~~~~~~~~~~~~ ^ ell/ecc-external.c:160:18: warning: The right operand of '-' is a garbage value diff = left[i] - right[i] - borrow; ^ ~~~~~~~~ 2 warnings generated. In file included from tools/parser/amp.c:15: tools/parser/parser.h:121:16: warning: Dereference of null pointer time_t t = f->ts.tv_sec; ^~~~~~~~~~~~ tools/parser/parser.h:127:27: warning: Dereference of null pointer printf("%8lu.%06lu ", f->ts.tv_sec, f->ts.tv_usec); ^~~~~~~~~~~~ tools/parser/parser.h:129:18: warning: Access to field 'in' results in a dereference of a null pointer (loaded from variable 'f') printf("%c ", (f->in ? '>' : '<')); ^~~~~ 3 warnings generated. In file included from tools/parser/sdp.c:24: tools/parser/parser.h:121:16: warning: Dereference of null pointer time_t t = f->ts.tv_sec; ^~~~~~~~~~~~ tools/parser/parser.h:127:27: warning: Dereference of null pointer printf("%8lu.%06lu ", f->ts.tv_sec, f->ts.tv_usec); ^~~~~~~~~~~~ tools/parser/parser.h:129:18: warning: Access to field 'in' results in a dereference of a null pointer (loaded from variable 'f') printf("%c ", (f->in ? '>' : '<')); ^~~~~ 3 warnings generated. In file included from tools/parser/ppp.c:22: tools/parser/parser.h:156:2: warning: Undefined or garbage value returned to caller return *u8_ptr; ^~~~~~~~~~~~~~ tools/parser/ppp.c:108:30: warning: The left operand of '&' is a garbage value if (*((uint8_t *) frm->ptr) & 0x80) ~~~~~~~~~~~~~~~~~~~~~~~ ^ 2 warnings generated. emulator/serial.c:150:2: warning: Assigned value is garbage or undefined enum btdev_type uninitialized_var(type); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ emulator/serial.c:150:36: warning: Value stored to 'type' during its initialization is never read enum btdev_type uninitialized_var(type); ^~~~ emulator/serial.c:35:30: note: expanded from macro 'uninitialized_var' #define uninitialized_var(x) x = x ^ ~ emulator/serial.c:213:2: warning: Assigned value is garbage or undefined enum btdev_type uninitialized_var(dev_type); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ emulator/serial.c:213:36: warning: Value stored to 'dev_type' during its initialization is never read enum btdev_type uninitialized_var(dev_type); ^~~~~~~~ emulator/serial.c:35:30: note: expanded from macro 'uninitialized_var' #define uninitialized_var(x) x = x ^ ~ 4 warnings generated. emulator/server.c:200:2: warning: Assigned value is garbage or undefined enum btdev_type uninitialized_var(type); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ emulator/server.c:200:36: warning: Value stored to 'type' during its initialization is never read enum btdev_type uninitialized_var(type); ^~~~ emulator/server.c:36:30: note: expanded from macro 'uninitialized_var' #define uninitialized_var(x) x = x ^ ~ 2 warnings generated. emulator/b1ee.c:258:3: warning: Potential leak of memory pointed to by 'server_port' int opt; ^~~~~~~ emulator/b1ee.c:258:3: warning: Potential leak of memory pointed to by 'sniffer_port' int opt; ^~~~~~~ emulator/b1ee.c:289:2: warning: Value stored to 'argc' is never read argc = argc - optind; ^ ~~~~~~~~~~~~~ 3 warnings generated. emulator/btdev.c:1101:10: warning: Although the value stored to 'conn' is used in the enclosing expression, the value is never actually read from 'conn' while ((conn = queue_find(dev->conns, match_handle, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ emulator/btdev.c:1388:24: warning: Access to field 'link' results in a dereference of a null pointer (loaded from variable 'conn') pending_conn_del(dev, conn->link->dev); ^~~~~~~~~~ emulator/btdev.c:1510:13: warning: Access to field 'dev' results in a dereference of a null pointer (loaded from variable 'conn') send_event(conn->dev, BT_HCI_EVT_AUTH_COMPLETE, &ev, sizeof(ev)); ^~~~~~~~~ 3 warnings generated. gobex/gobex-header.c:67:2: warning: Null pointer passed to 2nd parameter expecting 'nonnull' memcpy(to, from, count); ^~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. gobex/gobex-transfer.c:423:7: warning: Use of memory after it is freed if (!g_slist_find(transfers, transfer)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. attrib/gatt.c:970:2: warning: Potential leak of memory pointed to by 'long_write' return prepare_write(long_write); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. tools/btpclient.c:2494:3: warning: Value stored to 'reply' is never read reply = l_dbus_message_new_error(ag.pending_req, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. android/avdtp.c:756:25: warning: Use of memory after it is freed session->prio_queue = g_slist_remove(session->prio_queue, req); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ android/avdtp.c:763:24: warning: Use of memory after it is freed session->req_queue = g_slist_remove(session->req_queue, req); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. profiles/audio/avdtp.c:899:25: warning: Use of memory after it is freed session->prio_queue = g_slist_remove(session->prio_queue, req); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ profiles/audio/avdtp.c:906:24: warning: Use of memory after it is freed session->req_queue = g_slist_remove(session->req_queue, req); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings generated. profiles/audio/a2dp.c:370:8: warning: Use of memory after it is freed if (!cb->resume_cb) ^~~~~~~~~~~~~ 1 warning generated. profiles/audio/transport.c: In function ‘state_in_use’: profiles/audio/transport.c:156:2: error: enumeration value ‘TRANSPORT_STATE_BROADCASTING’ not handled in switch [-Werror=switch] 156 | switch (state) { | ^~~~~~ cc1: all warnings being treated as errors make[1]: *** [Makefile:10224: profiles/audio/bluetoothd-transport.o] Error 1 make[1]: *** Waiting for unfinished jobs.... profiles/audio/media.c:1048:7: warning: Use of memory after it is freed if (req->cb != pac_select_cb) { ^~~~~~~ 1 warning generated. make: *** [Makefile:4674: all] Error 2 --- Regards, Linux Bluetooth ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-07-31 11:12 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-30 10:53 [PATCH BlueZ v3 0/8] Add 'broadcasting' state Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 1/8] doc/media: Add 'broadcasting' state and 'select' method Vlad Pruteanu 2024-07-30 12:37 ` Add 'broadcasting' state bluez.test.bot 2024-07-30 10:53 ` [PATCH BlueZ v3 2/8] transport: " Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 3/8] transport: Add "select" method Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 4/8] client/player: Expose transport "select" method to the user Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 5/8] transport: Broadcast sink: wait for user to select transport Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 6/8] doc/media: Add 'unselect' method Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 7/8] transport: Add "unselect" method Vlad Pruteanu 2024-07-30 10:53 ` [PATCH BlueZ v3 8/8] client/player: Expose transport "unselect" method to the user Vlad Pruteanu -- strict thread matches above, loose matches on Subject: below -- 2024-07-31 6:17 [PATCH BlueZ v5 1/8] doc/media: Add 'broadcasting' state and 'Select' method Vlad Pruteanu 2024-07-31 11:12 ` Add 'broadcasting' state bluez.test.bot 2024-07-30 14:09 [PATCH BlueZ v4 1/8] doc/media: Add 'broadcasting' state and 'select' method Vlad Pruteanu 2024-07-30 18:47 ` Add 'broadcasting' state bluez.test.bot 2024-07-25 11:58 [PATCH BlueZ v2 1/5] doc/media: Add 'broadcasting' state and 'Select' method Vlad Pruteanu 2024-07-25 15:39 ` Add 'broadcasting' state bluez.test.bot 2024-07-24 14:34 [PATCH BlueZ 1/4] transport: " Vlad Pruteanu 2024-07-24 16:09 ` bluez.test.bot
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.