daemon: configure TLV, btstack_link_key_db and le_device_db

This commit is contained in:
Matthias Ringwald 2018-08-22 14:56:15 +02:00
parent 5cdae61761
commit a05b2457aa
3 changed files with 46 additions and 63 deletions

View File

@ -68,6 +68,8 @@
#include "btstack_event.h"
#include "btstack_linked_list.h"
#include "btstack_run_loop.h"
#include "btstack_tlv_posix.h"
#include "btstack_server.h"
#ifdef _WIN32
@ -77,6 +79,7 @@
#endif
#include "btstack_version.h"
#include "classic/btstack_link_key_db.h"
#include "classic/btstack_link_key_db_tlv.h"
#include "classic/rfcomm.h"
#include "classic/sdp_server.h"
#include "classic/sdp_client.h"
@ -94,6 +97,7 @@
#include "ble/att_server.h"
#include "ble/att_db.h"
#include "ble/le_device_db.h"
#include "ble/le_device_db_tlv.h"
#include "ble/sm.h"
#endif
@ -235,6 +239,11 @@ static int loggingEnabled;
static const char * btstack_server_storage_path;
// TLV
static int tlv_setup_done;
static const btstack_tlv_t * tlv_impl;
static btstack_tlv_posix_t tlv_context;
static void dummy_bluetooth_status_handler(BLUETOOTH_STATE state){
log_info("Bluetooth status: %u\n", state);
};
@ -1437,56 +1446,6 @@ static void daemon_retry_parked(void){
retry_mutex = 0;
}
#if 0
Minimal Code for LE Peripheral
enum {
SET_ADVERTISEMENT_PARAMS = 1 << 0,
SET_ADVERTISEMENT_DATA = 1 << 1,
ENABLE_ADVERTISEMENTS = 1 << 2,
};
const uint8_t adv_data[] = {
// Flags general discoverable
0x02, 0x01, 0x02,
// Name
0x08, 0x09, 'B', 'T', 's', 't', 'a', 'c', 'k'
};
uint8_t adv_data_len = sizeof(adv_data);
static uint16_t todos = 0;
static void app_run(void){
if (!hci_can_send_command_packet_now()) return;
if (todos & SET_ADVERTISEMENT_DATA){
log_info("app_run: set advertisement data\n");
todos &= ~SET_ADVERTISEMENT_DATA;
hci_send_cmd(&hci_le_set_advertising_data, adv_data_len, adv_data);
return;
}
if (todos & SET_ADVERTISEMENT_PARAMS){
todos &= ~SET_ADVERTISEMENT_PARAMS;
uint8_t adv_type = 0; // default
bd_addr_t null_addr;
memset(null_addr, 0, 6);
uint16_t adv_int_min = 0x0030;
uint16_t adv_int_max = 0x0030;
hci_send_cmd(&hci_le_set_advertising_parameters, adv_int_min, adv_int_max, adv_type, 0, 0, &null_addr, 0x07, 0x00);
return;
}
if (todos & ENABLE_ADVERTISEMENTS){
log_info("app_run: enable advertisements\n");
todos &= ~ENABLE_ADVERTISEMENTS;
hci_send_cmd(&hci_le_set_advertise_enable, 1);
return;
}
}
#endif
static void daemon_emit_packet(void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
if (connection) {
socket_connection_send_packet(connection, packet_type, channel, packet, size);
@ -1505,6 +1464,29 @@ static void daemon_packet_handler(void * connection, uint8_t packet_type, uint16
deamon_status_event_handler(packet, size);
switch (hci_event_packet_get_type(packet)){
case BTSTACK_EVENT_STATE:
if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) break;
if (tlv_setup_done) break;
// setup TLV using local address as part of the name
gap_local_bd_addr(addr);
log_info("BTstack up and running at %s", bd_addr_to_str(addr));
snprintf(string_buffer, sizeof(string_buffer), "%s/btstack_%s.tlv", btstack_server_storage_path, bd_addr_to_str(addr));
tlv_impl = btstack_tlv_posix_init_instance(&tlv_context, string_buffer);
btstack_tlv_set_instance(tlv_impl, &tlv_context);
// setup link key db as well, if not done already (a big ugly, but will be evaluated at compile time)
if ((void *)&BTSTACK_LINK_KEY_DB_INSTANCE == (void *)&btstack_link_key_db_tlv_get_instance){
hci_set_link_key_db(btstack_link_key_db_tlv_get_instance(tlv_impl, &tlv_context));
}
// init le device db to use TLV
le_device_db_tlv_configure(tlv_impl, &tlv_context);
le_device_db_init();
le_device_db_set_local_bd_addr(addr);
tlv_setup_done = 1;
break;
case HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS:
// ACL buffer freed...
daemon_retry_parked();
@ -1975,9 +1957,12 @@ int btstack_server_run(int tcp_flag){
platform_iphone_register_window_manager_restart(update_ui_status);
platform_iphone_register_preferences_changed(preferences_changed_callback);
#endif
#ifdef BTSTACK_LINK_KEY_DB_INSTANCE
btstack_link_key_db = BTSTACK_LINK_KEY_DB_INSTANCE();
// setup link key db, if not done already (a big ugly, but will be evaluated at compile time)
if ((void *)&BTSTACK_LINK_KEY_DB_INSTANCE != (void *)&btstack_link_key_db_tlv_get_instance){
btstack_link_key_db = BTSTACK_LINK_KEY_DB_INSTANCE();
}
#endif
#ifdef BTSTACK_DEVICE_NAME_DB_INSTANCE
@ -2005,7 +1990,7 @@ int btstack_server_run(int tcp_flag){
daemon_set_logging_enabled(newLoggingEnabled);
// dump version
log_info("BTdaemon started\n");
log_info("BTStack Server started\n");
log_info("version %s, build %s", BTSTACK_VERSION, BTSTACK_DATE);
// init HCI
@ -2046,8 +2031,6 @@ int btstack_server_run(int tcp_flag){
#endif
#ifdef ENABLE_BLE
le_device_db_init();
sm_init();
sm_event_callback_registration.callback = &stack_packet_handler;
sm_add_event_handler(&sm_event_callback_registration);

View File

@ -50,8 +50,8 @@ case "$host_os" in
LDFLAGS+="-lws2_32"
BTSTACK_LIB_LDFLAGS="-shared"
BTSTACK_LIB_EXTENSION="dll"
REMOTE_DEVICE_DB_SOURCES="btstack_link_key_db_memory.c rfcomm_service_db_memory.c"
BTSTACK_LINK_KEY_DB_INSTANCE="btstack_link_key_db_memory_instance"
REMOTE_DEVICE_DB_SOURCES="btstack_link_key_db_tlv.c rfcomm_service_db_memory.c"
BTSTACK_LINK_KEY_DB_INSTANCE="btstack_link_key_db_tlv_instance"
# BTSTACK_DEVICE_NAME_DB_INSTANCE="btstack_device_name_db_memory_instance"
UNIX_SOCKETS=no
HCI_USB_LIB=winusb
@ -61,8 +61,8 @@ case "$host_os" in
btstack_run_loop_SOURCES="btstack_run_loop_posix.c"
BTSTACK_LIB_LDFLAGS="-shared -Wl,-rpath,\$(prefix)/lib"
BTSTACK_LIB_EXTENSION="so"
REMOTE_DEVICE_DB_SOURCES="btstack_link_key_db_memory.c rfcomm_service_db_memory.c"
BTSTACK_LINK_KEY_DB_INSTANCE="btstack_link_key_db_memory_instance"
REMOTE_DEVICE_DB_SOURCES="btstack_link_key_db_tlv.c rfcomm_service_db_memory.c"
BTSTACK_LINK_KEY_DB_INSTANCE="btstack_link_key_db_tlv_get_instance"
# BTSTACK_DEVICE_NAME_DB_INSTANCE="btstack_device_name_db_fs_instance"
UNIX_SOCKETS=yes
HCI_USB_LIB=libusb
@ -126,8 +126,7 @@ else
echo "UART_SPEED: $UART_SPEED"
fi
echo "BTSTACK_LINK_KEY_DB: $BTSTACK_LINK_KEY_DB_INSTANCE"
echo "BTSTACK_DEVICE_NAME_DB: $BTSTACK_DEVICE_NAME_DB_INSTANCE"
echo "Persistent storage: $REMOTE_DEVICE_DB_SOURCES"
echo "UNIX_SOCKETS: $UNIX_SOCKETS"
echo
@ -169,7 +168,7 @@ echo >> btstack_config.h
echo "// BTstack configuration. buffers, sizes, .." >> btstack_config.h
echo "#define HCI_ACL_PAYLOAD_SIZE 1021" >> btstack_config.h
echo "#define MAX_NR_LE_DEVICE_DB_ENTRIES 1" >> btstack_config.h
echo "#define NVM_NUM_DEVICE_DB_ENTRIES 20" >> btstack_config.h
echo >> btstack_config.h
echo "// Daemon configuration" >> btstack_config.h

View File

@ -56,6 +56,7 @@ BTdaemon_SOURCES = \
btstack_memory.c \
btstack_memory_pool.c \
btstack_tlv.c \
btstack_tlv_posix.c \
daemon.c \
gatt_client.c \
hci.c \
@ -63,7 +64,7 @@ BTdaemon_SOURCES = \
hci_transport_h4.c \
l2cap.c \
l2cap_signaling.c \
le_device_db_memory.c \
le_device_db_tlv.c \
rfcomm.c \
sdp_client.c \
sdp_client_rfcomm.c \