Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API mbed nRF51822
Fork of BLE_LEDBlinker by
Revision 12:96caa9a52bb3, committed 2017-01-19
- Comitter:
- hmiot
- Date:
- Thu Jan 19 12:40:00 2017 +0000
- Parent:
- 11:023d96b0e427
- Commit message:
- Central Led blinker
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Jan 12 10:49:03 2016 +0000
+++ b/main.cpp Thu Jan 19 12:40:00 2017 +0000
@@ -18,44 +18,69 @@
#include "ble/BLE.h"
#include "ble/DiscoveredCharacteristic.h"
#include "ble/DiscoveredService.h"
-
+#include "ble/Gap.h"
+static const uint16_t UNIT_1_25_MS = 1250;
+static const uint16_t UNIT_10_MS = 10000;
+#define MSEC_TO_UNITS(TIME, RESOLUTION) (((TIME) * 1000) / (RESOLUTION))
+#define MIN_CONNECTION_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS)
+#define MAX_CONNECTION_INTERVAL MSEC_TO_UNITS(30, UNIT_1_25_MS)
+#define SLAVE_LATENCY 0
+#define SUPERVISION_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS)
DigitalOut alivenessLED(LED1, 1);
bool triggerLedCharacteristic = false;
DiscoveredCharacteristic ledCharacteristic;
+static const Gap::ConnectionParams_t m_conn_params ={
+ (uint16_t)MIN_CONNECTION_INTERVAL,
+ (uint16_t)MAX_CONNECTION_INTERVAL,
+ (uint16_t)SLAVE_LATENCY,
+ (uint16_t)SUPERVISION_TIMEOUT
+};
Ticker ticker;
-
+Serial pc(USBTX, USBRX);
void periodicCallback(void) {
alivenessLED = !alivenessLED; /* Do blinky on LED1 while we're waiting for BLE events */
}
void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params) {
- if (params->peerAddr[0] != 0x37) { /* !ALERT! Alter this filter to suit your device. */
+ uint8_t con_status =0;
+ Gap::GapState_t con_state;
+ if (params->peerAddr[0] != 0x2F) { /* !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",
+ pc.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);
-
- BLE::Instance().gap().connect(params->peerAddr, Gap::ADDR_TYPE_RANDOM_STATIC, NULL, NULL);
+ // con_state = BLE::Instance().gap().getState();
+ //pc.printf("Connection state : %d\r\n",con_state);
+ uint8_t count=0;
+ // while(!con_status)
+ // {
+ pc.printf("Count : %d",count++);
+ con_status = BLE::Instance().gap().connect(params->peerAddr, Gap::ADDR_TYPE_RANDOM_STATIC, &m_conn_params, NULL);
+ pc.printf("Connection Status : %d\r\n",con_status);
+ con_state = BLE::Instance().gap().getState();
+ pc.printf("Connection state : %d\r\n",con_state);
+ // }
+ BLE::Instance().gap().stopScan();
}
void serviceDiscoveryCallback(const DiscoveredService *service) {
if (service->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT) {
- printf("S UUID-%x attrs[%u %u]\r\n", service->getUUID().getShortUUID(), service->getStartHandle(), service->getEndHandle());
+ pc.printf("S UUID-%x attrs[%u %u]\r\n", service->getUUID().getShortUUID(), service->getStartHandle(), service->getEndHandle());
} else {
- printf("S UUID-");
+ pc.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]);
}
- printf(" attrs[%u %u]\r\n", service->getStartHandle(), service->getEndHandle());
+ pc.printf(" attrs[%u %u]\r\n", service->getStartHandle(), service->getEndHandle());
}
}
void characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP) {
- printf(" C UUID-%x valueAttr[%u] props[%x]\r\n", characteristicP->getUUID().getShortUUID(), characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast());
+ pc.printf(" C UUID-%x valueAttr[%u] props[%x]\r\n", characteristicP->getUUID().getShortUUID(), characteristicP->getValueHandle(), (uint8_t)characteristicP->getProperties().broadcast());
if (characteristicP->getUUID().getShortUUID() == 0xa001) { /* !ALERT! Alter this filter to suit your device. */
ledCharacteristic = *characteristicP;
triggerLedCharacteristic = true;
@@ -63,10 +88,11 @@
}
void discoveryTerminationCallback(Gap::Handle_t connectionHandle) {
- printf("terminated SD for handle %u\r\n", connectionHandle);
+ pc.printf("terminated SD for handle %u\r\n", connectionHandle);
}
void connectionCallback(const Gap::ConnectionCallbackParams_t *params) {
+ pc.printf("Connection Callback\n\r");
if (params->role == Gap::CENTRAL) {
BLE::Instance().gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
BLE::Instance().gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, 0xa000, 0xa001);
@@ -80,7 +106,7 @@
for (unsigned index = 0; index < response->len; index++) {
printf("%c[%02x]", response->data[index], response->data[index]);
}
- printf("\r\n");
+ pc.printf("\r\n");
#endif
uint8_t toggledValue = response->data[0] ^ 0x1;
@@ -95,7 +121,7 @@
}
void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) {
- printf("disconnected\r\n");
+ pc.printf("disconnected\r\n");
}
/**
@@ -120,6 +146,7 @@
return;
}
+ pc.printf("Ble Init\n\r");
/* Ensure that it is the default instance of BLE */
if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
return;
@@ -137,9 +164,14 @@
int main(void) {
ticker.attach(periodicCallback, 1);
-
+ pc.baud(9600);
+ wait(8.0);
+ pc.printf("Start\n\r");
BLE &ble = BLE::Instance();
+
+
ble.init(bleInitComplete);
+ ble.gap().setDeviceName("Samy");
/* SpinWait for initialization to complete. This is necessary because the
* BLE object is used in the main loop below. */
