From 2486b0e83068535cb05bc51e1fc3c4ebfd5b43e1 Mon Sep 17 00:00:00 2001 From: SangYoun Kwak Date: Tue, 24 Dec 2024 16:14:48 +0900 Subject: [PATCH] Change C++ class to C structure of functions for sensor devices The hal interface between backend and api is changed to use C functions rather than giving C++ object directly. To accomplish that, codes are changed as below: * Functions for api calls are added * Device id is added to distinguish between the target sensor devices. Device id is required since it is hard to know which device should be used for a random api call. Change-Id: Iaf474e4a7dfcb596995d95fb3bd96a25444d7c34 Signed-off-by: SangYoun Kwak --- src/accel/accel_device.cpp | 2 +- src/accel/accel_device.h | 7 +- src/geomag/geomag_device.cpp | 2 +- src/geomag/geomag_device.h | 7 +- src/gyro/gyro_device.cpp | 2 +- src/gyro/gyro_device.h | 7 +- src/gyro_uncal/gyro_uncal_device.cpp | 2 +- src/gyro_uncal/gyro_uncal_device.h | 7 +- src/hal-backend-sensor.cpp | 286 ++++++++++++++++++++++----- src/hrm/hrm_device.cpp | 2 +- src/hrm/hrm_device.h | 7 +- src/light/light_device.cpp | 2 +- src/light/light_device.h | 7 +- src/pressure/pressure_device.cpp | 2 +- src/pressure/pressure_device.h | 7 +- src/proxi/proxi_device.cpp | 2 +- src/proxi/proxi_device.h | 7 +- src/sensor_device.h | 54 +++++ src/sensorhub/pedometer.cpp | 4 +- src/sensorhub/sensorhub.cpp | 4 +- src/sensorhub/sensorhub.h | 6 +- src/sensorhub/sensorhub_sensor.h | 2 +- src/ultraviolet/uv_device.cpp | 2 +- src/ultraviolet/uv_device.h | 7 +- 24 files changed, 355 insertions(+), 82 deletions(-) create mode 100644 src/sensor_device.h diff --git a/src/accel/accel_device.cpp b/src/accel/accel_device.cpp index efb9018..91f9515 100755 --- a/src/accel/accel_device.cpp +++ b/src/accel/accel_device.cpp @@ -318,7 +318,7 @@ int accel_device::read_fd(uint32_t **ids) return event_ids.size(); } -int accel_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int accel_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/accel/accel_device.h b/src/accel/accel_device.h index 099ee63..f440b0c 100644 --- a/src/accel/accel_device.h +++ b/src/accel/accel_device.h @@ -18,11 +18,14 @@ #ifndef _ACCEL_DEVICE_H_ #define _ACCEL_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class accel_device : public sensor_device { public: accel_device(); @@ -37,7 +40,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/geomag/geomag_device.cpp b/src/geomag/geomag_device.cpp index 0bbdcbb..1a827b8 100755 --- a/src/geomag/geomag_device.cpp +++ b/src/geomag/geomag_device.cpp @@ -321,7 +321,7 @@ int geomag_device::read_fd(uint32_t **ids) return event_ids.size(); } -int geomag_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int geomag_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/geomag/geomag_device.h b/src/geomag/geomag_device.h index 36ea2bf..e84cb50 100644 --- a/src/geomag/geomag_device.h +++ b/src/geomag/geomag_device.h @@ -18,11 +18,14 @@ #ifndef _GEOMAG_DEVICE_H_ #define _GEOMAG_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class geomag_device : public sensor_device { public: geomag_device(); @@ -37,7 +40,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/gyro/gyro_device.cpp b/src/gyro/gyro_device.cpp index 46f87d2..f30e5d5 100755 --- a/src/gyro/gyro_device.cpp +++ b/src/gyro/gyro_device.cpp @@ -315,7 +315,7 @@ int gyro_device::read_fd(uint32_t **ids) return event_ids.size(); } -int gyro_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int gyro_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/gyro/gyro_device.h b/src/gyro/gyro_device.h index 2f90a9c..68f9e5a 100644 --- a/src/gyro/gyro_device.h +++ b/src/gyro/gyro_device.h @@ -18,11 +18,14 @@ #ifndef _GYRO_DEVICE_H_ #define _GYRO_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class gyro_device : public sensor_device { public: gyro_device(); @@ -36,7 +39,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/gyro_uncal/gyro_uncal_device.cpp b/src/gyro_uncal/gyro_uncal_device.cpp index e33c269..cc1c794 100755 --- a/src/gyro_uncal/gyro_uncal_device.cpp +++ b/src/gyro_uncal/gyro_uncal_device.cpp @@ -274,7 +274,7 @@ int gyro_uncal_device::read_fd(uint32_t **ids) return event_ids.size(); } -int gyro_uncal_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int gyro_uncal_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/gyro_uncal/gyro_uncal_device.h b/src/gyro_uncal/gyro_uncal_device.h index 0438df4..f5f7214 100644 --- a/src/gyro_uncal/gyro_uncal_device.h +++ b/src/gyro_uncal/gyro_uncal_device.h @@ -18,11 +18,14 @@ #ifndef _GYRO_UNCAL_DEVICE_H_ #define _GYRO_UNCAL_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class gyro_uncal_device : public sensor_device { public: gyro_uncal_device(); @@ -37,7 +40,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/hal-backend-sensor.cpp b/src/hal-backend-sensor.cpp index 2a721a2..de891e2 100644 --- a/src/hal-backend-sensor.cpp +++ b/src/hal-backend-sensor.cpp @@ -31,68 +31,258 @@ #include "ultraviolet/uv_device.h" #include "sensorhub/sensorhub.h" -static std::vector devs; +static std::vector sensor_device_list; +static std::vector sensor_device_funcs_list; + +#define RET_IF_INVALID_DEVICE(DEVICE_ID) \ +do {\ + if (sensor_device_list.size() <= (DEVICE_ID)) \ + return -EINVAL; \ + if (sensor_device_list[DEVICE_ID] == nullptr) \ + return -ENODEV; \ +} while (0) + +static int sensor_emulator_get_poll_fd(uint32_t sensor_device_id, int *poll_fd) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + int fd = sensor_device_list[sensor_device_id]->get_poll_fd(); + if (fd < 0) + return -EINVAL; + + *poll_fd = fd; + + return 0; +} + +static int sensor_emulator_get_sensors(uint32_t sensor_device_id, const sensor_info_t **sensors, size_t *sensors_len) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + int ret = sensor_device_list[sensor_device_id]->get_sensors(sensors); + if (ret < 0) + return ret; + + *sensors_len = ret; + + return 0; +} + +static int sensor_emulator_enable(uint32_t sensor_device_id, uint32_t id) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->enable(id) ? 0 : -EINVAL; +} + +static int sensor_emulator_disable(uint32_t sensor_device_id, uint32_t id) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->disable(id) ? 0 : -EINVAL; +} + +static int sensor_emulator_read_fd(uint32_t sensor_device_id, uint32_t **ids, size_t *ids_len) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + int ret = sensor_device_list[sensor_device_id]->read_fd(ids); + if (ret < 0) + return ret; + + *ids_len = ret; + + return 0; +} + +static int sensor_emulator_get_data(uint32_t sensor_device_id, uint32_t id, sensor_data_t **data, size_t *length) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->get_data(id, data, length); +} + +static int sensor_emulator_set_interval(uint32_t sensor_device_id, uint32_t id, unsigned long val) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->set_interval(id, val) ? 0 : -EINVAL; +} + +static int sensor_emulator_set_batch_latency(uint32_t sensor_device_id, uint32_t id, unsigned long val) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->set_batch_latency(id, val) ? 0 : -EINVAL; +} + +static int sensor_emulator_set_attribute_int(uint32_t sensor_device_id, uint32_t id, int32_t attribute, int32_t value) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->set_attribute_int(id, attribute, value) ? 0 : -EINVAL; +} + +static int sensor_emulator_set_attribute_str(uint32_t sensor_device_id, uint32_t id, int32_t attribute, const char *value, size_t len) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->set_attribute_str(id, attribute, value, len) ? 0 : -EINVAL; +} + +static int sensor_emulator_get_attribute_int(uint32_t sensor_device_id, uint32_t id, int32_t attribute, int32_t *value) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->get_attribute_int(id, attribute, value) ? 0 : -EINVAL; +} + +static int sensor_emulator_get_attribute_str(uint32_t sensor_device_id, uint32_t id, int32_t attribute, char **value, size_t *len) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->get_attribute_str(id, attribute, value, len) ? 0 : -EINVAL; +} + +static int sensor_emulator_flush(uint32_t sensor_device_id, uint32_t id) +{ + RET_IF_INVALID_DEVICE(sensor_device_id); + + return sensor_device_list[sensor_device_id]->flush(id) ? 0 : -EINVAL; +} + +int create_sensor_device_funcs(sensor_device_s **sensor_device_funcs) +{ + sensor_device_s *funcs = (sensor_device_s *)malloc(sizeof(*funcs)); + if (funcs == nullptr) + return -ENOMEM; + + funcs->get_poll_fd = sensor_emulator_get_poll_fd; + funcs->get_sensors = sensor_emulator_get_sensors; + funcs->enable = sensor_emulator_enable; + funcs->disable = sensor_emulator_disable; + funcs->read_fd = sensor_emulator_read_fd; + funcs->get_data = sensor_emulator_get_data; + funcs->set_interval = sensor_emulator_set_interval; + funcs->set_batch_latency = sensor_emulator_set_batch_latency; + funcs->set_attribute_int = sensor_emulator_set_attribute_int; + funcs->set_attribute_str = sensor_emulator_set_attribute_str; + funcs->get_attribute_int = sensor_emulator_get_attribute_int; + funcs->get_attribute_str = sensor_emulator_get_attribute_str; + funcs->flush = sensor_emulator_flush; + + *sensor_device_funcs = funcs; + + return 0; +} template void create_sensor(const char *name) { - sensor_device *instance = NULL; - try { - instance = new _sensor; - } catch (std::exception &e) { - ERR("Failed to create %s sensor device, exception: %s", name, e.what()); - return; - } catch (int err) { - _ERRNO(err, _E, "Failed to create %s sensor device", name); - return; - } - - devs.push_back(instance); -} - -static int sensor_emulator_create(sensor_device_t **devices) { - create_sensor("Accelerometer"); - create_sensor("Gyroscope"); - create_sensor("Geomagnetic"); - create_sensor("Pressure"); - create_sensor("Ultra Violet"); - create_sensor("Light"); - create_sensor("Proximity"); - create_sensor("HRM"); - create_sensor("Sensorhub"); - - *devices = &devs[0]; - return devs.size(); + int ret = 0; + sensor_device *instance = nullptr; + sensor_device_s *funcs = nullptr; + + try { + instance = new _sensor; + } catch (std::exception &e) { + ERR("Failed to create %s sensor device, exception: %s", name, e.what()); + return; + } catch (int err) { + _ERRNO(err, _E, "Failed to create %s sensor device", name); + return; + } + + ret = create_sensor_device_funcs(&funcs); + if (ret != 0) { + ERR("Failed to create sensor_device_s: ret(%d)", ret); + delete instance; + return; + } + + sensor_device_funcs_list.push_back(funcs); + sensor_device_list.push_back(instance); } +static int sensor_emulator_create(sensor_device_s ***sensor_devices, size_t *sensor_devices_len) { + create_sensor("Accelerometer"); + create_sensor("Gyroscope"); + create_sensor("Geomagnetic"); + create_sensor("Pressure"); + create_sensor("Ultra Violet"); + create_sensor("Light"); + create_sensor("Proximity"); + create_sensor("HRM"); + create_sensor("Sensorhub"); + + if (sensor_device_funcs_list.size() == 0) { + ERR("Failed to create any sensor device(0 sensor created)"); + return -ENOENT; + } + + *sensor_devices = &sensor_device_funcs_list[0]; + *sensor_devices_len = sensor_device_funcs_list.size(); + + return 0; +} + +static int sensor_emulator_delete(uint32_t *sensor_device_ids, size_t sensor_device_ids_len) +{ + size_t failed_count = 0; + uint32_t sensor_device_id = 0; + + for (size_t i = 0; i < sensor_device_ids_len; ++i) { + sensor_device_id = sensor_device_ids[i]; + + if (sensor_device_list.size() <= sensor_device_id || + sensor_device_list[sensor_device_id] == nullptr) { + ++failed_count; + continue; + } + + delete sensor_device_list[sensor_device_id]; + sensor_device_list[sensor_device_id] = nullptr; + + free(sensor_device_funcs_list[sensor_device_id]); + sensor_device_funcs_list[sensor_device_id] = nullptr; + } + + if (failed_count != 0) + return -EINVAL; + + return 0; +} + + static int sensor_emulator_init(void **data) { - _I("init hal backend sensor"); - hal_backend_sensor_funcs *funcs = NULL; + _I("init hal backend sensor"); + hal_backend_sensor_funcs *funcs = nullptr; - if (!data) { - _E("Invalid parameter"); - return -EINVAL; - } + if (!data) { + _E("Invalid parameter"); + return -EINVAL; + } - funcs = *((hal_backend_sensor_funcs **)data); - if (!funcs) { - _E("Invalid parameter"); - return -EINVAL; - } + funcs = *((hal_backend_sensor_funcs **)data); + if (!funcs) { + _E("Invalid parameter"); + return -EINVAL; + } - funcs->create = sensor_emulator_create; + funcs->create_sensor = sensor_emulator_create; + funcs->delete_sensor = sensor_emulator_delete; - return 0; + return 0; } static int sensor_emulator_exit(void *data) { - return 0; + return 0; } extern "C" hal_backend hal_backend_sensor_data = { - .name = "sensor-emulator", - .vendor = "Tizen", - .init = sensor_emulator_init, - .exit = sensor_emulator_exit, - .major_version = 1, - .minor_version = 0, + .name = "sensor-emulator", + .vendor = "Tizen", + .init = sensor_emulator_init, + .exit = sensor_emulator_exit, + .major_version = 1, + .minor_version = 0, }; diff --git a/src/hrm/hrm_device.cpp b/src/hrm/hrm_device.cpp index bad0be3..557b7c3 100755 --- a/src/hrm/hrm_device.cpp +++ b/src/hrm/hrm_device.cpp @@ -253,7 +253,7 @@ int hrm_device::read_fd(uint32_t **ids) return event_ids.size(); } -int hrm_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int hrm_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/hrm/hrm_device.h b/src/hrm/hrm_device.h index 090882d..e277e75 100644 --- a/src/hrm/hrm_device.h +++ b/src/hrm/hrm_device.h @@ -18,11 +18,14 @@ #ifndef _HRM_DEVICE_H_ #define _HRM_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class hrm_device : public sensor_device { public: hrm_device(); @@ -37,7 +40,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/light/light_device.cpp b/src/light/light_device.cpp index 852e353..503a9e6 100755 --- a/src/light/light_device.cpp +++ b/src/light/light_device.cpp @@ -215,7 +215,7 @@ int light_device::read_fd(uint32_t **ids) return event_ids.size(); } -int light_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int light_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/light/light_device.h b/src/light/light_device.h index c9d9feb..6fba3ac 100644 --- a/src/light/light_device.h +++ b/src/light/light_device.h @@ -18,11 +18,14 @@ #ifndef _LIGHT_DEVICE_H_ #define _LIGHT_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class light_device : public sensor_device { public: light_device(); @@ -37,7 +40,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/pressure/pressure_device.cpp b/src/pressure/pressure_device.cpp index c314db6..ef1b56f 100755 --- a/src/pressure/pressure_device.cpp +++ b/src/pressure/pressure_device.cpp @@ -256,7 +256,7 @@ int pressure_device::read_fd(uint32_t **ids) return event_ids.size(); } -int pressure_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int pressure_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/pressure/pressure_device.h b/src/pressure/pressure_device.h index 1323590..0c1e047 100644 --- a/src/pressure/pressure_device.h +++ b/src/pressure/pressure_device.h @@ -18,11 +18,14 @@ #ifndef _PRESSURE_DEVICE_H_ #define _PRESSURE_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class pressure_device : public sensor_device { public: pressure_device(); @@ -37,7 +40,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/proxi/proxi_device.cpp b/src/proxi/proxi_device.cpp index 72936b9..8cdca9b 100644 --- a/src/proxi/proxi_device.cpp +++ b/src/proxi/proxi_device.cpp @@ -189,7 +189,7 @@ int proxi_device::read_fd(uint32_t **ids) return event_ids.size(); } -int proxi_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int proxi_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/proxi/proxi_device.h b/src/proxi/proxi_device.h index ba57a08..f867693 100644 --- a/src/proxi/proxi_device.h +++ b/src/proxi/proxi_device.h @@ -18,11 +18,14 @@ #ifndef _PROXI_DEVICE_H_ #define _PROXI_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class proxi_device : public sensor_device { public: enum proxi_node_state_event_t { @@ -41,7 +44,7 @@ public: bool disable(uint32_t id); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; diff --git a/src/sensor_device.h b/src/sensor_device.h new file mode 100644 index 0000000..4a77811 --- /dev/null +++ b/src/sensor_device.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2025 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +class sensor_device { + public: + virtual ~sensor_device() {} + + virtual int get_poll_fd(void) = 0; + virtual int get_sensors(const sensor_info_t **sensors) = 0; + + virtual bool enable(uint32_t id) = 0; + virtual bool disable(uint32_t id) = 0; + + virtual int read_fd(uint32_t **ids) = 0; + virtual int get_data(uint32_t id, sensor_data_t **data, size_t *length) = 0; + + virtual bool set_interval(uint32_t id, unsigned long val) { return true; } + virtual bool set_batch_latency(uint32_t id, unsigned long val) { + return true; + } + virtual bool set_attribute_int(uint32_t id, int32_t attribute, + int32_t value) { + return true; + } + virtual bool set_attribute_str(uint32_t id, int32_t attribute, const char *value, + size_t len) { + return true; + } + virtual bool get_attribute_int(uint32_t id, int32_t attribute, + int32_t *value) { + return true; + } + virtual bool get_attribute_str(uint32_t id, int32_t attribute, char **value, + size_t *len) { + return true; + } + + virtual bool flush(uint32_t id) { return true; } +}; diff --git a/src/sensorhub/pedometer.cpp b/src/sensorhub/pedometer.cpp index ff0340c..5164dfc 100644 --- a/src/sensorhub/pedometer.cpp +++ b/src/sensorhub/pedometer.cpp @@ -163,7 +163,7 @@ public: bool disable(void); int parse(const char *data, int data_len); - int get_data(sensor_data_t **data, int *length); + int get_data(sensor_data_t **data, size_t *length); bool set_attribute_int(int32_t attribute, int32_t value); bool set_attribute_str(int32_t key, char *value, int len); @@ -421,7 +421,7 @@ int sh_pedometer_sensor::parse_scale_factor(const char *data, int data_len, int return PAYLOAD_SFACTOR; } -int sh_pedometer_sensor::get_data(sensor_data_t **data, int *length) +int sh_pedometer_sensor::get_data(sensor_data_t **data, size_t *length) { *data = m_data; *length = m_is_sfactor ? sizeof(sensorhub_data_t) : sizeof(sensor_pedometer_data_t); diff --git a/src/sensorhub/sensorhub.cpp b/src/sensorhub/sensorhub.cpp index 130e46f..2a7bf4a 100644 --- a/src/sensorhub/sensorhub.cpp +++ b/src/sensorhub/sensorhub.cpp @@ -126,7 +126,7 @@ bool sensorhub_device::set_attribute_int(uint32_t id, int32_t attribute, int32_t return sensor->set_attribute_int(attribute, value); } -bool sensorhub_device::set_attribute_str(uint32_t id, int32_t attribute, char *value, int len) +bool sensorhub_device::set_attribute_str(uint32_t id, int32_t attribute, char *value, size_t len) { sensorhub_sensor *sensor = manager->get_sensor(id); @@ -177,7 +177,7 @@ int sensorhub_device::read_fd(uint32_t **ids) return size; } -int sensorhub_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int sensorhub_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { int remains = 1; diff --git a/src/sensorhub/sensorhub.h b/src/sensorhub/sensorhub.h index 98c5784..e334145 100644 --- a/src/sensorhub/sensorhub.h +++ b/src/sensorhub/sensorhub.h @@ -19,8 +19,10 @@ #define _SENSORHUB_DEVICE_H_ #include + #include +#include "sensor_device.h" #include "sensorhub_controller.h" #include "sensorhub_manager.h" @@ -38,10 +40,10 @@ public: bool set_interval(uint32_t id, unsigned long val); bool set_batch_latency(uint32_t id, unsigned long val); bool set_attribute_int(uint32_t id, int32_t attribute, int32_t value); - bool set_attribute_str(uint32_t id, int32_t attribute, char *value, int len); + bool set_attribute_str(uint32_t id, int32_t attribute, char *value, size_t len); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); bool flush(uint32_t id); diff --git a/src/sensorhub/sensorhub_sensor.h b/src/sensorhub/sensorhub_sensor.h index d5e9da4..3feafc3 100644 --- a/src/sensorhub/sensorhub_sensor.h +++ b/src/sensorhub/sensorhub_sensor.h @@ -59,7 +59,7 @@ public: virtual bool enable(void); virtual bool disable(void); virtual int parse(const char *hub_data, int data_len) = 0; - virtual int get_data(sensor_data_t **data, int *length) = 0; + virtual int get_data(sensor_data_t **data, size_t *length) = 0; void set_controller(sensorhub_controller *controller); diff --git a/src/ultraviolet/uv_device.cpp b/src/ultraviolet/uv_device.cpp index 0096498..34a2383 100755 --- a/src/ultraviolet/uv_device.cpp +++ b/src/ultraviolet/uv_device.cpp @@ -226,7 +226,7 @@ int uv_device::read_fd(uint32_t **ids) return event_ids.size(); } -int uv_device::get_data(uint32_t id, sensor_data_t **data, int *length) +int uv_device::get_data(uint32_t id, sensor_data_t **data, size_t *length) { sensor_data_t *sensor_data; sensor_data = (sensor_data_t *)malloc(sizeof(sensor_data_t)); diff --git a/src/ultraviolet/uv_device.h b/src/ultraviolet/uv_device.h index 06ea4cf..320f11a 100644 --- a/src/ultraviolet/uv_device.h +++ b/src/ultraviolet/uv_device.h @@ -18,11 +18,14 @@ #ifndef _UV_DEVICE_H_ #define _UV_DEVICE_H_ -#include #include #include #include +#include + +#include "sensor_device.h" + class uv_device : public sensor_device { public: uv_device(); @@ -37,7 +40,7 @@ public: bool set_interval(uint32_t id, unsigned long val); int read_fd(uint32_t **ids); - int get_data(uint32_t id, sensor_data_t **data, int *length); + int get_data(uint32_t id, sensor_data_t **data, size_t *length); private: int m_node_handle; -- 2.34.1