From 7e01dd0f026c6d03e96d6eeee2a6625a333d4960 Mon Sep 17 00:00:00 2001 From: Pawel Andruszkiewicz Date: Tue, 1 Mar 2016 11:01:43 +0100 Subject: [PATCH] [HAM] Added support for sleep monitor. Change-Id: I9e75067b84503382f158257bf48979cbaa75e831 Signed-off-by: Pawel Andruszkiewicz --- .../humanactivitymonitor_api.js | 19 +++++++++- .../humanactivitymonitor_manager.cc | 43 +++++++++++++++++++++- 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/humanactivitymonitor/humanactivitymonitor_api.js b/src/humanactivitymonitor/humanactivitymonitor_api.js index 2c4dca9..7cea56b 100755 --- a/src/humanactivitymonitor/humanactivitymonitor_api.js +++ b/src/humanactivitymonitor/humanactivitymonitor_api.js @@ -36,7 +36,8 @@ var HumanActivityType = { PEDOMETER: 'PEDOMETER', WRIST_UP: 'WRIST_UP', HRM: 'HRM', - GPS: 'GPS' + GPS: 'GPS', + SLEEP_MONITOR: 'SLEEP_MONITOR' }; var PedometerStepStatus = { @@ -58,6 +59,11 @@ var ActivityAccuracy = { HIGH: 'HIGH' }; +var SleepStatus = { + ASLEEP: 'ASLEEP', + AWAKE: 'AWAKE' +}; + function convertActivityData(type, data) { switch (type) { case HumanActivityType.PEDOMETER: @@ -73,6 +79,10 @@ function convertActivityData(type, data) { gpsInfo.push(new HumanActivityGPSInfo(data[i])); } return new HumanActivityGPSInfoArray(gpsInfo); + case HumanActivityType.SLEEP_MONITOR: + return new HumanActivitySleepMonitorData(data); + default: + console.error('Uknown human activity type: ' + type); } } @@ -397,5 +407,12 @@ function HumanActivityGPSInfoArray(data) { HumanActivityGPSInfoArray.prototype = new HumanActivityData(); HumanActivityGPSInfoArray.prototype.constructor = HumanActivityGPSInfoArray; +function HumanActivitySleepMonitorData(data) { + SetReadOnlyProperty(this, 'status', data.status); + SetReadOnlyProperty(this, 'timestamp', data.timestamp); +} + +HumanActivitySleepMonitorData.prototype = new HumanActivityData(); +HumanActivitySleepMonitorData.prototype.constructor = HumanActivitySleepMonitorData; exports = new HumanActivityMonitorManager(); diff --git a/src/humanactivitymonitor/humanactivitymonitor_manager.cc b/src/humanactivitymonitor/humanactivitymonitor_manager.cc index 0dc43c6..e2387df 100755 --- a/src/humanactivitymonitor/humanactivitymonitor_manager.cc +++ b/src/humanactivitymonitor/humanactivitymonitor_manager.cc @@ -39,10 +39,17 @@ namespace { const std::string kActivityTypePedometer = "PEDOMETER"; const std::string kActivityTypeWristUp = "WRIST_UP"; const std::string kActivityTypeHrm = "HRM"; +const std::string kActivityTypeSleepMonitor = "SLEEP_MONITOR"; + +const std::string kSleepStateAwake = "AWAKE"; +const std::string kSleepStateAsleep = "ASLEEP"; const std::string kCallbackInterval = "callbackInterval"; const std::string kSampleInterval = "sampleInterval"; +const std::string kStatus = "status"; +const std::string kTimestamp = "timestamp"; + } // namespace const std::string kActivityTypeGps = "GPS"; @@ -588,7 +595,7 @@ class HumanActivityMonitorManager::Monitor::GpsMonitor : public HumanActivityMon gps_info_o["speed"] = picojson::value(speed); // TODO(r.galka): errorRange not available in CAPI gps_info_o["errorRange"] = picojson::value(static_cast(0)); - gps_info_o["timestamp"] = picojson::value(static_cast(timestamp)); + gps_info_o[kTimestamp] = picojson::value(static_cast(timestamp)); gps_info_array->push_back(gps_info); @@ -717,7 +724,7 @@ class HumanActivityMonitorManager::ActivityRecognition { result_obj.insert(std::make_pair("type", picojson::value(FromActivityType(type)))); result_obj.insert(std::make_pair("accuracy", picojson::value(FromActivityAccuracy(accuracy)))); - result_obj.insert(std::make_pair("timestamp", picojson::value(timestamp))); + result_obj.insert(std::make_pair(kTimestamp, picojson::value(timestamp))); ReportSuccess(result, obj); callback(&val); @@ -833,10 +840,42 @@ HumanActivityMonitorManager::HumanActivityMonitorManager() return PlatformResult(ErrorCode::NO_ERROR); }; + auto convert_sleep = [](sensor_event_s* event, picojson::object* data) -> PlatformResult { + ScopeLogger("convert_sleep"); + + if (event->value_count < 1) { + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "To few values of SLEEP event"); + } + + sensor_sleep_state_e state = static_cast(event->values[0]); + std::string sleep_state; + + switch (state) { + case SENSOR_SLEEP_STATE_WAKE: + sleep_state = kSleepStateAwake; + break; + + case SENSOR_SLEEP_STATE_SLEEP: + sleep_state = kSleepStateAsleep; + break; + + default: + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, + "Unknown sleep state", + ("Unknown sleep state: %d", state)); + } + + data->insert(std::make_pair(kStatus, picojson::value(sleep_state))); + data->insert(std::make_pair(kTimestamp, picojson::value(static_cast(event->timestamp)))); + + return PlatformResult(ErrorCode::NO_ERROR); + }; + monitors_.insert(std::make_pair(kActivityTypePedometer, std::make_shared(kActivityTypePedometer))); // not supported monitors_.insert(std::make_pair(kActivityTypeWristUp, std::make_shared(kActivityTypeWristUp))); monitors_.insert(std::make_pair(kActivityTypeHrm, std::make_shared(kActivityTypeHrm, SENSOR_HRM, convert_hrm))); monitors_.insert(std::make_pair(kActivityTypeGps, std::make_shared(kActivityTypeGps))); + monitors_.insert(std::make_pair(kActivityTypeSleepMonitor, std::make_shared(kActivityTypeSleepMonitor, SENSOR_HUMAN_SLEEP_MONITOR, convert_sleep))); } HumanActivityMonitorManager::~HumanActivityMonitorManager() { -- 2.7.4