Chanel's edits

Dependencies:   max32630fthr USBDevice

Committer:
saleiferis
Date:
Sat Mar 07 03:19:35 2020 +0000
Revision:
10:28b8729cf5dc
Parent:
7:4debec043316
Child:
14:ee2175578993
bluetooth streaming w/ no interrupts

Who changed what in which revision?

UserRevisionLine numberNew contents of line
saleiferis 7:4debec043316 1 //#include "HeartRateService.h"
saleiferis 7:4debec043316 2 #include "ECGService.h"
saleiferis 7:4debec043316 3
saleiferis 1:6e6f7e3cc1e1 4 extern MAX86150 max86150Sensor;
saleiferis 1:6e6f7e3cc1e1 5 extern Serial pc;
saleiferis 1:6e6f7e3cc1e1 6 const static char DEVICE_NAME[] = "Nordic_HRM";
saleiferis 1:6e6f7e3cc1e1 7 static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE};
saleiferis 1:6e6f7e3cc1e1 8
saleiferis 7:4debec043316 9
saleiferis 10:28b8729cf5dc 10 static int16_t hrmCounter = 100; // init HRM to 100bps
saleiferis 7:4debec043316 11 //static HeartRateService *hrServicePtr;
saleiferis 10:28b8729cf5dc 12 extern ECGService *hrServicePtr;
saleiferis 1:6e6f7e3cc1e1 13
saleiferis 1:6e6f7e3cc1e1 14 static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE);
saleiferis 1:6e6f7e3cc1e1 15
saleiferis 1:6e6f7e3cc1e1 16
saleiferis 4:4233f5538abf 17 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
saleiferis 4:4233f5538abf 18 {
saleiferis 4:4233f5538abf 19 pc.printf("Connected to BLE Client...\n");
saleiferis 4:4233f5538abf 20 }
saleiferis 4:4233f5538abf 21
saleiferis 1:6e6f7e3cc1e1 22 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
saleiferis 1:6e6f7e3cc1e1 23 {
saleiferis 1:6e6f7e3cc1e1 24 BLE::Instance().gap().startAdvertising(); // restart advertising
saleiferis 1:6e6f7e3cc1e1 25 }
saleiferis 1:6e6f7e3cc1e1 26
saleiferis 1:6e6f7e3cc1e1 27 void updateSensorValue() {
saleiferis 1:6e6f7e3cc1e1 28 // Do blocking calls or whatever is necessary for sensor polling.
saleiferis 1:6e6f7e3cc1e1 29 // In our case, we simply update the HRM measurement.
saleiferis 10:28b8729cf5dc 30 /*
saleiferis 10:28b8729cf5dc 31 hrmCounter++;
saleiferis 1:6e6f7e3cc1e1 32 // 100 <= HRM bps <=175
saleiferis 1:6e6f7e3cc1e1 33 if (hrmCounter == 175) {
saleiferis 1:6e6f7e3cc1e1 34 hrmCounter = 100;
saleiferis 10:28b8729cf5dc 35 }
saleiferis 10:28b8729cf5dc 36
saleiferis 2:a96a53e6c6a3 37 //hrmCounter = 133;
saleiferis 10:28b8729cf5dc 38 hrServicePtr->updateHeartRate(hrmCounter);
saleiferis 10:28b8729cf5dc 39 */
saleiferis 10:28b8729cf5dc 40 int16_t ecgsigned16;
saleiferis 10:28b8729cf5dc 41 if(max86150Sensor.check()>0){
saleiferis 10:28b8729cf5dc 42 ecgsigned16 = (int16_t) (max86150Sensor.getFIFOECG()>>2);
saleiferis 10:28b8729cf5dc 43 max86150Sensor.nextSample();
saleiferis 10:28b8729cf5dc 44 //hrServicePtr->updateHeartRate(ecgsigned16);
saleiferis 10:28b8729cf5dc 45 pc.printf("%d\n",ecgsigned16);
saleiferis 10:28b8729cf5dc 46 }
saleiferis 10:28b8729cf5dc 47
saleiferis 10:28b8729cf5dc 48
saleiferis 1:6e6f7e3cc1e1 49 }
saleiferis 1:6e6f7e3cc1e1 50
saleiferis 1:6e6f7e3cc1e1 51 void periodicCallback(void)
saleiferis 1:6e6f7e3cc1e1 52 {
saleiferis 1:6e6f7e3cc1e1 53
saleiferis 1:6e6f7e3cc1e1 54 if (BLE::Instance().getGapState().connected) {
saleiferis 1:6e6f7e3cc1e1 55 eventQueue.call(updateSensorValue);
saleiferis 1:6e6f7e3cc1e1 56 }
saleiferis 1:6e6f7e3cc1e1 57 }
saleiferis 1:6e6f7e3cc1e1 58
saleiferis 1:6e6f7e3cc1e1 59 void onBleInitError(BLE &ble, ble_error_t error)
saleiferis 1:6e6f7e3cc1e1 60 {
saleiferis 1:6e6f7e3cc1e1 61 (void)ble;
saleiferis 1:6e6f7e3cc1e1 62 (void)error;
saleiferis 1:6e6f7e3cc1e1 63 /* Initialization error handling should go here */
saleiferis 1:6e6f7e3cc1e1 64 }
saleiferis 1:6e6f7e3cc1e1 65
saleiferis 1:6e6f7e3cc1e1 66 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
saleiferis 1:6e6f7e3cc1e1 67 {
saleiferis 1:6e6f7e3cc1e1 68 BLE& ble = params->ble;
saleiferis 1:6e6f7e3cc1e1 69 ble_error_t error = params->error;
saleiferis 1:6e6f7e3cc1e1 70
saleiferis 1:6e6f7e3cc1e1 71 if (error != BLE_ERROR_NONE) {
saleiferis 1:6e6f7e3cc1e1 72 onBleInitError(ble, error);
saleiferis 1:6e6f7e3cc1e1 73 return;
saleiferis 1:6e6f7e3cc1e1 74 }
saleiferis 1:6e6f7e3cc1e1 75
saleiferis 1:6e6f7e3cc1e1 76 if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
saleiferis 1:6e6f7e3cc1e1 77 return;
saleiferis 1:6e6f7e3cc1e1 78 }
saleiferis 1:6e6f7e3cc1e1 79
saleiferis 1:6e6f7e3cc1e1 80 ble.gap().onDisconnection(disconnectionCallback);
saleiferis 4:4233f5538abf 81 ble.gap().onConnection(connectionCallback);
saleiferis 1:6e6f7e3cc1e1 82
saleiferis 1:6e6f7e3cc1e1 83 /* Setup primary service. */
saleiferis 7:4debec043316 84 //hrServicePtr = new HeartRateService(ble, hrmCounter, HeartRateService::LOCATION_FINGER);
saleiferis 7:4debec043316 85 hrServicePtr = new ECGService(ble, hrmCounter);
saleiferis 5:30495ab95b86 86
saleiferis 4:4233f5538abf 87 pc.printf("Setup primary service ...\n");
saleiferis 1:6e6f7e3cc1e1 88
saleiferis 1:6e6f7e3cc1e1 89 /* Setup advertising. */
saleiferis 1:6e6f7e3cc1e1 90 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
saleiferis 1:6e6f7e3cc1e1 91 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
saleiferis 1:6e6f7e3cc1e1 92 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
saleiferis 1:6e6f7e3cc1e1 93 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
saleiferis 10:28b8729cf5dc 94
saleiferis 1:6e6f7e3cc1e1 95 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
saleiferis 1:6e6f7e3cc1e1 96 ble.gap().setAdvertisingInterval(1000); /* 1000ms */
saleiferis 10:28b8729cf5dc 97
saleiferis 1:6e6f7e3cc1e1 98 ble.gap().startAdvertising();
saleiferis 10:28b8729cf5dc 99
saleiferis 4:4233f5538abf 100 pc.printf("Exiting bleInitComplete() ... \n");
saleiferis 4:4233f5538abf 101 return;
saleiferis 4:4233f5538abf 102 }
saleiferis 4:4233f5538abf 103
saleiferis 1:6e6f7e3cc1e1 104
saleiferis 1:6e6f7e3cc1e1 105 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
saleiferis 1:6e6f7e3cc1e1 106 BLE &ble = BLE::Instance();
saleiferis 1:6e6f7e3cc1e1 107 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
saleiferis 1:6e6f7e3cc1e1 108 }