diff --git a/port/ez430-rf2560/src/main.c b/port/ez430-rf2560/src/main.c index a46d2dff8..880964d74 100644 --- a/port/ez430-rf2560/src/main.c +++ b/port/ez430-rf2560/src/main.c @@ -77,9 +77,32 @@ static btstack_packet_callback_registration_t hci_event_callback_registration; static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ if (packet_type != HCI_EVENT_PACKET) return; - if (hci_event_packet_get_type(packet) != BTSTACK_EVENT_STATE) return; - if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; - printf("BTstack up and running.\n"); + switch(hci_event_packet_get_type(packet)){ + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; + printf("BTstack up and running.\n"); + break; + case HCI_EVENT_COMMAND_COMPLETE: + if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_local_version_information)){ + uint16_t manufacturer = little_endian_read_16(packet, 10); + uint16_t lmp_subversion = little_endian_read_16(packet, 12); + // assert manufacturer is TI + if (manufacturer != COMPANY_ID_TEXAS_INSTRUMENTS_INC){ + printf("ERROR: Expected Bluetooth Chipset from TI but got manufacturer 0x%04x\n", manufacturer); + break; + } + // assert correct init script is used based on expected lmp_subversion + if (lmp_subversion != btstack_chipset_cc256x_lmp_subversion()){ + printf("Error: LMP Subversion does not match initscript! "); + printf("Your initscripts is for %s chipset\n", btstack_chipset_cc256x_lmp_subversion() < lmp_subversion ? "an older" : "a newer"); + printf("Please update Makefile to include the appropriate bluetooth_init_cc256???.c file\n"); + break; + } + } + break; + default: + break; + } } // main diff --git a/port/msp-exp430f5438-cc2564b/src/main.c b/port/msp-exp430f5438-cc2564b/src/main.c index 2c31fc5c9..0495f909f 100644 --- a/port/msp-exp430f5438-cc2564b/src/main.c +++ b/port/msp-exp430f5438-cc2564b/src/main.c @@ -96,9 +96,32 @@ static btstack_packet_callback_registration_t hci_event_callback_registration; static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ if (packet_type != HCI_EVENT_PACKET) return; - if (hci_event_packet_get_type(packet) != BTSTACK_EVENT_STATE) return; - if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; - printf("BTstack up and running.\n"); + switch(hci_event_packet_get_type(packet)){ + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; + printf("BTstack up and running.\n"); + break; + case HCI_EVENT_COMMAND_COMPLETE: + if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_local_version_information)){ + uint16_t manufacturer = little_endian_read_16(packet, 10); + uint16_t lmp_subversion = little_endian_read_16(packet, 12); + // assert manufacturer is TI + if (manufacturer != COMPANY_ID_TEXAS_INSTRUMENTS_INC){ + printf("ERROR: Expected Bluetooth Chipset from TI but got manufacturer 0x%04x\n", manufacturer); + break; + } + // assert correct init script is used based on expected lmp_subversion + if (lmp_subversion != btstack_chipset_cc256x_lmp_subversion()){ + printf("Error: LMP Subversion does not match initscript! "); + printf("Your initscripts is for %s chipset\n", btstack_chipset_cc256x_lmp_subversion() < lmp_subversion ? "an older" : "a newer"); + printf("Please update Makefile to include the appropriate bluetooth_init_cc256???.c file\n"); + break; + } + } + break; + default: + break; + } } static void btstack_setup(void){ diff --git a/port/msp430f5229lp-cc2564b/src/main.c b/port/msp430f5229lp-cc2564b/src/main.c index 837995d03..1fcc3b087 100644 --- a/port/msp430f5229lp-cc2564b/src/main.c +++ b/port/msp430f5229lp-cc2564b/src/main.c @@ -100,9 +100,32 @@ static btstack_packet_callback_registration_t hci_event_callback_registration; static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ if (packet_type != HCI_EVENT_PACKET) return; - if (hci_event_packet_get_type(packet) != BTSTACK_EVENT_STATE) return; - if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; - printf("BTstack up and running.\n"); + switch(hci_event_packet_get_type(packet)){ + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; + printf("BTstack up and running.\n"); + break; + case HCI_EVENT_COMMAND_COMPLETE: + if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_local_version_information)){ + uint16_t manufacturer = little_endian_read_16(packet, 10); + uint16_t lmp_subversion = little_endian_read_16(packet, 12); + // assert manufacturer is TI + if (manufacturer != COMPANY_ID_TEXAS_INSTRUMENTS_INC){ + printf("ERROR: Expected Bluetooth Chipset from TI but got manufacturer 0x%04x\n", manufacturer); + break; + } + // assert correct init script is used based on expected lmp_subversion + if (lmp_subversion != btstack_chipset_cc256x_lmp_subversion()){ + printf("Error: LMP Subversion does not match initscript! "); + printf("Your initscripts is for %s chipset\n", btstack_chipset_cc256x_lmp_subversion() < lmp_subversion ? "an older" : "a newer"); + printf("Please update Makefile to include the appropriate bluetooth_init_cc256???.c file\n"); + break; + } + } + break; + default: + break; + } } static void btstack_setup(void){ diff --git a/port/stm32-f103rb-nucleo/main.c b/port/stm32-f103rb-nucleo/main.c index c07828bd1..3beaf7873 100644 --- a/port/stm32-f103rb-nucleo/main.c +++ b/port/stm32-f103rb-nucleo/main.c @@ -416,9 +416,32 @@ static const hci_transport_config_uart_t config = { static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ if (packet_type != HCI_EVENT_PACKET) return; - if (hci_event_packet_get_type(packet) != BTSTACK_EVENT_STATE) return; - if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; - printf("BTstack up and running.\n"); + switch(hci_event_packet_get_type(packet)){ + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) return; + printf("BTstack up and running.\n"); + break; + case HCI_EVENT_COMMAND_COMPLETE: + if (HCI_EVENT_IS_COMMAND_COMPLETE(packet, hci_read_local_version_information)){ + uint16_t manufacturer = little_endian_read_16(packet, 10); + uint16_t lmp_subversion = little_endian_read_16(packet, 12); + // assert manufacturer is TI + if (manufacturer != COMPANY_ID_TEXAS_INSTRUMENTS_INC){ + printf("ERROR: Expected Bluetooth Chipset from TI but got manufacturer 0x%04x\n", manufacturer); + break; + } + // assert correct init script is used based on expected lmp_subversion + if (lmp_subversion != btstack_chipset_cc256x_lmp_subversion()){ + printf("Error: LMP Subversion does not match initscript! "); + printf("Your initscripts is for %s chipset\n", btstack_chipset_cc256x_lmp_subversion() < lmp_subversion ? "an older" : "a newer"); + printf("Please update Makefile to include the appropriate bluetooth_init_cc256???.c file\n"); + break; + } + } + break; + default: + break; + } } int main(void)