This is an automated email from the ASF dual-hosted git repository.
janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 263e5d4d nimble/transport/socket: Add ISO Tx transport support
263e5d4d is described below
commit 263e5d4d40f548292a1e3263a9bf7a19ca01e681
Author: Mariusz Skamra <[email protected]>
AuthorDate: Fri Apr 26 15:22:23 2024 +0200
nimble/transport/socket: Add ISO Tx transport support
Add support for sending ISO data on native.
---
nimble/transport/socket/src/ble_hci_socket.c | 50 ++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/nimble/transport/socket/src/ble_hci_socket.c
b/nimble/transport/socket/src/ble_hci_socket.c
index 41975cac..c0581c63 100644
--- a/nimble/transport/socket/src/ble_hci_socket.c
+++ b/nimble/transport/socket/src/ble_hci_socket.c
@@ -277,6 +277,50 @@ ble_hci_sock_acl_tx(struct os_mbuf *om)
#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)
+{
+ struct msghdr msg;
+ struct iovec iov[8];
+ int i;
+ struct os_mbuf *m;
+ uint8_t ch;
+
+ memset(&msg, 0, sizeof(msg));
+ memset(iov, 0, sizeof(iov));
+
+ msg.msg_iov = iov;
+
+ ch = BLE_HCI_UART_H4_ISO;
+ iov[0].iov_len = 1;
+ iov[0].iov_base = &ch;
+ i = 1;
+ for (m = om; m; m = SLIST_NEXT(m, om_next)) {
+ iov[i].iov_base = m->om_data;
+ iov[i].iov_len = m->om_len;
+ i++;
+ }
+ msg.msg_iovlen = i;
+
+ STATS_INC(hci_sock_stats, omsg);
+ STATS_INC(hci_sock_stats, oiso);
+ STATS_INCN(hci_sock_stats, obytes, OS_MBUF_PKTLEN(om) + 1);
+ i = sendmsg(ble_hci_sock_state.sock, &msg, 0);
+ os_mbuf_free_chain(om);
+ if (i != OS_MBUF_PKTLEN(om) + 1) {
+ if (i < 0) {
+ dprintf(1, "sendmsg() failed : %d\n", errno);
+ } else {
+ dprintf(1, "sendmsg() partial write: %d\n", i);
+ }
+ STATS_INC(hci_sock_stats, oerr);
+ return BLE_ERR_MEM_CAPACITY;
+ }
+ 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)
{
struct msghdr msg;
@@ -871,6 +915,12 @@ ble_hci_sock_init(void)
SYSINIT_PANIC_ASSERT(rc == 0);
}
+int
+ble_transport_to_ll_iso_impl(struct os_mbuf *om)
+{
+ return ble_hci_sock_iso_tx(om);
+}
+
void
ble_transport_ll_init(void)
{