MAX32630FTHR BLE Demo

Dependencies:   max32630fthr

Committer:
jessexm
Date:
Mon Jun 12 20:03:20 2017 +0000
Revision:
0:364860b25ae2
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jessexm 0:364860b25ae2 1 #include "mbed.h"
jessexm 0:364860b25ae2 2 #include "max32630fthr.h"
jessexm 0:364860b25ae2 3 #include "ble/BLE.h"
jessexm 0:364860b25ae2 4 #include "ble/services/BatteryService.h"
jessexm 0:364860b25ae2 5 #include "DeviceInformationService.h"
jessexm 0:364860b25ae2 6
jessexm 0:364860b25ae2 7 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
jessexm 0:364860b25ae2 8
jessexm 0:364860b25ae2 9 DigitalOut rLED(LED1, LED_OFF);
jessexm 0:364860b25ae2 10 DigitalOut gLED(LED2, LED_OFF);
jessexm 0:364860b25ae2 11
jessexm 0:364860b25ae2 12 BatteryService *batteryServicePtr;
jessexm 0:364860b25ae2 13 DeviceInformationService *deviceInformationServicePtr;
jessexm 0:364860b25ae2 14
jessexm 0:364860b25ae2 15 const char DEVICE_NAME[] = "MAX32630FTHR";
jessexm 0:364860b25ae2 16 const uint16_t uuid16_list[] = {GattService::UUID_BATTERY_SERVICE, GattService::UUID_DEVICE_INFORMATION_SERVICE};
jessexm 0:364860b25ae2 17 int batteryPercentage = 100;
jessexm 0:364860b25ae2 18
jessexm 0:364860b25ae2 19 void periodicCallback(void)
jessexm 0:364860b25ae2 20 {
jessexm 0:364860b25ae2 21 rLED = !rLED; /* Blink LED while we're waiting for BLE events */
jessexm 0:364860b25ae2 22
jessexm 0:364860b25ae2 23 /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
jessexm 0:364860b25ae2 24 * heavy-weight sensor polling from the main thread. */
jessexm 0:364860b25ae2 25 if (--batteryPercentage <= 0) {
jessexm 0:364860b25ae2 26 batteryPercentage = 100;
jessexm 0:364860b25ae2 27 }
jessexm 0:364860b25ae2 28 batteryServicePtr->updateBatteryLevel(batteryPercentage);
jessexm 0:364860b25ae2 29 }
jessexm 0:364860b25ae2 30
jessexm 0:364860b25ae2 31 /* Restart Advertising on disconnection*/
jessexm 0:364860b25ae2 32 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
jessexm 0:364860b25ae2 33 {
jessexm 0:364860b25ae2 34 BLE::Instance().gap().startAdvertising();
jessexm 0:364860b25ae2 35 }
jessexm 0:364860b25ae2 36
jessexm 0:364860b25ae2 37 /* Connection */
jessexm 0:364860b25ae2 38 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
jessexm 0:364860b25ae2 39 {
jessexm 0:364860b25ae2 40 }
jessexm 0:364860b25ae2 41
jessexm 0:364860b25ae2 42
jessexm 0:364860b25ae2 43 /**
jessexm 0:364860b25ae2 44 * This function is called when the ble initialization process has failed
jessexm 0:364860b25ae2 45 */
jessexm 0:364860b25ae2 46 void onBleInitError(BLE &ble, ble_error_t error)
jessexm 0:364860b25ae2 47 {
jessexm 0:364860b25ae2 48 /* Avoid compiler warnings */
jessexm 0:364860b25ae2 49 (void) ble;
jessexm 0:364860b25ae2 50 (void) error;
jessexm 0:364860b25ae2 51 /* Initialization error handling should go here */
jessexm 0:364860b25ae2 52 }
jessexm 0:364860b25ae2 53
jessexm 0:364860b25ae2 54 /**
jessexm 0:364860b25ae2 55 * Callback triggered when the ble initialization process has finished
jessexm 0:364860b25ae2 56 */
jessexm 0:364860b25ae2 57 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
jessexm 0:364860b25ae2 58 {
jessexm 0:364860b25ae2 59 BLE& ble = params->ble;
jessexm 0:364860b25ae2 60 ble_error_t error = params->error;
jessexm 0:364860b25ae2 61
jessexm 0:364860b25ae2 62 if (error != BLE_ERROR_NONE) {
jessexm 0:364860b25ae2 63 /* In case of error, forward the error handling to onBleInitError */
jessexm 0:364860b25ae2 64 onBleInitError(ble, error);
jessexm 0:364860b25ae2 65 return;
jessexm 0:364860b25ae2 66 }
jessexm 0:364860b25ae2 67
jessexm 0:364860b25ae2 68 /* Ensure that it is the default instance of BLE */
jessexm 0:364860b25ae2 69 if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
jessexm 0:364860b25ae2 70 return;
jessexm 0:364860b25ae2 71 }
jessexm 0:364860b25ae2 72
jessexm 0:364860b25ae2 73 ble.gap().onDisconnection(disconnectionCallback);
jessexm 0:364860b25ae2 74 ble.gap().onConnection(connectionCallback);
jessexm 0:364860b25ae2 75
jessexm 0:364860b25ae2 76 /* Setup primary service. */
jessexm 0:364860b25ae2 77 deviceInformationServicePtr = new DeviceInformationService(ble, "Maxim", "FTHR", "00001", "0.1", "0.0", "0.0");
jessexm 0:364860b25ae2 78 batteryServicePtr = new BatteryService(ble, batteryPercentage);
jessexm 0:364860b25ae2 79
jessexm 0:364860b25ae2 80 /* Setup advertising */
jessexm 0:364860b25ae2 81 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
jessexm 0:364860b25ae2 82 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
jessexm 0:364860b25ae2 83 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
jessexm 0:364860b25ae2 84 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
jessexm 0:364860b25ae2 85 ble.gap().setAdvertisingInterval(250); /* 250ms */
jessexm 0:364860b25ae2 86 ble.gap().startAdvertising();
jessexm 0:364860b25ae2 87 }
jessexm 0:364860b25ae2 88
jessexm 0:364860b25ae2 89 int main()
jessexm 0:364860b25ae2 90 {
jessexm 0:364860b25ae2 91 uint32_t i = 0;
jessexm 0:364860b25ae2 92 LowPowerTicker ticker;
jessexm 0:364860b25ae2 93
jessexm 0:364860b25ae2 94 printf("******** MAX32630FTHR BLE Test ********\r\n");
jessexm 0:364860b25ae2 95
jessexm 0:364860b25ae2 96 BLE &ble = BLE::Instance();
jessexm 0:364860b25ae2 97 ble.init(bleInitComplete);
jessexm 0:364860b25ae2 98
jessexm 0:364860b25ae2 99 /* SpinWait for initialization to complete. This is necessary because the
jessexm 0:364860b25ae2 100 * BLE object is used in the main loop below. */
jessexm 0:364860b25ae2 101 while (ble.hasInitialized() == false) { /* spin loop */ }
jessexm 0:364860b25ae2 102
jessexm 0:364860b25ae2 103 ticker.attach(periodicCallback, 1);
jessexm 0:364860b25ae2 104
jessexm 0:364860b25ae2 105 while (1) {
jessexm 0:364860b25ae2 106 if (++i == 1000) {
jessexm 0:364860b25ae2 107 i = 0;
jessexm 0:364860b25ae2 108 gLED = !gLED;
jessexm 0:364860b25ae2 109 }
jessexm 0:364860b25ae2 110
jessexm 0:364860b25ae2 111 Thread::wait(1);
jessexm 0:364860b25ae2 112
jessexm 0:364860b25ae2 113 ble.waitForEvent();
jessexm 0:364860b25ae2 114 }
jessexm 0:364860b25ae2 115 }