Keypad

Dependencies:   BLE_API mbed nRF51822

Fork of EmtpyProgram by Cataract Gemuese

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?

UserRevisionLine numberNew 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 }