From 4c878fb8f9a6b18e9e1a5a305c15b25ab1d07199 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Wed, 9 Oct 2019 13:29:07 +0300 Subject: [PATCH] tools/btproxy: Add support for ISO packets This enables proxing ISO packets. Signed-off-by: Anuj Jain Signed-off-by: Ayush Garg --- tools/btproxy.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/btproxy.c b/tools/btproxy.c index 210806d..ff02f62 100755 --- a/tools/btproxy.c +++ b/tools/btproxy.c @@ -72,14 +72,14 @@ static void hexdump_print(const char *str, void *user_data) } struct proxy { - /* Receive commands, ACL and SCO data */ + /* Receive commands, ACL, SCO and ISO data */ int host_fd; uint8_t host_buf[4096]; uint16_t host_len; bool host_shutdown; bool host_skip_first_zero; - /* Receive events, ACL and SCO data */ + /* Receive events, ACL, SCO and ISO data */ int dev_fd; uint8_t dev_buf[4096]; uint16_t dev_len; @@ -295,6 +295,7 @@ static void host_read_callback(int fd, uint32_t events, void *user_data) struct bt_hci_cmd_hdr *cmd_hdr; struct bt_hci_acl_hdr *acl_hdr; struct bt_hci_sco_hdr *sco_hdr; + struct bt_hci_iso_hdr *iso_hdr; ssize_t len; uint16_t pktlen; @@ -363,6 +364,13 @@ process_packet: sco_hdr = (void *) (proxy->host_buf + 1); pktlen = 1 + sizeof(*sco_hdr) + sco_hdr->dlen; break; + case BT_H4_ISO_PKT: + if (proxy->host_len < 1 + sizeof(*iso_hdr)) + return; + + iso_hdr = (void *) (proxy->host_buf + 1); + pktlen = 1 + sizeof(*iso_hdr) + cpu_to_le16(iso_hdr->dlen); + break; case 0xff: /* Notification packet from /dev/vhci - ignore */ proxy->host_len = 0; @@ -417,6 +425,7 @@ static void dev_read_callback(int fd, uint32_t events, void *user_data) struct bt_hci_evt_hdr *evt_hdr; struct bt_hci_acl_hdr *acl_hdr; struct bt_hci_sco_hdr *sco_hdr; + struct bt_hci_iso_hdr *iso_hdr; ssize_t len; uint16_t pktlen; @@ -475,6 +484,13 @@ process_packet: sco_hdr = (void *) (proxy->dev_buf + 1); pktlen = 1 + sizeof(*sco_hdr) + sco_hdr->dlen; break; + case BT_H4_ISO_PKT: + if (proxy->dev_len < 1 + sizeof(*iso_hdr)) + return; + + iso_hdr = (void *) (proxy->dev_buf + 1); + pktlen = 1 + sizeof(*iso_hdr) + cpu_to_le16(iso_hdr->dlen); + break; default: fprintf(stderr, "Received unknown device packet type 0x%02x\n", proxy->dev_buf[0]); -- 2.7.4