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>
22 #include <temperature_sensor.h>
23 #include <sensor_plugin_loader.h>
25 #define SENSOR_NAME "TEMPERATURE_SENSOR"
26 #define NO_OF_DATA_VAL 1
28 temperature_sensor::temperature_sensor()
32 m_name = string(SENSOR_NAME);
34 register_supported_event(TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME);
36 physical_sensor::set_poller(temperature_sensor::working, this);
39 temperature_sensor::~temperature_sensor()
41 INFO("temperature_sensor is destroyed!");
44 bool temperature_sensor::init()
46 m_sensor_hal = sensor_plugin_loader::get_instance().get_sensor_hal(TEMPERATURE_SENSOR);
50 ERR("cannot load sensor_hal[%s]", sensor_base::get_name());
54 sensor_properties_s properties;
56 if (!m_sensor_hal->get_properties(properties))
58 ERR("sensor->get_properties() is failed!\n");
62 m_resolution = properties.resolution;
64 INFO("%s is created!", sensor_base::get_name());
69 sensor_type_t temperature_sensor::get_type(void)
71 return TEMPERATURE_SENSOR;
74 bool temperature_sensor::working(void *inst)
76 temperature_sensor *sensor = (temperature_sensor*)inst;
77 return sensor->process_event();
80 bool temperature_sensor::process_event(void)
84 if (!m_sensor_hal->is_data_ready(true))
87 m_sensor_hal->get_sensor_data(event.data);
89 AUTOLOCK(m_client_info_mutex);
91 if (get_client_cnt(TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME))
93 event.event_type = TEMPERATURE_EVENT_RAW_DATA_REPORT_ON_TIME;
94 raw_to_base(event.data);
101 bool temperature_sensor::on_start(void)
103 if (!m_sensor_hal->enable())
105 ERR("m_sensor_hal start fail\n");
112 bool temperature_sensor::on_stop(void)
114 if (!m_sensor_hal->disable())
116 ERR("m_sensor_hal stop fail\n");
123 bool temperature_sensor::get_properties(sensor_properties_s &properties)
125 return m_sensor_hal->get_properties(properties);
128 int temperature_sensor::get_sensor_data(unsigned int type, sensor_data_t &data)
132 ret = m_sensor_hal->get_sensor_data(data);
137 if (type == TEMPERATURE_BASE_DATA_SET)
146 bool temperature_sensor::set_interval(unsigned long interval)
150 INFO("Polling interval is set to %dms", interval);
152 return m_sensor_hal->set_interval(interval);
155 void temperature_sensor::raw_to_base(sensor_data_t &data)
157 data.values_num = NO_OF_DATA_VAL;
160 extern "C" void *create(void)
162 temperature_sensor *inst;
166 inst = new temperature_sensor();
170 ERR("temperature_sensor class create fail , errno : %d , errstr : %s\n", err, strerror(err));
177 extern "C" void destroy(void *inst)
179 delete (temperature_sensor*)inst;;