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.
20 #include <physical_sensor.h>
21 #include <sensor_event_queue.h>
23 #define UNKNOWN_NAME "UNKNOWN_SENSOR"
25 cmutex physical_sensor::m_mutex;
27 physical_sensor::physical_sensor()
28 : m_sensor_device(NULL)
32 physical_sensor::~physical_sensor()
36 void physical_sensor::set_sensor_handle(const sensor_handle_t *handle)
41 void physical_sensor::set_sensor_device(sensor_device *device)
43 m_sensor_device = device;
46 sensor_type_t physical_sensor::get_type(void)
48 return static_cast<sensor_type_t>(m_handle->type);
51 unsigned int physical_sensor::get_event_type(void)
53 return m_handle->event_type;
56 const char* physical_sensor::get_name(void)
61 return m_handle->name;
64 uint32_t physical_sensor::get_hal_id(void)
69 int physical_sensor::get_poll_fd()
76 return m_sensor_device->get_poll_fd();
79 bool physical_sensor::read_fd(std::vector<uint32_t> &ids)
88 size = m_sensor_device->read_fd(&_ids);
90 for (int i = 0; i < size; ++i)
91 ids.push_back(_ids[i]);
96 int physical_sensor::get_data(sensor_data_t **data, int *length)
100 if (!m_sensor_device)
104 remains = m_sensor_device->get_data(m_handle->id, data, length);
107 _E("Failed to get sensor event");
114 bool physical_sensor::flush(void)
118 if (!m_sensor_device)
121 return m_sensor_device->flush(m_handle->id);
124 bool physical_sensor::set_interval(unsigned long interval)
128 if (!m_sensor_device)
131 _I("Polling interval is set to %dms", interval);
133 return m_sensor_device->set_interval(m_handle->id, interval);
136 bool physical_sensor::set_batch_latency(unsigned long latency)
140 if (!m_sensor_device)
143 _I("Polling interval is set to %dms", latency);
145 return m_sensor_device->set_batch_latency(m_handle->id, latency);
148 int physical_sensor::set_attribute(int32_t attribute, int32_t value)
152 if (!m_sensor_device)
155 return m_sensor_device->set_attribute_int(m_handle->id, attribute, value);
158 int physical_sensor::set_attribute(int32_t attribute, char *value, int value_len)
162 if (!m_sensor_device)
165 return m_sensor_device->set_attribute_str(m_handle->id, attribute, value, value_len);
168 bool physical_sensor::set_wakeup(int wakeup)
173 bool physical_sensor::on_start()
177 if (!m_sensor_device)
180 return m_sensor_device->enable(m_handle->id);
183 bool physical_sensor::on_stop()
187 if (!m_sensor_device)
190 return m_sensor_device->disable(m_handle->id);
193 bool physical_sensor::get_sensor_info(sensor_info &info)
195 info.set_type(get_type());
196 info.set_id(get_id());
197 info.set_privilege(SENSOR_PRIVILEGE_PUBLIC); // FIXME
198 info.set_name(m_handle->model_name);
199 info.set_vendor(m_handle->vendor);
200 info.set_min_range(m_handle->min_range);
201 info.set_max_range(m_handle->max_range);
202 info.set_resolution(m_handle->resolution);
203 info.set_min_interval(m_handle->min_interval);
204 info.set_fifo_count(0); // FIXME
205 info.set_max_batch_count(m_handle->max_batch_count);
206 info.set_supported_event(get_event_type());
207 info.set_wakeup_supported(m_handle->wakeup_supported);