diff --git a/platforms/stm32-f103rb-nucleo/btstack-config.h b/platforms/stm32-f103rb-nucleo/btstack-config.h index 1cdf830b9..8fd6db432 100644 --- a/platforms/stm32-f103rb-nucleo/btstack-config.h +++ b/platforms/stm32-f103rb-nucleo/btstack-config.h @@ -11,8 +11,8 @@ #define HAVE_EHCILL -#define ENABLE_LOG_INFO -#define ENABLE_LOG_ERROR +// #define ENABLE_LOG_INFO +// #define ENABLE_LOG_ERROR #define HCI_ACL_PAYLOAD_SIZE 52 diff --git a/platforms/stm32-f103rb-nucleo/gap_inquiry.c b/platforms/stm32-f103rb-nucleo/gap_inquiry.c deleted file mode 100644 index 543cda6b1..000000000 --- a/platforms/stm32-f103rb-nucleo/gap_inquiry.c +++ /dev/null @@ -1,206 +0,0 @@ -// ***************************************************************************** -// -// minimal setup for HCI code -// -// ***************************************************************************** -#include -#include -#include -#include - - -#include -#include - -#include "hci.h" -#include "btstack-config.h" - -int btstack_main(void); - -#define MAX_DEVICES 10 -enum DEVICE_STATE { REMOTE_NAME_REQUEST, REMOTE_NAME_INQUIRED, REMOTE_NAME_FETCHED }; -struct device { - bd_addr_t address; - uint16_t clockOffset; - uint32_t classOfDevice; - uint8_t pageScanRepetitionMode; - uint8_t rssi; - enum DEVICE_STATE state; -}; - -#define INQUIRY_INTERVAL 5 -struct device devices[MAX_DEVICES]; -int deviceCount = 0; - - -enum STATE {INIT, W4_INQUIRY_MODE_COMPLETE, ACTIVE} ; -enum STATE state = INIT; - - -int getDeviceIndexForAddress( bd_addr_t addr){ - int j; - for (j=0; j< deviceCount; j++){ - if (BD_ADDR_CMP(addr, devices[j].address) == 0){ - return j; - } - } - return -1; -} - -void start_scan(void){ - printf("Starting inquiry scan..\n"); - hci_send_cmd(&hci_inquiry, HCI_INQUIRY_LAP, INQUIRY_INTERVAL, 0); -} - -int has_more_remote_name_requests(void){ - int i; - for (i=0;i= 0) continue; // already in our list - memcpy(devices[deviceCount].address, addr, 6); - - devices[deviceCount].pageScanRepetitionMode = packet[offset]; - offset += 1; - - if (event == HCI_EVENT_INQUIRY_RESULT){ - offset += 2; // Reserved + Reserved - devices[deviceCount].classOfDevice = READ_BT_24(packet, offset); - offset += 3; - devices[deviceCount].clockOffset = READ_BT_16(packet, offset) & 0x7fff; - offset += 2; - devices[deviceCount].rssi = 0; - } else { - offset += 1; // Reserved - devices[deviceCount].classOfDevice = READ_BT_24(packet, offset); - offset += 3; - devices[deviceCount].clockOffset = READ_BT_16(packet, offset) & 0x7fff; - offset += 2; - devices[deviceCount].rssi = packet[offset]; - offset += 1; - } - devices[deviceCount].state = REMOTE_NAME_REQUEST; - printf("Device found: %s with COD: 0x%06x, pageScan %d, clock offset 0x%04x, rssi 0x%02x\n", bd_addr_to_str(addr), - devices[deviceCount].classOfDevice, devices[deviceCount].pageScanRepetitionMode, - devices[deviceCount].clockOffset, devices[deviceCount].rssi); - deviceCount++; - } - - break; - } - case HCI_EVENT_INQUIRY_COMPLETE: - for (i=0;i= 0) { - if (packet[2] == 0) { - printf("Name: '%s'\n", &packet[9]); - devices[index].state = REMOTE_NAME_FETCHED; - } else { - printf("Failed to get name: page timeout\n"); - } - } - continue_remote_names(); - break; - - default: - break; - } - break; - - default: - break; - } -} - - -// main == setup -int btstack_main(void) -{ - hci_register_packet_handler(packet_handler); - - // turn on! - hci_power_control(HCI_POWER_ON); - - // go! - run_loop_execute(); - - // happy compiler! - return 0; -} - diff --git a/platforms/stm32-f103rb-nucleo/led_counter.c b/platforms/stm32-f103rb-nucleo/led_counter.c deleted file mode 100644 index a1645cd47..000000000 --- a/platforms/stm32-f103rb-nucleo/led_counter.c +++ /dev/null @@ -1,57 +0,0 @@ -// ***************************************************************************** -// -// led_counter demo - uses the BTstack run loop to blink an LED -// -// ***************************************************************************** - -#include -#include -#include -#include - -#include "btstack_memory.h" - -#include -#include -#include "btstack-config.h" - -int btstack_main(void); - -#define HEARTBEAT_PERIOD_MS 1000 - -static int counter = 0; -static timer_source_t heartbeat; - -static void register_timer(timer_source_t *timer, uint16_t period){ - run_loop_set_timer(timer, period); - run_loop_add_timer(timer); -} - -static void heartbeat_handler(timer_source_t *ts){ - // increment counter - char lineBuffer[30]; - sprintf(lineBuffer, "BTstack counter %04u\n", ++counter); - printf(lineBuffer); - - // toggle LED - hal_led_toggle(); - - // re-register timer - register_timer(ts, HEARTBEAT_PERIOD_MS); -} - -// main -int btstack_main(void) -{ - // set one-shot timer - heartbeat.process = &heartbeat_handler; - register_timer(&heartbeat, HEARTBEAT_PERIOD_MS); - - printf("Run...\n\r"); - - // go! - run_loop_execute(); - - return 0; -} - diff --git a/platforms/stm32-f103rb-nucleo/spp_counter.c b/platforms/stm32-f103rb-nucleo/spp_counter.c deleted file mode 100644 index 61185273a..000000000 --- a/platforms/stm32-f103rb-nucleo/spp_counter.c +++ /dev/null @@ -1,177 +0,0 @@ -// ***************************************************************************** -// -// spp_counter demo - it provides an SPP and sends a counter every second -// -// it doesn't use the LCD to get down to a minimal memory footprint -// -// ***************************************************************************** - -#include -#include -#include -#include - -#include -#include -#include - -#include "hci.h" -#include "l2cap.h" -#include "btstack_memory.h" -#include "remote_device_db.h" -#include "rfcomm.h" -#include "sdp.h" -#include "btstack-config.h" - -#define HEARTBEAT_PERIOD_MS 1000 - -static uint8_t rfcomm_channel_nr = 1; -static uint16_t rfcomm_channel_id; -static uint8_t spp_service_buffer[150]; -static timer_source_t heartbeat; - -static int real_counter = 0; -static int counter_to_send = 0; - -enum STATE {INIT, W4_CONNECTION, W4_CHANNEL_COMPLETE, ACTIVE} ; -enum STATE state = INIT; - -static void send_packet(void){ - if (real_counter <= counter_to_send) return; - - char lineBuffer[30]; - sprintf(lineBuffer, "BTstack counter %04u\n\r", counter_to_send); - printf(lineBuffer); - - int err = rfcomm_send_internal(rfcomm_channel_id, (uint8_t*) lineBuffer, strlen(lineBuffer)); - if (err) return; - - counter_to_send++; -} - -// Bluetooth logic -static void packet_handler (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ - bd_addr_t event_addr; - uint8_t rfcomm_channel_nr; - uint16_t mtu; - uint8_t event = packet[0]; - - // handle events, ignore data - if (packet_type != HCI_EVENT_PACKET) return; - - switch (event) { - case BTSTACK_EVENT_STATE: - // bt stack activated, get started - set local name - if (packet[2] == HCI_STATE_WORKING) { - hci_send_cmd(&hci_write_local_name, "BTstack SPP Counter"); - } - break; - - case HCI_EVENT_COMMAND_COMPLETE: - if (COMMAND_COMPLETE_EVENT(packet, hci_read_bd_addr)){ - bt_flip_addr(event_addr, &packet[6]); - printf("BD-ADDR: %s\n\r", bd_addr_to_str(event_addr)); - break; - } - if (COMMAND_COMPLETE_EVENT(packet, hci_write_local_name)){ - hci_discoverable_control(1); - break; - } - break; - - case HCI_EVENT_LINK_KEY_REQUEST: - // deny link key request - printf("Link key request\n\r"); - bt_flip_addr(event_addr, &packet[2]); - hci_send_cmd(&hci_link_key_request_negative_reply, &event_addr); - break; - - case HCI_EVENT_PIN_CODE_REQUEST: - // inform about pin code request - printf("Pin code request - using '0000'\n\r"); - bt_flip_addr(event_addr, &packet[2]); - hci_send_cmd(&hci_pin_code_request_reply, &event_addr, 4, "0000"); - break; - - case RFCOMM_EVENT_INCOMING_CONNECTION: - // data: event (8), len(8), address(48), channel (8), rfcomm_cid (16) - bt_flip_addr(event_addr, &packet[2]); - rfcomm_channel_nr = packet[8]; - rfcomm_channel_id = READ_BT_16(packet, 9); - printf("RFCOMM channel %u requested for %s\n\r", rfcomm_channel_nr, bd_addr_to_str(event_addr)); - rfcomm_accept_connection_internal(rfcomm_channel_id); - break; - - case RFCOMM_EVENT_OPEN_CHANNEL_COMPLETE: - // data: event(8), len(8), status (8), address (48), server channel(8), rfcomm_cid(16), max frame size(16) - if (packet[2]) { - printf("RFCOMM channel open failed, status %u\n\r", packet[2]); - } else { - rfcomm_channel_id = READ_BT_16(packet, 12); - mtu = READ_BT_16(packet, 14); - printf("\n\rRFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u\n\r", rfcomm_channel_id, mtu); - } - break; - case DAEMON_EVENT_HCI_PACKET_SENT: - case RFCOMM_EVENT_CREDITS: - if (rfcomm_can_send_packet_now(rfcomm_channel_id)) send_packet(); - break; - - case RFCOMM_EVENT_CHANNEL_CLOSED: - rfcomm_channel_id = 0; - break; - - default: - break; - } - -} - -static void run_loop_register_timer(timer_source_t *timer, uint16_t period){ - run_loop_set_timer(timer, period); - run_loop_add_timer(timer); -} - - -static void timer_handler(timer_source_t *ts){ - real_counter++; - // re-register timer - run_loop_register_timer(ts, HEARTBEAT_PERIOD_MS); -} - -// main -int btstack_main(void); -int btstack_main(void){ - // init L2CAP - l2cap_init(); - l2cap_register_packet_handler(packet_handler); - - // init RFCOMM - rfcomm_init(); - rfcomm_register_packet_handler(packet_handler); - rfcomm_register_service_internal(NULL, rfcomm_channel_nr, 100); // reserved channel, mtu=100 - - // init SDP, create record for SPP and register with SDP - sdp_init(); - memset(spp_service_buffer, 0, sizeof(spp_service_buffer)); - service_record_item_t * service_record_item = (service_record_item_t *) spp_service_buffer; - sdp_create_spp_service( (uint8_t*) &service_record_item->service_record, 1, "SPP Counter"); - printf("SDP service buffer size: %u\n\r", (uint16_t) (sizeof(service_record_item_t) + de_get_len((uint8_t*) &service_record_item->service_record))); - sdp_register_service_internal(NULL, service_record_item); - - // set one-shot timer - heartbeat.process = &timer_handler; - run_loop_register_timer(&heartbeat, HEARTBEAT_PERIOD_MS); - - printf("Run...\n\r"); - - // turn on! - hci_power_control(HCI_POWER_ON); - - // go! - run_loop_execute(); - - // happy compiler! - return 0; -} -