This is an automated email from the ASF dual-hosted git repository. sjanc pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
commit bbe32b73c8fe7195ed9102971f3d85c0407af756 Author: Szymon Janc <[email protected]> AuthorDate: Mon Apr 20 12:32:05 2026 +0200 nimble/transport/socket: Use choice for socket type selection This make it easier to properly configure transport and avoiding possible compilation errors. --- .github/targets_linux/native_btshell/syscfg.yml | 4 +- .../host/audio/targets/btshell_native/syscfg.yml | 4 +- nimble/transport/socket/src/ble_hci_socket.c | 152 +++++++++++---------- nimble/transport/socket/syscfg.yml | 44 ++++-- porting/targets/linux/syscfg.yml | 3 +- porting/targets/linux_blemesh/syscfg.yml | 3 +- porting/targets/nuttx/syscfg.yml | 3 +- porting/targets/porting_default/syscfg.yml | 3 +- 8 files changed, 119 insertions(+), 97 deletions(-) diff --git a/.github/targets_linux/native_btshell/syscfg.yml b/.github/targets_linux/native_btshell/syscfg.yml index e3d568e15..1dc0ea5d4 100644 --- a/.github/targets_linux/native_btshell/syscfg.yml +++ b/.github/targets_linux/native_btshell/syscfg.yml @@ -19,7 +19,5 @@ syscfg.vals: BLE_TRANSPORT_LL: socket - BLE_SOCK_USE_LINUX_BLUE: 1 - BLE_SOCK_LINUX_DEV: 0 - BLE_SOCK_USE_TCP: 0 + BLE_SOCK_TYPE: linux_blue diff --git a/nimble/host/audio/targets/btshell_native/syscfg.yml b/nimble/host/audio/targets/btshell_native/syscfg.yml index cf2d41048..b266a0864 100644 --- a/nimble/host/audio/targets/btshell_native/syscfg.yml +++ b/nimble/host/audio/targets/btshell_native/syscfg.yml @@ -52,9 +52,7 @@ syscfg.vals: BLE_PERIODIC_ADV_SYNC_TRANSFER: 1 BLE_PERIODIC_ADV_SYNC_BIGINFO_REPORTS: 1 - BLE_SOCK_USE_TCP: 0 - BLE_SOCK_USE_LINUX_BLUE: 1 - BLE_SOCK_LINUX_DEV: 1 + BLE_SOCK_TYPE: linux_blue BLE_TRANSPORT_HS: native BLE_TRANSPORT_LL: socket diff --git a/nimble/transport/socket/src/ble_hci_socket.c b/nimble/transport/socket/src/ble_hci_socket.c index d76c4dfa5..f095d173a 100644 --- a/nimble/transport/socket/src/ble_hci_socket.c +++ b/nimble/transport/socket/src/ble_hci_socket.c @@ -19,17 +19,17 @@ /* * Provides HCI transport over sockets. Either over - * TCP sockets, or Linux bluetooth socket. + * TCP sockets, or Linux Bluetooth socket or NuttX. * * E.g. to connect to TCP target, start in another window * socat -x PIPE:/dev/ttyACM1 TCP4-LISTEN:14433,fork,reuseaddr - * When building this package, set BLE_SOCK_USE_TCP=1 and + * When building this package, set BLE_SOCK_TYPE=linux_tcp and * BLE_SOCK_TCP_PORT controls the target port this transport * connects to. * * To use Linux Bluetooth sockets, create an interface: * sudo hciattach -r -n /dev/ttyUSB0 any 57600 - * And build this package with BLE_SOCK_USE_LINUX_BLUE=1, + * And build this package with BLE_SOCK_TYPE=linux_blue, * BLE_SOCK_LINUX_DEV=<interface index of the target interface> * */ @@ -45,13 +45,13 @@ #include <unistd.h> #include <sys/socket.h> -#if MYNEWT_VAL(BLE_SOCK_USE_TCP) +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_tcp) #include <sys/errno.h> #include <netinet/in.h> #include <arpa/inet.h> #endif -#if MYNEWT_VAL(BLE_SOCK_USE_LINUX_BLUE) +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_blue) #include <sys/errno.h> #define BTPROTO_HCI 1 #define HCI_CHANNEL_RAW 0 @@ -66,7 +66,9 @@ struct sockaddr_hci { unsigned short hci_dev; unsigned short hci_channel; }; -#elif MYNEWT_VAL(BLE_SOCK_USE_NUTTX) +#endif + +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, nuttx) #include <errno.h> #include <netpacket/bluetooth.h> #endif @@ -170,15 +172,20 @@ static struct ble_hci_sock_state { uint8_t rx_data[512]; } ble_hci_sock_state; -#if MYNEWT_VAL(BLE_SOCK_USE_TCP) +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_tcp) static int s_ble_hci_device = MYNEWT_VAL(BLE_SOCK_TCP_PORT); -#elif MYNEWT_VAL(BLE_SOCK_USE_LINUX_BLUE) +#endif + +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_blue) static int s_ble_hci_device = MYNEWT_VAL(BLE_SOCK_LINUX_DEV); -#elif MYNEWT_VAL(BLE_SOCK_USE_NUTTX) +#endif + +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, nuttx) static int s_ble_hci_device = 0; #endif -#if MYNEWT_VAL(BLE_SOCK_USE_LINUX_BLUE) || MYNEWT_VAL(BLE_SOCK_USE_TCP) +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_blue) || \ + MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_tcp) static int ble_hci_sock_acl_tx(struct os_mbuf *om) { @@ -220,62 +227,7 @@ ble_hci_sock_acl_tx(struct os_mbuf *om) } return 0; } -#elif MYNEWT_VAL(BLE_SOCK_USE_NUTTX) -static int -ble_hci_sock_acl_tx(struct os_mbuf *om) -{ - size_t len; - uint8_t *buf; - int i; - struct os_mbuf *m; - struct sockaddr_hci addr; - addr.hci_family = AF_BLUETOOTH; - addr.hci_channel = HCI_CHANNEL_RAW; - addr.hci_dev = 0; - - memcpy(&addr, &addr, sizeof(struct sockaddr_hci)); - - len = 1; - - for (m = om; m; m = SLIST_NEXT(m, om_next)) { - len += m->om_len; - } - - buf = (uint8_t *)malloc(len); - - buf[0] = BLE_HCI_UART_H4_ACL; - - i = 1; - for (m = om; m; m = SLIST_NEXT(m, om_next)) { - memcpy(&buf[i], m->om_data, m->om_len); - i += m->om_len; - } - - STATS_INC(hci_sock_stats, omsg); - STATS_INC(hci_sock_stats, oacl); - STATS_INCN(hci_sock_stats, obytes, OS_MBUF_PKTLEN(om) + 1); - - i = sendto(ble_hci_sock_state.sock, buf, len, 0, - (struct sockaddr *)&addr, sizeof(struct sockaddr_hci)); - - free(buf); - - os_mbuf_free_chain(om); - if (i != OS_MBUF_PKTLEN(om) + 1) { - if (i < 0) { - dprintf(1, "sendto() failed : %d\n", errno); - } else { - dprintf(1, "sendto() partial write: %d\n", i); - } - STATS_INC(hci_sock_stats, oerr); - return BLE_ERR_MEM_CAPACITY; - } - return 0; -} -#endif - -#if MYNEWT_VAL(BLE_SOCK_USE_LINUX_BLUE) || MYNEWT_VAL(BLE_SOCK_USE_TCP) static int ble_hci_sock_iso_tx(struct os_mbuf *om) { @@ -317,9 +269,7 @@ ble_hci_sock_iso_tx(struct os_mbuf *om) } return 0; } -#endif /* BLE_SOCK_USE_LINUX_BLUE */ -#if MYNEWT_VAL(BLE_SOCK_USE_LINUX_BLUE) static int ble_hci_sock_cmdevt_tx(uint8_t *hci_ev, uint8_t h4_type) { @@ -368,7 +318,62 @@ ble_hci_sock_cmdevt_tx(uint8_t *hci_ev, uint8_t h4_type) return 0; } -#elif MYNEWT_VAL(BLE_SOCK_USE_NUTTX) +#endif + +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_nuttx) +static int +ble_hci_sock_acl_tx(struct os_mbuf *om) +{ + size_t len; + uint8_t *buf; + int i; + struct os_mbuf *m; + struct sockaddr_hci addr; + + addr.hci_family = AF_BLUETOOTH; + addr.hci_channel = HCI_CHANNEL_RAW; + addr.hci_dev = 0; + + memcpy(&addr, &addr, sizeof(struct sockaddr_hci)); + + len = 1; + + for (m = om; m; m = SLIST_NEXT(m, om_next)) { + len += m->om_len; + } + + buf = (uint8_t *)malloc(len); + + buf[0] = BLE_HCI_UART_H4_ACL; + + i = 1; + for (m = om; m; m = SLIST_NEXT(m, om_next)) { + memcpy(&buf[i], m->om_data, m->om_len); + i += m->om_len; + } + + STATS_INC(hci_sock_stats, omsg); + STATS_INC(hci_sock_stats, oacl); + STATS_INCN(hci_sock_stats, obytes, OS_MBUF_PKTLEN(om) + 1); + + i = sendto(ble_hci_sock_state.sock, buf, len, 0, (struct sockaddr *)&addr, + sizeof(struct sockaddr_hci)); + + free(buf); + + os_mbuf_free_chain(om); + if (i != OS_MBUF_PKTLEN(om) + 1) { + if (i < 0) { + dprintf(1, "sendto() failed : %d\n", errno); + } else { + dprintf(1, "sendto() partial write: %d\n", i); + } + STATS_INC(hci_sock_stats, oerr); + return BLE_ERR_MEM_CAPACITY; + } + return 0; +} + static int ble_hci_sock_cmdevt_tx(uint8_t *hci_ev, uint8_t h4_type) { @@ -594,7 +599,7 @@ ble_hci_sock_rx_ev(struct ble_npl_event *ev) } } -#if MYNEWT_VAL(BLE_SOCK_USE_TCP) +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_tcp) static int ble_hci_sock_config(void) { @@ -653,7 +658,7 @@ err: } #endif -#if MYNEWT_VAL(BLE_SOCK_USE_LINUX_BLUE) +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_blue) static int ble_hci_sock_config(void) { @@ -711,7 +716,9 @@ err: } return BLE_ERR_HW_FAIL; } -#elif MYNEWT_VAL(BLE_SOCK_USE_NUTTX) +#endif + +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_nuttx) static int ble_hci_sock_config(void) { @@ -915,7 +922,8 @@ ble_hci_sock_init(void) SYSINIT_PANIC_ASSERT(rc == 0); } -#if MYNEWT_VAL(BLE_SOCK_USE_LINUX_BLUE) || MYNEWT_VAL(BLE_SOCK_USE_TCP) +#if MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_blue) || \ + MYNEWT_VAL_CHOICE(BLE_SOCK_TYPE, linux_tcp) int ble_transport_to_ll_iso_impl(struct os_mbuf *om) { diff --git a/nimble/transport/socket/syscfg.yml b/nimble/transport/socket/syscfg.yml index c74f056c5..ebe37b76b 100644 --- a/nimble/transport/socket/syscfg.yml +++ b/nimble/transport/socket/syscfg.yml @@ -17,26 +17,23 @@ # syscfg.defs: - BLE_SOCK_USE_TCP: - description: 'Use TCP socket, connects to BLE_SOCK_TCP_PORT' - value: 1 + BLE_SOCK_TYPE: + description: > + Select type of socket to be used. + value: linux_tcp + choices: + - linux_blue + - linux_tcp + - nuttx BLE_SOCK_TCP_PORT: description: 'ipv4 tcp port to connect to' value: 14433 - BLE_SOCK_USE_LINUX_BLUE: - description: 'Use Linux bluetooth raw socket' - value: 0 - BLE_SOCK_LINUX_DEV: description: 'linux kernel device' value: 0 - BLE_SOCK_USE_NUTTX: - description: 'Use NuttX socket' - value: 0 - BLE_SOCK_TASK_PRIO: description: 'Priority of the HCI socket task.' type: task_priority @@ -50,3 +47,28 @@ syscfg.defs: description: > Sysinit stage for the socket BLE transport. value: 500 + +# Deprecated settings + BLE_SOCK_USE_TCP: + description: 'Use BLE_SOCK_TYPE:linux_tcp' + value: 0 + deprecated: 1 + + BLE_SOCK_USE_LINUX_BLUE: + description: 'Use BLE_SOCK_TYPE:linux_bluez' + value: 0 + deprecated: 1 + + BLE_SOCK_USE_NUTTX: + description: 'Use BLE_SOCK_TYPE:nuttx' + value: 0 + deprecated: 1 + +syscfg.vals.BLE_SOCK_USE_TCP: + BLE_SOCK_TYPE: linux_tcp + +syscfg.vals.BLE_SOCK_USE_LINUX_BLUE: + BLE_SOCK_TYPE: linux_blue + +syscfg.vals.BLE_SOCK_USE_NUTTX: + BLE_SOCK_TYPE: nuttx diff --git a/porting/targets/linux/syscfg.yml b/porting/targets/linux/syscfg.yml index e5faa6277..2e3aa3085 100644 --- a/porting/targets/linux/syscfg.yml +++ b/porting/targets/linux/syscfg.yml @@ -18,8 +18,7 @@ syscfg.vals: BLE_TRANSPORT_LL: socket - BLE_SOCK_USE_TCP: 0 - BLE_SOCK_USE_LINUX_BLUE: 1 + BLE_SOCK_TYPE: linux_blue BLE_SOCK_TASK_PRIO: 3 BLE_SOCK_STACK_SIZE: 1028 diff --git a/porting/targets/linux_blemesh/syscfg.yml b/porting/targets/linux_blemesh/syscfg.yml index b5e48f440..9d7f1c750 100644 --- a/porting/targets/linux_blemesh/syscfg.yml +++ b/porting/targets/linux_blemesh/syscfg.yml @@ -44,8 +44,7 @@ syscfg.vals: CONFIG_NFFS: 0 BLE_TRANSPORT_LL: socket - BLE_SOCK_USE_TCP: 0 - BLE_SOCK_USE_LINUX_BLUE: 1 + BLE_SOCK_TYPE: linux_blue BLE_SOCK_TASK_PRIO: 3 BLE_SOCK_STACK_SIZE: 1028 diff --git a/porting/targets/nuttx/syscfg.yml b/porting/targets/nuttx/syscfg.yml index 98ec29bf3..9be212025 100644 --- a/porting/targets/nuttx/syscfg.yml +++ b/porting/targets/nuttx/syscfg.yml @@ -18,8 +18,7 @@ syscfg.vals: BLE_TRANSPORT_LL: socket - BLE_SOCK_USE_TCP: 0 - BLE_SOCK_USE_NUTTX: 1 + BLE_SOCK_TYPE: nuttx BLE_SOCK_TASK_PRIO: 3 BLE_SOCK_STACK_SIZE: 1028 BLE_LL_CFG_FEAT_LL_PRIVACY: 0 diff --git a/porting/targets/porting_default/syscfg.yml b/porting/targets/porting_default/syscfg.yml index cb6cda18e..999986007 100644 --- a/porting/targets/porting_default/syscfg.yml +++ b/porting/targets/porting_default/syscfg.yml @@ -18,5 +18,4 @@ syscfg.vals: BLE_TRANSPORT_LL: socket - BLE_SOCK_USE_TCP: 0 - BLE_SOCK_USE_LINUX_BLUE: 1 + BLE_SOCK_TYPE: linux_blue
