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

Reply via email to