Example of BLE scan/connect/service discovery
Fork of BLE_LEDBlinker by
Diff: main.cpp
- Revision:
- 13:75f95a5cf9c1
- Parent:
- 12:f0ffc006e62d
- Child:
- 14:92bb9a8ccd0b
--- a/main.cpp Fri Dec 09 09:12:57 2016 +0000 +++ b/main.cpp Fri Dec 09 10:10:14 2016 +0000 @@ -21,6 +21,12 @@ DigitalOut alivenessLED(LED1, 1); +#if defined(TARGET_DELTA_DFCM_NNN40) +Serial uart(p17, p16);//temp use for NNN50 +#else +Serial uart(USBTX, USBRX); +#endif + bool triggerLedCharacteristic = false; DiscoveredCharacteristic ledCharacteristic; @@ -34,7 +40,7 @@ if (params->peerAddr[0] != 0xF9) { /* !ALERT! Alter this filter to suit your device. */ return; } - printf("adv peerAddr[%02x %02x %02x %02x %02x %02x] rssi %d, isScanResponse %u, AdvertisementType %u\r\n", + uart.printf("adv peerAddr[%02x %02x %02x %02x %02x %02x] rssi %d, isScanResponse %u, AdvertisementType %u\r\n", params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0], params->rssi, params->isScanResponse, params->type); @@ -42,43 +48,43 @@ } void serviceDiscoveryCallback(const DiscoveredService *service) { - printf("serviceDiscoveryCallback\n"); + uart.printf("serviceDiscoveryCallback\n"); if (service->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) { - printf("S UUID-%x attrs[%u %u]\r\n", service->getUUID().getShortUUID(), service->getStartHandle(), service->getEndHandle()); + uart.printf("S UUID-%x attrs[%u %u]\r\n", service->getUUID().getShortUUID(), service->getStartHandle(), service->getEndHandle()); } else { - printf("S UUID-"); + uart.printf("S UUID-"); const uint8_t *longUUIDBytes = service->getUUID().getBaseUUID(); for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++) { - printf("%02x", longUUIDBytes[i]); + uart.printf("%02x", longUUIDBytes[i]); } - printf(" attrs[%u %u]\r\n", service->getStartHandle(), service->getEndHandle()); + uart.printf(" attrs[%u %u]\r\n", service->getStartHandle(), service->getEndHandle()); } } void characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP) { if (characteristicP->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) { - printf(" C UUID-%x valueAttr[%u] props[%x]\r\n", characteristicP->getUUID().getShortUUID(), characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast()); + uart.printf(" C UUID-%x valueAttr[%u] props[%x]\r\n", characteristicP->getUUID().getShortUUID(), characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast()); if (characteristicP->getUUID().getShortUUID() == 0x2a19) { /* !ALERT! Alter this filter to suit your device. */ ledCharacteristic = *characteristicP; triggerLedCharacteristic = true; } } else { - printf(" C UUID-"); + uart.printf(" C UUID-"); const uint8_t *longUUIDBytes = characteristicP->getUUID().getBaseUUID(); for (unsigned i = (UUID::LENGTH_OF_LONG_UUID) - 1; i < UUID::LENGTH_OF_LONG_UUID; i--) { - printf("%02x ", longUUIDBytes[i]); + uart.printf("%02x ", longUUIDBytes[i]); } - printf(" valueAttr[%u] props[%x]\r\n", characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast()); + uart.printf(" valueAttr[%u] props[%x]\r\n", characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast()); } } void discoveryTerminationCallback(Gap::Handle_t connectionHandle) { - printf("terminated SD for handle %u\r\n", connectionHandle); + uart.printf("terminated SD for handle %u\r\n", connectionHandle); } void connectionCallback(const Gap::ConnectionCallbackParams_t *params) { - printf("connectionCallback\n"); + uart.printf("connectionCallback\n"); if (params->role == Gap::CENTRAL) { BLE::Instance().gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback); BLE::Instance().gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback); @@ -88,11 +94,11 @@ void triggerToggledWrite(const GattReadCallbackParams *response) { if (response->handle == ledCharacteristic.getValueHandle()) { #if DUMP_READ_DATA - printf("triggerToggledWrite: handle %u, offset %u, len %u\r\n", response->handle, response->offset, response->len); + uart.printf("triggerToggledWrite: handle %u, offset %u, len %u\r\n", response->handle, response->offset, response->len); for (unsigned index = 0; index < response->len; index++) { - printf("%c[%02x]", response->data[index], response->data[index]); + uart.printf("%c[%02x]", response->data[index], response->data[index]); } - printf("\r\n"); + uart.printf("\r\n"); #endif uint8_t toggledValue = response->data[0] ^ 0x1; @@ -107,7 +113,7 @@ } void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { - printf("disconnected\r\n"); + uart.printf("disconnected\r\n"); } /** @@ -148,6 +154,7 @@ } int main(void) { + uart.printf("APPLICATION START\r\n"); ticker.attach(periodicCallback, 1); BLE &ble = BLE::Instance(); @@ -156,7 +163,7 @@ /* SpinWait for initialization to complete. This is necessary because the * BLE object is used in the main loop below. */ while (ble.hasInitialized() == false) { /* spin loop */ } - printf("init DONE\r\n"); + uart.printf("init DONE\r\n"); while (true) { if (triggerLedCharacteristic && !ble.gattClient().isServiceDiscoveryActive()) { triggerLedCharacteristic = false;