Maxim Integrated's IoT development kit.

Dependencies:   MAX30101 MAX30003 MAX113XX_Pixi MAX30205 max32630fthr USBDevice

Committer:
Mahir Ozturk
Date:
Thu Jun 28 15:47:24 2018 +0300
Revision:
13:fba77a5d0fa0
Parent:
11:04292fba5078
Child:
15:0d47d5879a21
* Move each sensor applications to corresponding *_app.cpp files
* Increase notification period to 12 seconds
* Change platform name to "Maxim HMS"
* Remove unused mem_debug.cpp and mem_debug.h files
* Code cleaning

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mahir Ozturk 1:efe9cad8942f 1 /*******************************************************************************
Mahir Ozturk 1:efe9cad8942f 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
Mahir Ozturk 1:efe9cad8942f 3 *
Mahir Ozturk 1:efe9cad8942f 4 * Permission is hereby granted, free of charge, to any person obtaining a
Mahir Ozturk 1:efe9cad8942f 5 * copy of this software and associated documentation files (the "Software"),
Mahir Ozturk 1:efe9cad8942f 6 * to deal in the Software without restriction, including without limitation
Mahir Ozturk 1:efe9cad8942f 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Mahir Ozturk 1:efe9cad8942f 8 * and/or sell copies of the Software, and to permit persons to whom the
Mahir Ozturk 1:efe9cad8942f 9 * Software is furnished to do so, subject to the following conditions:
Mahir Ozturk 1:efe9cad8942f 10 *
Mahir Ozturk 1:efe9cad8942f 11 * The above copyright notice and this permission notice shall be included
Mahir Ozturk 1:efe9cad8942f 12 * in all copies or substantial portions of the Software.
Mahir Ozturk 1:efe9cad8942f 13 *
Mahir Ozturk 1:efe9cad8942f 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Mahir Ozturk 1:efe9cad8942f 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Mahir Ozturk 1:efe9cad8942f 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Mahir Ozturk 1:efe9cad8942f 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Mahir Ozturk 1:efe9cad8942f 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Mahir Ozturk 1:efe9cad8942f 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Mahir Ozturk 1:efe9cad8942f 20 * OTHER DEALINGS IN THE SOFTWARE.
Mahir Ozturk 1:efe9cad8942f 21 *
Mahir Ozturk 1:efe9cad8942f 22 * Except as contained in this notice, the name of Maxim Integrated
Mahir Ozturk 1:efe9cad8942f 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Mahir Ozturk 1:efe9cad8942f 24 * Products, Inc. Branding Policy.
Mahir Ozturk 1:efe9cad8942f 25 *
Mahir Ozturk 1:efe9cad8942f 26 * The mere transfer of this software does not imply any licenses
Mahir Ozturk 1:efe9cad8942f 27 * of trade secrets, proprietary technology, copyrights, patents,
Mahir Ozturk 1:efe9cad8942f 28 * trademarks, maskwork rights, or any other form of intellectual
Mahir Ozturk 1:efe9cad8942f 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Mahir Ozturk 1:efe9cad8942f 30 * ownership rights.
Mahir Ozturk 1:efe9cad8942f 31 *******************************************************************************
Mahir Ozturk 1:efe9cad8942f 32 */
Mahir Ozturk 7:2c9c8b6a28a7 33 #include <mbed.h>
Mahir Ozturk 1:efe9cad8942f 34 #include <events/mbed_events.h>
Mahir Ozturk 1:efe9cad8942f 35 #include <rtos.h>
mahirozturk 11:04292fba5078 36 #include "config.h"
Mahir Ozturk 1:efe9cad8942f 37 #include "ble/BLE.h"
Mahir Ozturk 1:efe9cad8942f 38 #include "ble/Gap.h"
Mahir Ozturk 1:efe9cad8942f 39 #include "max32630fthr.h"
Mahir Ozturk 13:fba77a5d0fa0 40 #if defined(LIB_MAX30205)
Mahir Ozturk 13:fba77a5d0fa0 41 # include "max30205_app.h"
Mahir Ozturk 13:fba77a5d0fa0 42 #endif
Mahir Ozturk 13:fba77a5d0fa0 43 #if defined(LIB_MAX30101)
Mahir Ozturk 13:fba77a5d0fa0 44 # include "max30101_app.h"
Mahir Ozturk 1:efe9cad8942f 45 #endif
Mahir Ozturk 13:fba77a5d0fa0 46 #if defined(LIB_MAX30003)
Mahir Ozturk 13:fba77a5d0fa0 47 # include "max30003_app.h"
Mahir Ozturk 13:fba77a5d0fa0 48 #endif
Mahir Ozturk 13:fba77a5d0fa0 49 #if defined(LIB_MAX113XX_PIXI)
Mahir Ozturk 13:fba77a5d0fa0 50 # include "max113xx_pixi_app.h"
Mahir Ozturk 1:efe9cad8942f 51 #endif
Mahir Ozturk 1:efe9cad8942f 52
Mahir Ozturk 1:efe9cad8942f 53
Mahir Ozturk 1:efe9cad8942f 54 /******************************************************************************/
Mahir Ozturk 1:efe9cad8942f 55
Mahir Ozturk 1:efe9cad8942f 56 MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
Mahir Ozturk 1:efe9cad8942f 57
Mahir Ozturk 1:efe9cad8942f 58 InterruptIn button(P2_3);
Mahir Ozturk 1:efe9cad8942f 59
Mahir Ozturk 1:efe9cad8942f 60 SPI spim2(SPI2_MOSI, SPI2_MISO, SPI2_SCK);
Mahir Ozturk 1:efe9cad8942f 61
Mahir Ozturk 1:efe9cad8942f 62 I2C i2c1(I2C1_SDA, I2C1_SCL); /* I2C bus, P3_4 = SDA, P3_5 = SCL */
Mahir Ozturk 1:efe9cad8942f 63
Mahir Ozturk 1:efe9cad8942f 64 /* LEDs */
Mahir Ozturk 1:efe9cad8942f 65 DigitalOut rLED(LED1, LED_OFF);
Mahir Ozturk 1:efe9cad8942f 66 DigitalOut gLED(LED2, LED_OFF);
Mahir Ozturk 1:efe9cad8942f 67 DigitalOut bLED(LED3, LED_OFF);
Mahir Ozturk 1:efe9cad8942f 68
Mahir Ozturk 1:efe9cad8942f 69 /* Hardware serial port over DAPLink */
Mahir Ozturk 1:efe9cad8942f 70 Serial daplink(USBTX, USBRX, 115200);
Mahir Ozturk 1:efe9cad8942f 71
Mahir Ozturk 2:68ffd74e3b5c 72 int aliveLedEventId;
Mahir Ozturk 2:68ffd74e3b5c 73
Mahir Ozturk 1:efe9cad8942f 74 /******************************************************************************/
Mahir Ozturk 1:efe9cad8942f 75 const static char DEVICE_NAME[] = MAXIM_PLATFORM_NAME;
Mahir Ozturk 1:efe9cad8942f 76 static const uint16_t uuid16_list[] = {0xFFFF}; //Custom UUID, FFFF is reserved for development
Mahir Ozturk 1:efe9cad8942f 77
Mahir Ozturk 1:efe9cad8942f 78 /* Set Up custom Characteristics */
Mahir Ozturk 1:efe9cad8942f 79 UUID iotServiceUUID ("00001520-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 1:efe9cad8942f 80
Mahir Ozturk 1:efe9cad8942f 81 UUID uuidButtonPressedNotify("00001522-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 1:efe9cad8942f 82 static uint8_t buttonPressedCount = 0;
Mahir Ozturk 1:efe9cad8942f 83 GattCharacteristic gattCharButtonPressedNotify(uuidButtonPressedNotify, &buttonPressedCount, 1, 1,
Mahir Ozturk 1:efe9cad8942f 84 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
Mahir Ozturk 1:efe9cad8942f 85
Mahir Ozturk 1:efe9cad8942f 86 UUID uuidRGBLED("00001523-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 1:efe9cad8942f 87 static uint8_t RGBLedInitValue[] = {LED_OFF, LED_OFF, LED_OFF};
Mahir Ozturk 1:efe9cad8942f 88 ReadWriteArrayGattCharacteristic<uint8_t, sizeof(RGBLedInitValue)> gattCharRGBLed(uuidRGBLED, RGBLedInitValue);
Mahir Ozturk 1:efe9cad8942f 89
Mahir Ozturk 13:fba77a5d0fa0 90 #if defined(LIB_MAX30003)
Mahir Ozturk 1:efe9cad8942f 91 UUID uuidBPM("00001524-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 13:fba77a5d0fa0 92 static float BPMInitValue;
Mahir Ozturk 1:efe9cad8942f 93 ReadOnlyGattCharacteristic<float> gattCharBPM(uuidBPM, &BPMInitValue,
Mahir Ozturk 1:efe9cad8942f 94 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
Mahir Ozturk 1:efe9cad8942f 95 #endif
Mahir Ozturk 1:efe9cad8942f 96
Mahir Ozturk 1:efe9cad8942f 97 #if defined(LIB_MAX30101)
Mahir Ozturk 1:efe9cad8942f 98 UUID uuidHeartRate("00001525-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 13:fba77a5d0fa0 99 static uint16_t HeartRateInitValue;
Mahir Ozturk 1:efe9cad8942f 100 ReadOnlyGattCharacteristic<uint16_t> gattCharHeartRate(uuidHeartRate, &HeartRateInitValue,
Mahir Ozturk 1:efe9cad8942f 101 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
Mahir Ozturk 1:efe9cad8942f 102
Mahir Ozturk 1:efe9cad8942f 103 UUID uuidSPO2("00001526-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 13:fba77a5d0fa0 104 static uint16_t SPO2InitValue;
Mahir Ozturk 1:efe9cad8942f 105 ReadOnlyGattCharacteristic<uint16_t> gattCharSPO2(uuidSPO2, &SPO2InitValue,
Mahir Ozturk 1:efe9cad8942f 106 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
Mahir Ozturk 1:efe9cad8942f 107 #endif
Mahir Ozturk 1:efe9cad8942f 108
Mahir Ozturk 1:efe9cad8942f 109 #if defined(LIB_MAX113XX_PIXI)
Mahir Ozturk 1:efe9cad8942f 110 UUID uuidADC("00001527-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 13:fba77a5d0fa0 111 static float ADCInitValue;
Mahir Ozturk 5:ff721fa88519 112 ReadOnlyGattCharacteristic<float> gattCharADC(uuidADC, &ADCInitValue,
Mahir Ozturk 3:7e9a93b6b82b 113 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
Mahir Ozturk 1:efe9cad8942f 114 #endif
Mahir Ozturk 1:efe9cad8942f 115
Mahir Ozturk 1:efe9cad8942f 116 #if defined(LIB_MAX30205)
Mahir Ozturk 1:efe9cad8942f 117 UUID uuidTemp("00001528-1d66-11e8-b467-0ed5f89f718b");
Mahir Ozturk 13:fba77a5d0fa0 118 static float TempInitValue;
Mahir Ozturk 1:efe9cad8942f 119 ReadOnlyGattCharacteristic<float> gattCharTemp(uuidTemp, &TempInitValue,
Mahir Ozturk 1:efe9cad8942f 120 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
Mahir Ozturk 1:efe9cad8942f 121 #endif
Mahir Ozturk 1:efe9cad8942f 122
Mahir Ozturk 1:efe9cad8942f 123 /* Set up custom service */
Mahir Ozturk 1:efe9cad8942f 124 GattCharacteristic *characteristics[] = {&gattCharRGBLed, &gattCharButtonPressedNotify,
Mahir Ozturk 13:fba77a5d0fa0 125 #if defined(LIB_MAX30003)
Mahir Ozturk 1:efe9cad8942f 126 &gattCharBPM,
Mahir Ozturk 1:efe9cad8942f 127 #endif
Mahir Ozturk 1:efe9cad8942f 128 #if defined(LIB_MAX30205)
Mahir Ozturk 1:efe9cad8942f 129 &gattCharTemp,
Mahir Ozturk 1:efe9cad8942f 130 #endif
Mahir Ozturk 1:efe9cad8942f 131 #if defined(LIB_MAX30101)
Mahir Ozturk 1:efe9cad8942f 132 &gattCharHeartRate,
Mahir Ozturk 1:efe9cad8942f 133 &gattCharSPO2,
Mahir Ozturk 1:efe9cad8942f 134 #endif
Mahir Ozturk 1:efe9cad8942f 135 #if defined(LIB_MAX113XX_PIXI)
Mahir Ozturk 1:efe9cad8942f 136 &gattCharADC,
Mahir Ozturk 1:efe9cad8942f 137 #endif
Mahir Ozturk 1:efe9cad8942f 138 };
Mahir Ozturk 1:efe9cad8942f 139
Mahir Ozturk 1:efe9cad8942f 140 GattService iotService(iotServiceUUID, characteristics, sizeof(characteristics) / sizeof(GattCharacteristic *));
Mahir Ozturk 1:efe9cad8942f 141
Mahir Ozturk 1:efe9cad8942f 142 /******************************************************************************/
Mahir Ozturk 1:efe9cad8942f 143
Mahir Ozturk 1:efe9cad8942f 144 static EventQueue eventQueue(/* event count */ 10 * /* event size */ 32);
Mahir Ozturk 1:efe9cad8942f 145
Mahir Ozturk 1:efe9cad8942f 146 void updateButtonState(uint8_t newState) {
Mahir Ozturk 1:efe9cad8942f 147 printf("Button pressed...\r\n");
Mahir Ozturk 1:efe9cad8942f 148 bleGattAttrWrite(gattCharButtonPressedNotify.getValueHandle(), (uint8_t *)&newState, sizeof(uint8_t));
Mahir Ozturk 1:efe9cad8942f 149 }
Mahir Ozturk 1:efe9cad8942f 150
Mahir Ozturk 1:efe9cad8942f 151 void buttonPressedCallback(void)
Mahir Ozturk 1:efe9cad8942f 152 {
Mahir Ozturk 10:dbeda3ffffb8 153 eventQueue.call(Callback<void(uint8_t)>(&updateButtonState), ++buttonPressedCount);
Mahir Ozturk 1:efe9cad8942f 154 }
Mahir Ozturk 1:efe9cad8942f 155
Mahir Ozturk 1:efe9cad8942f 156 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
Mahir Ozturk 1:efe9cad8942f 157 {
Mahir Ozturk 1:efe9cad8942f 158 printf("disc\r\n");
Mahir Ozturk 10:dbeda3ffffb8 159 BLE::Instance().gap().startAdvertising(); // restart advertising
Mahir Ozturk 1:efe9cad8942f 160 }
Mahir Ozturk 1:efe9cad8942f 161
Mahir Ozturk 1:efe9cad8942f 162 /* Connection */
Mahir Ozturk 1:efe9cad8942f 163 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
Mahir Ozturk 1:efe9cad8942f 164 {
Mahir Ozturk 1:efe9cad8942f 165 printf("succ\r\n");
Mahir Ozturk 1:efe9cad8942f 166 }
Mahir Ozturk 1:efe9cad8942f 167
Mahir Ozturk 1:efe9cad8942f 168 void blinkCallback(void)
Mahir Ozturk 1:efe9cad8942f 169 {
Mahir Ozturk 2:68ffd74e3b5c 170 gLED = !gLED;
Mahir Ozturk 1:efe9cad8942f 171 }
Mahir Ozturk 1:efe9cad8942f 172
Mahir Ozturk 1:efe9cad8942f 173 void onBleInitError(BLE &ble, ble_error_t error)
Mahir Ozturk 1:efe9cad8942f 174 {
Mahir Ozturk 10:dbeda3ffffb8 175 /* Initialization error handling should go here */
Mahir Ozturk 1:efe9cad8942f 176 }
Mahir Ozturk 1:efe9cad8942f 177
Mahir Ozturk 1:efe9cad8942f 178 /**
Mahir Ozturk 1:efe9cad8942f 179 * This callback allows the LEDService to receive updates to the ledState Characteristic.
Mahir Ozturk 1:efe9cad8942f 180 *
Mahir Ozturk 1:efe9cad8942f 181 * @param[in] params
Mahir Ozturk 1:efe9cad8942f 182 * Information about the characteristic being updated.
Mahir Ozturk 1:efe9cad8942f 183 */
Mahir Ozturk 1:efe9cad8942f 184 void onDataWrittenCallback(const GattWriteCallbackParams *params)
Mahir Ozturk 1:efe9cad8942f 185 {
Mahir Ozturk 1:efe9cad8942f 186 if ((params->handle == gattCharRGBLed.getValueHandle()) && (params->len >= 3)) {
Mahir Ozturk 10:dbeda3ffffb8 187 rLED = (params->data[0] != 0) ? LED_OFF : LED_ON;
Mahir Ozturk 10:dbeda3ffffb8 188 gLED = (params->data[1] != 0) ? LED_OFF : LED_ON;
Mahir Ozturk 10:dbeda3ffffb8 189 bLED = (params->data[2] != 0) ? LED_OFF : LED_ON;
Mahir Ozturk 10:dbeda3ffffb8 190 }
Mahir Ozturk 1:efe9cad8942f 191 }
Mahir Ozturk 1:efe9cad8942f 192
Mahir Ozturk 1:efe9cad8942f 193 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
Mahir Ozturk 1:efe9cad8942f 194 {
Mahir Ozturk 10:dbeda3ffffb8 195 BLE& ble = params->ble;
Mahir Ozturk 10:dbeda3ffffb8 196 ble_error_t error = params->error;
Mahir Ozturk 1:efe9cad8942f 197
Mahir Ozturk 10:dbeda3ffffb8 198 if (error != BLE_ERROR_NONE) {
Mahir Ozturk 10:dbeda3ffffb8 199 /* In case of error, forward the error handling to onBleInitError */
Mahir Ozturk 10:dbeda3ffffb8 200 onBleInitError(ble, error);
Mahir Ozturk 10:dbeda3ffffb8 201 return;
Mahir Ozturk 10:dbeda3ffffb8 202 }
Mahir Ozturk 1:efe9cad8942f 203
Mahir Ozturk 10:dbeda3ffffb8 204 /* Ensure that it is the default instance of BLE */
Mahir Ozturk 10:dbeda3ffffb8 205 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
Mahir Ozturk 10:dbeda3ffffb8 206 return;
Mahir Ozturk 10:dbeda3ffffb8 207 }
Mahir Ozturk 1:efe9cad8942f 208
Mahir Ozturk 10:dbeda3ffffb8 209 ble.gap().onDisconnection(disconnectionCallback);
Mahir Ozturk 10:dbeda3ffffb8 210 ble.gap().onConnection(connectionCallback);
Mahir Ozturk 1:efe9cad8942f 211
Mahir Ozturk 10:dbeda3ffffb8 212 ble.gattServer().onDataWritten(onDataWrittenCallback);
Mahir Ozturk 1:efe9cad8942f 213
Mahir Ozturk 10:dbeda3ffffb8 214 ble.gattServer().addService(iotService);
Mahir Ozturk 1:efe9cad8942f 215
Mahir Ozturk 10:dbeda3ffffb8 216 /* setup advertising */
Mahir Ozturk 10:dbeda3ffffb8 217 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
Mahir Ozturk 10:dbeda3ffffb8 218 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
Mahir Ozturk 10:dbeda3ffffb8 219 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
Mahir Ozturk 10:dbeda3ffffb8 220 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Mahir Ozturk 10:dbeda3ffffb8 221 ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
Mahir Ozturk 10:dbeda3ffffb8 222 ble.gap().startAdvertising();
Mahir Ozturk 1:efe9cad8942f 223
Mahir Ozturk 10:dbeda3ffffb8 224 button.fall(buttonPressedCallback);
Mahir Ozturk 1:efe9cad8942f 225 }
Mahir Ozturk 1:efe9cad8942f 226
Mahir Ozturk 1:efe9cad8942f 227 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
Mahir Ozturk 10:dbeda3ffffb8 228 BLE &ble = BLE::Instance();
Mahir Ozturk 10:dbeda3ffffb8 229 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
Mahir Ozturk 1:efe9cad8942f 230 }
Mahir Ozturk 1:efe9cad8942f 231
Mahir Ozturk 1:efe9cad8942f 232 int main()
Mahir Ozturk 1:efe9cad8942f 233 {
Mahir Ozturk 1:efe9cad8942f 234 osStatus status;
Mahir Ozturk 13:fba77a5d0fa0 235 rLED = LED_OFF; gLED = LED_OFF; bLED = LED_OFF;
Mahir Ozturk 1:efe9cad8942f 236
Mahir Ozturk 2:68ffd74e3b5c 237 aliveLedEventId = eventQueue.call_every(1000, blinkCallback);
Mahir Ozturk 1:efe9cad8942f 238
Mahir Ozturk 13:fba77a5d0fa0 239 printf("Initializing BLE service...\r\n");
Mahir Ozturk 1:efe9cad8942f 240
Mahir Ozturk 2:68ffd74e3b5c 241 BLE &ble = BLE::Instance();
Mahir Ozturk 2:68ffd74e3b5c 242 ble.onEventsToProcess(scheduleBleEventsProcessing);
Mahir Ozturk 2:68ffd74e3b5c 243 ble.init(bleInitComplete);
Mahir Ozturk 1:efe9cad8942f 244
Mahir Ozturk 1:efe9cad8942f 245 #if defined(LIB_MAX30205)
Mahir Ozturk 13:fba77a5d0fa0 246 Thread thread_max30205_reader;
Mahir Ozturk 13:fba77a5d0fa0 247 struct max30205_reader_task_args args_max30205 = {
Mahir Ozturk 13:fba77a5d0fa0 248 i2c1,
Mahir Ozturk 13:fba77a5d0fa0 249 gattCharTemp.getValueHandle(),
Mahir Ozturk 13:fba77a5d0fa0 250 MAX30205_BLE_NOTIFY_PERIOD_SEC};
Mahir Ozturk 13:fba77a5d0fa0 251 status = thread_max30205_reader.start(callback(max30205_reader_task, &args_max30205));
Mahir Ozturk 2:68ffd74e3b5c 252 if (status != osOK) {
Mahir Ozturk 13:fba77a5d0fa0 253 printf("Starting thread_max30205_reader thread failed(%ld)!\r\n", status);
Mahir Ozturk 2:68ffd74e3b5c 254 }
Mahir Ozturk 1:efe9cad8942f 255 #endif
Mahir Ozturk 1:efe9cad8942f 256
Mahir Ozturk 1:efe9cad8942f 257 #if defined(LIB_MAX30101)
Mahir Ozturk 13:fba77a5d0fa0 258 Thread thread_max30101_reader;
Mahir Ozturk 13:fba77a5d0fa0 259 struct max30101_reader_task_args args_max30101 = {
Mahir Ozturk 13:fba77a5d0fa0 260 &thread_max30101_reader,
Mahir Ozturk 13:fba77a5d0fa0 261 i2c1, P3_2, P3_3,
Mahir Ozturk 13:fba77a5d0fa0 262 gattCharHeartRate.getValueHandle(),
Mahir Ozturk 13:fba77a5d0fa0 263 gattCharSPO2.getValueHandle(),
Mahir Ozturk 13:fba77a5d0fa0 264 MAX30101_BLE_NOTIFY_PERIOD_SEC};
Mahir Ozturk 13:fba77a5d0fa0 265 status = thread_max30101_reader.start(callback(max30101_reader_task, &args_max30101));
Mahir Ozturk 2:68ffd74e3b5c 266 if (status != osOK) {
Mahir Ozturk 13:fba77a5d0fa0 267 printf("Starting thread_max30205_reader thread failed(%ld)!\r\n", status);
Mahir Ozturk 2:68ffd74e3b5c 268 }
Mahir Ozturk 1:efe9cad8942f 269 #endif
Mahir Ozturk 1:efe9cad8942f 270
Mahir Ozturk 1:efe9cad8942f 271 #if defined(LIB_MAX30003)
Mahir Ozturk 13:fba77a5d0fa0 272 Thread thread_max30003_reader;
Mahir Ozturk 13:fba77a5d0fa0 273 struct max30003_reader_task_args args_max30003 = {
Mahir Ozturk 13:fba77a5d0fa0 274 &thread_max30003_reader,
Mahir Ozturk 13:fba77a5d0fa0 275 spim2, SPI2_SS,
Mahir Ozturk 13:fba77a5d0fa0 276 gattCharBPM.getValueHandle(),
Mahir Ozturk 13:fba77a5d0fa0 277 MAX30003_BLE_NOTIFY_PERIOD_SEC};
Mahir Ozturk 13:fba77a5d0fa0 278 status = thread_max30003_reader.start(callback(max30003_reader_task, &args_max30003));
Mahir Ozturk 2:68ffd74e3b5c 279 if (status != osOK) {
Mahir Ozturk 13:fba77a5d0fa0 280 printf("Starting thread_max30205_reader thread failed(%ld)!\r\n", status);
Mahir Ozturk 2:68ffd74e3b5c 281 }
Mahir Ozturk 1:efe9cad8942f 282 #endif
Mahir Ozturk 1:efe9cad8942f 283
Mahir Ozturk 1:efe9cad8942f 284 #if defined(LIB_MAX113XX_PIXI)
Mahir Ozturk 13:fba77a5d0fa0 285 Thread thread_max11301_reader;
Mahir Ozturk 13:fba77a5d0fa0 286 struct max11301_reader_task_args args_max11301 = {
Mahir Ozturk 13:fba77a5d0fa0 287 i2c1,
Mahir Ozturk 13:fba77a5d0fa0 288 gattCharADC.getValueHandle(),
Mahir Ozturk 13:fba77a5d0fa0 289 MAX113XX_PIXI_BLE_NOTIFY_PERIOD_SEC};
Mahir Ozturk 13:fba77a5d0fa0 290 status = thread_max11301_reader.start(callback(max11301_reader_task, &args_max11301));
Mahir Ozturk 2:68ffd74e3b5c 291 if (status != osOK) {
Mahir Ozturk 13:fba77a5d0fa0 292 printf("Starting thread_max30205_reader thread failed(%ld)!\r\n", status);
Mahir Ozturk 2:68ffd74e3b5c 293 }
Mahir Ozturk 1:efe9cad8942f 294 #endif
Mahir Ozturk 1:efe9cad8942f 295
Mahir Ozturk 2:68ffd74e3b5c 296 eventQueue.dispatch_forever();
Mahir Ozturk 1:efe9cad8942f 297
Mahir Ozturk 2:68ffd74e3b5c 298 return 0;
Mahir Ozturk 1:efe9cad8942f 299 }
Mahir Ozturk 1:efe9cad8942f 300