tools/btproxy: Add support for ISO packets
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 9 Oct 2019 10:29:07 +0000 (13:29 +0300)
committerAyush Garg <ayush.garg@samsung.com>
Mon, 12 Apr 2021 09:00:48 +0000 (14:30 +0530)
This enables proxing ISO packets.

Signed-off-by: Anuj Jain <anuj01.jain@samsung.com>
Signed-off-by: Ayush Garg <ayush.garg@samsung.com>
tools/btproxy.c

index 210806d..ff02f62 100755 (executable)
@@ -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]);