ble transmitter
Dependencies: mbed BLE_API nRF51822
Revision 9:aa9d34bbb46c, committed 2019-04-19
- Comitter:
- khyein8154
- Date:
- Fri Apr 19 07:03:57 2019 +0000
- Parent:
- 8:2d82653c8ffd
- Commit message:
- Increment the sequence number and send new packets with increasing sequence number
Changed in this revision
transmitter_main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/transmitter_main.cpp Wed Apr 17 21:49:53 2019 +0000 +++ b/transmitter_main.cpp Fri Apr 19 07:03:57 2019 +0000 @@ -9,36 +9,30 @@ #define BUTTON_PIN p17 #define BATTERY_PIN p1 -DigitalOut led1(p21); +DigitalOut greenLed(LED_GREEN); struct Packet { - uint32_t seqNum; + uint8_t seqNum; Packet() : seqNum(0) {} }; -uint8_t seqNum2 = 8; +uint8_t seqNum2 = 7; BLE ble; -Packet p; -const static char DEVICE_NAME[] = "JOEY"; +Packet packet; +const static char DEVICE_NAME[] = "Transmitter"; static volatile bool triggerSensorPolling = false; void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { - BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising(); // restart advertising -} - -void updatePayload(void) -{ -// ble.gap().updateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&p, sizeof(p)); - (p.seqNum)++; - pc.printf("seq_num: %d\n", p.seqNum); + ble.gap().startAdvertising(); // restart advertising } void periodicCallback(void) { - led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ - updatePayload(); + greenLed = !greenLed; /* Do blinky on greenLed while we're waiting for BLE events */ + //we can't do anything related gap() inside here! + //will get error and fault handler will be triggered /* Note that the periodicCallback() executes in interrupt context, so it is safer to do * heavy-weight sensor polling from the main thread. */ @@ -47,44 +41,61 @@ void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { - BLE &localble = params->ble; + BLE &localBle = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { return; } - localble.gap().onDisconnection(disconnectionCallback); + /* Ensure that it is the default instance of BLE */ + if (localBle.getInstanceID() != BLE::DEFAULT_INSTANCE) { + return; + } -// localble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); -// localble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&p, sizeof(p)); - localble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&seqNum2, sizeof(seqNum2)); + localBle.gap().onDisconnection(disconnectionCallback); - - localble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); - localble.gap().setAdvertisingInterval(1000); /* 1000ms */ - localble.gap().startAdvertising(); +// localBle.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); +// localBle.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); +// localBle.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&packet, sizeof(packet)); + localBle.gap().clearAdvertisingPayload(); + localBle.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&packet.seqNum, sizeof(packet.seqNum)); + pc.printf("73: payload: %x\n", localBle.gap().getAdvertisingPayload()); } int main(void) { - led1 = 1; + greenLed = 1; Ticker ticker; - ticker.attach(periodicCallback, 1); + ticker.attach(periodicCallback, 5); ble.init(bleInitComplete); /* 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 */ } + while (ble.hasInitialized() == false) { + pc.printf("Initializing BLE\n"); + } + + pc.printf("Init Completed\n"); + + ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); + ble.gap().setAdvertisingInterval(1000); /* 1000ms */ + ble.gap().setAdvertisingTimeout(0); + ble.gap().startAdvertising(); while (1) { // check for trigger from periodicCallback() - if (triggerSensorPolling && ble.getGapState().connected) { + if (triggerSensorPolling) { + (packet.seqNum)++; + pc.printf("seq_num: %d\n", packet.seqNum); + ble.gap().clearAdvertisingPayload(); + ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)&packet.seqNum, sizeof(packet.seqNum)); + pc.printf("47: payload: %x\n", ble.gap().getAdvertisingPayload()); + triggerSensorPolling = false; - } else { - ble.waitForEvent(); // low power wait for event - } + } + ble.waitForEvent(); } } \ No newline at end of file