mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-18 19:21:54 +00:00
use Serial.print.. instead of printf in Arduino examples
This commit is contained in:
parent
e2e6223a19
commit
52a6864fcb
@ -88,20 +88,12 @@ extern "C" int putchar(int c) {
|
||||
Serial.write((uint8_t)c);
|
||||
return c;
|
||||
}
|
||||
static void setup_printf(int baud) {
|
||||
Serial.begin(baud);
|
||||
}
|
||||
#else
|
||||
static FILE uartout = {0} ;
|
||||
static int uart_putchar (char c, FILE *stream) {
|
||||
Serial.write(c);
|
||||
return 0;
|
||||
}
|
||||
void setup_printf(int baud) {
|
||||
Serial.begin(baud);
|
||||
fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||
stdout = &uartout;
|
||||
}
|
||||
#endif
|
||||
|
||||
// HAL CPU Implementation
|
||||
@ -590,6 +582,12 @@ BTstackManager::BTstackManager(void){
|
||||
adv_data_len = pos;
|
||||
|
||||
att_db_util_init();
|
||||
|
||||
#ifdef __AVR__
|
||||
// configure stdout to go via Serial
|
||||
fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||
stdout = &uartout;
|
||||
#endif
|
||||
}
|
||||
|
||||
void BTstackManager::setBLEAdvertisementCallback(void (*callback)(BLEAdvertisement * bleAdvertisement)){
|
||||
|
@ -19,11 +19,6 @@ typedef enum BLEStatus {
|
||||
|
||||
typedef void (*btstack_packet_handler_t) (uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
|
||||
|
||||
/**
|
||||
* @brief Setup printf to use Serial with given baud rate
|
||||
*/
|
||||
void setup_printf(int baud);
|
||||
|
||||
class UUID {
|
||||
private:
|
||||
uint8_t uuid[16];
|
||||
|
@ -19,15 +19,18 @@ void ancs_callback(ancs_event_t * event){
|
||||
const char * attribute_name;
|
||||
switch (event->type){
|
||||
case ANCS_CLIENT_CONNECTED:
|
||||
printf("ANCS Client: Connected\n");
|
||||
Serial.println("ANCS Client: Connected");
|
||||
break;
|
||||
case ANCS_CLIENT_DISCONNECTED:
|
||||
printf("ANCS Client: Disconnected\n");
|
||||
Serial.println("ANCS Client: Disconnected");
|
||||
break;
|
||||
case ANCS_CLIENT_NOTIFICATION:
|
||||
attribute_name = ancs_client_attribute_name_for_id(event->attribute_id);
|
||||
if (!attribute_name) break;
|
||||
printf("Notification: %s - %s\n", attribute_name, event->text);
|
||||
Serial.print("Notification: ");
|
||||
Serial.print(attribute_name);
|
||||
Serial.print(" - ");
|
||||
Serial.println(event->text);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -36,9 +39,8 @@ void ancs_callback(ancs_event_t * event){
|
||||
|
||||
void setup(void){
|
||||
|
||||
setup_printf(9600);
|
||||
|
||||
printf("BTstack ANCS Client starting up...\n");
|
||||
Serial.begin(9600);
|
||||
Serial.println("BTstack ANCS Client starting up...");
|
||||
|
||||
// startup BTstack and configure log_info/log_error
|
||||
BTstack.setup();
|
||||
|
@ -4,25 +4,25 @@
|
||||
|
||||
//
|
||||
typedef struct characteristic_summary {
|
||||
UUID uuid;
|
||||
const char * name;
|
||||
bool found;
|
||||
BLECharacteristic characteristic;
|
||||
UUID uuid;
|
||||
const char * name;
|
||||
bool found;
|
||||
BLECharacteristic characteristic;
|
||||
} characteristic_summary_t;
|
||||
|
||||
typedef enum characteristicIDs {
|
||||
charRX = 0,
|
||||
charTX,
|
||||
charBaud,
|
||||
charBdAddr,
|
||||
numCharacteristics /* last one */
|
||||
charRX = 0,
|
||||
charTX,
|
||||
charBaud,
|
||||
charBdAddr,
|
||||
numCharacteristics /* last one */
|
||||
} characteristicIDs_t;
|
||||
|
||||
characteristic_summary characteristics[] = {
|
||||
{ UUID("f897177b-aee8-4767-8ecc-cc694fd5fcee"), "RX" },
|
||||
{ UUID("bf45e40a-de2a-4bc8-bba0-e5d6065f1b4b"), "TX" },
|
||||
{ UUID("2fbc0f31-726a-4014-b9fe-c8be0652e982"), "Baudrate" },
|
||||
{ UUID("65c228da-bad1-4f41-b55f-3d177f4e2196"), "BD ADDR" }
|
||||
{ UUID("f897177b-aee8-4767-8ecc-cc694fd5fcee"), "RX" },
|
||||
{ UUID("bf45e40a-de2a-4bc8-bba0-e5d6065f1b4b"), "TX" },
|
||||
{ UUID("2fbc0f31-726a-4014-b9fe-c8be0652e982"), "Baudrate" },
|
||||
{ UUID("65c228da-bad1-4f41-b55f-3d177f4e2196"), "BD ADDR" }
|
||||
};
|
||||
|
||||
// BLE Shield Service V2 incl. used Characteristics
|
||||
@ -41,132 +41,143 @@ static timer_source_t heartbeat;
|
||||
|
||||
void setup(void){
|
||||
|
||||
setup_printf(9600);
|
||||
Serial.begin(9600);
|
||||
|
||||
BTstack.setBLEAdvertisementCallback(advertisementCallback);
|
||||
BTstack.setBLEDeviceConnectedCallback(deviceConnectedCallback);
|
||||
BTstack.setBLEDeviceDisconnectedCallback(deviceDisconnectedCallback);
|
||||
BTstack.setGATTServiceDiscoveredCallback(gattServiceDiscovered);
|
||||
BTstack.setGATTCharacteristicDiscoveredCallback(gattCharacteristicDiscovered);
|
||||
BTstack.setGATTCharacteristicNotificationCallback(gattCharacteristicNotification);
|
||||
BTstack.setGATTCharacteristicReadCallback(gattReadCallback);
|
||||
BTstack.setGATTCharacteristicWrittenCallback(gattWrittenCallback);
|
||||
BTstack.setGATTCharacteristicSubscribedCallback(gattSubscribedCallback);
|
||||
BTstack.setBLEAdvertisementCallback(advertisementCallback);
|
||||
BTstack.setBLEDeviceConnectedCallback(deviceConnectedCallback);
|
||||
BTstack.setBLEDeviceDisconnectedCallback(deviceDisconnectedCallback);
|
||||
BTstack.setGATTServiceDiscoveredCallback(gattServiceDiscovered);
|
||||
BTstack.setGATTCharacteristicDiscoveredCallback(gattCharacteristicDiscovered);
|
||||
BTstack.setGATTCharacteristicNotificationCallback(gattCharacteristicNotification);
|
||||
BTstack.setGATTCharacteristicReadCallback(gattReadCallback);
|
||||
BTstack.setGATTCharacteristicWrittenCallback(gattWrittenCallback);
|
||||
BTstack.setGATTCharacteristicSubscribedCallback(gattSubscribedCallback);
|
||||
|
||||
BTstack.setup();
|
||||
BTstack.setup();
|
||||
|
||||
BTstack.bleStartScanning();
|
||||
BTstack.bleStartScanning();
|
||||
}
|
||||
|
||||
|
||||
void loop(void){
|
||||
BTstack.loop();
|
||||
BTstack.loop();
|
||||
|
||||
// send counter as fast as possible
|
||||
if (sendCounter){
|
||||
sprintf(counterString, "BTstack %u\n", counter);
|
||||
int result = myBLEDevice.writeCharacteristicWithoutResponse(&characteristics[charTX].characteristic, (uint8_t*) counterString, strlen(counterString) );
|
||||
if (result == BLE_PERIPHERAL_OK){
|
||||
printf("Wrote without response: %s\n", counterString);
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
// send counter as fast as possible
|
||||
if (sendCounter){
|
||||
sprintf(counterString, "BTstack %u\n", counter);
|
||||
int result = myBLEDevice.writeCharacteristicWithoutResponse(&characteristics[charTX].characteristic, (uint8_t*) counterString, strlen(counterString) );
|
||||
if (result == BLE_PERIPHERAL_OK){
|
||||
Serial.print("Wrote without response: ");
|
||||
Serial.println(counterString);
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void advertisementCallback(BLEAdvertisement *bleAdvertisement) {
|
||||
printf("Device discovered: %s, RSSI: %d\n", bleAdvertisement->getBdAddr()->getAddressString(), bleAdvertisement->getRssi() );
|
||||
// if (bleAdvertisement->containsService(&bleShieldServiceV2UUID) && bleAdvertisement->nameHasPrefix("BLE-Shield")) {
|
||||
if (bleAdvertisement->containsService(&bleShieldServiceV2UUID)) {
|
||||
printf("\nBLE ShieldService V2 found!\n\n");
|
||||
BTstack.bleStopScanning();
|
||||
BTstack.bleConnect(bleAdvertisement, 10000); // 10 s
|
||||
}
|
||||
Serial.print("Device discovered: ");
|
||||
Serial.print(bleAdvertisement->getBdAddr()->getAddressString());
|
||||
Serial.print(", RSSI: %d");
|
||||
Serial.println(bleAdvertisement->getRssi());
|
||||
if (bleAdvertisement->containsService(&bleShieldServiceV2UUID)) {
|
||||
Serial.println("\nBLE ShieldService V2 found!\n");
|
||||
BTstack.bleStopScanning();
|
||||
BTstack.bleConnect(bleAdvertisement, 10000); // 10 s
|
||||
}
|
||||
}
|
||||
|
||||
void deviceConnectedCallback(BLEStatus status, BLEDevice *device) {
|
||||
switch (status){
|
||||
case BLE_STATUS_OK:
|
||||
printf("Device connected!\n");
|
||||
myBLEDevice = *device;
|
||||
counter = 0;
|
||||
myBLEDevice.discoverGATTServices();
|
||||
break;
|
||||
case BLE_STATUS_CONNECTION_TIMEOUT:
|
||||
printf("Error while Connecting the Peripheral\n");
|
||||
BTstack.bleStartScanning();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (status){
|
||||
case BLE_STATUS_OK:
|
||||
Serial.println("Device connected!");
|
||||
myBLEDevice = *device;
|
||||
counter = 0;
|
||||
myBLEDevice.discoverGATTServices();
|
||||
break;
|
||||
case BLE_STATUS_CONNECTION_TIMEOUT:
|
||||
Serial.println("Error while Connecting the Peripheral");
|
||||
BTstack.bleStartScanning();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void deviceDisconnectedCallback(BLEDevice * device){
|
||||
printf("Disconnected, starting over..\n");
|
||||
sendCounter = false;
|
||||
BTstack.bleStartScanning();
|
||||
Serial.println("Disconnected, starting over..");
|
||||
sendCounter = false;
|
||||
BTstack.bleStartScanning();
|
||||
}
|
||||
|
||||
void gattServiceDiscovered(BLEStatus status, BLEDevice *device, BLEService *bleService) {
|
||||
switch(status){
|
||||
case BLE_STATUS_OK:
|
||||
printf("Service Discovered: %s\n", bleService->getUUID()->getUuidString());
|
||||
if (bleService->matches(&bleShieldServiceV2UUID)) {
|
||||
serviceFound = true;
|
||||
printf("Our service located!\n");
|
||||
myBLEService = *bleService;
|
||||
}
|
||||
break;
|
||||
case BLE_STATUS_DONE:
|
||||
printf("Service discovery finished\n");
|
||||
if (serviceFound) {
|
||||
device->discoverCharacteristicsForService(&myBLEService);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("Service discovery error\n");
|
||||
break;
|
||||
}
|
||||
switch(status){
|
||||
case BLE_STATUS_OK:
|
||||
Serial.print("Service Discovered: :");
|
||||
Serial.println(bleService->getUUID()->getUuidString());
|
||||
if (bleService->matches(&bleShieldServiceV2UUID)) {
|
||||
serviceFound = true;
|
||||
Serial.println("Our service located!");
|
||||
myBLEService = *bleService;
|
||||
}
|
||||
break;
|
||||
case BLE_STATUS_DONE:
|
||||
Serial.println("Service discovery finished");
|
||||
if (serviceFound) {
|
||||
device->discoverCharacteristicsForService(&myBLEService);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Serial.println("Service discovery error");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void gattCharacteristicDiscovered(BLEStatus status, BLEDevice *device, BLECharacteristic *characteristic) {
|
||||
switch(status){
|
||||
case BLE_STATUS_OK:
|
||||
printf("Characteristic Discovered: %s, handle 0x%04x\n", characteristic->getUUID()->getUuidString(), characteristic->getCharacteristic()->value_handle);
|
||||
int i;
|
||||
for (i=0;i<numCharacteristics;i++){
|
||||
if (characteristic->matches(&characteristics[i].uuid)){
|
||||
printf("\nCharacteristic '%s' found!\n", characteristics[i].name);
|
||||
characteristics[i].found = 1;
|
||||
characteristics[i].characteristic = *characteristic;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BLE_STATUS_DONE:
|
||||
printf("Characteristic discovery finished, status %u.\n", status);
|
||||
if (characteristics[charRX].found) {
|
||||
device->subscribeForNotifications(&characteristics[charRX].characteristic);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
printf("Characteristics discovery error\n");
|
||||
break;
|
||||
}
|
||||
switch(status){
|
||||
case BLE_STATUS_OK:
|
||||
Serial.print("Characteristic Discovered: ");
|
||||
Serial.print(characteristic->getUUID()->getUuidString());
|
||||
Serial.print(", handle 0x");
|
||||
Serial.println(characteristic->getCharacteristic()->value_handle, HEX);
|
||||
int i;
|
||||
for (i=0;i<numCharacteristics;i++){
|
||||
if (characteristic->matches(&characteristics[i].uuid)){
|
||||
Serial.print("Characteristic found: ");
|
||||
Serial.println(characteristics[i].name);
|
||||
characteristics[i].found = 1;
|
||||
characteristics[i].characteristic = *characteristic;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BLE_STATUS_DONE:
|
||||
Serial.print("Characteristic discovery finished, status ");
|
||||
Serial.println(status, HEX);
|
||||
if (characteristics[charRX].found) {
|
||||
device->subscribeForNotifications(&characteristics[charRX].characteristic);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
Serial.println("Characteristics discovery error");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void gattSubscribedCallback(BLEStatus status, BLEDevice * device){
|
||||
device->readCharacteristic(&characteristics[charBdAddr].characteristic);
|
||||
device->readCharacteristic(&characteristics[charBdAddr].characteristic);
|
||||
}
|
||||
|
||||
void gattReadCallback(BLEStatus status, BLEDevice *device, uint8_t *value, uint16_t length) {
|
||||
printf("Read callback: '%s'\n", (const char *)value);
|
||||
device->writeCharacteristic(&characteristics[charTX].characteristic, (uint8_t*) "Hello!", 6);
|
||||
Serial.print("Read callback: ");
|
||||
Serial.println((const char *)value);
|
||||
device->writeCharacteristic(&characteristics[charTX].characteristic, (uint8_t*) "Hello!", 6);
|
||||
}
|
||||
|
||||
void gattWrittenCallback(BLEStatus status, BLEDevice *device){
|
||||
sendCounter = true;
|
||||
sendCounter = true;
|
||||
}
|
||||
|
||||
void gattCharacteristicNotification(BLEDevice *device, uint16_t value_handle, uint8_t *value, uint16_t length) {
|
||||
printf("Notification: '%s'\n", (const char *)value);
|
||||
Serial.print("Notification: ");
|
||||
Serial.println((const char *)value);
|
||||
}
|
||||
|
@ -6,43 +6,43 @@ static uint16_t value_handle;
|
||||
|
||||
void setup(void){
|
||||
|
||||
setup_printf(9600);
|
||||
setup_printf(9600);
|
||||
|
||||
// set callbacks
|
||||
BTstack.setBLEDeviceConnectedCallback(deviceConnectedCallback);
|
||||
BTstack.setBLEDeviceDisconnectedCallback(deviceDisconnectedCallback);
|
||||
BTstack.setGATTCharacteristicRead(gattReadCallback);
|
||||
BTstack.setGATTCharacteristicWrite(gattWriteCallback);
|
||||
// set callbacks
|
||||
BTstack.setBLEDeviceConnectedCallback(deviceConnectedCallback);
|
||||
BTstack.setBLEDeviceDisconnectedCallback(deviceDisconnectedCallback);
|
||||
BTstack.setGATTCharacteristicRead(gattReadCallback);
|
||||
BTstack.setGATTCharacteristicWrite(gattWriteCallback);
|
||||
|
||||
// setup GATT Database
|
||||
int flags = 0;
|
||||
uint8_t * data = NULL;
|
||||
uint16_t data_len = 0;
|
||||
BTstack.addGATTService(new UUID("B8E06067-62AD-41BA-9231-206AE80AB550"));
|
||||
value_handle = BTstack.addGATTCharacteristic(new UUID("f897177b-aee8-4767-8ecc-cc694fd5fcee"), flags, "This is a String!");
|
||||
// setup GATT Database
|
||||
int flags = 0;
|
||||
uint8_t * data = NULL;
|
||||
uint16_t data_len = 0;
|
||||
BTstack.addGATTService(new UUID("B8E06067-62AD-41BA-9231-206AE80AB550"));
|
||||
value_handle = BTstack.addGATTCharacteristic(new UUID("f897177b-aee8-4767-8ecc-cc694fd5fcee"), flags, "This is a String!");
|
||||
|
||||
// startup Bluetooth and activate advertisements
|
||||
BTstack.setup();
|
||||
BTstack.startAdvertising();
|
||||
// startup Bluetooth and activate advertisements
|
||||
BTstack.setup();
|
||||
BTstack.startAdvertising();
|
||||
}
|
||||
|
||||
|
||||
void loop(void){
|
||||
BTstack.loop();
|
||||
BTstack.loop();
|
||||
}
|
||||
|
||||
void deviceConnectedCallback(BLEStatus status, BLEDevice *device) {
|
||||
switch (status){
|
||||
case BLE_STATUS_OK:
|
||||
printf("Device connected!\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (status){
|
||||
case BLE_STATUS_OK:
|
||||
printf("Device connected!\n");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void deviceDisconnectedCallback(BLEDevice * device){
|
||||
printf("Disconnected.\n");
|
||||
printf("Disconnected.\n");
|
||||
}
|
||||
|
||||
// ATT Client Read Callback for Dynamic Data
|
||||
|
@ -5,7 +5,7 @@
|
||||
UUID uuid("E2C56DB5-DFFB-48D2-B060-D0F5A71096E0");
|
||||
|
||||
void setup(void){
|
||||
setup_printf(9600);
|
||||
Serial.begin(9600);
|
||||
BTstack.iBeaconConfigure(&uuid, 4711, 2);
|
||||
BTstack.setup();
|
||||
BTstack.startAdvertising();
|
||||
|
@ -3,27 +3,37 @@
|
||||
#include <SPI.h>
|
||||
|
||||
void setup(void){
|
||||
setup_printf(9600);
|
||||
Serial.begin(9600);
|
||||
|
||||
BTstack.setBLEAdvertisementCallback(advertisementCallback);
|
||||
BTstack.setup();
|
||||
BTstack.bleStartScanning();
|
||||
BTstack.setBLEAdvertisementCallback(advertisementCallback);
|
||||
BTstack.setup();
|
||||
BTstack.bleStartScanning();
|
||||
}
|
||||
|
||||
|
||||
void loop(void){
|
||||
BTstack.loop();
|
||||
BTstack.loop();
|
||||
}
|
||||
|
||||
void advertisementCallback(BLEAdvertisement *adv) {
|
||||
if (adv->isIBeacon()) {
|
||||
printf("iBeacon found %s, RSSI %d, UUID %s, MajorID %u, MinorID %u, Measured Power %0x\n",
|
||||
adv->getBdAddr()->getAddressString(), adv->getRssi() ,
|
||||
adv->getIBeaconUUID()->getUuidString(), adv->getIBeaconMajorID(), adv->getIBecaonMinorID(),
|
||||
adv->getiBeaconMeasuredPower());
|
||||
|
||||
} else {
|
||||
printf("Device discovered: %s, RSSI: %d\n", adv->getBdAddr()->getAddressString(), adv->getRssi() );
|
||||
}
|
||||
if (adv->isIBeacon()) {
|
||||
Serial.print("iBeacon found ");
|
||||
Serial.print(adv->getBdAddr()->getAddressString());
|
||||
Serial.print(", RSSI ");
|
||||
Serial.print(adv->getRssi());
|
||||
Serial.print(", UUID ");
|
||||
Serial.print(adv->getIBeaconUUID()->getUuidString());
|
||||
Serial.print(", MajorID ");
|
||||
Serial.print(adv->getIBeaconMajorID());
|
||||
Serial.print(", MinorID ");
|
||||
Serial.print(adv->getIBecaonMinorID());
|
||||
Serial.print(", Measured Power ");
|
||||
Serial.println(adv->getiBeaconMeasuredPower());
|
||||
} else {
|
||||
Serial.print("Device discovered: ");
|
||||
Serial.print(adv->getBdAddr()->getAddressString());
|
||||
Serial.print(", RSSI ");
|
||||
Serial.println(adv->getRssi());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user