Keypad
Dependencies: BLE_API mbed nRF51822
Fork of EmtpyProgram by
main.cpp@0:4817f7301801, 2016-06-24 (annotated)
- Committer:
- Cataract
- Date:
- Fri Jun 24 20:32:10 2016 +0000
- Revision:
- 0:4817f7301801
- Child:
- 1:115afdfbaa84
second commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Cataract | 0:4817f7301801 | 1 | #include "mbed.h" |
Cataract | 0:4817f7301801 | 2 | #include "ble/BLE.h" |
Cataract | 0:4817f7301801 | 3 | #include "ble/UUID.h" |
Cataract | 0:4817f7301801 | 4 | #include "ble/GattAttribute.h" |
Cataract | 0:4817f7301801 | 5 | #include "ble/GattService.h" |
Cataract | 0:4817f7301801 | 6 | |
Cataract | 0:4817f7301801 | 7 | DigitalOut alivenessLED(LED1, 0); |
Cataract | 0:4817f7301801 | 8 | DigitalOut alivenessLED2(LED2, 1); |
Cataract | 0:4817f7301801 | 9 | DigitalOut alivenessLED3(LED3, 1); |
Cataract | 0:4817f7301801 | 10 | |
Cataract | 0:4817f7301801 | 11 | Ticker ticker; |
Cataract | 0:4817f7301801 | 12 | |
Cataract | 0:4817f7301801 | 13 | const static char DEVICE_NAME[] = "KeyOpener3k"; |
Cataract | 0:4817f7301801 | 14 | static const char * uuid16_list[] = {"9085495d-f273-443d-9e37-e27c9194f63b"}; |
Cataract | 0:4817f7301801 | 15 | |
Cataract | 0:4817f7301801 | 16 | Serial pc(USBTX, USBRX); |
Cataract | 0:4817f7301801 | 17 | |
Cataract | 0:4817f7301801 | 18 | void periodicCallback(void) |
Cataract | 0:4817f7301801 | 19 | { |
Cataract | 0:4817f7301801 | 20 | alivenessLED = !alivenessLED; /* Do blinky on LED1 to indicate system aliveness. */ |
Cataract | 0:4817f7301801 | 21 | } |
Cataract | 0:4817f7301801 | 22 | |
Cataract | 0:4817f7301801 | 23 | UUID uuid = UUID("9085495d-f273-443d-9e37-e27c9194f63b"); |
Cataract | 0:4817f7301801 | 24 | UUID uuid_message = UUID("8085495d-f273-443d-9e37-e27c9194f63b"); |
Cataract | 0:4817f7301801 | 25 | UUID uuid_writebyte = UUID("7085495d-f273-443d-9e37-e27c9194f63b"); |
Cataract | 0:4817f7301801 | 26 | |
Cataract | 0:4817f7301801 | 27 | char data[20]; |
Cataract | 0:4817f7301801 | 28 | char numbermessages; |
Cataract | 0:4817f7301801 | 29 | |
Cataract | 0:4817f7301801 | 30 | char * message; |
Cataract | 0:4817f7301801 | 31 | char * cpy = (char*) malloc(21); |
Cataract | 0:4817f7301801 | 32 | |
Cataract | 0:4817f7301801 | 33 | bool recieving = false; |
Cataract | 0:4817f7301801 | 34 | |
Cataract | 0:4817f7301801 | 35 | void onDataWrittenCallback(const GattWriteCallbackParams* params) { |
Cataract | 0:4817f7301801 | 36 | alivenessLED3 = !alivenessLED3; |
Cataract | 0:4817f7301801 | 37 | if (!recieving){ |
Cataract | 0:4817f7301801 | 38 | pc.printf("Allocated: %d bytes\r\n", sizeof(char)*20*2*(*params->data)); |
Cataract | 0:4817f7301801 | 39 | message = (char*) malloc(sizeof(char)*20*2*(*params->data)); |
Cataract | 0:4817f7301801 | 40 | recieving = true; |
Cataract | 0:4817f7301801 | 41 | return; |
Cataract | 0:4817f7301801 | 42 | } |
Cataract | 0:4817f7301801 | 43 | |
Cataract | 0:4817f7301801 | 44 | if (*params->data == 0x00){ |
Cataract | 0:4817f7301801 | 45 | pc.printf("%s\r\n",message); |
Cataract | 0:4817f7301801 | 46 | free(message); |
Cataract | 0:4817f7301801 | 47 | recieving = false; |
Cataract | 0:4817f7301801 | 48 | } else { |
Cataract | 0:4817f7301801 | 49 | memcpy(cpy, params->data, 20); |
Cataract | 0:4817f7301801 | 50 | cpy[20] = '\0'; |
Cataract | 0:4817f7301801 | 51 | strcat(message,cpy); |
Cataract | 0:4817f7301801 | 52 | } |
Cataract | 0:4817f7301801 | 53 | } |
Cataract | 0:4817f7301801 | 54 | |
Cataract | 0:4817f7301801 | 55 | |
Cataract | 0:4817f7301801 | 56 | |
Cataract | 0:4817f7301801 | 57 | void connectionCallback(const Gap::ConnectionCallbackParams_t *params){ |
Cataract | 0:4817f7301801 | 58 | alivenessLED2 = !alivenessLED2; |
Cataract | 0:4817f7301801 | 59 | pc.printf("Connected!\r\n"); |
Cataract | 0:4817f7301801 | 60 | } |
Cataract | 0:4817f7301801 | 61 | |
Cataract | 0:4817f7301801 | 62 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
Cataract | 0:4817f7301801 | 63 | { |
Cataract | 0:4817f7301801 | 64 | BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising(); // restart advertising |
Cataract | 0:4817f7301801 | 65 | } |
Cataract | 0:4817f7301801 | 66 | |
Cataract | 0:4817f7301801 | 67 | void initService(BLE &ble){ |
Cataract | 0:4817f7301801 | 68 | ReadWriteArrayGattCharacteristic<char, 20> messagecharacter = ReadWriteArrayGattCharacteristic<char, 20>(uuid_message,data); |
Cataract | 0:4817f7301801 | 69 | ReadWriteArrayGattCharacteristic<char, 1> writebytecharacter = ReadWriteArrayGattCharacteristic<char, 1>(uuid_writebyte,&numbermessages); |
Cataract | 0:4817f7301801 | 70 | |
Cataract | 0:4817f7301801 | 71 | GattCharacteristic * chars[] = {&messagecharacter,&writebytecharacter}; |
Cataract | 0:4817f7301801 | 72 | GattService service = GattService(uuid,chars,2); |
Cataract | 0:4817f7301801 | 73 | ble.gattServer().addService(service); |
Cataract | 0:4817f7301801 | 74 | } |
Cataract | 0:4817f7301801 | 75 | |
Cataract | 0:4817f7301801 | 76 | void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) |
Cataract | 0:4817f7301801 | 77 | { |
Cataract | 0:4817f7301801 | 78 | BLE &ble = params->ble; |
Cataract | 0:4817f7301801 | 79 | ble_error_t error = params->error; |
Cataract | 0:4817f7301801 | 80 | |
Cataract | 0:4817f7301801 | 81 | if (error != BLE_ERROR_NONE) { |
Cataract | 0:4817f7301801 | 82 | return; |
Cataract | 0:4817f7301801 | 83 | } |
Cataract | 0:4817f7301801 | 84 | |
Cataract | 0:4817f7301801 | 85 | ble.gap().onDisconnection(disconnectionCallback); |
Cataract | 0:4817f7301801 | 86 | ble.gap().onConnection(connectionCallback); |
Cataract | 0:4817f7301801 | 87 | ble.gattServer().onDataWritten(onDataWrittenCallback); |
Cataract | 0:4817f7301801 | 88 | |
Cataract | 0:4817f7301801 | 89 | initService(ble); |
Cataract | 0:4817f7301801 | 90 | |
Cataract | 0:4817f7301801 | 91 | /* Setup advertising. */ |
Cataract | 0:4817f7301801 | 92 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
Cataract | 0:4817f7301801 | 93 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); |
Cataract | 0:4817f7301801 | 94 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
Cataract | 0:4817f7301801 | 95 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
Cataract | 0:4817f7301801 | 96 | ble.gap().setAdvertisingInterval(1000); /* 1000ms */ |
Cataract | 0:4817f7301801 | 97 | ble.gap().startAdvertising(); |
Cataract | 0:4817f7301801 | 98 | } |
Cataract | 0:4817f7301801 | 99 | |
Cataract | 0:4817f7301801 | 100 | int main(void) |
Cataract | 0:4817f7301801 | 101 | { |
Cataract | 0:4817f7301801 | 102 | BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); |
Cataract | 0:4817f7301801 | 103 | ble.init(bleInitComplete); |
Cataract | 0:4817f7301801 | 104 | |
Cataract | 0:4817f7301801 | 105 | while (ble.hasInitialized() == false) { /* spin loop */ } |
Cataract | 0:4817f7301801 | 106 | |
Cataract | 0:4817f7301801 | 107 | ticker.attach(periodicCallback, 0.5); /* Blink LED every second */ |
Cataract | 0:4817f7301801 | 108 | |
Cataract | 0:4817f7301801 | 109 | pc.printf("init\r\n"); |
Cataract | 0:4817f7301801 | 110 | |
Cataract | 0:4817f7301801 | 111 | while (true) { |
Cataract | 0:4817f7301801 | 112 | ble.waitForEvent(); |
Cataract | 0:4817f7301801 | 113 | } |
Cataract | 0:4817f7301801 | 114 | } |