Loading EventLogTags.logtags +1 −0 Original line number Diff line number Diff line Loading @@ -35,3 +35,4 @@ 1010000 bt_hci_timeout (opcode|1) 1010001 bt_config_source (opcode|1) 1010002 bt_hci_unknown_type (hci_type|1) system/hci/src/hci_hal_h4.c +6 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ // when streaming time sensitive data (A2DP). #define HCI_THREAD_PRIORITY -19 #define BT_HCI_UNKNOWN_MESSAGE_TYPE_NUM 1010002 // Our interface and modules we import static const hci_hal_t interface; static const hci_hal_callbacks_t *callbacks; Loading Loading @@ -233,7 +235,10 @@ static void event_uart_has_bytes(eager_reader_t *reader, UNUSED_ATTR void *conte return; if (type_byte < DATA_TYPE_ACL || type_byte > DATA_TYPE_EVENT) { LOG_ERROR(LOG_TAG, "%s Unknown HCI message type. Dropping this byte 0x%x, min %x, max %x", __func__, type_byte, DATA_TYPE_ACL, DATA_TYPE_EVENT); LOG_ERROR(LOG_TAG, "%s Unknown HCI message type 0x%x (min=0x%x max=0x%x). Aborting...", __func__, type_byte, DATA_TYPE_ACL, DATA_TYPE_EVENT); LOG_EVENT_INT(BT_HCI_UNKNOWN_MESSAGE_TYPE_NUM, type_byte); assert(false && "Unknown HCI message type"); return; } Loading system/hci/test/hci_hal_h4_test.cpp +14 −11 Original line number Diff line number Diff line Loading @@ -192,17 +192,18 @@ static void expect_socket_data(int fd, char first_byte, char *data) { } } static void write_packet(int fd, char first_byte, char *data) { static void write_packet(int fd, char first_byte, const void *data, size_t datalen) { write(fd, &first_byte, 1); write(fd, data, strlen(data)); write(fd, data, datalen); } static void write_packet_reentry(int fd, char first_byte, char *data) { static void write_packet_reentry(int fd, char first_byte, const void *data, size_t datalen) { write(fd, &first_byte, 1); int length = strlen(data); for (int i = 0; i < length; i++) { write(fd, &data[i], 1); for (size_t i = 0; i < datalen; i++) { write(fd, static_cast<const uint8_t *>(data) + i, 1); semaphore_wait(reentry_semaphore); } } Loading @@ -226,10 +227,11 @@ TEST_F(HciHalH4Test, test_transmit) { TEST_F(HciHalH4Test, test_read_synchronous) { reset_for(read_synchronous); write_packet(sockfd[1], DATA_TYPE_ACL, acl_data); write_packet(sockfd[1], HCI_BLE_EVENT, corrupted_data); write_packet(sockfd[1], DATA_TYPE_SCO, sco_data); write_packet(sockfd[1], DATA_TYPE_EVENT, event_data); write_packet(sockfd[1], DATA_TYPE_ACL, acl_data, strlen(acl_data)); write_packet(sockfd[1], HCI_BLE_EVENT, corrupted_data, sizeof(corrupted_data)); write_packet(sockfd[1], DATA_TYPE_SCO, sco_data, strlen(sco_data)); write_packet(sockfd[1], DATA_TYPE_EVENT, event_data, strlen(event_data)); // Wait for all data to be received before calling the test good semaphore_wait(done); Loading @@ -242,7 +244,8 @@ TEST_F(HciHalH4Test, test_read_async_reentry) { reentry_semaphore = semaphore_new(0); reentry_i = 0; write_packet_reentry(sockfd[1], DATA_TYPE_ACL, sample_data3); write_packet_reentry(sockfd[1], DATA_TYPE_ACL, sample_data3, strlen(sample_data3)); // write_packet_reentry ensures the data has been received semaphore_free(reentry_semaphore); Loading Loading
EventLogTags.logtags +1 −0 Original line number Diff line number Diff line Loading @@ -35,3 +35,4 @@ 1010000 bt_hci_timeout (opcode|1) 1010001 bt_config_source (opcode|1) 1010002 bt_hci_unknown_type (hci_type|1)
system/hci/src/hci_hal_h4.c +6 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,8 @@ // when streaming time sensitive data (A2DP). #define HCI_THREAD_PRIORITY -19 #define BT_HCI_UNKNOWN_MESSAGE_TYPE_NUM 1010002 // Our interface and modules we import static const hci_hal_t interface; static const hci_hal_callbacks_t *callbacks; Loading Loading @@ -233,7 +235,10 @@ static void event_uart_has_bytes(eager_reader_t *reader, UNUSED_ATTR void *conte return; if (type_byte < DATA_TYPE_ACL || type_byte > DATA_TYPE_EVENT) { LOG_ERROR(LOG_TAG, "%s Unknown HCI message type. Dropping this byte 0x%x, min %x, max %x", __func__, type_byte, DATA_TYPE_ACL, DATA_TYPE_EVENT); LOG_ERROR(LOG_TAG, "%s Unknown HCI message type 0x%x (min=0x%x max=0x%x). Aborting...", __func__, type_byte, DATA_TYPE_ACL, DATA_TYPE_EVENT); LOG_EVENT_INT(BT_HCI_UNKNOWN_MESSAGE_TYPE_NUM, type_byte); assert(false && "Unknown HCI message type"); return; } Loading
system/hci/test/hci_hal_h4_test.cpp +14 −11 Original line number Diff line number Diff line Loading @@ -192,17 +192,18 @@ static void expect_socket_data(int fd, char first_byte, char *data) { } } static void write_packet(int fd, char first_byte, char *data) { static void write_packet(int fd, char first_byte, const void *data, size_t datalen) { write(fd, &first_byte, 1); write(fd, data, strlen(data)); write(fd, data, datalen); } static void write_packet_reentry(int fd, char first_byte, char *data) { static void write_packet_reentry(int fd, char first_byte, const void *data, size_t datalen) { write(fd, &first_byte, 1); int length = strlen(data); for (int i = 0; i < length; i++) { write(fd, &data[i], 1); for (size_t i = 0; i < datalen; i++) { write(fd, static_cast<const uint8_t *>(data) + i, 1); semaphore_wait(reentry_semaphore); } } Loading @@ -226,10 +227,11 @@ TEST_F(HciHalH4Test, test_transmit) { TEST_F(HciHalH4Test, test_read_synchronous) { reset_for(read_synchronous); write_packet(sockfd[1], DATA_TYPE_ACL, acl_data); write_packet(sockfd[1], HCI_BLE_EVENT, corrupted_data); write_packet(sockfd[1], DATA_TYPE_SCO, sco_data); write_packet(sockfd[1], DATA_TYPE_EVENT, event_data); write_packet(sockfd[1], DATA_TYPE_ACL, acl_data, strlen(acl_data)); write_packet(sockfd[1], HCI_BLE_EVENT, corrupted_data, sizeof(corrupted_data)); write_packet(sockfd[1], DATA_TYPE_SCO, sco_data, strlen(sco_data)); write_packet(sockfd[1], DATA_TYPE_EVENT, event_data, strlen(event_data)); // Wait for all data to be received before calling the test good semaphore_wait(done); Loading @@ -242,7 +244,8 @@ TEST_F(HciHalH4Test, test_read_async_reentry) { reentry_semaphore = semaphore_new(0); reentry_i = 0; write_packet_reentry(sockfd[1], DATA_TYPE_ACL, sample_data3); write_packet_reentry(sockfd[1], DATA_TYPE_ACL, sample_data3, strlen(sample_data3)); // write_packet_reentry ensures the data has been received semaphore_free(reentry_semaphore); Loading