return m_handle.name;
}
+uint32_t physical_sensor::get_hal_id(void)
+{
+ return m_handle.id;
+}
+
int physical_sensor::get_poll_fd()
{
AUTOLOCK(m_mutex);
return m_sensor_device->get_poll_fd();
}
-bool physical_sensor::read_fd(std::vector<uint16_t> &ids)
+bool physical_sensor::read_fd(std::vector<uint32_t> &ids)
{
AUTOLOCK(m_mutex);
int size;
- uint16_t *_ids;
+ uint32_t *_ids;
if (!m_sensor_device)
return false;
virtual sensor_type_t get_type(void);
virtual unsigned int get_event_type(void);
virtual const char* get_name(void);
+ virtual uint32_t get_hal_id(void);
int get_poll_fd();
- virtual bool read_fd(std::vector<uint16_t> &ids);
+ virtual bool read_fd(std::vector<uint32_t> &ids);
virtual int get_data(sensor_data_t **data, int *length);
virtual bool flush(void);
private:
sensor_handle_t m_handle;
sensor_device *m_sensor_device;
+ uint32_t hal_id;
virtual bool set_interval(unsigned long interval);
virtual bool set_batch_latency(unsigned long latency);
bool sensor_event_poller::poll()
{
- std::vector<uint16_t> ids;
+ std::vector<uint32_t> ids;
while (true) {
int fd;
struct epoll_event poll_event;
return true;
}
-bool sensor_event_poller::read_fd(int fd, std::vector<uint16_t> &ids)
+bool sensor_event_poller::read_fd(int fd, std::vector<uint32_t> &ids)
{
fd_sensors_t::iterator it;
physical_sensor *sensor;
return true;
}
-bool sensor_event_poller::process_event(int fd, const std::vector<uint16_t> &ids)
+bool sensor_event_poller::process_event(int fd, const std::vector<uint32_t> &ids)
{
physical_sensor *sensor;
std::pair<fd_sensors_t::iterator, fd_sensors_t::iterator> ret;
sensor = it_sensor->second;
- auto result = std::find(std::begin(ids), std::end(ids), (sensor->get_id()) & 0xFFFF);
+ auto result = std::find(std::begin(ids), std::end(ids), sensor->get_hal_id());
if (result == std::end(ids))
continue;
void init_fd();
void init_sensor_map();
bool add_poll_fd(int fd);
- bool read_fd(int fd, std::vector<uint16_t> &ids);
- bool process_event(int fd, const std::vector<uint16_t> &ids);
+ bool read_fd(int fd, std::vector<uint32_t> &ids);
+ bool process_event(int fd, const std::vector<uint32_t> &ids);
};
#endif /* _SENSOR_EVENT_POLLER_H_ */
#define DEVICE_PLUGINS_DIR_PATH "/usr/lib/sensor"
#define SENSOR_TYPE_SHIFT 32
-#define SENSOR_INDEX_SHIFT 16
+#define SENSOR_INDEX_MASK 0xFFFFFFFF
sensor_loader::sensor_loader()
{
physical_sensor* sensor_loader::create_sensor(sensor_handle_t handle, sensor_device *device)
{
- int16_t index;
+ int32_t index;
physical_sensor *sensor;
- index = (int16_t) (m_sensors.count((sensor_type_t)handle.type));
+ index = (int32_t) (m_sensors.count((sensor_type_t)handle.type));
sensor = new(std::nothrow) physical_sensor();
if (!sensor) {
return NULL;
}
- sensor->set_id((int64_t)handle.type << SENSOR_TYPE_SHIFT | index << SENSOR_INDEX_SHIFT | handle.id);
+ sensor->set_id((int64_t)handle.type << SENSOR_TYPE_SHIFT | index);
sensor->set_sensor_handle(handle);
sensor->set_sensor_device(device);
vector<sensor_base *> sensors;
sensor_type_t type = static_cast<sensor_type_t> (id >> SENSOR_TYPE_SHIFT);
- unsigned int index = (id >> SENSOR_INDEX_SHIFT) & 0xFFFF;
+ unsigned int index = (id & SENSOR_INDEX_MASK);
sensors = get_sensors(type);
- if (sensors.size() <= index)
+ if (index >= sensors.size())
return NULL;
return sensors[index];
typedef union {
struct {
sensor_type_t type;
- int16_t sensor_id;
- int16_t device_id;
+ int32_t id;
} __attribute__((packed));
int64_t id;
} sensor_id_t;
* ID can be assigned from HAL developer. so it has to be unique in HAL.
*/
typedef struct sensor_handle_t {
- uint16_t id;
+ uint32_t id;
const char *name;
sensor_device_type type;
unsigned int event_type; // for Internal API
virtual int get_poll_fd(void) = 0;
virtual int get_sensors(const sensor_handle_t **sensors) = 0;
- virtual bool enable(uint16_t id) = 0;
- virtual bool disable(uint16_t id) = 0;
+ virtual bool enable(uint32_t id) = 0;
+ virtual bool disable(uint32_t id) = 0;
- virtual bool set_interval(uint16_t id, unsigned long val) = 0;
- virtual bool set_batch_latency(uint16_t id, unsigned long val) = 0;
- virtual bool set_attribute(uint16_t id, int32_t attribute, int32_t value) = 0;
- virtual bool set_attribute_str(uint16_t id, char *attribute, char *value, int value_len) = 0;
+ virtual bool set_interval(uint32_t id, unsigned long val) = 0;
+ virtual bool set_batch_latency(uint32_t id, unsigned long val) = 0;
+ virtual bool set_attribute(uint32_t id, int32_t attribute, int32_t value) = 0;
+ virtual bool set_attribute_str(uint32_t id, char *attribute, char *value, int value_len) = 0;
- virtual int read_fd(uint16_t **ids) = 0;
- virtual int get_data(uint16_t id, sensor_data_t **data, int *length) = 0;
+ virtual int read_fd(uint32_t **ids) = 0;
+ virtual int get_data(uint32_t id, sensor_data_t **data, int *length) = 0;
- virtual bool flush(uint16_t id) = 0;
+ virtual bool flush(uint32_t id) = 0;
};
#endif /* __cplusplus */