[HAM] Added support for sleep monitor.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Tue, 1 Mar 2016 10:01:43 +0000 (11:01 +0100)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Tue, 1 Mar 2016 10:01:43 +0000 (11:01 +0100)
Change-Id: I9e75067b84503382f158257bf48979cbaa75e831
Signed-off-by: Pawel Andruszkiewicz <p.andruszkie@samsung.com>
src/humanactivitymonitor/humanactivitymonitor_api.js
src/humanactivitymonitor/humanactivitymonitor_manager.cc

index 2c4dca9..7cea56b 100755 (executable)
@@ -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();
index 0dc43c6..e2387df 100755 (executable)
@@ -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<double>(0));
-    gps_info_o["timestamp"] = picojson::value(static_cast<double>(timestamp));
+    gps_info_o[kTimestamp] = picojson::value(static_cast<double>(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<sensor_sleep_state_e>(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<double>(event->timestamp))));
+
+    return PlatformResult(ErrorCode::NO_ERROR);
+  };
+
   monitors_.insert(std::make_pair(kActivityTypePedometer, std::make_shared<Monitor>(kActivityTypePedometer)));  // not supported
   monitors_.insert(std::make_pair(kActivityTypeWristUp, std::make_shared<Monitor::GestureMonitor>(kActivityTypeWristUp)));
   monitors_.insert(std::make_pair(kActivityTypeHrm, std::make_shared<Monitor::SensorMonitor>(kActivityTypeHrm, SENSOR_HRM, convert_hrm)));
   monitors_.insert(std::make_pair(kActivityTypeGps, std::make_shared<Monitor::GpsMonitor>(kActivityTypeGps)));
+  monitors_.insert(std::make_pair(kActivityTypeSleepMonitor, std::make_shared<Monitor::SensorMonitor>(kActivityTypeSleepMonitor, SENSOR_HUMAN_SLEEP_MONITOR, convert_sleep)));
 }
 
 HumanActivityMonitorManager::~HumanActivityMonitorManager() {