First commit

Dependencies:   mbed nRF51822

Committer:
Marcomissyou
Date:
Fri Jan 30 03:03:24 2015 +0000
Revision:
1:09066654e03c
Parent:
0:ec25cf09b81b
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Marcomissyou 0:ec25cf09b81b 1 #include "mbed.h"
Marcomissyou 0:ec25cf09b81b 2 #include "BLEDevice.h"
Marcomissyou 0:ec25cf09b81b 3 #include "FindmeService.h"
Marcomissyou 0:ec25cf09b81b 4 #include "BatteryService.h"
Marcomissyou 0:ec25cf09b81b 5 #include "DeviceInformationService.h"
Marcomissyou 0:ec25cf09b81b 6 #include "DFUService.h"
Marcomissyou 0:ec25cf09b81b 7
Marcomissyou 0:ec25cf09b81b 8 #define UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL 0
Marcomissyou 0:ec25cf09b81b 9
Marcomissyou 0:ec25cf09b81b 10 BLEDevice ble;
Marcomissyou 0:ec25cf09b81b 11 DigitalOut led1(p0);
Marcomissyou 0:ec25cf09b81b 12 DigitalOut Buz(p1);
Marcomissyou 0:ec25cf09b81b 13
Marcomissyou 0:ec25cf09b81b 14 void NoAlert(void){
Marcomissyou 0:ec25cf09b81b 15 Buz = 0;
Marcomissyou 0:ec25cf09b81b 16 }
Marcomissyou 0:ec25cf09b81b 17 void MildAlert(void){
Marcomissyou 0:ec25cf09b81b 18 Buz = !Buz;
Marcomissyou 0:ec25cf09b81b 19 wait(2);
Marcomissyou 0:ec25cf09b81b 20 }
Marcomissyou 0:ec25cf09b81b 21 void HighAlert(void){
Marcomissyou 0:ec25cf09b81b 22 Buz = !Buz;
Marcomissyou 0:ec25cf09b81b 23 wait(1);
Marcomissyou 0:ec25cf09b81b 24 }
Marcomissyou 0:ec25cf09b81b 25
Marcomissyou 0:ec25cf09b81b 26 const static char DEVICE_NAME[] = "FindME";
Marcomissyou 0:ec25cf09b81b 27 static const uint16_t uuid16_list[] = {GattService::UUID_IMMEDIATE_ALERT_SERVICE, //Find me!
Marcomissyou 0:ec25cf09b81b 28 GattService::UUID_BATTERY_SERVICE,
Marcomissyou 0:ec25cf09b81b 29 GattService::UUID_DEVICE_INFORMATION_SERVICE,
Marcomissyou 0:ec25cf09b81b 30 DFUServiceShortUUID};
Marcomissyou 0:ec25cf09b81b 31
Marcomissyou 0:ec25cf09b81b 32 static volatile bool triggerSensorPolling = false;
Marcomissyou 0:ec25cf09b81b 33
Marcomissyou 0:ec25cf09b81b 34 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
Marcomissyou 0:ec25cf09b81b 35 {
Marcomissyou 0:ec25cf09b81b 36 ble.startAdvertising(); // restart advertising
Marcomissyou 0:ec25cf09b81b 37 }
Marcomissyou 0:ec25cf09b81b 38
Marcomissyou 0:ec25cf09b81b 39 void onConnectionCallback(Gap::Handle_t handle, Gap::addr_type_t peerAddrType, const Gap::address_t peerAddr, const Gap::ConnectionParams_t *params)
Marcomissyou 0:ec25cf09b81b 40 {
Marcomissyou 0:ec25cf09b81b 41 #if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL
Marcomissyou 0:ec25cf09b81b 42
Marcomissyou 0:ec25cf09b81b 43 #define MIN_CONN_INTERVAL 250 /**< Minimum connection interval (250 ms) */
Marcomissyou 0:ec25cf09b81b 44 #define MAX_CONN_INTERVAL 350 /**< Maximum connection interval (350 ms). */
Marcomissyou 0:ec25cf09b81b 45 #define CONN_SUP_TIMEOUT 6000 /**< Connection supervisory timeout (6 seconds). */
Marcomissyou 0:ec25cf09b81b 46 #define SLAVE_LATENCY 4
Marcomissyou 0:ec25cf09b81b 47
Marcomissyou 0:ec25cf09b81b 48 Gap::ConnectionParams_t gap_conn_params;
Marcomissyou 0:ec25cf09b81b 49 gap_conn_params.minConnectionInterval = Gap::MSEC_TO_GAP_DURATION_UNITS(MIN_CONN_INTERVAL);
Marcomissyou 0:ec25cf09b81b 50 gap_conn_params.maxConnectionInterval = Gap::MSEC_TO_GAP_DURATION_UNITS(MAX_CONN_INTERVAL);
Marcomissyou 0:ec25cf09b81b 51 gap_conn_params.connectionSupervisionTimeout = Gap::MSEC_TO_GAP_DURATION_UNITS(CONN_SUP_TIMEOUT);
Marcomissyou 0:ec25cf09b81b 52 gap_conn_params.slaveLatency = SLAVE_LATENCY;
Marcomissyou 0:ec25cf09b81b 53 ble.updateConnectionParams(handle, &gap_conn_params);
Marcomissyou 0:ec25cf09b81b 54 #endif /* #if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL */
Marcomissyou 0:ec25cf09b81b 55 }
Marcomissyou 0:ec25cf09b81b 56
Marcomissyou 0:ec25cf09b81b 57 void periodicCallback(void)
Marcomissyou 0:ec25cf09b81b 58 {
Marcomissyou 0:ec25cf09b81b 59 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
Marcomissyou 0:ec25cf09b81b 60 triggerSensorPolling = true;
Marcomissyou 0:ec25cf09b81b 61 }
Marcomissyou 0:ec25cf09b81b 62
Marcomissyou 0:ec25cf09b81b 63 int main(void)
Marcomissyou 0:ec25cf09b81b 64 { //NRF_CLOCK->LFCLKSRC = CLOCK_LFCLKSRC_SRC_RC;
Marcomissyou 0:ec25cf09b81b 65 //NRF_CLOCK->XTALFREQ = 0x00;
Marcomissyou 0:ec25cf09b81b 66 //NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;
Marcomissyou 0:ec25cf09b81b 67 //NRF_CLOCK->TASKS_HFCLKSTART = 1;
Marcomissyou 0:ec25cf09b81b 68 //while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)
Marcomissyou 0:ec25cf09b81b 69 //{// Do nothing.
Marcomissyou 0:ec25cf09b81b 70 //}
Marcomissyou 0:ec25cf09b81b 71 Buz = 0;
Marcomissyou 0:ec25cf09b81b 72 led1 = 0;
Marcomissyou 0:ec25cf09b81b 73 Ticker ticker;
Marcomissyou 0:ec25cf09b81b 74 //Ticker Buzzer;
Marcomissyou 0:ec25cf09b81b 75 ticker.attach(periodicCallback, 1);
Marcomissyou 0:ec25cf09b81b 76
Marcomissyou 0:ec25cf09b81b 77 ble.init();
Marcomissyou 0:ec25cf09b81b 78 ble.onDisconnection(disconnectionCallback);
Marcomissyou 0:ec25cf09b81b 79 #if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL
Marcomissyou 0:ec25cf09b81b 80 ble.onConnection(onConnectionCallback);
Marcomissyou 0:ec25cf09b81b 81 #endif /* #if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL */
Marcomissyou 0:ec25cf09b81b 82
Marcomissyou 0:ec25cf09b81b 83
Marcomissyou 0:ec25cf09b81b 84 BatteryService battery(ble);
Marcomissyou 0:ec25cf09b81b 85 DeviceInformationService deviceInfo(ble, "Cyntec", "Combo module", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
Marcomissyou 0:ec25cf09b81b 86 FindMeService fmService(ble);
Marcomissyou 0:ec25cf09b81b 87 DFUService DFU(ble);
Marcomissyou 0:ec25cf09b81b 88
Marcomissyou 0:ec25cf09b81b 89 /* Setup advertising. */
Marcomissyou 0:ec25cf09b81b 90 /* Setting advertising string*/
Marcomissyou 0:ec25cf09b81b 91 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
Marcomissyou 0:ec25cf09b81b 92 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
Marcomissyou 0:ec25cf09b81b 93 ble.accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_TAG);
Marcomissyou 0:ec25cf09b81b 94 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
Marcomissyou 0:ec25cf09b81b 95 /* Setting advertising parameters*/
Marcomissyou 0:ec25cf09b81b 96 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Marcomissyou 0:ec25cf09b81b 97 ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000)); //0x20~0x4000, 0.625ms, 20ms~10.24s
Marcomissyou 0:ec25cf09b81b 98 ble.setAdvertisingTimeout(0x1e); //Timeout, stop advertising after 30sec
Marcomissyou 0:ec25cf09b81b 99 ble.startAdvertising();
Marcomissyou 0:ec25cf09b81b 100
Marcomissyou 0:ec25cf09b81b 101 while (true) {
Marcomissyou 0:ec25cf09b81b 102 if (triggerSensorPolling && ble.getGapState().connected) {
Marcomissyou 0:ec25cf09b81b 103 triggerSensorPolling = false;
Marcomissyou 0:ec25cf09b81b 104
Marcomissyou 0:ec25cf09b81b 105 switch(fmService.AlertValue)
Marcomissyou 0:ec25cf09b81b 106 {
Marcomissyou 0:ec25cf09b81b 107 case 0:
Marcomissyou 0:ec25cf09b81b 108 //led1 = 0;
Marcomissyou 0:ec25cf09b81b 109 //Buz = 0;
Marcomissyou 0:ec25cf09b81b 110 NoAlert();
Marcomissyou 0:ec25cf09b81b 111 break;
Marcomissyou 0:ec25cf09b81b 112 case 1:
Marcomissyou 0:ec25cf09b81b 113 //led1 = 1;
Marcomissyou 0:ec25cf09b81b 114 MildAlert();
Marcomissyou 0:ec25cf09b81b 115 break;
Marcomissyou 0:ec25cf09b81b 116 case 2:
Marcomissyou 0:ec25cf09b81b 117 //Buz = 1;
Marcomissyou 0:ec25cf09b81b 118 HighAlert();
Marcomissyou 0:ec25cf09b81b 119 break;
Marcomissyou 0:ec25cf09b81b 120 default:
Marcomissyou 0:ec25cf09b81b 121 led1 = 1;
Marcomissyou 0:ec25cf09b81b 122 Buz = 1;
Marcomissyou 0:ec25cf09b81b 123 }
Marcomissyou 0:ec25cf09b81b 124
Marcomissyou 0:ec25cf09b81b 125 } else {
Marcomissyou 0:ec25cf09b81b 126 ble.waitForEvent();
Marcomissyou 0:ec25cf09b81b 127 }
Marcomissyou 0:ec25cf09b81b 128 }
Marcomissyou 0:ec25cf09b81b 129 }