From 76731ad43b9f2434d09676ccd1bc2a7a69abca3f Mon Sep 17 00:00:00 2001 From: "Piotr Kosko/Native/Web API (PLT) /SRPOL/Engineer/Samsung Electronics" Date: Wed, 27 Nov 2019 14:16:11 +0100 Subject: [PATCH] [ham] Fixed sleep recorder, returned value [Bug] there was missing conversion from numerical value from database to string value used in Web API [Verification] TCT passrate 100% on wearable TW3. Below code works when activity added manually to database. var data = []; date = new Date(), startTime = date.getTime(), endTime = date.setDate(date.getDate() + 1), query = { startTime: startTime/1000, endTime: endTime/1000, interval: 1440 }; tizen.humanactivitymonitor.readRecorderData("SLEEP_MONITOR", query, (s) => console.log(data = s), (s) => console.log(s)) returns one of values of "ASLEEP", "AWAKE", or "UNKNOWN" Change-Id: I86b6bead534638bafcb5abcb16512bb462c79374 --- .../humanactivitymonitor_manager.cc | 56 ++++++++++++++-------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/src/humanactivitymonitor/humanactivitymonitor_manager.cc b/src/humanactivitymonitor/humanactivitymonitor_manager.cc index a6a7d3a..e773809 100644 --- a/src/humanactivitymonitor/humanactivitymonitor_manager.cc +++ b/src/humanactivitymonitor/humanactivitymonitor_manager.cc @@ -1410,6 +1410,29 @@ class HumanActivityMonitorManager::ActivityRecognition { std::map> activity_data_; }; +PlatformResult SleepStateToString(int state, std::string* sleep_state) { + ScopeLogger("%d", state); + if (sleep_state) { + switch (state) { + case SENSOR_SLEEP_STATE_WAKE: + *sleep_state = kSleepStateAwake; + break; + case SENSOR_SLEEP_STATE_SLEEP: + *sleep_state = kSleepStateAsleep; + break; + case SENSOR_SLEEP_STATE_UNKNOWN: + *sleep_state = kSleepStateUnknown; + break; + default: + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unknown sleep state", + ("Unknown sleep state: %d", state)); + } + return PlatformResult(ErrorCode::NO_ERROR); + } + return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, + "Cannot return sleep state, return pointer is null"); +} + HumanActivityMonitorManager::HumanActivityMonitorManager() : activity_recognition_(std::make_shared()) { ScopeLogger(); @@ -1454,23 +1477,9 @@ HumanActivityMonitorManager::HumanActivityMonitorManager() 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; - - case SENSOR_SLEEP_STATE_UNKNOWN: - sleep_state = kSleepStateUnknown; - break; - - default: - return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Unknown sleep state", - ("Unknown sleep state: %d", state)); + PlatformResult result = SleepStateToString(state, &sleep_state); + if (!result) { + return result; } data->insert(std::make_pair(kStatus, picojson::value(sleep_state))); @@ -1498,13 +1507,22 @@ HumanActivityMonitorManager::HumanActivityMonitorManager() auto convert_recorded_sleep_monitor = [](void* data, picojson::object* obj) -> PlatformResult { ScopeLogger("Entered into asynchronous function, convert_recorded_sleep_monitor"); - SensorRecorderDataMap map_int{{SENSOR_RECORDER_DATA_SLEEP_STATE, kStatus}}; + int state = 0; + int ret = sensor_recorder_data_get_int(data, SENSOR_RECORDER_DATA_SLEEP_STATE, &state); + if (SENSOR_ERROR_NONE != ret) { + return LogAndCreateResult( + getErrorCode(ret), "Failed to get int value", + ("Failed to get int value, error: %d (%s)", ret, get_error_message(ret))); + } - auto result = ConvertRecordedInt(data, obj, map_int); + std::string sleep_state; + PlatformResult result = SleepStateToString(state, &sleep_state); if (!result) { return result; } + obj->insert(std::make_pair(kStatus, picojson::value(sleep_state))); + return ConvertRecordedTime(data, obj); }; -- 2.7.4