Dreamforce 2015 BLE-based mDS HeartRate Monitor Endpoint

Dependencies:   GroveEarbudSensor mbed mbedConnectorInterface mbedEndpointNetwork_BLE

Committer:
ansond
Date:
Mon Sep 07 04:52:10 2015 +0000
Revision:
53:d22af3b91e4c
Parent:
26:9538393569fa
updates and tweaks for static location option and android 5.x

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 18:e3a61f099c7f 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 53:d22af3b91e4c 49 static char __hrm[10];
ansond 3:b0eb973cddda 50
ansond 3:b0eb973cddda 51 // forward declaration
ansond 9:ee37ca7b09fe 52 extern void __hrm_callback(float value,void *instance);
ansond 0:6b414fe5f8db 53
ansond 0:6b414fe5f8db 54 /** HeartrateResource class
ansond 0:6b414fe5f8db 55 */
ansond 0:6b414fe5f8db 56 class HeartrateResource : public DynamicResource
ansond 0:6b414fe5f8db 57 {
ansond 0:6b414fe5f8db 58
ansond 0:6b414fe5f8db 59 public:
ansond 0:6b414fe5f8db 60 /**
ansond 0:6b414fe5f8db 61 Default constructor
ansond 0:6b414fe5f8db 62 @param logger input logger instance for this resource
ansond 0:6b414fe5f8db 63 @param name input the Light resource name
ansond 0:6b414fe5f8db 64 @param observable input the resource is Observable (default: FALSE)
ansond 0:6b414fe5f8db 65 */
ansond 0:6b414fe5f8db 66 HeartrateResource(const Logger *logger,const char *name,const bool observable = false) : DynamicResource(logger,name,"Heartrate",SN_GRS_GET_ALLOWED,observable) {
ansond 53:d22af3b91e4c 67 // init...
ansond 53:d22af3b91e4c 68 memset(__hrm,0,10);
ansond 53:d22af3b91e4c 69 sprintf(__hrm,"0.0");
ansond 53:d22af3b91e4c 70
ansond 0:6b414fe5f8db 71 // finish setup of the earbud sensor
ansond 9:ee37ca7b09fe 72 __earbud.registerCallback(&__hrm_callback,this);
ansond 26:9538393569fa 73
ansond 26:9538393569fa 74 // this resource implements its own observation handler...
ansond 26:9538393569fa 75 this->m_implements_observation = true;
ansond 0:6b414fe5f8db 76 }
ansond 0:6b414fe5f8db 77
ansond 0:6b414fe5f8db 78 /**
ansond 0:6b414fe5f8db 79 Get the value of the Heartrate sensor
ansond 0:6b414fe5f8db 80 @returns string containing the heartrate in bpm
ansond 0:6b414fe5f8db 81 */
ansond 0:6b414fe5f8db 82 virtual string get() {
ansond 26:9538393569fa 83 return string(__hrm);
ansond 0:6b414fe5f8db 84 }
ansond 0:6b414fe5f8db 85 };
ansond 0:6b414fe5f8db 86
ansond 3:b0eb973cddda 87 // Heartrate callback (Earbud)
ansond 3:b0eb973cddda 88 void __hrm_callback(float heartrate,void *data) {
ansond 26:9538393569fa 89 memset(__hrm,0,10);
ansond 26:9538393569fa 90 sprintf(__hrm,"%.1f",heartrate);
ansond 3:b0eb973cddda 91
ansond 26:9538393569fa 92 // observation handler implementation
ansond 9:ee37ca7b09fe 93 if (data != NULL) {
ansond 9:ee37ca7b09fe 94 HeartrateResource *res = (HeartrateResource *)data;
ansond 9:ee37ca7b09fe 95 if (res->isObservable()) {
ansond 26:9538393569fa 96 res->observe();
ansond 9:ee37ca7b09fe 97 }
ansond 3:b0eb973cddda 98 }
ansond 3:b0eb973cddda 99 }
ansond 3:b0eb973cddda 100
ansond 9:ee37ca7b09fe 101 #endif // __HEARTRATE_RESOURCE_H__