4 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <sf_common.h>
23 #include <gyro_sensor.h>
24 #include <sensor_plugin_loader.h>
27 #define DPS_TO_MDPS 1000
28 #define RAW_DATA_TO_DPS_UNIT(X) ((float)(X)/((float)DPS_TO_MDPS))
30 #define SENSOR_NAME "GYROSCOPE_SENSOR"
32 gyro_sensor::gyro_sensor()
36 m_name = string(SENSOR_NAME);
38 register_supported_event(GYROSCOPE_EVENT_RAW_DATA_REPORT_ON_TIME);
40 physical_sensor::set_poller(gyro_sensor::working, this);
43 gyro_sensor::~gyro_sensor()
45 INFO("gyro_sensor is destroyed!\n");
48 bool gyro_sensor::init()
50 m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(GYROSCOPE_SENSOR);
53 ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
57 sensor_properties_s properties;
59 if (m_sensor_hal->get_properties(properties) == false) {
60 ERR("sensor->get_properties() is failed!\n");
64 m_resolution = properties.resolution;
66 INFO("%s is created!\n", sensor_base::get_name());
71 sensor_type_t gyro_sensor::get_type(void)
73 return GYROSCOPE_SENSOR;
76 bool gyro_sensor::working(void *inst)
78 gyro_sensor *sensor = (gyro_sensor*)inst;
79 return sensor->process_event();;
82 bool gyro_sensor::process_event(void)
86 if (m_sensor_hal->is_data_ready(true) == false)
89 m_sensor_hal->get_sensor_data(event.data);
91 AUTOLOCK(m_client_info_mutex);
93 if (get_client_cnt(GYROSCOPE_EVENT_RAW_DATA_REPORT_ON_TIME)) {
94 event.sensor_id = get_id();
95 event.event_type = GYROSCOPE_EVENT_RAW_DATA_REPORT_ON_TIME;
96 raw_to_base(event.data);
103 bool gyro_sensor::on_start(void)
105 if (!m_sensor_hal->enable()) {
106 ERR("m_sensor_hal start fail\n");
113 bool gyro_sensor::on_stop(void)
115 if (!m_sensor_hal->disable()) {
116 ERR("m_sensor_hal stop fail\n");
123 bool gyro_sensor::get_properties(sensor_properties_s &properties)
125 return m_sensor_hal->get_properties(properties);
128 int gyro_sensor::get_sensor_data(unsigned int type, sensor_data_t &data)
132 if (type != GYRO_BASE_DATA_SET)
135 state = m_sensor_hal->get_sensor_data(data);
138 ERR("m_sensor_hal get struct_data fail\n");
147 bool gyro_sensor::set_interval(unsigned long interval)
151 INFO("Polling interval is set to %dms", interval);
153 return m_sensor_hal->set_interval(interval);
156 void gyro_sensor::raw_to_base(sensor_data_t &data)
158 data.value_count = 3;
159 data.values[0] = data.values[0] * m_resolution;
160 data.values[1] = data.values[1] * m_resolution;
161 data.values[2] = data.values[2] * m_resolution;
164 extern "C" void *create(void)
169 inst = new gyro_sensor();
171 ERR("gyro_sensor class create fail , errno : %d , errstr : %s\n", err, strerror(err));
178 extern "C" void destroy(void *inst)
180 delete (gyro_sensor*)inst;;