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