mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-25 16:43:28 +00:00
raspi: use warm boot if ENABLE_CONTROLLER_WARM_BOOT is defined
This commit is contained in:
parent
a06b9aecee
commit
e6a3daa47c
@ -98,7 +98,7 @@ ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL | Enable HCI Controller to Host Flow
|
|||||||
ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CC256x Flow Control during baud rate change, see chipset docs.
|
ENABLE_CC256X_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CC256x Flow Control during baud rate change, see chipset docs.
|
||||||
ENABLE_CYPRESS_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CYW2070x Flow Control during baud rate change, similar to CC256x.
|
ENABLE_CYPRESS_BAUDRATE_CHANGE_FLOWCONTROL_BUG_WORKAROUND | Enable workaround for bug in CYW2070x Flow Control during baud rate change, similar to CC256x.
|
||||||
ENABLE_TLV_FLASH_EXPLICIT_DELETE_FIELD | Enable use of explicit delete field in TLV Flash implemenation - required when flash value cannot be overwritten with zero
|
ENABLE_TLV_FLASH_EXPLICIT_DELETE_FIELD | Enable use of explicit delete field in TLV Flash implemenation - required when flash value cannot be overwritten with zero
|
||||||
|
ENABLE_CONTROLLER_WARM_BOOT | Enable stack startup without power cycle (if supported/possible)
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
|
@ -26,6 +26,9 @@
|
|||||||
#define ENABLE_SCO_OVER_HCI
|
#define ENABLE_SCO_OVER_HCI
|
||||||
#define ENABLE_SDP_DES_DUMP
|
#define ENABLE_SDP_DES_DUMP
|
||||||
|
|
||||||
|
// Warm Boot needed if connected via Wifi on Raspberry Pi 3A+ or 3B+
|
||||||
|
// #define ENABLE_CONTROLLER_WARM_BOOT
|
||||||
|
|
||||||
// BTstack configuration. buffers, sizes, ...
|
// BTstack configuration. buffers, sizes, ...
|
||||||
#define HCI_INCOMING_PRE_BUFFER_SIZE 14 // sizeof benep heade, avoid memcpy
|
#define HCI_INCOMING_PRE_BUFFER_SIZE 14 // sizeof benep heade, avoid memcpy
|
||||||
#define HCI_ACL_PAYLOAD_SIZE (1691 + 4)
|
#define HCI_ACL_PAYLOAD_SIZE (1691 + 4)
|
||||||
|
@ -306,6 +306,7 @@ int main(int argc, const char * argv[]){
|
|||||||
|
|
||||||
// set UART config based on raspi Bluetooth UART type
|
// set UART config based on raspi Bluetooth UART type
|
||||||
int bt_reg_en_pin = -1;
|
int bt_reg_en_pin = -1;
|
||||||
|
bool power_cycle = true;
|
||||||
switch (raspi_get_bluetooth_uart_type()){
|
switch (raspi_get_bluetooth_uart_type()){
|
||||||
case UART_INVALID:
|
case UART_INVALID:
|
||||||
fprintf(stderr, "can't verify HW uart, %s\n", strerror( errno ) );
|
fprintf(stderr, "can't verify HW uart, %s\n", strerror( errno ) );
|
||||||
@ -319,24 +320,37 @@ int main(int argc, const char * argv[]){
|
|||||||
case UART_HARDWARE_NO_FLOW:
|
case UART_HARDWARE_NO_FLOW:
|
||||||
// Raspberry Pi 3 A
|
// Raspberry Pi 3 A
|
||||||
// Raspberry Pi 3 B
|
// Raspberry Pi 3 B
|
||||||
|
// power up with H5 and without power cycle untested/unsupported
|
||||||
bt_reg_en_pin = 128;
|
bt_reg_en_pin = 128;
|
||||||
transport_config.baudrate_main = 921600;
|
transport_config.baudrate_main = 921600;
|
||||||
transport_config.flowcontrol = 0;
|
transport_config.flowcontrol = 0;
|
||||||
break;
|
break;
|
||||||
case UART_HARDWARE_FLOW:
|
case UART_HARDWARE_FLOW:
|
||||||
// Raspberry Pi Zero W gpio 45
|
// Raspberry Pi Zero W gpio 45, 3 mbps does not work (investigation pending)
|
||||||
// Raspberry Pi 3A+ vgpio 129 but WLAN + BL
|
// Raspberry Pi 3A+ vgpio 129 but WLAN + BL
|
||||||
// Raspberry Pi 3B+ vgpio 129 but WLAN + BL
|
// Raspberry Pi 3B+ vgpio 129 but WLAN + BL
|
||||||
transport_config.baudrate_main = 3000000;
|
|
||||||
transport_config.flowcontrol = 1;
|
transport_config.flowcontrol = 1;
|
||||||
|
int model = raspi_get_model();
|
||||||
// 3 mbps does not work on Zero W (investigation pending)
|
if (model == MODEL_ZERO_W){
|
||||||
if (raspi_get_model() == MODEL_ZERO_W){
|
bt_reg_en_pin = 45;
|
||||||
transport_config.baudrate_main = 921600;
|
transport_config.baudrate_main = 921600;
|
||||||
|
} else {
|
||||||
|
bt_reg_en_pin = 129;
|
||||||
|
transport_config.baudrate_main = 3000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_CONTROLLER_WARM_BOOT
|
||||||
|
power_cycle = false;
|
||||||
|
#else
|
||||||
|
// warn about power cycle on devices with shared reg_en pins
|
||||||
|
if (model == MODEL_3APLUS || model == MODEL_3BPLUS){
|
||||||
|
printf("Wifi and Bluetooth share a single RESET line and BTstack needs to reset Bluetooth -> SSH over Wifi will fail\n");
|
||||||
|
printf("Please add ENABLE_CONTROLLER_WARM_BOOT to btstack_config.h to enable startup without RESET\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printf("%s, %u, BT_REG_EN at GPIO %u\n", transport_config.flowcontrol ? "H4":"H5", transport_config.baudrate_main, bt_reg_en_pin);
|
printf("%s, %u, BT_REG_EN at GPIO %u, %s\n", transport_config.flowcontrol ? "H4":"H5", transport_config.baudrate_main, bt_reg_en_pin, power_cycle ? "Reset Controller" : "Warm Boot");
|
||||||
|
|
||||||
// get BCM chipset driver
|
// get BCM chipset driver
|
||||||
const btstack_chipset_t * chipset = btstack_chipset_bcm_instance();
|
const btstack_chipset_t * chipset = btstack_chipset_bcm_instance();
|
||||||
@ -379,24 +393,27 @@ int main(int argc, const char * argv[]){
|
|||||||
main_argc = argc;
|
main_argc = argc;
|
||||||
main_argv = argv;
|
main_argv = argv;
|
||||||
|
|
||||||
if (transport_config.flowcontrol){
|
// power cycle Bluetooth controller on older models without flowcontrol
|
||||||
|
if (power_cycle){
|
||||||
// re-use current terminal speed
|
|
||||||
raspi_get_terminal_params( &transport_config );
|
|
||||||
|
|
||||||
// with flowcontrol, we use h4 and are done
|
|
||||||
btstack_main(main_argc, main_argv);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
// power cycle Bluetooth controller on older models without flowcontrol
|
|
||||||
printf("Power Cycle Controller\n");
|
|
||||||
btstack_control_raspi_set_bt_reg_en_pin(bt_reg_en_pin);
|
btstack_control_raspi_set_bt_reg_en_pin(bt_reg_en_pin);
|
||||||
btstack_control_t *control = btstack_control_raspi_get_instance();
|
btstack_control_t *control = btstack_control_raspi_get_instance();
|
||||||
control->init(NULL);
|
control->init(NULL);
|
||||||
control->off();
|
control->off();
|
||||||
usleep( 100000 );
|
usleep( 100000 );
|
||||||
control->on();
|
control->on();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (transport_config.flowcontrol){
|
||||||
|
|
||||||
|
// re-use current terminal speed (if there was no power cycle)
|
||||||
|
if (!power_cycle){
|
||||||
|
raspi_get_terminal_params( &transport_config );
|
||||||
|
}
|
||||||
|
|
||||||
|
// with flowcontrol, we use h4 and are done
|
||||||
|
btstack_main(main_argc, main_argv);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
// assume BCM4343W used in Pi 3 A/B. Pi 3 A/B+ have a newer controller but support H4 with Flowcontrol
|
// assume BCM4343W used in Pi 3 A/B. Pi 3 A/B+ have a newer controller but support H4 with Flowcontrol
|
||||||
btstack_chipset_bcm_set_device_name("BCM43430A1");
|
btstack_chipset_bcm_set_device_name("BCM43430A1");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user