2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "pedometer_sensor.h"
20 #include <sensor_log.h>
21 #include <sensor_types.h>
22 #include <fusion_util.h>
25 #define NAME_SENSOR "http://samsung.com/sensor/healthinfo/pedometer/samsung_pedometer"
26 #define NAME_VENDOR "samsung.com"
28 #define SRC_ID_ACC 0x1
29 #define SRC_STR_ACC "http://tizen.org/sensor/general/accelerometer"
31 #define US_TO_NS(x) (x * 1000)
33 /* Sensor information */
34 static sensor_info2_t sensor_info = {
36 type: HUMAN_PEDOMETER_SENSOR,
44 wakeup_supported: false,
45 privilege: "http://tizen.org/privilege/healthinfo",
48 /* Required sensor list */
49 static required_sensor_s required_sensors[] = {
50 {SRC_ID_ACC, SRC_STR_ACC}
53 pedometer_sensor::pedometer_sensor()
56 , m_step_total_length(-1)
62 pedometer_sensor::~pedometer_sensor()
66 int pedometer_sensor::get_sensor_info(const sensor_info2_t **info)
72 int pedometer_sensor::get_required_sensors(const required_sensor_s **sensors)
74 *sensors = required_sensors;
76 /* You should return the number of required sensor */
80 int pedometer_sensor::update(uint32_t id, sensor_data_t *data, int len)
83 double acc[] = {data->values[0], data->values[1], data->values[2]};
85 if (!m_pedometer.new_acceleration(&info, US_TO_NS(data->timestamp), acc))
88 m_step_count = info.step_count;
89 m_step_length = info.step_length;
90 m_step_total_length = info.total_step_length;
91 m_step_speed = info.step_speed;
92 m_time = data->timestamp;
94 _D("[%lld] %lld %f %f %f", data->timestamp,
95 info.step_count, info.step_length, info.total_step_length, info.step_speed);
100 int pedometer_sensor::get_data(sensor_data_t **data, int *len)
102 sensor_data_t *sensor_data;
103 sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t));
104 retvm_if(!sensor_data, -ENOMEM, "Failed to allocate memory");
106 sensor_data->accuracy = SENSOR_ACCURACY_GOOD;
107 sensor_data->timestamp = m_time;
108 sensor_data->value_count = 8;
109 sensor_data->values[0] = (float)m_step_count;
110 sensor_data->values[1] = (float)m_step_count;
111 sensor_data->values[2] = 0;
112 sensor_data->values[3] = m_step_total_length;
113 sensor_data->values[4] = 0;
114 sensor_data->values[5] = m_step_speed;
115 sensor_data->values[6] = 0;
116 sensor_data->values[7] = 0;
119 *len = sizeof(sensor_data_t);
124 int pedometer_sensor::start(observer_h ob)
130 int pedometer_sensor::stop(observer_h ob)