mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-02-01 03:32:47 +00:00
hci: move check for need_baud_change to run function
This commit is contained in:
parent
4cb846c806
commit
f4c579d45b
73
src/hci.c
73
src/hci.c
@ -1426,6 +1426,17 @@ static void hci_initializing_next_state(void){
|
|||||||
// assumption: hci_can_send_command_packet_now() == true
|
// assumption: hci_can_send_command_packet_now() == true
|
||||||
static void hci_initializing_run(void){
|
static void hci_initializing_run(void){
|
||||||
log_debug("hci_initializing_run: substate %u, can send %u", hci_stack->substate, hci_can_send_command_packet_now());
|
log_debug("hci_initializing_run: substate %u, can send %u", hci_stack->substate, hci_can_send_command_packet_now());
|
||||||
|
|
||||||
|
bool need_baud_change = false;
|
||||||
|
|
||||||
|
#ifndef HAVE_HOST_CONTROLLER_API
|
||||||
|
need_baud_change = hci_stack->config
|
||||||
|
&& hci_stack->chipset
|
||||||
|
&& hci_stack->chipset->set_baudrate_command
|
||||||
|
&& hci_stack->hci_transport->set_baudrate
|
||||||
|
&& ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (hci_stack->substate){
|
switch (hci_stack->substate){
|
||||||
case HCI_INIT_SEND_RESET:
|
case HCI_INIT_SEND_RESET:
|
||||||
hci_state_reset();
|
hci_state_reset();
|
||||||
@ -1465,20 +1476,6 @@ static void hci_initializing_run(void){
|
|||||||
hci_stack->substate = HCI_INIT_W4_SEND_RESET_ST_WARM_BOOT;
|
hci_stack->substate = HCI_INIT_W4_SEND_RESET_ST_WARM_BOOT;
|
||||||
hci_send_cmd(&hci_reset);
|
hci_send_cmd(&hci_reset);
|
||||||
break;
|
break;
|
||||||
case HCI_INIT_SEND_BAUD_CHANGE: {
|
|
||||||
uint32_t baud_rate = hci_transport_uart_get_main_baud_rate();
|
|
||||||
hci_stack->chipset->set_baudrate_command(baud_rate, hci_stack->hci_packet_buffer);
|
|
||||||
hci_stack->last_cmd_opcode = little_endian_read_16(hci_stack->hci_packet_buffer, 0);
|
|
||||||
hci_stack->substate = HCI_INIT_W4_SEND_BAUD_CHANGE;
|
|
||||||
hci_send_cmd_packet(hci_stack->hci_packet_buffer, 3u + hci_stack->hci_packet_buffer[2u]);
|
|
||||||
// STLC25000D: baudrate change happens within 0.5 s after command was send,
|
|
||||||
// use timer to update baud rate after 100 ms (knowing exactly, when command was sent is non-trivial)
|
|
||||||
if (hci_stack->manufacturer == BLUETOOTH_COMPANY_ID_ST_MICROELECTRONICS){
|
|
||||||
btstack_run_loop_set_timer(&hci_stack->timeout, HCI_RESET_RESEND_TIMEOUT_MS);
|
|
||||||
btstack_run_loop_add_timer(&hci_stack->timeout);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case HCI_INIT_SEND_BAUD_CHANGE_BCM: {
|
case HCI_INIT_SEND_BAUD_CHANGE_BCM: {
|
||||||
uint32_t baud_rate = hci_transport_uart_get_main_baud_rate();
|
uint32_t baud_rate = hci_transport_uart_get_main_baud_rate();
|
||||||
hci_stack->chipset->set_baudrate_command(baud_rate, hci_stack->hci_packet_buffer);
|
hci_stack->chipset->set_baudrate_command(baud_rate, hci_stack->hci_packet_buffer);
|
||||||
@ -1487,6 +1484,24 @@ static void hci_initializing_run(void){
|
|||||||
hci_send_cmd_packet(hci_stack->hci_packet_buffer, 3u + hci_stack->hci_packet_buffer[2u]);
|
hci_send_cmd_packet(hci_stack->hci_packet_buffer, 3u + hci_stack->hci_packet_buffer[2u]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case HCI_INIT_SEND_BAUD_CHANGE:
|
||||||
|
if (need_baud_change) {
|
||||||
|
uint32_t baud_rate = hci_transport_uart_get_main_baud_rate();
|
||||||
|
hci_stack->chipset->set_baudrate_command(baud_rate, hci_stack->hci_packet_buffer);
|
||||||
|
hci_stack->last_cmd_opcode = little_endian_read_16(hci_stack->hci_packet_buffer, 0);
|
||||||
|
hci_stack->substate = HCI_INIT_W4_SEND_BAUD_CHANGE;
|
||||||
|
hci_send_cmd_packet(hci_stack->hci_packet_buffer, 3u + hci_stack->hci_packet_buffer[2u]);
|
||||||
|
// STLC25000D: baudrate change happens within 0.5 s after command was send,
|
||||||
|
// use timer to update baud rate after 100 ms (knowing exactly, when command was sent is non-trivial)
|
||||||
|
if (hci_stack->manufacturer == BLUETOOTH_COMPANY_ID_ST_MICROELECTRONICS){
|
||||||
|
btstack_run_loop_set_timer(&hci_stack->timeout, HCI_RESET_RESEND_TIMEOUT_MS);
|
||||||
|
btstack_run_loop_add_timer(&hci_stack->timeout);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fall through */
|
||||||
|
|
||||||
case HCI_INIT_CUSTOM_INIT:
|
case HCI_INIT_CUSTOM_INIT:
|
||||||
// Custom initialization
|
// Custom initialization
|
||||||
if (hci_stack->chipset && hci_stack->chipset->next_command){
|
if (hci_stack->chipset && hci_stack->chipset->next_command){
|
||||||
@ -1534,11 +1549,6 @@ static void hci_initializing_run(void){
|
|||||||
|| (hci_stack->manufacturer == BLUETOOTH_COMPANY_ID_EM_MICROELECTRONIC_MARIN_SA)) ){
|
|| (hci_stack->manufacturer == BLUETOOTH_COMPANY_ID_EM_MICROELECTRONIC_MARIN_SA)) ){
|
||||||
|
|
||||||
// - baud rate to reset, restore UART baud rate if needed
|
// - baud rate to reset, restore UART baud rate if needed
|
||||||
int need_baud_change = hci_stack->config
|
|
||||||
&& hci_stack->chipset
|
|
||||||
&& hci_stack->chipset->set_baudrate_command
|
|
||||||
&& hci_stack->hci_transport->set_baudrate
|
|
||||||
&& ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
|
|
||||||
if (need_baud_change) {
|
if (need_baud_change) {
|
||||||
uint32_t baud_rate = ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_init;
|
uint32_t baud_rate = ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_init;
|
||||||
log_info("Local baud rate change to %" PRIu32 " after init script (bcm)", baud_rate);
|
log_info("Local baud rate change to %" PRIu32 " after init script (bcm)", baud_rate);
|
||||||
@ -1559,7 +1569,7 @@ static void hci_initializing_run(void){
|
|||||||
// otherwise continue
|
// otherwise continue
|
||||||
hci_stack->substate = HCI_INIT_W4_READ_LOCAL_SUPPORTED_COMMANDS;
|
hci_stack->substate = HCI_INIT_W4_READ_LOCAL_SUPPORTED_COMMANDS;
|
||||||
hci_send_cmd(&hci_read_local_supported_commands);
|
hci_send_cmd(&hci_read_local_supported_commands);
|
||||||
break;
|
break;
|
||||||
case HCI_INIT_SET_BD_ADDR:
|
case HCI_INIT_SET_BD_ADDR:
|
||||||
log_info("Set Public BD ADDR to %s", bd_addr_to_str(hci_stack->custom_bd_addr));
|
log_info("Set Public BD ADDR to %s", bd_addr_to_str(hci_stack->custom_bd_addr));
|
||||||
hci_stack->chipset->set_bd_addr_command(hci_stack->custom_bd_addr, hci_stack->hci_packet_buffer);
|
hci_stack->chipset->set_bd_addr_command(hci_stack->custom_bd_addr, hci_stack->hci_packet_buffer);
|
||||||
@ -1857,21 +1867,16 @@ static void hci_initializing_event_handler(const uint8_t * packet, uint16_t size
|
|||||||
case HCI_INIT_SEND_RESET:
|
case HCI_INIT_SEND_RESET:
|
||||||
// on CSR with BCSP/H5, resend triggers resend of HCI Reset and leads to substate == HCI_INIT_SEND_RESET
|
// on CSR with BCSP/H5, resend triggers resend of HCI Reset and leads to substate == HCI_INIT_SEND_RESET
|
||||||
// fix: just correct substate and behave as command below
|
// fix: just correct substate and behave as command below
|
||||||
hci_stack->substate = HCI_INIT_W4_SEND_RESET;
|
|
||||||
btstack_run_loop_remove_timer(&hci_stack->timeout);
|
/* fall through */
|
||||||
break;
|
#endif
|
||||||
|
|
||||||
case HCI_INIT_W4_SEND_RESET:
|
case HCI_INIT_W4_SEND_RESET:
|
||||||
btstack_run_loop_remove_timer(&hci_stack->timeout);
|
btstack_run_loop_remove_timer(&hci_stack->timeout);
|
||||||
break;
|
hci_stack->substate = HCI_INIT_SEND_READ_LOCAL_VERSION_INFORMATION;
|
||||||
case HCI_INIT_W4_SEND_READ_LOCAL_NAME:
|
|
||||||
log_info("Received local name, need baud change %d", (int) need_baud_change);
|
|
||||||
if (need_baud_change){
|
|
||||||
hci_stack->substate = HCI_INIT_SEND_BAUD_CHANGE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// skip baud change
|
|
||||||
hci_stack->substate = HCI_INIT_CUSTOM_INIT;
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#ifndef HAVE_HOST_CONTROLLER_API
|
||||||
case HCI_INIT_W4_SEND_BAUD_CHANGE:
|
case HCI_INIT_W4_SEND_BAUD_CHANGE:
|
||||||
// for STLC2500D, baud rate change already happened.
|
// for STLC2500D, baud rate change already happened.
|
||||||
// for others, baud rate gets changed now
|
// for others, baud rate gets changed now
|
||||||
@ -1890,10 +1895,6 @@ static void hci_initializing_event_handler(const uint8_t * packet, uint16_t size
|
|||||||
// repeat custom init
|
// repeat custom init
|
||||||
hci_stack->substate = HCI_INIT_CUSTOM_INIT;
|
hci_stack->substate = HCI_INIT_CUSTOM_INIT;
|
||||||
return;
|
return;
|
||||||
#else
|
|
||||||
case HCI_INIT_W4_SEND_RESET:
|
|
||||||
hci_stack->substate = HCI_INIT_READ_LOCAL_SUPPORTED_COMMANDS;
|
|
||||||
return ;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case HCI_INIT_W4_READ_LOCAL_SUPPORTED_COMMANDS:
|
case HCI_INIT_W4_READ_LOCAL_SUPPORTED_COMMANDS:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user