Dreamforce 2015 BLE-based mDS HeartRate Monitor Endpoint

Dependencies:   GroveEarbudSensor mbed mbedConnectorInterface mbedEndpointNetwork_BLE

Committer:
ansond
Date:
Thu Mar 19 04:44:56 2015 +0000
Revision:
9:ee37ca7b09fe
Parent:
7:d807552f2c0b
Child:
18:e3a61f099c7f
updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ansond 0:6b414fe5f8db 1 /**
ansond 0:6b414fe5f8db 2 * @file HeartrateResource.h
ansond 0:6b414fe5f8db 3 * @brief mbed CoAP Endpoint Heartrate resource (Grove Earbud) supporting CoAP GET and PUT
ansond 0:6b414fe5f8db 4 * @author Doug Anson
ansond 0:6b414fe5f8db 5 * @version 1.0
ansond 0:6b414fe5f8db 6 * @see
ansond 0:6b414fe5f8db 7 *
ansond 0:6b414fe5f8db 8 * Copyright (c) 2014
ansond 0:6b414fe5f8db 9 *
ansond 0:6b414fe5f8db 10 * Licensed under the Apache License, Version 2.0 (the "License");
ansond 0:6b414fe5f8db 11 * you may not use this file except in compliance with the License.
ansond 0:6b414fe5f8db 12 * You may obtain a copy of the License at
ansond 0:6b414fe5f8db 13 *
ansond 0:6b414fe5f8db 14 * http://www.apache.org/licenses/LICENSE-2.0
ansond 0:6b414fe5f8db 15 *
ansond 0:6b414fe5f8db 16 * Unless required by applicable law or agreed to in writing, software
ansond 0:6b414fe5f8db 17 * distributed under the License is distributed on an "AS IS" BASIS,
ansond 0:6b414fe5f8db 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ansond 0:6b414fe5f8db 19 * See the License for the specific language governing permissions and
ansond 0:6b414fe5f8db 20 * limitations under the License.
ansond 0:6b414fe5f8db 21 */
ansond 0:6b414fe5f8db 22
ansond 0:6b414fe5f8db 23 #ifndef __HEARTRATE_RESOURCE_H__
ansond 0:6b414fe5f8db 24 #define __HEARTRATE_RESOURCE_H__
ansond 0:6b414fe5f8db 25
ansond 0:6b414fe5f8db 26 // Base class
ansond 0:6b414fe5f8db 27 #include "DynamicResource.h"
ansond 0:6b414fe5f8db 28
ansond 5:4609a86755be 29 // which Nordic board?
ansond 5:4609a86755be 30 #ifdef TARGET_NRF51_DK
ansond 9:ee37ca7b09fe 31 #define ENDPOINT_INTERRUPT_PIN P0_14
ansond 2:9d7c4bad311e 32 #endif
ansond 5:4609a86755be 33 #ifdef TARGET_NRF51_DONGLE
ansond 9:ee37ca7b09fe 34 #define ENDPOINT_INTERRUPT_PIN P0_15
ansond 2:9d7c4bad311e 35 #endif
ansond 5:4609a86755be 36 #ifdef TARGET_NRF51_MKIT
ansond 9:ee37ca7b09fe 37 #define ENDPOINT_INTERRUPT_PIN P0
ansond 9:ee37ca7b09fe 38 #endif
ansond 9:ee37ca7b09fe 39 #ifdef TARGET_K64F
ansond 9:ee37ca7b09fe 40 #define ENDPOINT_INTERRUPT_PIN D2
ansond 2:9d7c4bad311e 41 #endif
ansond 2:9d7c4bad311e 42
ansond 0:6b414fe5f8db 43 // Grove Earbud Sensor
ansond 0:6b414fe5f8db 44 #include "GroveEarbudSensor.h"
ansond 2:9d7c4bad311e 45 extern RawSerial pc; // declared in main.cpp for logger... just reference here...
ansond 9:ee37ca7b09fe 46 GroveEarbudSensor __earbud(ENDPOINT_INTERRUPT_PIN,&pc);
ansond 0:6b414fe5f8db 47
ansond 0:6b414fe5f8db 48 // HRM sensor value
ansond 9:ee37ca7b09fe 49 static char __hrm_buf[10] = {0};
ansond 9:ee37ca7b09fe 50 static string __hrm = "<off>";
ansond 3:b0eb973cddda 51
ansond 3:b0eb973cddda 52 // forward declaration
ansond 9:ee37ca7b09fe 53 extern void __hrm_callback(float value,void *instance);
ansond 0:6b414fe5f8db 54
ansond 0:6b414fe5f8db 55 /** HeartrateResource class
ansond 0:6b414fe5f8db 56 */
ansond 0:6b414fe5f8db 57 class HeartrateResource : public DynamicResource
ansond 0:6b414fe5f8db 58 {
ansond 0:6b414fe5f8db 59
ansond 0:6b414fe5f8db 60 public:
ansond 0:6b414fe5f8db 61 /**
ansond 0:6b414fe5f8db 62 Default constructor
ansond 0:6b414fe5f8db 63 @param logger input logger instance for this resource
ansond 0:6b414fe5f8db 64 @param name input the Light resource name
ansond 0:6b414fe5f8db 65 @param observable input the resource is Observable (default: FALSE)
ansond 0:6b414fe5f8db 66 */
ansond 0:6b414fe5f8db 67 HeartrateResource(const Logger *logger,const char *name,const bool observable = false) : DynamicResource(logger,name,"Heartrate",SN_GRS_GET_ALLOWED,observable) {
ansond 0:6b414fe5f8db 68 // finish setup of the earbud sensor
ansond 9:ee37ca7b09fe 69 __earbud.registerCallback(&__hrm_callback,this);
ansond 0:6b414fe5f8db 70 }
ansond 0:6b414fe5f8db 71
ansond 0:6b414fe5f8db 72 /**
ansond 0:6b414fe5f8db 73 Get the value of the Heartrate sensor
ansond 0:6b414fe5f8db 74 @returns string containing the heartrate in bpm
ansond 0:6b414fe5f8db 75 */
ansond 0:6b414fe5f8db 76 virtual string get() {
ansond 0:6b414fe5f8db 77 return __hrm;
ansond 0:6b414fe5f8db 78 }
ansond 0:6b414fe5f8db 79 };
ansond 0:6b414fe5f8db 80
ansond 3:b0eb973cddda 81 // Heartrate callback (Earbud)
ansond 3:b0eb973cddda 82 void __hrm_callback(float heartrate,void *data) {
ansond 9:ee37ca7b09fe 83 memset(__hrm_buf,0,10);
ansond 9:ee37ca7b09fe 84 sprintf(__hrm_buf,"%.1f",heartrate);
ansond 9:ee37ca7b09fe 85 __hrm = __hrm_buf;
ansond 3:b0eb973cddda 86
ansond 9:ee37ca7b09fe 87 if (data != NULL) {
ansond 9:ee37ca7b09fe 88 HeartrateResource *res = (HeartrateResource *)data;
ansond 9:ee37ca7b09fe 89 if (res->isObservable()) {
ansond 9:ee37ca7b09fe 90 res->notify(__hrm);
ansond 9:ee37ca7b09fe 91 pc.printf("HRM (notify): %s\r\n",__hrm.c_str());
ansond 9:ee37ca7b09fe 92 }
ansond 9:ee37ca7b09fe 93 else {
ansond 9:ee37ca7b09fe 94 pc.printf("HRM: %s\r\n",__hrm.c_str());
ansond 9:ee37ca7b09fe 95 }
ansond 3:b0eb973cddda 96 }
ansond 3:b0eb973cddda 97 else {
ansond 3:b0eb973cddda 98 pc.printf("HRM: %s\r\n",__hrm.c_str());
ansond 3:b0eb973cddda 99 }
ansond 3:b0eb973cddda 100 }
ansond 3:b0eb973cddda 101
ansond 9:ee37ca7b09fe 102 #endif // __HEARTRATE_RESOURCE_H__