4 * Copyright (c) 2017 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 "sensor_info.h"
22 #include <sensor_types.h>
23 #include <sensor_types_private.h>
24 #include <sensor_log.h>
28 #include "sensor_utils.h"
30 using namespace sensor;
32 sensor_info::sensor_info()
33 : m_type(UNKNOWN_SENSOR)
34 , m_uri(SENSOR_UNKNOWN_NAME)
35 , m_model(SENSOR_UNKNOWN_NAME)
36 , m_vendor(SENSOR_UNKNOWN_NAME)
41 , m_max_batch_count(0)
42 , m_wakeup_supported(false)
47 sensor_info::sensor_info(const sensor_info &info)
50 , m_model(info.m_model)
51 , m_vendor(info.m_vendor)
52 , m_min_range(info.m_min_range)
53 , m_max_range(info.m_max_range)
54 , m_resolution(info.m_resolution)
55 , m_min_interval(info.m_min_interval)
56 , m_max_batch_count(info.m_max_batch_count)
57 , m_wakeup_supported(info.m_wakeup_supported)
58 , m_privilege(info.m_privilege)
62 sensor_info::sensor_info(const sensor_info_t &info)
64 /* TODO: HAL should change name from single name to URI */
65 const char *type = sensor::utils::get_uri((sensor_type_t)info.type);
66 std::string uri(type);
67 uri.append("/").append(info.name);
69 set_type((sensor_type_t)info.type);
71 set_model(info.model_name);
72 set_vendor(info.vendor);
73 set_min_range(info.min_range);
74 set_max_range(info.max_range);
75 set_resolution(info.resolution);
76 set_min_interval(info.min_interval);
77 set_max_batch_count(info.max_batch_count);
78 set_wakeup_supported(info.wakeup_supported);
79 /* TODO: sensor_info_t should have privilege string */
83 sensor_info::sensor_info(const sensor_info2_t &info)
85 std::string uri(info.uri);
86 std::size_t found = uri.find_last_of("/\\");
90 set_model(uri.substr(found + 1, uri.length()).c_str());
91 set_vendor(info.vendor);
92 set_min_range(info.min_range);
93 set_max_range(info.max_range);
94 set_resolution(info.resolution);
95 set_min_interval(info.min_interval);
96 set_max_batch_count(info.max_batch_count);
97 set_wakeup_supported(info.wakeup_supported);
98 set_privilege(info.privilege);
101 sensor_type_t sensor_info::get_type(void)
106 std::string &sensor_info::get_uri(void)
111 std::string &sensor_info::get_model(void)
116 std::string &sensor_info::get_vendor(void)
121 float sensor_info::get_min_range(void)
126 float sensor_info::get_max_range(void)
131 float sensor_info::get_resolution(void)
136 int sensor_info::get_min_interval(void)
138 return m_min_interval;
141 int sensor_info::get_max_batch_count(void)
143 return m_max_batch_count;
146 bool sensor_info::is_wakeup_supported(void)
148 return m_wakeup_supported;
151 std::string &sensor_info::get_privilege(void)
156 void sensor_info::set_type(sensor_type_t type)
161 void sensor_info::set_uri(const char *name)
166 void sensor_info::set_model(const char *model)
171 void sensor_info::set_vendor(const char *vendor)
176 void sensor_info::set_min_range(float min_range)
178 m_min_range = min_range;
181 void sensor_info::set_max_range(float max_range)
183 m_max_range = max_range;
186 void sensor_info::set_resolution(float resolution)
188 m_resolution = resolution;
191 void sensor_info::set_min_interval(int min_interval)
193 m_min_interval = min_interval;
196 void sensor_info::set_max_batch_count(int max_batch_count)
198 m_max_batch_count = max_batch_count;
201 void sensor_info::set_wakeup_supported(bool supported)
203 m_wakeup_supported = supported;
206 void sensor_info::set_privilege(const char *privilege)
208 m_privilege = privilege;
211 void sensor_info::add_privilege(const char *privilege)
213 if (!m_privilege.empty())
214 m_privilege.append(PRIV_DELIMITER);
215 m_privilege.append(privilege);
218 void sensor_info::serialize(raw_data_t &data)
224 put(data, m_min_range);
225 put(data, m_max_range);
226 put(data, m_resolution);
227 put(data, m_min_interval);
228 put(data, m_max_batch_count);
229 put(data, m_wakeup_supported);
230 put(data, m_privilege);
233 void sensor_info::deserialize(const char *data, int data_len)
237 raw_data_t raw_data(&data[0], &data[data_len]);
238 auto it = raw_data.begin();
240 m_type = (sensor_type_t)type;
243 it = get(it, m_model);
244 it = get(it, m_vendor);
245 it = get(it, m_min_range);
246 it = get(it, m_max_range);
247 it = get(it, m_resolution);
248 it = get(it, m_min_interval);
249 it = get(it, m_max_batch_count);
250 it = get(it, m_wakeup_supported);
251 it = get(it, m_privilege);
254 void sensor_info::show(void)
256 _I("URI = %s", m_uri.c_str());
257 _I("Model = %s", m_model.c_str());
258 _I("Vendor = %s", m_vendor.c_str());
259 _I("Min_range = %f", m_min_range);
260 _I("Max_range = %f", m_max_range);
261 _I("Resolution = %f", m_resolution);
262 _I("Min_interval = %d", m_min_interval);
263 _I("Max_batch_count = %d", m_max_batch_count);
264 _I("Wakeup_supported = %d", m_wakeup_supported);
265 _I("Privilege = %s", m_privilege.c_str());
268 void sensor_info::clear(void)
270 m_type = UNKNOWN_SENSOR;
278 m_max_batch_count = 0;
279 m_wakeup_supported = false;
283 void sensor_info::put(raw_data_t &data, int value)
285 char buffer[sizeof(value)];
287 int *temp = reinterpret_cast<int *>(buffer);
290 copy(&buffer[0], &buffer[sizeof(buffer)], back_inserter(data));
293 void sensor_info::put(raw_data_t &data, unsigned int value)
295 char buffer[sizeof(value)];
297 unsigned int *temp = reinterpret_cast<unsigned int *>(buffer);
300 copy(&buffer[0], &buffer[sizeof(buffer)], back_inserter(data));
303 void sensor_info::put(raw_data_t &data, int64_t value)
305 char buffer[sizeof(value)];
307 int64_t *temp = reinterpret_cast<int64_t *>(buffer);
310 copy(&buffer[0], &buffer[sizeof(buffer)], back_inserter(data));
313 void sensor_info::put(raw_data_t &data, float value)
315 char buffer[sizeof(value)];
317 float *temp = reinterpret_cast<float *>(buffer);
320 copy(&buffer[0], &buffer[sizeof(buffer)], back_inserter(data));
323 void sensor_info::put(raw_data_t &data, std::string &value)
325 put(data, (int) value.size());
327 copy(value.begin(), value.end(), back_inserter(data));
330 void sensor_info::put(raw_data_t &data, bool value)
332 char buffer[sizeof(value)];
334 bool *temp = (bool *) buffer;
337 copy(&buffer[0], &buffer[sizeof(buffer)], back_inserter(data));
340 raw_data_iterator sensor_info::get(raw_data_iterator it, int &value)
342 copy(it, it + sizeof(value), (char*) &value);
344 return it + sizeof(value);
347 raw_data_iterator sensor_info::get(raw_data_iterator it, unsigned int &value)
349 copy(it, it + sizeof(value), (char*) &value);
351 return it + sizeof(value);
354 raw_data_iterator sensor_info::get(raw_data_iterator it, int64_t &value)
356 copy(it, it + sizeof(value), (char*) &value);
358 return it + sizeof(value);
361 raw_data_iterator sensor_info::get(raw_data_iterator it, float &value)
363 copy(it, it + sizeof(value), (char*) &value);
365 return it + sizeof(value);
368 raw_data_iterator sensor_info::get(raw_data_iterator it, std::string &value)
374 copy(it, it + len, back_inserter(value));
379 raw_data_iterator sensor_info::get(raw_data_iterator it, bool &value)
381 copy(it, it + sizeof(value), (char*) &value);
383 return it + sizeof(value);