From 2b910de92d1c2068f67edecacac0e800a3252b17 Mon Sep 17 00:00:00 2001 From: Rafal Galka Date: Tue, 12 May 2015 10:52:23 +0200 Subject: [PATCH] [HAM] initial commit [Verification] Code compiles. tizen.humanactivitymonitor namespace should exist Change-Id: I97048c25df939e54d51350fd6231a94276eaadad --- packaging/webapi-plugins.spec | 7 +- .../humanactivitymonitor.gyp | 31 +++ .../humanactivitymonitor_api.js | 194 ++++++++++++++++++ .../humanactivitymonitor_extension.cc | 25 +++ .../humanactivitymonitor_extension.h | 19 ++ .../humanactivitymonitor_instance.cc | 78 +++++++ .../humanactivitymonitor_instance.h | 35 ++++ src/tizen-wrt.gyp | 7 + 8 files changed, 395 insertions(+), 1 deletion(-) create mode 100755 src/humanactivitymonitor/humanactivitymonitor.gyp create mode 100644 src/humanactivitymonitor/humanactivitymonitor_api.js create mode 100644 src/humanactivitymonitor/humanactivitymonitor_extension.cc create mode 100644 src/humanactivitymonitor/humanactivitymonitor_extension.h create mode 100644 src/humanactivitymonitor/humanactivitymonitor_instance.cc create mode 100644 src/humanactivitymonitor/humanactivitymonitor_instance.h diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec index 12752d8d..7104e3ee 100755 --- a/packaging/webapi-plugins.spec +++ b/packaging/webapi-plugins.spec @@ -153,7 +153,7 @@ Source0: %{name}-%{version}.tar.gz %define tizen_feature_exif_support 1 %define tizen_feature_filesystem_support 1 %define tizen_feature_fm_radio_support 0 -%define tizen_feature_ham_support 0 +%define tizen_feature_ham_support 1 %define tizen_feature_media_controller_support 1 # MediayKey API is optional in Tizen Wearable Profile. @@ -332,6 +332,11 @@ BuildRequires: pkgconfig(capi-data-control) BuildRequires: pkgconfig(capi-web-url-download) %endif +%if 0%{?tizen_feature_ham_support} +BuildRequires: pkgconfig(libcore-context-manager) +BuildRequires: pkgconfig(capi-system-sensor) +%endif + %if 0%{?tizen_feature_power_support} BuildRequires: pkgconfig(deviced) %endif diff --git a/src/humanactivitymonitor/humanactivitymonitor.gyp b/src/humanactivitymonitor/humanactivitymonitor.gyp new file mode 100755 index 00000000..c21c2ea9 --- /dev/null +++ b/src/humanactivitymonitor/humanactivitymonitor.gyp @@ -0,0 +1,31 @@ +{ + 'includes':[ + '../common/common.gypi', + ], + 'targets': [ + { + 'target_name': 'tizen_humanactivitymonitor', + 'type': 'loadable_module', + 'dependencies': [ + '../common/common.gyp:tizen_common', + ], + 'sources': [ + 'humanactivitymonitor_api.js', + 'humanactivitymonitor_extension.cc', + 'humanactivitymonitor_extension.h', + 'humanactivitymonitor_instance.cc', + 'humanactivitymonitor_instance.h', + ], + 'conditions': [ + ['tizen == 1', { + 'variables': { + 'packages': [ + 'libcore-context-manager', + 'capi-system-sensor', + ] + }, + }], + ], + }, + ], +} diff --git a/src/humanactivitymonitor/humanactivitymonitor_api.js b/src/humanactivitymonitor/humanactivitymonitor_api.js new file mode 100644 index 00000000..3416ddf1 --- /dev/null +++ b/src/humanactivitymonitor/humanactivitymonitor_api.js @@ -0,0 +1,194 @@ +/* global tizen, xwalk, extension */ + +// Copyright 2015 Samsung Electronics Co, Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + + +var utils_ = xwalk.utils; +var type_ = utils_.type; +var converter_ = utils_.converter; +var validator_ = utils_.validator; +var types_ = validator_.Types; +var native_ = new xwalk.utils.NativeManager(extension); + +var callbackId = 0; +var callbacks = {}; + +function nextCallbackId() { + return callbackId++; +} + +function SetReadOnlyProperty(obj, n, v) { + Object.defineProperty(obj, n, {value: v, writable: false}); +} + +var HumanActivityType = { + PEDOMETER: 'PEDOMETER', + WRIST_UP: 'WRIST_UP', + HRM: 'HRM', + GPS: 'GPS' +}; +var PedometerStepStatus = { + NOT_MOVING: 'NOT_MOVING', + WALKING: 'WALKING', + RUNNING: 'RUNNING' +}; + + +function HumanActivityMonitorManager() { +} + +HumanActivityMonitorManager.prototype.getHumanActivityData = function(type, successCallback, errorCallback) { + var args = validator_.validateArgs(arguments, [ + {name: 'type', type: types_.ENUM, values: ['PEDOMETER', 'WRIST_UP', 'HRM', 'GPS']}, + {name: 'successCallback', type: types_.FUNCTION}, + {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true} + ]); + + var data = { + type: args.type + }; + + var callback = function(result) { + if (native_.isFailure(result)) { + native_.callIfPossible(args.errorCallback, native_.getErrorObject(result)); + return; + } + native_.callIfPossible(args.successCallback); + }; + + native_.call('HumanActivityMonitorManager_getHumanActivityData', data, callback); +}; + +HumanActivityMonitorManager.prototype.start = function(type, changedCallback) { + var args = validator_.validateArgs(arguments, [ + {name: 'type', type: types_.ENUM, values: Object.keys(HumanActivityType)}, + {name: 'changedCallback', type: types_.FUNCTION, optional: true, nullable: true} + ]); + + var data = { + type: args.type + }; + + var callback = function(result) { + native_.callIfPossible(args.changedCallback); + }; + + native_.call('HumanActivityMonitorManager_start', data, callback); +}; + +HumanActivityMonitorManager.prototype.stop = function(type) { + var args = validator_.validateArgs(arguments, [ + {name: 'type', type: types_.ENUM, values: ['PEDOMETER', 'WRIST_UP', 'HRM', 'GPS']} + ]); + + var data = { + type: args.type + }; + + var result = native_.callSync('HumanActivityMonitorManager_stop', data); + + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } +}; + +HumanActivityMonitorManager.prototype.setAccumulativePedometerListener = function(changeCallback) { + var args = validator_.validateArgs(arguments, [ + {name: 'changeCallback', type: types_.FUNCTION} + ]); + + var data = { + }; + + var callback = function(result) { + native_.callIfPossible(args.changeCallback); + }; + + native_.call('HumanActivityMonitorManager_setAccumulativePedometerListener', data, callback); +}; + +HumanActivityMonitorManager.prototype.unsetAccumulativePedometerListener = function() { + + var data = { + }; + + var result = native_.callSync( + 'HumanActivityMonitorManager_unsetAccumulativePedometerListener', data); + + if (native_.isFailure(result)) { + throw native_.getErrorObject(result); + } +}; + +function StepDifference() { + SetReadOnlyProperty(this, 'stepCountDifference', null); + SetReadOnlyProperty(this, 'timestamp', null); +} + + +function HumanActivityData() { +} + + +function HumanActivityPedometerData() { + SetReadOnlyProperty(this, 'stepStatus', null); + SetReadOnlyProperty(this, 'speed', null); + SetReadOnlyProperty(this, 'walkingFrequency', null); + SetReadOnlyProperty(this, 'cumulativeDistance', null); + SetReadOnlyProperty(this, 'cumulativeCalorie', null); + SetReadOnlyProperty(this, 'cumulativeTotalStepCount', null); + SetReadOnlyProperty(this, 'cumulativeWalkStepCount', null); + SetReadOnlyProperty(this, 'cumulativeRunStepCount', null); + SetReadOnlyProperty(this, 'stepCountDifferences', null); +} + +HumanActivityPedometerData.prototype = new HumanActivityData(); +HumanActivityPedometerData.prototype.constructor = HumanActivityPedometerData; + + +function HumanActivityAccumulativePedometerData() { + SetReadOnlyProperty(this, 'stepStatus', null); + SetReadOnlyProperty(this, 'speed', null); + SetReadOnlyProperty(this, 'walkingFrequency', null); + SetReadOnlyProperty(this, 'accumulativeDistance', null); + SetReadOnlyProperty(this, 'accumulativeCalorie', null); + SetReadOnlyProperty(this, 'accumulativeTotalStepCount', null); + SetReadOnlyProperty(this, 'accumulativeWalkStepCount', null); + SetReadOnlyProperty(this, 'accumulativeRunStepCount', null); + SetReadOnlyProperty(this, 'stepCountDifferences', null); +} + +HumanActivityAccumulativePedometerData.prototype = new HumanActivityData(); +HumanActivityAccumulativePedometerData.prototype.constructor = HumanActivityAccumulativePedometerData; + + +function HumanActivityHRMData() { + SetReadOnlyProperty(this, 'heartRate', null); + SetReadOnlyProperty(this, 'rRInterval', null); +} + +HumanActivityHRMData.prototype = new HumanActivityData(); +HumanActivityHRMData.prototype.constructor = HumanActivityHRMData; + + +function HumanActivityGPSInfo() { + SetReadOnlyProperty(this, 'latitude', null); + SetReadOnlyProperty(this, 'longitude', null); + SetReadOnlyProperty(this, 'altitude', null); + SetReadOnlyProperty(this, 'speed', null); + SetReadOnlyProperty(this, 'errorRange', null); + SetReadOnlyProperty(this, 'timestamp', null); +} + + +function HumanActivityGPSInfoArray() { + SetReadOnlyProperty(this, 'gpsInfo', null); +} + +HumanActivityGPSInfoArray.prototype = new HumanActivityData(); +HumanActivityGPSInfoArray.prototype.constructor = HumanActivityGPSInfoArray; + + +exports = new HumanActivityMonitorManager(); diff --git a/src/humanactivitymonitor/humanactivitymonitor_extension.cc b/src/humanactivitymonitor/humanactivitymonitor_extension.cc new file mode 100644 index 00000000..ed29399c --- /dev/null +++ b/src/humanactivitymonitor/humanactivitymonitor_extension.cc @@ -0,0 +1,25 @@ +// Copyright 2015 Samsung Electronics Co, Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "humanactivitymonitor/humanactivitymonitor_extension.h" + +#include "humanactivitymonitor/humanactivitymonitor_instance.h" + +// This will be generated from humanactivitymonitor_api.js +extern const char kSource_humanactivitymonitor_api[]; + +common::Extension* CreateExtension() { + return new HumanActivityMonitorExtension; +} + +HumanActivityMonitorExtension::HumanActivityMonitorExtension() { + SetExtensionName("tizen.humanactivitymonitor"); + SetJavaScriptAPI(kSource_humanactivitymonitor_api); +} + +HumanActivityMonitorExtension::~HumanActivityMonitorExtension() {} + +common::Instance* HumanActivityMonitorExtension::CreateInstance() { + return new extension::humanactivitymonitor::HumanActivityMonitorInstance; +} diff --git a/src/humanactivitymonitor/humanactivitymonitor_extension.h b/src/humanactivitymonitor/humanactivitymonitor_extension.h new file mode 100644 index 00000000..c735fc62 --- /dev/null +++ b/src/humanactivitymonitor/humanactivitymonitor_extension.h @@ -0,0 +1,19 @@ +// Copyright 2015 Samsung Electronics Co, Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef HUMANACTIVITYMONITOR_HUMANACTIVITYMONITOR_EXTENSION_H_ +#define HUMANACTIVITYMONITOR_HUMANACTIVITYMONITOR_EXTENSION_H_ + +#include "common/extension.h" + +class HumanActivityMonitorExtension : public common::Extension { + public: + HumanActivityMonitorExtension(); + virtual ~HumanActivityMonitorExtension(); + + private: + virtual common::Instance* CreateInstance(); +}; + +#endif // HUMANACTIVITYMONITOR_HUMANACTIVITYMONITOR_EXTENSION_H_ diff --git a/src/humanactivitymonitor/humanactivitymonitor_instance.cc b/src/humanactivitymonitor/humanactivitymonitor_instance.cc new file mode 100644 index 00000000..b0489b67 --- /dev/null +++ b/src/humanactivitymonitor/humanactivitymonitor_instance.cc @@ -0,0 +1,78 @@ +// Copyright 2015 Samsung Electronics Co, Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "humanactivitymonitor/humanactivitymonitor_instance.h" + +#include +#include + +#include "common/picojson.h" +#include "common/logger.h" +#include "common/platform_result.h" + +namespace extension { +namespace humanactivitymonitor { + +using common::PlatformResult; +using common::ErrorCode; + +HumanActivityMonitorInstance::HumanActivityMonitorInstance() { + using std::placeholders::_1; + using std::placeholders::_2; + +#define REGISTER_SYNC(c, x) \ + RegisterSyncHandler(c, std::bind(&HumanActivityMonitorInstance::x, this, _1, _2)); + REGISTER_SYNC("HumanActivityMonitorManager_getHumanActivityData", + HumanActivityMonitorManagerGetHumanActivityData); + REGISTER_SYNC("HumanActivityMonitorManager_start", + HumanActivityMonitorManagerStart); + REGISTER_SYNC("HumanActivityMonitorManager_stop", + HumanActivityMonitorManagerStop); + REGISTER_SYNC("HumanActivityMonitorManager_setAccumulativePedometerListener", + HumanActivityMonitorManagerSetAccumulativePedometerListener); + REGISTER_SYNC("HumanActivityMonitorManager_unsetAccumulativePedometerListener", + HumanActivityMonitorManagerUnsetAccumulativePedometerListener); +#undef REGISTER_SYNC +} + +HumanActivityMonitorInstance::~HumanActivityMonitorInstance() { +} + +#define CHECK_EXIST(args, name, out) \ + if (!args.contains(name)) { \ + ReportError(PlatformResult(ErrorCode::TYPE_MISMATCH_ERR, \ + name" is required argument"), &out); \ + return; \ + } + + +void HumanActivityMonitorInstance::HumanActivityMonitorManagerGetHumanActivityData( + const picojson::value& args, picojson::object& out) { + // TODO(r.galka) implement +} + +void HumanActivityMonitorInstance::HumanActivityMonitorManagerStart( + const picojson::value& args, picojson::object& out) { + // TODO(r.galka) implement +} + +void HumanActivityMonitorInstance::HumanActivityMonitorManagerStop( + const picojson::value& args, picojson::object& out) { + // TODO(r.galka) implement +} + +void HumanActivityMonitorInstance::HumanActivityMonitorManagerSetAccumulativePedometerListener( + const picojson::value& args, picojson::object& out) { + // TODO(r.galka) implement +} + +void HumanActivityMonitorInstance::HumanActivityMonitorManagerUnsetAccumulativePedometerListener( + const picojson::value& args, picojson::object& out) { + // TODO(r.galka) implement +} + +#undef CHECK_EXIST + +} // namespace humanactivitymonitor +} // namespace extension diff --git a/src/humanactivitymonitor/humanactivitymonitor_instance.h b/src/humanactivitymonitor/humanactivitymonitor_instance.h new file mode 100644 index 00000000..3cf9684c --- /dev/null +++ b/src/humanactivitymonitor/humanactivitymonitor_instance.h @@ -0,0 +1,35 @@ +// Copyright 2015 Samsung Electronics Co, Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef HUMANACTIVITYMONITOR_HUMANACTIVITYMONITOR_INSTANCE_H_ +#define HUMANACTIVITYMONITOR_HUMANACTIVITYMONITOR_INSTANCE_H_ + +#include "common/extension.h" +#include "common/platform_result.h" + +namespace extension { +namespace humanactivitymonitor { + +class HumanActivityMonitorInstance : public common::ParsedInstance { + public: + HumanActivityMonitorInstance(); + virtual ~HumanActivityMonitorInstance(); + + private: + void HumanActivityMonitorManagerStop( + const picojson::value& args, picojson::object& out); + void HumanActivityMonitorManagerUnsetAccumulativePedometerListener( + const picojson::value& args, picojson::object& out); + void HumanActivityMonitorManagerGetHumanActivityData( + const picojson::value& args, picojson::object& out); + void HumanActivityMonitorManagerStart( + const picojson::value& args, picojson::object& out); + void HumanActivityMonitorManagerSetAccumulativePedometerListener( + const picojson::value& args, picojson::object& out); +}; + +} // namespace humanactivitymonitor +} // namespace extension + +#endif // HUMANACTIVITYMONITOR_HUMANACTIVITYMONITOR_INSTANCE_H_ diff --git a/src/tizen-wrt.gyp b/src/tizen-wrt.gyp index 2c434dd0..7e2d64f3 100755 --- a/src/tizen-wrt.gyp +++ b/src/tizen-wrt.gyp @@ -139,6 +139,13 @@ ], }, ], + [ + 'tizen_feature_ham_support==1', { + 'dependencies': [ + 'humanactivitymonitor/humanactivitymonitor.gyp:*', + ], + }, + ], [ 'tizen_feature_media_controller_support==1', { 'dependencies': [ -- 2.34.1