hci_trasport: add type to hci transport config, update all ports

This commit is contained in:
Matthias Ringwald 2016-01-06 23:02:46 +01:00
parent f89ed3dce5
commit 9796ebea28
27 changed files with 147 additions and 123 deletions

View File

@ -279,13 +279,6 @@ static const bt_control_t bt_control_cc256x = {
NULL, // set_bd_addr_cmd NULL, // set_bd_addr_cmd
}; };
static const hci_uart_config_t hci_uart_config_cc256x = {
NULL,
115200,
1000000,
0
};
// MARK: public API // MARK: public API
void bt_control_cc256x_enable_ehcill(int on){ void bt_control_cc256x_enable_ehcill(int on){
@ -302,7 +295,3 @@ void bt_control_cc256x_set_power(int16_t power_in_dB){
bt_control_t *bt_control_cc256x_instance(void){ bt_control_t *bt_control_cc256x_instance(void){
return (bt_control_t*) &bt_control_cc256x; return (bt_control_t*) &bt_control_cc256x;
} }
hci_uart_config_t *hci_uart_config_cc256x_instance(void){
return (hci_uart_config_t*) &hci_uart_config_cc256x;
}

View File

@ -57,8 +57,6 @@ void bt_control_cc256x_set_power(int16_t power_in_dB);
void bt_control_cc256x_enable_ehcill(int on); void bt_control_cc256x_enable_ehcill(int on);
int bt_control_cc256x_ehcill_enabled(void); int bt_control_cc256x_ehcill_enabled(void);
hci_uart_config_t *hci_uart_config_cc256x_instance(void);
#if defined __cplusplus #if defined __cplusplus
} }
#endif #endif

View File

@ -74,7 +74,7 @@ static int bt_control_csr_on(void *config){
} }
// set requested baud rate // set requested baud rate
static void bt_control_csr_update_command(hci_uart_config_t *config, uint8_t *hci_cmd_buffer){ static void bt_control_csr_update_command(hci_transport_config_uart_t *config, uint8_t *hci_cmd_buffer){
uint16_t varid = READ_BT_16(hci_cmd_buffer, 10); uint16_t varid = READ_BT_16(hci_cmd_buffer, 10);
if (varid != 0x7003) return; if (varid != 0x7003) return;
uint16_t key = READ_BT_16(hci_cmd_buffer, 14); uint16_t key = READ_BT_16(hci_cmd_buffer, 14);
@ -104,7 +104,7 @@ static int bt_control_csr_next_cmd(void *config, uint8_t *hci_cmd_buffer){
memcpy(&hci_cmd_buffer[3], (uint8_t *) &init_script[init_script_offset], payload_len); memcpy(&hci_cmd_buffer[3], (uint8_t *) &init_script[init_script_offset], payload_len);
// support for on-the-fly configuration updates // support for on-the-fly configuration updates
bt_control_csr_update_command((hci_uart_config_t*)config, hci_cmd_buffer); bt_control_csr_update_command((hci_transport_config_uart_t*)config, hci_cmd_buffer);
init_script_offset += payload_len; init_script_offset += payload_len;
@ -134,13 +134,6 @@ static const bt_control_t bt_control_csr = {
NULL, // set_bd_addr_cmd NULL, // set_bd_addr_cmd
}; };
static const hci_uart_config_t hci_uart_config_csr = {
NULL,
115200,
0, // 1000000,
0
};
// MARK: public API // MARK: public API
void bt_control_csr_set_power(int16_t power_in_dB){ void bt_control_csr_set_power(int16_t power_in_dB){
} }
@ -148,7 +141,3 @@ void bt_control_csr_set_power(int16_t power_in_dB){
bt_control_t *bt_control_csr_instance(void){ bt_control_t *bt_control_csr_instance(void){
return (bt_control_t*) &bt_control_csr; return (bt_control_t*) &bt_control_csr;
} }
hci_uart_config_t *hci_uart_config_csr_instance(void){
return (hci_uart_config_t*) &hci_uart_config_csr;
}

View File

@ -54,7 +54,6 @@ extern "C" {
bt_control_t * bt_control_csr_instance(void); bt_control_t * bt_control_csr_instance(void);
void bt_control_csr_set_power(int16_t power_in_dB); void bt_control_csr_set_power(int16_t power_in_dB);
hci_uart_config_t *hci_uart_config_csr_instance(void);
#if defined __cplusplus #if defined __cplusplus
} }

View File

@ -173,7 +173,7 @@ static client_state_t * client_for_connection(connection_t *connection);
// MARK: globals // MARK: globals
static hci_transport_t * transport; static hci_transport_t * transport;
static hci_uart_config_t config; static hci_transport_config_uart_t hci_transport_config_uart;
static timer_source_t timeout; static timer_source_t timeout;
static uint8_t timeout_active = 0; static uint8_t timeout_active = 0;
static int power_management_sleep = 0; static int power_management_sleep = 0;
@ -1943,16 +1943,18 @@ int main (int argc, char * const * argv){
#endif #endif
bt_control_t * control = NULL; bt_control_t * control = NULL;
void * config;
#ifdef HAVE_TRANSPORT_H4 #ifdef HAVE_TRANSPORT_H4
config.device_name = UART_DEVICE; hci_transport_config_uart.type = HCI_TRANSPORT_CONFIG_UART;
config.baudrate_init = UART_SPEED; hci_transport_config_uart.baudrate_init = UART_SPEED;
config.baudrate_main = 0; hci_transport_config_uart.baudrate_main = 0;
config.flowcontrol = 1; hci_transport_config_uart.flowcontrol = 1;
hci_transport_config_uart.device_name = UART_DEVICE;
#if defined(USE_BLUETOOL) && defined(USE_POWERMANAGEMENT) #if defined(USE_BLUETOOL) && defined(USE_POWERMANAGEMENT)
if (bt_control_iphone_power_management_supported()){ if (bt_control_iphone_power_management_supported()){
// use default (max) UART baudrate over netraph interface // use default (max) UART baudrate over netgraph interface
config.baudrate_init = 0; hci_transport_config_uart.baudrate_init = 0;
transport = hci_transport_h4_iphone_instance(); transport = hci_transport_h4_iphone_instance();
} else { } else {
transport = hci_transport_h4_instance(); transport = hci_transport_h4_instance();
@ -1960,6 +1962,7 @@ int main (int argc, char * const * argv){
#else #else
transport = hci_transport_h4_instance(); transport = hci_transport_h4_instance();
#endif #endif
config = &hci_transport_config_uart;
#endif #endif
#ifdef HAVE_TRANSPORT_USB #ifdef HAVE_TRANSPORT_USB
@ -2007,7 +2010,7 @@ int main (int argc, char * const * argv){
log_info("version %s, build %s", BTSTACK_VERSION, BTSTACK_DATE); log_info("version %s, build %s", BTSTACK_VERSION, BTSTACK_DATE);
// init HCI // init HCI
hci_init(transport, &config, control, remote_device_db); hci_init(transport, config, control, remote_device_db);
#ifdef USE_BLUETOOL #ifdef USE_BLUETOOL
// iPhone doesn't use SSP yet as there's no UI for it yet and auto accept is not an option // iPhone doesn't use SSP yet as there's no UI for it yet and auto accept is not an option

View File

@ -63,7 +63,7 @@
static int h4_process(struct data_source *ds); static int h4_process(struct data_source *ds);
static void dummy_handler(uint8_t packet_type, uint8_t *packet, uint16_t size); static void dummy_handler(uint8_t packet_type, uint8_t *packet, uint16_t size);
static hci_uart_config_t *hci_uart_config; static hci_transport_config_uart_t *hci_transport_config_uart;
typedef enum { typedef enum {
H4_W4_PACKET_TYPE, H4_W4_PACKET_TYPE,
@ -133,13 +133,13 @@ static int h4_set_baudrate(uint32_t baudrate){
} }
static int h4_open(void *transport_config){ static int h4_open(void *transport_config){
hci_uart_config = (hci_uart_config_t*) transport_config; hci_transport_config_uart = (hci_transport_config_uart_t*) transport_config;
struct termios toptions; struct termios toptions;
int flags = O_RDWR | O_NOCTTY | O_NONBLOCK; int flags = O_RDWR | O_NOCTTY | O_NONBLOCK;
int fd = open(hci_uart_config->device_name, flags); int fd = open(hci_transport_config_uart->device_name, flags);
if (fd == -1) { if (fd == -1) {
perror("init_serialport: Unable to open port "); perror("init_serialport: Unable to open port ");
perror(hci_uart_config->device_name); perror(hci_transport_config_uart->device_name);
return -1; return -1;
} }
@ -154,7 +154,7 @@ static int h4_open(void *transport_config){
toptions.c_cflag &= ~CSTOPB; toptions.c_cflag &= ~CSTOPB;
toptions.c_cflag |= CS8; toptions.c_cflag |= CS8;
if (hci_uart_config->flowcontrol) { if (hci_transport_config_uart->flowcontrol) {
// with flow control // with flow control
toptions.c_cflag |= CRTSCTS; toptions.c_cflag |= CRTSCTS;
} else { } else {
@ -183,7 +183,7 @@ static int h4_open(void *transport_config){
run_loop_add_data_source(hci_transport_h4->ds); run_loop_add_data_source(hci_transport_h4->ds);
// also set baudrate // also set baudrate
if (h4_set_baudrate(hci_uart_config->baudrate_init) < 0){ if (h4_set_baudrate(hci_transport_config_uart->baudrate_init) < 0){
return -1; return -1;
} }

View File

@ -81,18 +81,18 @@ static hci_transport_h5_t * hci_transport_h5 = NULL;
static int h5_process(struct data_source *ds); static int h5_process(struct data_source *ds);
static void dummy_handler(uint8_t packet_type, uint8_t *packet, int size); static void dummy_handler(uint8_t packet_type, uint8_t *packet, int size);
static hci_uart_config_t *hci_uart_config; static hci_transport_config_uart_t *hci_transport_config_uart;
static void (*packet_handler)(uint8_t packet_type, uint8_t *packet, int size) = dummy_handler; static void (*packet_handler)(uint8_t packet_type, uint8_t *packet, int size) = dummy_handler;
// prototypes // prototypes
static int h5_open(void *transport_config){ static int h5_open(void *transport_config){
hci_uart_config = (hci_uart_config_t*) transport_config; hci_transport_config_uart = (hci_transport_config_uart_t*) transport_config;
struct termios toptions; struct termios toptions;
int fd = open(hci_uart_config->device_name, O_RDWR | O_NOCTTY | O_NDELAY); int fd = open(hci_transport_config_uart->device_name, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) { if (fd == -1) {
perror("init_serialport: Unable to open port "); perror("init_serialport: Unable to open port ");
perror(hci_uart_config->device_name); perror(hci_transport_config_uart->device_name);
return -1; return -1;
} }
@ -100,8 +100,8 @@ static int h5_open(void *transport_config){
perror("init_serialport: Couldn't get term attributes"); perror("init_serialport: Couldn't get term attributes");
return -1; return -1;
} }
speed_t brate = hci_uart_config->baudrate; // let you override switch below if needed speed_t brate = hci_transport_config_uart->baudrate; // let you override switch below if needed
switch(hci_uart_config->baudrate) { switch(hci_transport_config_uart->baudrate) {
case 57600: brate=B57600; break; case 57600: brate=B57600; break;
case 115200: brate=B115200; break; case 115200: brate=B115200; break;
#ifdef B230400 #ifdef B230400
@ -123,7 +123,7 @@ static int h5_open(void *transport_config){
toptions.c_cflag &= ~CSIZE; toptions.c_cflag &= ~CSIZE;
toptions.c_cflag |= CS8; toptions.c_cflag |= CS8;
if (hci_uart_config->flowcontrol) { if (hci_transport_config_uart->flowcontrol) {
// with flow control // with flow control
toptions.c_cflag |= CRTSCTS; toptions.c_cflag |= CRTSCTS;
} else { } else {

View File

@ -724,9 +724,6 @@ void BTstackManager::setPublicBdAddr(bd_addr_t addr){
memcpy(public_bd_addr, addr ,6); memcpy(public_bd_addr, addr ,6);
} }
// static hci_uart_config_t config;
void bluetooth_hardware_error(){ void bluetooth_hardware_error(){
printf("Bluetooth Hardware Error event. Restarting...\n\n\n"); printf("Bluetooth Hardware Error event. Restarting...\n\n\n");
#ifdef __AVR__ #ifdef __AVR__

View File

@ -65,6 +65,14 @@
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
static hci_transport_config_uart_t config = {
HCI_TRANSPORT_CONFIG_UART,
115200,
1000000, // main baudrate
1, // flow control
NULL,
};
// main // main
int main(void) int main(void)
{ {
@ -92,9 +100,8 @@ int main(void)
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_dma_instance(); hci_transport_t * transport = hci_transport_h4_dma_instance();
bt_control_t * control = bt_control_cc256x_instance(); bt_control_t * control = bt_control_cc256x_instance();
hci_uart_config_t * config = hci_uart_config_cc256x_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory;
hci_init(transport, config, control, remote_db); hci_init(transport, &config, control, remote_db);
// use eHCILL // use eHCILL
bt_control_cc256x_enable_ehcill(1); bt_control_cc256x_enable_ehcill(1);

View File

@ -448,13 +448,13 @@ static void iphone_write_configscript(int fd, int baudrate){
} }
static int iphone_on (void *transport_config){ static int iphone_on (void *transport_config){
// hci_uart_config->baudrate_init == 0, if using native speed // hci_transport_config_uart->baudrate_init == 0, if using native speed
log_info("iphone_on: entered\n"); log_info("iphone_on: entered\n");
int err = 0; int err = 0;
hci_uart_config_t * hci_uart_config = (hci_uart_config_t*) transport_config; hci_transport_config_uart_t * hci_transport_config_uart = (hci_transport_config_uart_t*) transport_config;
// get local-mac-addr and transport-speed from IORegistry // get local-mac-addr and transport-speed from IORegistry
ioregistry_get_info(); ioregistry_get_info();
@ -508,23 +508,23 @@ static int iphone_on (void *transport_config){
} }
// quick test if Bluetooth UART can be opened - and try to start cleanly // quick test if Bluetooth UART can be opened - and try to start cleanly
int fd = open(hci_uart_config->device_name, O_RDWR | O_NOCTTY | O_NDELAY); int fd = open(hci_transport_config_uart->device_name, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd > 0) { if (fd > 0) {
// everything's fine // everything's fine
close(fd); close(fd);
} else { } else {
// no way! // no way!
log_error( "bt_control.c:iphone_on(): Failed to open '%s', trying killall %s\n", hci_uart_config->device_name, bluetool); log_error( "bt_control.c:iphone_on(): Failed to open '%s', trying killall %s\n", hci_transport_config_uart->device_name, bluetool);
system("killall -9 BlueToolH4"); system("killall -9 BlueToolH4");
system("killall -9 BlueTool"); system("killall -9 BlueTool");
sleep(3); sleep(3);
// try again // try again
fd = open(hci_uart_config->device_name, O_RDWR | O_NOCTTY | O_NDELAY); fd = open(hci_transport_config_uart->device_name, O_RDWR | O_NOCTTY | O_NDELAY);
if (fd > 0){ if (fd > 0){
close(fd); close(fd);
} else { } else {
log_error( "bt_control.c:iphone_on(): Failed to open '%s' again, trying killall BTServer and killall %s\n", hci_uart_config->device_name, bluetool); log_error( "bt_control.c:iphone_on(): Failed to open '%s' again, trying killall BTServer and killall %s\n", hci_transport_config_uart->device_name, bluetool);
system("killall -9 BTServer"); system("killall -9 BTServer");
system("killall -9 BlueToolH4"); system("killall -9 BlueToolH4");
system("killall -9 BlueTool"); system("killall -9 BlueTool");
@ -547,10 +547,10 @@ static int iphone_on (void *transport_config){
if (os4x) { if (os4x) {
// 4.x - send custom config // 4.x - send custom config
iphone_write_configscript(output, hci_uart_config->baudrate_init); iphone_write_configscript(output, hci_transport_config_uart->baudrate_init);
} else { } else {
// 3.x - modify original script on the fly // 3.x - modify original script on the fly
iphone_write_initscript(output, hci_uart_config->baudrate_init); iphone_write_initscript(output, hci_transport_config_uart->baudrate_init);
} }
// log output // log output
@ -577,8 +577,8 @@ static int iphone_on (void *transport_config){
power_management_active = bt_control_iphone_power_management_supported(); power_management_active = bt_control_iphone_power_management_supported();
// if baud == 0, we're using system default: set in transport config // if baud == 0, we're using system default: set in transport config
if (hci_uart_config->baudrate_init == 0) { if (hci_transport_config_uart->baudrate_init == 0) {
hci_uart_config->baudrate_init = transport_speed; hci_transport_config_uart->baudrate_init = transport_speed;
} }
#endif #endif

View File

@ -84,7 +84,7 @@
static int h4_process(struct data_source *ds); static int h4_process(struct data_source *ds);
static void dummy_handler(uint8_t packet_type, uint8_t *packet, uint16_t size); static void dummy_handler(uint8_t packet_type, uint8_t *packet, uint16_t size);
static hci_uart_config_t *hci_uart_config; static hci_transport_config_uart_t *hci_transport_config_uart;
static void h4_enforce_wake_on(void); static void h4_enforce_wake_on(void);
static void h4_enforce_wake_off(void); static void h4_enforce_wake_off(void);
@ -134,7 +134,7 @@ static uint8_t hci_packet[1+HCI_PACKET_BUFFER_SIZE]; // packet type + max(acl he
static int h4_open(void *transport_config) static int h4_open(void *transport_config)
{ {
hci_uart_config = (hci_uart_config_t *) transport_config; hci_transport_config_uart = (hci_transport_config_uart_t *) transport_config;
int fd = socket(PF_NETGRAPH, SOCK_STREAM, NG_CONTROL); int fd = socket(PF_NETGRAPH, SOCK_STREAM, NG_CONTROL);
log_info("h4_open: open socket(%u, %u, %u) %d", PF_NETGRAPH, SOCK_STREAM, NG_CONTROL, fd); log_info("h4_open: open socket(%u, %u, %u) %d", PF_NETGRAPH, SOCK_STREAM, NG_CONTROL, fd);
@ -188,7 +188,7 @@ static int h4_open(void *transport_config)
// make raw and set speed // make raw and set speed
cfmakeraw(&toptions); cfmakeraw(&toptions);
speed_t brate = (speed_t) hci_uart_config->baudrate_init; speed_t brate = (speed_t) hci_transport_config_uart->baudrate_init;
cfsetspeed(&toptions, brate); cfsetspeed(&toptions, brate);
toptions.c_iflag |= IGNPAR; toptions.c_iflag |= IGNPAR;
toptions.c_cflag = 0x00038b00; toptions.c_cflag = 0x00038b00;

View File

@ -92,7 +92,7 @@ int main(int argc, const char * argv[]){
// init HCI // init HCI
hci_transport_t * transport = hci_transport_usb_instance(); hci_transport_t * transport = hci_transport_usb_instance();
hci_uart_config_t * config = NULL; void * config = NULL;
bt_control_t * control = NULL; bt_control_t * control = NULL;
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs;

View File

@ -342,6 +342,14 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
} }
} }
static hci_transport_config_uart_t config = {
HCI_TRANSPORT_CONFIG_UART,
115200,
1000000, // main baudrate
1, // flow control
NULL,
};
int main(void){ int main(void){
// stop watchdog timer // stop watchdog timer
@ -369,9 +377,8 @@ int main(void){
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_dma_instance(); hci_transport_t * transport = hci_transport_h4_dma_instance();
bt_control_t * control = bt_control_cc256x_instance(); bt_control_t * control = bt_control_cc256x_instance();
hci_uart_config_t * config = hci_uart_config_cc256x_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory;
hci_init(transport, config, control, remote_db); hci_init(transport, &config, control, remote_db);
// use eHCILL // use eHCILL
bt_control_cc256x_enable_ehcill(1); bt_control_cc256x_enable_ehcill(1);

View File

@ -84,6 +84,14 @@ static void hw_setup(void){
__enable_interrupt(); __enable_interrupt();
} }
static hci_transport_config_uart_t config = {
HCI_TRANSPORT_CONFIG_UART,
115200,
1000000, // main baudrate
1, // flow control
NULL,
};
static void btstack_setup(void){ static void btstack_setup(void){
/// GET STARTED with BTstack /// /// GET STARTED with BTstack ///
btstack_memory_init(); btstack_memory_init();
@ -92,9 +100,8 @@ static void btstack_setup(void){
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_dma_instance(); hci_transport_t * transport = hci_transport_h4_dma_instance();
bt_control_t * control = bt_control_cc256x_instance(); bt_control_t * control = bt_control_cc256x_instance();
hci_uart_config_t * config = hci_uart_config_cc256x_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory;
hci_init(transport, config, control, remote_db); hci_init(transport, &config, control, remote_db);
// use eHCILL // use eHCILL
bt_control_cc256x_enable_ehcill(1); bt_control_cc256x_enable_ehcill(1);

View File

@ -88,6 +88,14 @@ static void hw_setup(void){
__enable_interrupt(); __enable_interrupt();
} }
static hci_transport_config_uart_t config = {
HCI_TRANSPORT_CONFIG_UART,
115200,
1000000, // main baudrate
1, // flow control
NULL,
};
static void btstack_setup(void){ static void btstack_setup(void){
hci_dump_open(NULL, HCI_DUMP_STDOUT); hci_dump_open(NULL, HCI_DUMP_STDOUT);
@ -99,9 +107,8 @@ static void btstack_setup(void){
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_dma_instance(); hci_transport_t * transport = hci_transport_h4_dma_instance();
bt_control_t * control = bt_control_cc256x_instance(); bt_control_t * control = bt_control_cc256x_instance();
hci_uart_config_t * config = hci_uart_config_cc256x_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory;
hci_init(transport, config, control, remote_db); hci_init(transport, &config, control, remote_db);
// use eHCILL // use eHCILL
// bt_control_cc256x_enable_ehcill(1); // bt_control_cc256x_enable_ehcill(1);

View File

@ -207,13 +207,15 @@ void hal_uart_dma_receive_block(uint8_t *data, uint16_t size){
} }
/// ///
static const hci_uart_config_t hci_uart_config_csr = { static hci_transport_config_uart_t config = {
NULL, HCI_TRANSPORT_CONFIG_UART,
115200, 115200,
0, // 1000000, 0, // main baudrate
0 1, // flow control
NULL,
}; };
void BTSTACK_Initialize ( void ) void BTSTACK_Initialize ( void )
{ {
printf("\n\nBTstack_Initialize()\n"); printf("\n\nBTstack_Initialize()\n");
@ -225,7 +227,7 @@ void BTSTACK_Initialize ( void )
hci_transport_t * transport = hci_transport_h4_dma_instance(); hci_transport_t * transport = hci_transport_h4_dma_instance();
bt_control_t * control = bt_control_csr_instance(); bt_control_t * control = bt_control_csr_instance();
hci_init(transport, (void*) &hci_uart_config_csr, control, NULL); hci_init(transport, &config, control, NULL);
// hci_power_control(HCI_POWER_ON); // hci_power_control(HCI_POWER_ON);
btstack_main(0, NULL); btstack_main(0, NULL);

View File

@ -50,6 +50,7 @@
#include "btstack-config.h" #include "btstack-config.h"
#include "run_loop.h" #include "run_loop.h"
#include "run_loop_posix.h"
#include "debug.h" #include "debug.h"
#include "btstack_memory.h" #include "btstack_memory.h"
@ -61,9 +62,13 @@
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
static hci_uart_config_t hci_uart_config_cc256x = {
NULL, static hci_transport_config_uart_t config = {
HCI_TRANSPORT_CONFIG_UART,
115200, 115200,
0, // main baudrate
1, // flow control
NULL,
}; };
static void sigint_handler(int param){ static void sigint_handler(int param){
@ -96,14 +101,14 @@ int main(int argc, const char * argv[]){
hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER);
// pick serial port // pick serial port
hci_uart_config_cc256x.device_name = "/dev/tty.usbserial-AD025KU2"; config.device_name = "/dev/tty.usbserial-AD025KU2";
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_instance(); hci_transport_t * transport = hci_transport_h4_instance();
bt_control_t * control = bt_control_cc256x_instance(); bt_control_t * control = bt_control_cc256x_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs;
hci_init(transport, (void*) &hci_uart_config_cc256x, control, remote_db); hci_init(transport, &config, control, remote_db);
// handle CTRL-c // handle CTRL-c
signal(SIGINT, sigint_handler); signal(SIGINT, sigint_handler);

View File

@ -54,13 +54,17 @@
#include "hci.h" #include "hci.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "run_loop.h" #include "run_loop.h"
#include "run_loop_posix.h"
#include "stdin_support.h" #include "stdin_support.h"
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
static hci_uart_config_t hci_uart_config_generic = { static hci_transport_config_uart_t config = {
NULL, HCI_TRANSPORT_CONFIG_UART,
115200, 115200,
0, // main baudrate
1, // flow control
NULL,
}; };
static void sigint_handler(int param){ static void sigint_handler(int param){
@ -93,13 +97,13 @@ int main(int argc, const char * argv[]){
hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER);
// pick serial port // pick serial port
hci_uart_config_generic.device_name = "/dev/tty.usbmodem1413"; config.device_name = "/dev/tty.usbmodem1413";
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_instance(); hci_transport_t * transport = hci_transport_h4_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs;
hci_init(transport, (void*) &hci_uart_config_generic, NULL, remote_db); hci_init(transport, (void*) &config, NULL, remote_db);
// handle CTRL-c // handle CTRL-c
signal(SIGINT, sigint_handler); signal(SIGINT, sigint_handler);

View File

@ -50,6 +50,7 @@
#include "btstack-config.h" #include "btstack-config.h"
#include "run_loop.h" #include "run_loop.h"
#include "run_loop_posix.h"
#include "debug.h" #include "debug.h"
#include "btstack_memory.h" #include "btstack_memory.h"
@ -60,10 +61,12 @@
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
static hci_uart_config_t hci_uart_config_cc256x = { static hci_transport_config_uart_t config = {
NULL, HCI_TRANSPORT_CONFIG_UART,
115200, 115200,
0, // main baudrate: set to higher standard values if needed e.g. 460800 0, // main baudrate
1, // flow control
NULL,
}; };
static void sigint_handler(int param){ static void sigint_handler(int param){
@ -96,14 +99,14 @@ int main(int argc, const char * argv[]){
hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER);
// pick serial port // pick serial port
hci_uart_config_cc256x.device_name = "/dev/tty.usbserial-AD025KU2"; config.device_name = "/dev/tty.usbserial-AD025KU2";
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_instance(); hci_transport_t * transport = hci_transport_h4_instance();
bt_control_t * control = bt_control_stlc2500d_instance(); bt_control_t * control = bt_control_stlc2500d_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs;
hci_init(transport, (void*) &hci_uart_config_cc256x, control, remote_db); hci_init(transport, (void*) &config, control, remote_db);
// handle CTRL-c // handle CTRL-c
signal(SIGINT, sigint_handler); signal(SIGINT, sigint_handler);

View File

@ -50,6 +50,7 @@
#include "btstack-config.h" #include "btstack-config.h"
#include "run_loop.h" #include "run_loop.h"
#include "run_loop_posix.h"
#include "debug.h" #include "debug.h"
#include "btstack_memory.h" #include "btstack_memory.h"
@ -61,9 +62,12 @@
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
static hci_uart_config_t hci_uart_config_cc256x = { static hci_transport_config_uart_t config = {
NULL, HCI_TRANSPORT_CONFIG_UART,
115200, 115200,
0, // main baudrate
1, // flow control
NULL,
}; };
static void sigint_handler(int param){ static void sigint_handler(int param){
@ -96,14 +100,14 @@ int main(int argc, const char * argv[]){
hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER); hci_dump_open("/tmp/hci_dump.pklg", HCI_DUMP_PACKETLOGGER);
// pick serial port // pick serial port
hci_uart_config_cc256x.device_name = "/dev/tty.usbserial-AD025KU2"; config.device_name = "/dev/tty.usbserial-AD025KU2";
// init HCI // init HCI
hci_transport_t * transport = hci_transport_h4_instance(); hci_transport_t * transport = hci_transport_h4_instance();
bt_control_t * control = bt_control_cc256x_instance(); bt_control_t * control = bt_control_cc256x_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_fs;
hci_init(transport, (void*) &hci_uart_config_cc256x, control, remote_db); hci_init(transport, (void*) &config, control, remote_db);
// handle CTRL-c // handle CTRL-c
signal(SIGINT, sigint_handler); signal(SIGINT, sigint_handler);

View File

@ -403,11 +403,12 @@ static void bluetooth_power_cycle(void){
// after HCI Reset, use 115200. Then increase baud reate to 468000. // after HCI Reset, use 115200. Then increase baud reate to 468000.
// (on nucleo board without external crystall, running at 8 Mhz, 1 mbps was not possible) // (on nucleo board without external crystall, running at 8 Mhz, 1 mbps was not possible)
static const hci_uart_config_t hci_uart_config_cc256x = { static const hci_transport_config_uart_t config = {
NULL, HCI_TRANSPORT_CONFIG_UART,
115200, 115200,
460800, 460800,
0 1,
NULL
}; };
int main(void) int main(void)
@ -426,7 +427,7 @@ int main(void)
hci_transport_t * transport = hci_transport_h4_dma_instance(); hci_transport_t * transport = hci_transport_h4_dma_instance();
bt_control_t * control = bt_control_cc256x_instance(); bt_control_t * control = bt_control_cc256x_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory;
hci_init(transport, (void*) &hci_uart_config_cc256x, control, remote_db); hci_init(transport, (void*) &config, control, remote_db);
// enable eHCILL // enable eHCILL
bt_control_cc256x_enable_ehcill(1); bt_control_cc256x_enable_ehcill(1);

View File

@ -48,11 +48,12 @@
// see generated_mac_address.txt - "macaddr=02:0A:F7:3d:76:be" // see generated_mac_address.txt - "macaddr=02:0A:F7:3d:76:be"
static const char * wifi_mac_address = NVRAM_GENERATED_MAC_ADDRESS; static const char * wifi_mac_address = NVRAM_GENERATED_MAC_ADDRESS;
static const hci_uart_config_t hci_uart_config = { static const hci_transport_config_uart_t hci_transport_config_uart = {
NULL, HCI_TRANSPORT_CONFIG_UART,
115200, 115200,
3000000, 3000000,
0 1,
NULL,
}; };
extern int btstack_main(void); extern int btstack_main(void);
@ -94,7 +95,7 @@ void application_start(void){
hci_transport_t * transport = hci_transport_h4_wiced_instance(); hci_transport_t * transport = hci_transport_h4_wiced_instance();
bt_control_t * control = bt_control_bcm_instance(); bt_control_t * control = bt_control_bcm_instance();
remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory; remote_device_db_t * remote_db = (remote_device_db_t *) &remote_device_db_memory;
hci_init(transport, (void*) &hci_uart_config, control, remote_db); hci_init(transport, (void*) &hci_transport_config_uart, control, remote_db);
// use WIFI Mac address + 1 for Bluetooth // use WIFI Mac address + 1 for Bluetooth
bd_addr_t dummy = { 1,2,3,4,5,6}; bd_addr_t dummy = { 1,2,3,4,5,6};

View File

@ -846,7 +846,7 @@ void le_handle_advertisement_report(uint8_t *packet, int size){
static uint32_t hci_transport_uart_get_main_baud_rate(void){ static uint32_t hci_transport_uart_get_main_baud_rate(void){
if (!hci_stack->config) return 0; if (!hci_stack->config) return 0;
uint32_t baud_rate = ((hci_uart_config_t *)hci_stack->config)->baudrate_main; uint32_t baud_rate = ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
// Limit baud rate for Broadcom chipsets to 3 mbps // Limit baud rate for Broadcom chipsets to 3 mbps
if (hci_stack->manufacturer == COMPANY_ID_BROADCOM_CORPORATION && baud_rate > 3000000){ if (hci_stack->manufacturer == COMPANY_ID_BROADCOM_CORPORATION && baud_rate > 3000000){
baud_rate = 3000000; baud_rate = 3000000;
@ -974,9 +974,9 @@ static void hci_initializing_run(void){
&& hci_stack->control && hci_stack->control
&& hci_stack->control->baudrate_cmd && hci_stack->control->baudrate_cmd
&& hci_stack->hci_transport->set_baudrate && hci_stack->hci_transport->set_baudrate
&& ((hci_uart_config_t *)hci_stack->config)->baudrate_main; && ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
if (need_baud_change) { if (need_baud_change) {
uint32_t baud_rate = ((hci_uart_config_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", baud_rate); log_info("Local baud rate change to %"PRIu32" after init script", baud_rate);
hci_stack->hci_transport->set_baudrate(baud_rate); hci_stack->hci_transport->set_baudrate(baud_rate);
} }
@ -1119,7 +1119,7 @@ static void hci_initializing_event_handler(uint8_t * packet, uint16_t size){
&& hci_stack->control && hci_stack->control
&& hci_stack->control->baudrate_cmd && hci_stack->control->baudrate_cmd
&& hci_stack->hci_transport->set_baudrate && hci_stack->hci_transport->set_baudrate
&& ((hci_uart_config_t *)hci_stack->config)->baudrate_main; && ((hci_transport_config_uart_t *)hci_stack->config)->baudrate_main;
int need_addr_change = hci_stack->custom_bd_addr_set int need_addr_change = hci_stack->custom_bd_addr_set
&& hci_stack->control && hci_stack->control

View File

@ -68,12 +68,22 @@ typedef struct {
int (*can_send_packet_now)(uint8_t packet_type); int (*can_send_packet_now)(uint8_t packet_type);
} hci_transport_t; } hci_transport_t;
typedef enum {
HCI_TRANSPORT_CONFIG_UART,
HCI_TRANSPORT_CONFIG_USB
} hci_transport_config_type_t;
typedef struct { typedef struct {
const char *device_name; hci_transport_config_type_t type;
} hci_transport_config_t;
typedef struct {
hci_transport_config_type_t type; // == HCI_TRANSPORT_CONFIG_UART
uint32_t baudrate_init; // initial baud rate uint32_t baudrate_init; // initial baud rate
uint32_t baudrate_main; // = 0: same as initial baudrate uint32_t baudrate_main; // = 0: same as initial baudrate
int flowcontrol; // int flowcontrol; //
} hci_uart_config_t; const char *device_name;
} hci_transport_config_uart_t;
// inline various hci_transport_X.h files // inline various hci_transport_X.h files

View File

@ -22,7 +22,7 @@ COMMON = \
hci_dump.c \ hci_dump.c \
le_device_db_memory.c \ le_device_db_memory.c \
memory_pool.c \ memory_pool.c \
mock.c mock.c \
utils.c \ utils.c \

View File

@ -939,17 +939,6 @@ static int get_oob_data_callback(uint8_t addres_type, bd_addr_t addr, uint8_t *
return 1; return 1;
} }
#if defined(HAVE_UART_CSR) || defined(HAVE_UART_CC256x)
static hci_uart_config_t hci_uart_config = {
// "/dev/tty.usbserial-A40081HW",
"/dev/tty.usbserial-AD025KU2",
115200,
0, // 1000000,
1
};
#endif
int btstack_main(int argc, const char * argv[]); int btstack_main(int argc, const char * argv[]);
int btstack_main(int argc, const char * argv[]){ int btstack_main(int argc, const char * argv[]){

View File

@ -14,6 +14,8 @@
#include "CppUTest/TestHarness.h" #include "CppUTest/TestHarness.h"
#include "CppUTest/CommandLineTestRunner.h" #include "CppUTest/CommandLineTestRunner.h"
#include "run_loop_posix.h"
#include "hci_cmds.h" #include "hci_cmds.h"
#include "utils.h" #include "utils.h"