diff --git a/platforms/arduino/BTstack.cpp b/platforms/arduino/BTstack.cpp index 21bf1b199..57fab6550 100644 --- a/platforms/arduino/BTstack.cpp +++ b/platforms/arduino/BTstack.cpp @@ -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)){ diff --git a/platforms/arduino/BTstack.h b/platforms/arduino/BTstack.h index 919eb41df..1f5eb3964 100644 --- a/platforms/arduino/BTstack.h +++ b/platforms/arduino/BTstack.h @@ -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]; diff --git a/platforms/arduino/examples/ANCS/ANCS.ino b/platforms/arduino/examples/ANCS/ANCS.ino index a2c058c33..ab3ac9d13 100644 --- a/platforms/arduino/examples/ANCS/ANCS.ino +++ b/platforms/arduino/examples/ANCS/ANCS.ino @@ -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(); diff --git a/platforms/arduino/examples/LECentral/LECentral.ino b/platforms/arduino/examples/LECentral/LECentral.ino index 87665ac60..803be1ed2 100644 --- a/platforms/arduino/examples/LECentral/LECentral.ino +++ b/platforms/arduino/examples/LECentral/LECentral.ino @@ -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;imatches(&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;imatches(&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); } diff --git a/platforms/arduino/examples/LEPeripheral/LEPeripheral.ino b/platforms/arduino/examples/LEPeripheral/LEPeripheral.ino index 54c8354cd..45b035a7b 100644 --- a/platforms/arduino/examples/LEPeripheral/LEPeripheral.ino +++ b/platforms/arduino/examples/LEPeripheral/LEPeripheral.ino @@ -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 diff --git a/platforms/arduino/examples/iBeacon/iBeacon.ino b/platforms/arduino/examples/iBeacon/iBeacon.ino index b4c9e4727..348a351b4 100644 --- a/platforms/arduino/examples/iBeacon/iBeacon.ino +++ b/platforms/arduino/examples/iBeacon/iBeacon.ino @@ -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(); diff --git a/platforms/arduino/examples/iBeaconScanner/iBeaconScanner.ino b/platforms/arduino/examples/iBeaconScanner/iBeaconScanner.ino index 539764cc2..df9e2737d 100644 --- a/platforms/arduino/examples/iBeaconScanner/iBeaconScanner.ino +++ b/platforms/arduino/examples/iBeaconScanner/iBeaconScanner.ino @@ -3,27 +3,37 @@ #include 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()); + } }