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(sensor_handle_t handle)
38 m_handle.id = handle.id;
39 m_handle.name = handle.name;
40 m_handle.type = handle.type;
41 m_handle.event_type = handle.event_type;
42 m_handle.model_name = handle.model_name;
43 m_handle.vendor = handle.vendor;
44 m_handle.min_range = handle.min_range;
45 m_handle.max_range = handle.max_range;
46 m_handle.resolution = handle.resolution;
47 m_handle.min_interval = handle.min_interval;
48 m_handle.max_batch_count = handle.max_batch_count;
49 m_handle.wakeup_supported = handle.wakeup_supported;
52 void physical_sensor::set_sensor_device(sensor_device *device)
54 m_sensor_device = device;
57 sensor_type_t physical_sensor::get_type(void)
59 return static_cast<sensor_type_t>(m_handle.type);
62 unsigned int physical_sensor::get_event_type(void)
64 return m_handle.event_type;
67 const char* physical_sensor::get_name(void)
75 uint32_t physical_sensor::get_hal_id(void)
80 int physical_sensor::get_poll_fd()
87 return m_sensor_device->get_poll_fd();
90 bool physical_sensor::read_fd(std::vector<uint32_t> &ids)
99 size = m_sensor_device->read_fd(&_ids);
101 for (int i = 0; i < size; ++i)
102 ids.push_back(_ids[i]);
107 int physical_sensor::get_data(sensor_data_t **data, int *length)
111 if (!m_sensor_device)
115 remains = m_sensor_device->get_data(m_handle.id, data, length);
118 ERR("Failed to get sensor event");
125 bool physical_sensor::flush(void)
129 if (!m_sensor_device)
132 return m_sensor_device->flush(m_handle.id);
135 bool physical_sensor::set_interval(unsigned long interval)
139 if (!m_sensor_device)
142 INFO("Polling interval is set to %dms", interval);
144 return m_sensor_device->set_interval(m_handle.id, interval);
147 bool physical_sensor::set_batch_latency(unsigned long latency)
151 if (!m_sensor_device)
154 INFO("Polling interval is set to %dms", latency);
156 return m_sensor_device->set_batch_latency(m_handle.id, latency);
159 int physical_sensor::set_attribute(int32_t attribute, int32_t value)
163 if (!m_sensor_device)
166 return m_sensor_device->set_attribute(m_handle.id, attribute, value);
169 int physical_sensor::set_attribute(char *attribute, char *value, int value_len)
173 if (!m_sensor_device)
176 return m_sensor_device->set_attribute_str(m_handle.id, attribute, value, value_len);
179 bool physical_sensor::set_wakeup(int wakeup)
184 bool physical_sensor::on_start()
188 if (!m_sensor_device)
191 return m_sensor_device->enable(m_handle.id);
194 bool physical_sensor::on_stop()
198 if (!m_sensor_device)
201 return m_sensor_device->disable(m_handle.id);
204 bool physical_sensor::get_sensor_info(sensor_info &info)
206 info.set_type(get_type());
207 info.set_id(get_id());
208 info.set_privilege(SENSOR_PRIVILEGE_PUBLIC); // FIXME
209 info.set_name(m_handle.model_name);
210 info.set_vendor(m_handle.vendor);
211 info.set_min_range(m_handle.min_range);
212 info.set_max_range(m_handle.max_range);
213 info.set_resolution(m_handle.resolution);
214 info.set_min_interval(m_handle.min_interval);
215 info.set_fifo_count(0); // FIXME
216 info.set_max_batch_count(m_handle.max_batch_count);
217 info.set_supported_event(get_event_type());
218 info.set_wakeup_supported(m_handle.wakeup_supported);