Chanel's edits

Dependencies:   max32630fthr USBDevice

Committer:
saleiferis
Date:
Sun Feb 23 12:04:01 2020 +0000
Revision:
4:4233f5538abf
Parent:
2:a96a53e6c6a3
Child:
5:30495ab95b86
BT example streaming works

Who changed what in which revision?

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