Working program for data sending over BLE
Dependencies: BLE_API mbed nRF51822
Fork of BLE_GAP_Example by
main.cpp@16:9d681e53f310, 2017-04-28 (annotated)
- Committer:
- Eevee
- Date:
- Fri Apr 28 12:47:23 2017 +0000
- Revision:
- 16:9d681e53f310
- Parent:
- 15:7e06fce6e4f8
TADAAAAAAAAA
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Eevee | 16:9d681e53f310 | 1 | |
mbedAustin | 0:5375be4301ed | 2 | #include "mbed.h" |
andresag | 14:1c15d473b42f | 3 | #include "ble/BLE.h" |
Eevee | 16:9d681e53f310 | 4 | #include "ble/Gap.h" |
Eevee | 16:9d681e53f310 | 5 | #include "ble/UUID.h" |
Eevee | 16:9d681e53f310 | 6 | #include "ble/GattCharacteristic.h" |
andresag | 14:1c15d473b42f | 7 | |
Eevee | 16:9d681e53f310 | 8 | BLEDevice ble; |
Eevee | 16:9d681e53f310 | 9 | |
Eevee | 16:9d681e53f310 | 10 | /* Device Name, simpel discovey */ |
Eevee | 16:9d681e53f310 | 11 | const static char DEVICE_NAME[] = "ThisIsBLE1"; |
Eevee | 16:9d681e53f310 | 12 | |
Eevee | 16:9d681e53f310 | 13 | /*SET UUID*/ |
Eevee | 16:9d681e53f310 | 14 | const UUID GATT_SERVICE = "88888888-5555-4444-1111-777777777777"; |
Eevee | 16:9d681e53f310 | 15 | const UUID ADV_DATA = "11001100-2200-3300-4400-550055005500"; |
Eevee | 16:9d681e53f310 | 16 | |
Eevee | 16:9d681e53f310 | 17 | #define CHARACT_DATA 0 |
Eevee | 16:9d681e53f310 | 18 | |
Eevee | 16:9d681e53f310 | 19 | |
andresag | 14:1c15d473b42f | 20 | |
andresag | 14:1c15d473b42f | 21 | /* You have up to 26 bytes of advertising data to use. */ |
Eevee | 16:9d681e53f310 | 22 | // for |
Eevee | 16:9d681e53f310 | 23 | uint8_t AdvData[] = {0x43,0x10,'d','u','m','m','y',0x02,0x02,0,1,7,81}; /* Example of hex data */ |
Eevee | 16:9d681e53f310 | 24 | uint8_t *datapointer = &AdvData[2]; |
Eevee | 16:9d681e53f310 | 25 | |
Eevee | 16:9d681e53f310 | 26 | GattCharacteristic gatt_characteristics(ADV_DATA,AdvData,(sizeof(AdvData)-2),26,GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); |
Eevee | 16:9d681e53f310 | 27 | |
Eevee | 16:9d681e53f310 | 28 | GattCharacteristic *CHARACT_ARRAY[] = {&gatt_characteristics}; |
mbedAustin | 0:5375be4301ed | 29 | |
Eevee | 16:9d681e53f310 | 30 | GattService gatt_service(GATT_SERVICE,CHARACT_ARRAY,1); |
Eevee | 16:9d681e53f310 | 31 | // end |
Eevee | 16:9d681e53f310 | 32 | const BLEProtocol::AddressBytes_t peerAddr = {0xb8, 0x27, 0xeb, 0x25, 0x00, 0xc4}; |
Eevee | 16:9d681e53f310 | 33 | BLEProtocol::AddressType_t peerAddrType = (BLEProtocol::AddressType::RANDOM_STATIC); |
Eevee | 16:9d681e53f310 | 34 | //const ConnectionParams_t *connectionParams; |
Eevee | 16:9d681e53f310 | 35 | //const GapScanningParams *scanParams; |
Eevee | 16:9d681e53f310 | 36 | |
Eevee | 16:9d681e53f310 | 37 | |
Eevee | 16:9d681e53f310 | 38 | /* Restart advertising when the peer disconnects */ |
andresag | 14:1c15d473b42f | 39 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
andresag | 14:1c15d473b42f | 40 | { |
andresag | 14:1c15d473b42f | 41 | BLE::Instance().gap().startAdvertising(); |
andresag | 14:1c15d473b42f | 42 | } |
Eevee | 16:9d681e53f310 | 43 | |
Eevee | 16:9d681e53f310 | 44 | /*This function is called when the ble initialization process has failed*/ |
andresag | 14:1c15d473b42f | 45 | void onBleInitError(BLE &ble, ble_error_t error) |
andresag | 14:1c15d473b42f | 46 | { |
Eevee | 16:9d681e53f310 | 47 | /* Avoid compiler warnings, library said to do this */ |
andresag | 14:1c15d473b42f | 48 | (void) ble; |
andresag | 14:1c15d473b42f | 49 | (void) error; |
andresag | 14:1c15d473b42f | 50 | |
andresag | 14:1c15d473b42f | 51 | /* Initialization error handling should go here */ |
andresag | 14:1c15d473b42f | 52 | } |
mbedAustin | 0:5375be4301ed | 53 | |
Eevee | 16:9d681e53f310 | 54 | /*Callback triggered when ble initialization process has finished*/ |
andresag | 14:1c15d473b42f | 55 | void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) |
andresag | 14:1c15d473b42f | 56 | { |
andresag | 14:1c15d473b42f | 57 | BLE& ble = params->ble; |
andresag | 14:1c15d473b42f | 58 | ble_error_t error = params->error; |
andresag | 14:1c15d473b42f | 59 | |
Eevee | 16:9d681e53f310 | 60 | /* In case of error, forward the error handling to onBleInitError */ |
andresag | 14:1c15d473b42f | 61 | if (error != BLE_ERROR_NONE) { |
andresag | 14:1c15d473b42f | 62 | onBleInitError(ble, error); |
andresag | 14:1c15d473b42f | 63 | return; |
andresag | 14:1c15d473b42f | 64 | } |
mbedAustin | 5:fff16d283dcf | 65 | |
andresag | 14:1c15d473b42f | 66 | /* Ensure that it is the default instance of BLE */ |
andresag | 14:1c15d473b42f | 67 | if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { |
andresag | 14:1c15d473b42f | 68 | return; |
andresag | 14:1c15d473b42f | 69 | } |
andresag | 14:1c15d473b42f | 70 | |
andresag | 14:1c15d473b42f | 71 | /* Set device name characteristic data */ |
andresag | 14:1c15d473b42f | 72 | ble.gap().setDeviceName((const uint8_t *) DEVICE_NAME); |
Eevee | 16:9d681e53f310 | 73 | |
Eevee | 16:9d681e53f310 | 74 | |
Eevee | 16:9d681e53f310 | 75 | /* callback when disconnected */ |
andresag | 14:1c15d473b42f | 76 | ble.gap().onDisconnection(disconnectionCallback); |
mbedAustin | 1:0692bee84264 | 77 | |
Eevee | 16:9d681e53f310 | 78 | /* Sacrifice 3B of 31B to some Advertising Flags (see nrfconnect toolbox for flag parameters :) ) */ |
Eevee | 16:9d681e53f310 | 79 | // for |
Eevee | 16:9d681e53f310 | 80 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);// say this device can be discovered by other BLE supportingdevices |
Eevee | 16:9d681e53f310 | 81 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // say that a connection can be set ( connectable) and that it does not matter with who it connects (unidirected) |
andresag | 14:1c15d473b42f | 82 | |
Eevee | 16:9d681e53f310 | 83 | |
Eevee | 16:9d681e53f310 | 84 | /* Sacrifice another 2B of 31B (actually 29B) to AdvType overhead, rest goes to AdvData array --> about 26B of actual sendable data :o */ |
Eevee | 16:9d681e53f310 | 85 | //Overhead = 1B Length, 1B Type |
Eevee | 16:9d681e53f310 | 86 | //Type = AdvData |
Eevee | 16:9d681e53f310 | 87 | //Length = sizeof(AdvData) |
Eevee | 16:9d681e53f310 | 88 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SERVICE_DATA, AdvData, sizeof(AdvData)); |
andresag | 14:1c15d473b42f | 89 | |
Eevee | 16:9d681e53f310 | 90 | /*fill in device name as local name*/ |
Eevee | 16:9d681e53f310 | 91 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
Eevee | 16:9d681e53f310 | 92 | |
Eevee | 16:9d681e53f310 | 93 | /* Set advertising interval. Longer interval == Less radiothingies use == longer battery life :) */ |
Eevee | 16:9d681e53f310 | 94 | ble.gap().setAdvertisingInterval(100); /* 100ms */ |
Eevee | 16:9d681e53f310 | 95 | |
Eevee | 16:9d681e53f310 | 96 | |
andresag | 14:1c15d473b42f | 97 | |
Eevee | 16:9d681e53f310 | 98 | ble.addService(gatt_service); |
andresag | 14:1c15d473b42f | 99 | |
Eevee | 16:9d681e53f310 | 100 | //ble.gap().addData(GapAdvertisingData::SERVICE_DATA, (uint8_t *)AdvData, sizeof(AdvData)); |
andresag | 14:1c15d473b42f | 101 | /* Start advertising */ |
Eevee | 16:9d681e53f310 | 102 | ble.gap().startAdvertising(); //start sending advertising packets |
Eevee | 16:9d681e53f310 | 103 | |
Eevee | 16:9d681e53f310 | 104 | ble.initializeSecurity(); |
Eevee | 16:9d681e53f310 | 105 | //end |
mbedAustin | 8:5442739198ec | 106 | } |
mbedAustin | 8:5442739198ec | 107 | |
mbedAustin | 1:0692bee84264 | 108 | int main(void) |
mbedAustin | 0:5375be4301ed | 109 | { |
Eevee | 16:9d681e53f310 | 110 | // VERSPILT ENERGIE wait(1); |
andresag | 14:1c15d473b42f | 111 | BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); |
andresag | 14:1c15d473b42f | 112 | |
Eevee | 16:9d681e53f310 | 113 | /* Initialize BLE baselayer, library said : "always do this first!" so we will do */ |
andresag | 14:1c15d473b42f | 114 | ble.init(bleInitComplete); |
mbedAustin | 1:0692bee84264 | 115 | |
andresag | 14:1c15d473b42f | 116 | /* Infinite loop waiting for BLE events */ |
andresag | 14:1c15d473b42f | 117 | while (true) { |
andresag | 14:1c15d473b42f | 118 | /* Save power while waiting for callback events */ |
Eevee | 16:9d681e53f310 | 119 | ble.waitForEvent(); //this is like a sleep function, waking up on interrupts like disconnection or so |
mbedAustin | 1:0692bee84264 | 120 | } |
mbedAustin | 1:0692bee84264 | 121 | } |