Dependencies:   BLE_API mbed BLE_nRF8001 DebounceIn

Committer:
sitakumar
Date:
Sat Mar 14 19:25:40 2015 +0000
Revision:
0:adcc621e5713
Child:
2:f266f102ca80

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sitakumar 0:adcc621e5713 1 #include "mbed.h"
sitakumar 0:adcc621e5713 2 #include "BLEDevice.h"
sitakumar 0:adcc621e5713 3 #include "nRF8001.h"
sitakumar 0:adcc621e5713 4
sitakumar 0:adcc621e5713 5
sitakumar 0:adcc621e5713 6 BLEDevice ble;
sitakumar 0:adcc621e5713 7 DigitalOut led1(LED1);
sitakumar 0:adcc621e5713 8 InterruptIn button1(D1);
sitakumar 0:adcc621e5713 9 InterruptIn button2(D2);
sitakumar 0:adcc621e5713 10
sitakumar 0:adcc621e5713 11 const uint8_t LED1_UUID[LENGTH_OF_LONG_UUID] = {
sitakumar 0:adcc621e5713 12 0xfb, 0x71, 0xbc, 0xc0, 0x5a, 0x0c, 0x11, 0xe4,
sitakumar 0:adcc621e5713 13 0x91, 0xae, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b
sitakumar 0:adcc621e5713 14 };
sitakumar 0:adcc621e5713 15 const uint8_t BUTTON_UUID[LENGTH_OF_LONG_UUID] = {
sitakumar 0:adcc621e5713 16 0x7a, 0x77, 0xbe, 0x20, 0x5a, 0x0d, 0x11, 0xe4,
sitakumar 0:adcc621e5713 17 0xa9, 0x5e, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b
sitakumar 0:adcc621e5713 18 };
sitakumar 0:adcc621e5713 19 const uint8_t TEST_SERVICE_UUID[LENGTH_OF_LONG_UUID] = {
sitakumar 0:adcc621e5713 20 0xb0, 0xbb, 0x58, 0x20, 0x5a, 0x0d, 0x11, 0xe4,
sitakumar 0:adcc621e5713 21 0x93, 0xee, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b
sitakumar 0:adcc621e5713 22 };
sitakumar 0:adcc621e5713 23
sitakumar 0:adcc621e5713 24 const static char DEVICE_NAME[] = "Sita";
sitakumar 0:adcc621e5713 25 static volatile bool is_button_pressed = false;
sitakumar 0:adcc621e5713 26 static volatile uint16_t led1_handler;
sitakumar 0:adcc621e5713 27
sitakumar 0:adcc621e5713 28 uint8_t led_state, button_state;
sitakumar 0:adcc621e5713 29
sitakumar 0:adcc621e5713 30 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
sitakumar 0:adcc621e5713 31 {
sitakumar 0:adcc621e5713 32 ble.startAdvertising(); // restart advertising
sitakumar 0:adcc621e5713 33 }
sitakumar 0:adcc621e5713 34
sitakumar 0:adcc621e5713 35 void changeLED(const GattCharacteristicWriteCBParams *eventDataP) {
sitakumar 0:adcc621e5713 36 // eventDataP->charHandle is just uint16_t
sitakumar 0:adcc621e5713 37 // it's used to dispatch the callbacks
sitakumar 0:adcc621e5713 38 if (eventDataP->charHandle == led1_handler) {
sitakumar 0:adcc621e5713 39 led1 = eventDataP->data[0] % 2;
sitakumar 0:adcc621e5713 40 }
sitakumar 0:adcc621e5713 41 }
sitakumar 0:adcc621e5713 42
sitakumar 0:adcc621e5713 43 void button1Pressed() {
sitakumar 0:adcc621e5713 44 button_state = 1;
sitakumar 0:adcc621e5713 45 is_button_pressed = true;
sitakumar 0:adcc621e5713 46 }
sitakumar 0:adcc621e5713 47 void button2Pressed() {
sitakumar 0:adcc621e5713 48 button_state = 2;
sitakumar 0:adcc621e5713 49 is_button_pressed = true;
sitakumar 0:adcc621e5713 50 }
sitakumar 0:adcc621e5713 51
sitakumar 0:adcc621e5713 52 int main(void)
sitakumar 0:adcc621e5713 53 {
sitakumar 0:adcc621e5713 54 // button initialization
sitakumar 0:adcc621e5713 55 // InterruptIn button1(BUTTON1);
sitakumar 0:adcc621e5713 56 // InterruptIn button2(BUTTON2);
sitakumar 0:adcc621e5713 57 button1.mode(PullUp);
sitakumar 0:adcc621e5713 58 button2.mode(PullUp);
sitakumar 0:adcc621e5713 59 button1.rise(&button1Pressed);
sitakumar 0:adcc621e5713 60 button2.rise(&button2Pressed);
sitakumar 0:adcc621e5713 61 led1 = 0;
sitakumar 0:adcc621e5713 62
sitakumar 0:adcc621e5713 63 // just a simple service example
sitakumar 0:adcc621e5713 64 // o led1 characteristics, you can write from the phone to control led1
sitakumar 0:adcc621e5713 65 // o button characteristics, you can read and get notified
sitakumar 0:adcc621e5713 66 GattCharacteristic led1_characteristics(
sitakumar 0:adcc621e5713 67 LED1_UUID, &led_state, sizeof(led_state), sizeof(led_state),
sitakumar 0:adcc621e5713 68 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
sitakumar 0:adcc621e5713 69 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE);
sitakumar 0:adcc621e5713 70 led1_handler = led1_characteristics.getValueAttribute().getHandle();
sitakumar 0:adcc621e5713 71
sitakumar 0:adcc621e5713 72 GattCharacteristic button_characteristics(
sitakumar 0:adcc621e5713 73 BUTTON_UUID, &button_state, sizeof(button_state), sizeof(button_state),
sitakumar 0:adcc621e5713 74 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
sitakumar 0:adcc621e5713 75 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
sitakumar 0:adcc621e5713 76
sitakumar 0:adcc621e5713 77 const uint8_t TEST_SERVICE_UUID[LENGTH_OF_LONG_UUID] = {
sitakumar 0:adcc621e5713 78 0xb0, 0xbb, 0x58, 0x20, 0x5a, 0x0d, 0x11, 0xe4,
sitakumar 0:adcc621e5713 79 0x93, 0xee, 0x00, 0x02, 0xa5, 0xd5, 0xc5, 0x1b};
sitakumar 0:adcc621e5713 80 GattCharacteristic *charTable[] = {&led1_characteristics, &button_characteristics};
sitakumar 0:adcc621e5713 81 GattService testService(TEST_SERVICE_UUID, charTable,
sitakumar 0:adcc621e5713 82 sizeof(charTable) / sizeof(GattCharacteristic *));
sitakumar 0:adcc621e5713 83
sitakumar 0:adcc621e5713 84 // BLE setup, mainly we add service and callbacks
sitakumar 0:adcc621e5713 85 ble.init();
sitakumar 0:adcc621e5713 86 ble.addService(testService);
sitakumar 0:adcc621e5713 87 ble.onDataWritten(&changeLED);
sitakumar 0:adcc621e5713 88 ble.onDisconnection(disconnectionCallback);
sitakumar 0:adcc621e5713 89
sitakumar 0:adcc621e5713 90 // setup advertising
sitakumar 0:adcc621e5713 91 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED |
sitakumar 0:adcc621e5713 92 GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
sitakumar 0:adcc621e5713 93 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
sitakumar 0:adcc621e5713 94 (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
sitakumar 0:adcc621e5713 95 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
sitakumar 0:adcc621e5713 96 ble.setAdvertisingInterval(1600); /* 1000ms; in multiples of 0.625ms. */
sitakumar 0:adcc621e5713 97 ble.startAdvertising();
sitakumar 0:adcc621e5713 98
sitakumar 0:adcc621e5713 99 while (true) {
sitakumar 0:adcc621e5713 100 if (is_button_pressed) {
sitakumar 0:adcc621e5713 101 // if button pressed, we update the characteristics
sitakumar 0:adcc621e5713 102 is_button_pressed = false;
sitakumar 0:adcc621e5713 103 ble.updateCharacteristicValue(button_characteristics.getValueAttribute().getHandle(),
sitakumar 0:adcc621e5713 104 &button_state, sizeof(button_state));
sitakumar 0:adcc621e5713 105 } else {
sitakumar 0:adcc621e5713 106 ble.waitForEvent();
sitakumar 0:adcc621e5713 107 }
sitakumar 0:adcc621e5713 108 }
sitakumar 0:adcc621e5713 109 }