mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-14 01:27:41 +00:00
daemon: configure TLV, btstack_link_key_db and le_device_db
This commit is contained in:
parent
5cdae61761
commit
a05b2457aa
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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 \
|
||||
|
Loading…
x
Reference in New Issue
Block a user