resolution : RAW_DATA_TO_METRE_PER_SECOND_SQUARED_UNIT(RAW_DATA_UNIT),
min_interval : MIN_INTERVAL,
max_batch_count : MAX_BATCH_COUNT,
+ wakeup_supported : false,
};
static const sensor_handle_t handles[] = {
}
};
+static uint16_t event_ids[] = {
+ 0x1,
+ 0x2,
+};
+
accel_device::accel_device()
: m_node_handle(-1)
, m_x(-1)
return m_node_handle;
}
-bool accel_device::get_sensors(std::vector<sensor_handle_t> &sensors)
+int accel_device::get_sensors(const sensor_handle_t **sensors)
{
int size = ARRAY_SIZE(handles);
+ *sensors = handles;
- for (int i = 0; i < size; ++i)
- sensors.push_back(handles[i]);
-
- return true;
+ return size;
}
bool accel_device::enable(uint16_t id)
return true;
}
-bool accel_device::read_fd(std::vector<uint16_t> &ids)
+int accel_device::read_fd(uint16_t **ids)
{
+ int size;
+
if (!update_value_input_event()) {
DBG("Failed to update value");
return false;
}
- ids.push_back(handles[0].id);
- ids.push_back(handles[1].id);
+ size = ARRAY_SIZE(event_ids);
- return true;
+ *ids = event_ids;
+
+ return size;
}
int accel_device::get_data(uint16_t id, sensor_data_t **data)
#ifndef _ACCEL_DEVICE_H_
#define _ACCEL_DEVICE_H_
-#include <vector>
#include <sensor_hal.h>
+#include <string>
class accel_device : public sensor_device
{
virtual ~accel_device();
int get_poll_fd(void);
- bool get_sensors(std::vector<sensor_handle_t> &sensors);
+ int get_sensors(const sensor_handle_t **sensors);
bool enable(uint16_t id);
bool disable(uint16_t id);
bool set_batch_latency(uint16_t id, unsigned long val);
bool set_attribute(uint16_t id, int32_t attribute, int32_t value);
- bool read_fd(std::vector<uint16_t> &ids);
+ int read_fd(uint16_t **ids);
int get_data(uint16_t id, sensor_data_t **data);
+
bool flush(uint16_t id);
private:
#include <sensor_hal.h>
#include <sensor_logs.h>
+#include <vector>
#ifdef ENABLE_ACCEL
#include "accel/accel.h"
#endif
-//#include "gyro/gyro_sensor_device.h"
-//#include "magnetic/geo_sensor_device.h"
#ifdef ENABLE_PROXIMITY
#include "proximity/proxi.h"
#endif
-//#include "light/light_sensor_device.h"
-//#include "rotation_vector/rv_raw_sensor_device.h"
-//#include "pressure/pressure_sensor_device.h"
-//#include "temperature/temperature_sensor_device.h"
-//#include "ultraviolet/ultraviolet_sensor_device.h"
-//#include "hrm_led_red/bio_led_red_sensor_device.h"
-static sensor_devices *devices = NULL;
+static std::vector<sensor_device_t> devs;
template<typename _sensor>
void create_sensor(const char *name)
return;
}
- devices->devices.push_back(instance);
+ devs.push_back(instance);
}
-extern "C" sensor_devices* create(void)
+extern "C" int create(sensor_device_t **devices)
{
- devices = new(std::nothrow) sensor_devices;
- retvm_if(!devices, NULL, "Failed to allocate memory");
+ int size;
+ sensor_device_t *_devices;
#ifdef ENABLE_ACCEL
create_sensor<accel_device>("Accel");
#endif
-#ifdef ENABLE_GYRO
- create_sensor<gyro_sensor_device>("Gyro");
-#endif
-
-#ifdef ENABLE_MAGNETIC
- create_sensor<geo_sensor_device>("Magnetic");
-#endif
-
#ifdef ENABLE_PROXIMITY
create_sensor<proxi_sensor_device>("Proximity");
#endif
-#ifdef ENABLE_LIGHT
- create_sensor<light_sensor_device>("Light");
-#endif
+ size = devs.size();
+ _devices = (sensor_device_t *)malloc(size * sizeof(sensor_device_t));
+ retvm_if(!_devices, 0, "Failed to allocate memory");
-#ifdef ENABLE_ROTATION_VECTOR
- create_sensor<rv_raw_sensor_device>("Rotation Vector");
-#endif
+ for (int i = 0; i < size; ++i)
+ _devices[i] = devs[i];
-#ifdef ENABLE_PRESSURE
- create_sensor<pressure_sensor_device>("Pressure");
-#endif
-
-#ifdef ENABLE_TEMPERATURE
- create_sensor<temperature_sensor_device>("Temperature");
-#endif
-
-#ifdef ENABLE_ULTRAVIOLET
- create_sensor<ultraviolet_sensor_device>("Ultraviolet");
-#endif
-
-#ifdef ENABLE_HRM_LED_RED
- create_sensor<bio_led_red_sensor_device>("HRM Led Red");
-#endif
+ *devices = _devices;
- return devices;
+ return size;
}
#include <stdint.h>
-#ifdef __cplusplus
-#include <string>
-#include <vector>
-#endif /* __cplusplus */
-
#define SENSOR_HAL_VERSION(maj,min) \
((((maj) & 0xffff) << 24) | ((min) & 0xffff))
#endif /* __cplusplus */
#ifdef __cplusplus
-typedef struct {
- std::vector<void*> devices;
-} sensor_devices;
-
-typedef sensor_devices* (*create_t)(void);
+/*
+ * Create devices
+ */
+typedef void *sensor_device_t;
+typedef int (*create_t)(sensor_device_t **devices);
/*
* Sensor device interface
}
virtual int get_poll_fd(void) = 0;
- virtual bool get_sensors(std::vector<sensor_handle_t> &sensors) = 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 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 read_fd(std::vector<uint16_t> &ids) = 0;
+ virtual int read_fd(uint16_t **ids) = 0;
virtual int get_data(uint16_t id, sensor_data_t **data) = 0;
virtual bool flush(uint16_t id) = 0;