diff --git a/src/hci.c b/src/hci.c index 41cb66574..5fad1f540 100644 --- a/src/hci.c +++ b/src/hci.c @@ -575,6 +575,27 @@ void packet_handler(uint8_t packet_type, uint8_t *packet, uint16_t size){ } } +static uint16_t packet_type_sizes[] = { + 0, HCI_ACL_2DH1_SIZE, HCI_ACL_3DH1_SIZE, HCI_ACL_DM1_SIZE, + HCI_ACL_DH1_SIZE, 0, 0, 0, + HCI_ACL_2DH3_SIZE, HCI_ACL_3DH3_SIZE, HCI_ACL_DM3_SIZE, HCI_ACL_DH3_SIZE, + HCI_ACL_2DH5_SIZE, HCI_ACL_3DH5_SIZE, HCI_ACL_DM5_SIZE, HCI_ACL_DH5_SIZE +}; + +uint16_t hci_acl_packet_types_for_buffer_size(uint16_t buffer_size){ + uint16_t packet_types = 0; + int i; + for (i=0;i<16;i++){ + if (packet_type_sizes[i] == 0) continue; + if (packet_type_sizes[i] <= buffer_size){ + packet_types |= 1 << i; + } + } + // flip bits for "may not be used" + packet_types ^= 0x3306; + return packet_types; +} + /** Register HCI packet handlers */ void hci_register_packet_handler(void (*handler)(uint8_t packet_type, uint8_t *packet, uint16_t size)){ hci_stack.packet_handler = handler; diff --git a/src/hci.h b/src/hci.h index 5081b7ccc..0bf51dd2d 100644 --- a/src/hci.h +++ b/src/hci.h @@ -69,7 +69,7 @@ extern "C" { #define HCI_ACL_DH5_SIZE 339 #define HCI_ACL_2DH3_SIZE 367 #define HCI_ACL_3DH3_SIZE 552 -#define HCI_ACL_2HH5_SIZE 679 +#define HCI_ACL_2DH5_SIZE 679 #define HCI_ACL_3DH5_SIZE 1021 // OGFs