hci_transport_h4: support ISO data packets

This commit is contained in:
Matthias Ringwald 2022-02-06 19:02:38 +01:00
parent 5027c49828
commit 0d5b1baf9a
3 changed files with 18 additions and 0 deletions

View File

@ -164,6 +164,7 @@ typedef enum {
#define HCI_ACL_DATA_PACKET 0x02
#define HCI_SCO_DATA_PACKET 0x03
#define HCI_EVENT_PACKET 0x04
#define HCI_ISO_DATA_PACKET 0x05
/**
* HCI Layer

View File

@ -79,6 +79,7 @@ extern "C" {
#define HCI_ACL_HEADER_SIZE 4
#define HCI_SCO_HEADER_SIZE 3
#define HCI_EVENT_HEADER_SIZE 2
#define HCI_ISO_HEADER_SIZE 4
#define HCI_EVENT_PAYLOAD_SIZE 255
#define HCI_CMD_PAYLOAD_SIZE 255

View File

@ -113,6 +113,7 @@ typedef enum {
H4_W4_EVENT_HEADER,
H4_W4_ACL_HEADER,
H4_W4_SCO_HEADER,
H4_W4_ISO_HEADER,
H4_W4_PAYLOAD,
} H4_STATE;
@ -243,6 +244,10 @@ static void hci_transport_h4_block_read(void){
bytes_to_read = HCI_SCO_HEADER_SIZE;
h4_state = H4_W4_SCO_HEADER;
break;
case HCI_ISO_DATA_PACKET:
bytes_to_read = HCI_ISO_HEADER_SIZE;
h4_state = H4_W4_SCO_HEADER;
break;
#ifdef ENABLE_EHCILL
case EHCILL_GO_TO_SLEEP_IND:
case EHCILL_GO_TO_SLEEP_ACK:
@ -292,6 +297,17 @@ static void hci_transport_h4_block_read(void){
h4_state = H4_W4_PAYLOAD;
break;
case H4_W4_ISO_HEADER:
bytes_to_read = little_endian_read_16( hci_packet, 3) & 0x3fff;
// check ISO length
if (bytes_to_read > (HCI_INCOMING_PACKET_BUFFER_SIZE - HCI_ACL_HEADER_SIZE)){
log_error("hci_transport_h4: invalid ISO payload len %d - only space for %u", bytes_to_read, HCI_INCOMING_PACKET_BUFFER_SIZE - HCI_ISO_HEADER_SIZE);
hci_transport_h4_reset_statemachine();
break;
}
h4_state = H4_W4_PAYLOAD;
break;
case H4_W4_PAYLOAD:
hci_transport_h4_packet_complete();
break;