test
Dependencies: BLE_API mbed nRF51822
Fork of Connect_Test4 by
Diff: main.cpp
- Revision:
- 19:da48cacdb4c1
- Parent:
- 18:8454c63488ee
- Child:
- 20:e9d6adb5162b
diff -r 8454c63488ee -r da48cacdb4c1 main.cpp --- a/main.cpp Mon Nov 09 14:34:14 2015 +0000 +++ b/main.cpp Fri Nov 13 03:33:39 2015 +0000 @@ -1,8 +1,30 @@ #include "mbed.h" #include "BLEDevice.h" +#include "AltBeaconService.h" +#include "iBeaconService.h" + BLEDevice ble; DigitalOut led(LED1); + +/*.......................................................................... +uint8_t beaconID[] = { 0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, + 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61, + 0x11, 0x22, 0x33, 0x44 + }; +uint16_t manufacturerID = 0x5900; //Nordic SIG ID +int8_t rssi = -122; +..........................................................................*/ + + +uint8_t beaconID[] = { 0xE2, 0x0A, 0x39, 0xF4, 0x73, 0xF5, 0x4B, 0xC4, + 0xA1, 0x2F, 0x17, 0xD1, 0xAD, 0x07, 0xA9, 0x61 + }; +uint16_t majorNumber = 1122; +uint16_t minorNumber = 3344; +uint16_t txPower = 0xC8; + + uint16_t customServiceUUID = 0xA000; uint16_t readCharUUID = 0xA001; uint16_t writeCharUUID = 0xA002; @@ -11,23 +33,32 @@ -uint8_t b1_id = 0x01; -uint8_t b2_id = 0x02; -uint8_t b3_id = 0x03; -uint8_t b4_id = 0x04; -uint8_t b5_id = 0x05; -uint8_t b6_id = 0x06; -uint8_t b7_id = 0x07; + +const uint8_t b1_id = 0x01; +const uint8_t b2_id = 0x02; +const uint8_t b3_id = 0x03; +const uint8_t b4_id = 0x04; +const uint8_t b5_id = 0x05; +const uint8_t b6_id = 0x06; +const uint8_t b7_id = 0x07; +const uint8_t b8_id = 0x08; -PinName flood_p = P0_4; +const uint8_t bA1_id = 0x31; +const uint8_t bA2_id = 0x32; +const uint8_t bA3_id = 0x33; +const uint8_t bA4_id = 0x34; +const uint8_t bA5_id = 0x35; +const uint8_t bA6_id = 0x36; +const uint8_t bA7_id = 0x37; -PinName b1_p = P0_28; -PinName b2_p = P0_29; -PinName b3_p = P0_15; -PinName b4_p = P0_10; //CTX -PinName b5_p = P0_9; //TXD -PinName b6_p = P0_11; //RXD -PinName b7_p = P0_8; //RTS +PinName flood_p = P0_4; +PinName b1_p = P0_28; +PinName b2_p = P0_29; +PinName b3_p = P0_15; +PinName b4_p = P0_10; //CTX +PinName b5_p = P0_9; //TXD +PinName b6_p = P0_11; //RXD +PinName b7_p = P0_8; //RTS /* @@ -41,31 +72,98 @@ const static char DEVICE_NAME[] = "PETE2"; // change this static const uint16_t uuid16_list[] = {0xFF02}; //Custom UUID, FFFF is reserved for development -// Set Up custom Characteristics + +//setup custom characteristics + +//read static uint8_t readValue[10] = {0}; ReadOnlyArrayGattCharacteristic<uint8_t, sizeof(readValue)> readChar(readCharUUID, readValue); - +//write static uint8_t writeValue[10] = {0}; WriteOnlyArrayGattCharacteristic<uint8_t, sizeof(writeValue)> writeChar(writeCharUUID, writeValue); + // Set up custom service -GattCharacteristic *characteristics[] = {&readChar, &writeChar}; -GattService customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *)); +GattCharacteristic *characteristics[] = {&readChar, &writeChar}; +GattService customService(customServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *)); //setup led DigitalOut led1(P0_19); - +//setup digital outs DigitalOut b1(b1_p); DigitalOut b2(b2_p); DigitalOut b3(b3_p); DigitalOut b4(b4_p); DigitalOut b5(b5_p); -DigitalOut b6(b6_p); +//DigitalOut b6(b6_p); DigitalOut b7(b7_p); +DigitalIn enable(flood_p); -DigitalIn enable(flood_p); + +void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason); +void writeCharCallback(const GattCharacteristicWriteCBParams *params); +void testAll(void); +void blinky(void); +int flip(char value); + + +//main loop............................................................................................................ +int main(void) +{ + /* initialize stuff */ + led1 = 1; + + b1 = 1;//b1_p = P0_28; + b2 = 1;//b2_p = P0_29; + b3 = 1;//b3_p = P0_9; + b4 = 1;//b4_p = P0_10; //CTX + b5 = 1;//b5_p = P0_9; //TXD + //b6 = 1;//b6_p = P0_11; //RXD + b7 = 1;//b7_p = P0_8; //RTS + + + + + ble.init(); + + //setup beacon service + //AltBeaconService altbeacon(ble, manufacturerID, beaconID, rssi); + iBeaconService ibeacon(ble, beaconID, majorNumber, minorNumber, txPower); + + + ble.onDisconnection(disconnectionCallback); + ble.onDataWritten(writeCharCallback); + + + /* setup advertising */ + + // BLE only, no classic BT + ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); + // advertising type + ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); + // add name + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); + // UUID's broadcast in advertising packet + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); + + + // set interval + ble.setAdvertisingInterval(100); // 100ms. + + // add our custom service + ble.addService(customService); + + // start advertising + ble.startAdvertising(); + + // infinite loop waiting for BLE interrupt events + while (true) { + ble.waitForEvent(); //Save power + } +} +//.......................end main............................................................................................ /* * Restart advertising when phone app disconnects @@ -83,99 +181,76 @@ // check to see what characteristic was written, by handle if(params->charHandle == writeChar.getValueHandle()) { - // toggle LED if... - if(params->data[0] == b1_id) - { - b1 = !b1; - //led1 = 0; - } - else if(params->data[0] == b2_id) - { - b2 = !b2; - //led1 = 0; - } - else if(params->data[0] == b3_id) - { - b3 = !b3; - //led1 = 0; - } - if(params->data[0] == b4_id) - { - b4 = !b4; - } - else if(params->data[0] == b5_id) - { - b5 = !b5; - //led1 = 0; - } - else if(params->data[0] == b6_id) - { - b6 = !b6; - //led1 = 0; - } - else if(params->data[0] == b7_id) - { - b7 = !b7; - led1 = 0; - wait(3); - led1 = 1; - } - // print the data if more than 1 byte is written - else - { - - printf("\n\r Data received: length = %d, data = 0x",params->len); - for(int x=0; x < params->len; x++) { - printf("%x",params->data[x]); - } - - } + //testAll(); + flip(params->data[0]); + // update the readChar with the value of writeChar ble.updateCharacteristicValue(readChar.getValueHandle(),params->data,params->len); } } -/* - * main loop -*/ -int -main(void) +void testAll(void) { - /* initialize stuff */ - printf("\n\r********* Starting Main Loop *********\n\r"); - led1 = 1; - - b1 = 1;//b1_p = P0_28; - b2 = 1;//b2_p = P0_29; - b3 = 1;//b3_p = P0_9; - b4 = 1;//b4_p = P0_10; //CTX - b5 = 1;//b5_p = P0_9; //TXD - b6 = 1;//b6_p = P0_11; //RXD - b7 = 1;//b7_p = P0_8; //RTS - - - - - ble.init(); - ble.onDisconnection(disconnectionCallback); - - ble.onDataWritten(writeCharCallback); - - /* setup advertising */ - ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // BLE only, no classic BT - ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // advertising type - ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // add name - ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); // UUID's broadcast in advertising packet - ble.setAdvertisingInterval(100); // 100ms. - - // add our custom service - ble.addService(customService); - - // start advertising - ble.startAdvertising(); - - // infinite loop waiting for BLE interrupt events - while (true) { - ble.waitForEvent(); //Save power + for(int i=0; i<4; i++) + { + led1 = !led1; + b1 = !b1; + b2 = !b2; + b3 = !b3; + b4 = !b4; + b5 = !b5; + //b6 = !b6; + b7 = !b7; + wait(1); + } +} +void blinky(void) +{ + for(int i=0; i<20; i++) + { + led1 = !led1; + wait(.3); } } +int flip(char value) +{ + int ret = 0; + + switch(value) + { + case b1_id : + case bA1_id : led1 = !led1; + b1 = !b1; + break; + + case b2_id : + case bA2_id : led1 = !led1; + b2 = !b2; + break; + + case b3_id : + case bA3_id : led1 = !led1; + b3 = !b3; + break; + + case b4_id : + case bA4_id : led1 = !led1; + b4 = !b4; + break; + + case b5_id : + case bA5_id : led1 = !led1; + b5 = !b5; + break; + + case b7_id : + case bA7_id : led1 = !led1; + b7 = !b7; + break; + + default : blinky(); + ret = 1; + break; + } + return ret; +} \ No newline at end of file