sensord: accumulate pedometer data
[platform/core/system/sensord.git] / src / sensor / sensorhub / pedometer_sensor.cpp
1 /*
2  * sensord
3  *
4  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 #include <sensor_common.h>
21 #include <sensor_log.h>
22 #include "pedometer_sensor.h"
23
24 enum value_index {
25         IDX_STEPS = 0,
26         IDX_WALK_STEPS,
27         IDX_RUN_STEPS,
28         IDX_DISTANCE,
29         IDX_CALORIES,
30         IDX_SPEED,
31         IDX_FREQUENCY,
32         IDX_STATE,
33         IDX_WALK_UP,
34         IDX_WALK_DOWN,
35         IDX_RUN_UP,
36         IDX_RUN_DOWN,
37         IDX_STATE_EX,
38 };
39
40 pedometer_sensor::pedometer_sensor()
41 : m_steps(0)
42 , m_walk_steps(0)
43 , m_run_steps(0)
44 , m_walk_up_steps(0)
45 , m_walk_down_steps(0)
46 , m_run_up_steps(0)
47 , m_run_down_steps(0)
48 , m_distance(0)
49 , m_calories(0)
50 {
51         set_permission(SENSOR_PERMISSION_BIO);
52
53         _I("pedometer_sensor is created : %#x", this);
54 }
55
56 pedometer_sensor::~pedometer_sensor()
57 {
58 }
59
60 bool pedometer_sensor::on_event(const sensor_data_t *data, int data_len, int remains)
61 {
62         if (data_len == sizeof(sensorhub_data_t))
63                 return false;
64
65         accumulate((sensor_pedometer_data_t*)data);
66         return true;
67 }
68
69 void pedometer_sensor::accumulate(sensor_pedometer_data_t *data)
70 {
71         m_steps += data->values[IDX_STEPS];
72         m_walk_steps += data->values[IDX_WALK_STEPS];
73         m_run_steps += data->values[IDX_RUN_STEPS];
74         m_distance += data->values[IDX_DISTANCE];
75         m_calories += data->values[IDX_CALORIES];
76
77         m_walk_up_steps += data->values[IDX_WALK_UP];
78         m_walk_down_steps += data->values[IDX_WALK_DOWN];
79         m_run_up_steps += data->values[IDX_RUN_UP];
80         m_run_down_steps += data->values[IDX_RUN_DOWN];
81
82         data->values[IDX_STEPS] = m_steps;
83         data->values[IDX_WALK_STEPS] = m_walk_steps;
84         data->values[IDX_RUN_STEPS] = m_run_steps;
85         data->values[IDX_DISTANCE] = m_distance;
86         data->values[IDX_CALORIES] = m_calories;
87
88         data->values[IDX_WALK_UP] = m_walk_up_steps;
89         data->values[IDX_WALK_DOWN] = m_walk_down_steps;
90         data->values[IDX_RUN_UP] = m_run_up_steps;
91         data->values[IDX_RUN_DOWN] = m_run_down_steps;
92 }