Fix to legacy hal can be loaded properly 19/318119/1 accepted/tizen/9.0/unified/20250116.154302
authorSangYoun Kwak <sy.kwak@samsung.com>
Mon, 13 Jan 2025 07:06:07 +0000 (16:06 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Mon, 13 Jan 2025 07:09:34 +0000 (16:09 +0900)
Since the legacy hal has create_t function and it creates sensor object,
which type is sensor_device provided by hal-api-sensor repository
previously.
To make sensord can load legacy hal properly, legacy sensor_device class
is added as name 'sensor_device'. 'sensor_device' class for hal sensor
device is renamed as hal_sensor_device.

Change-Id: If4e2f1f03fe1c8d0cfc59201956bb55e78f32c02
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
include/hal_sensor_device.h [new file with mode: 0644]
include/sensor_device.h
src/server/hal_sensor_device.cpp [new file with mode: 0644]
src/server/sensor_device.cpp [deleted file]
src/server/sensor_loader.cpp

diff --git a/include/hal_sensor_device.h b/include/hal_sensor_device.h
new file mode 100644 (file)
index 0000000..9e48b22
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * 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
+
+#include <stdint.h>
+
+#include "sensor_device.h"
+
+class hal_sensor_device: public sensor_device {
+public:
+       hal_sensor_device(uint64_t sensor_device_id);
+       ~hal_sensor_device();
+
+       int get_poll_fd(void);
+       int get_sensors(const sensor_info_t **sensors);
+
+       bool enable(uint32_t id);
+       bool disable(uint32_t id);
+
+       int read_fd(uint32_t **ids);
+       int get_data(uint32_t id, sensor_data_t **data, int *length);
+
+       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, const char *value, int len) ;
+       bool get_attribute_int(uint32_t id, int32_t attribute, int32_t *value);
+       bool get_attribute_str(uint32_t id, int32_t attribute, char **value, int *len);
+
+       bool flush(uint32_t id);
+
+private:
+       uint64_t sensor_device_id;
+};
index 3e59c746b9c9f0f9308049bc619e1e423f53cb1a..146dd2789aa8b1d37bf29e1969a88d99f8ba56f4 100644 (file)
 
 class sensor_device {
 public:
-       sensor_device(uint64_t sensor_device_id);
-       ~sensor_device();
-
-       int get_poll_fd(void);
-       int get_sensors(const sensor_info_t **sensors);
-
-       bool enable(uint32_t id);
-       bool disable(uint32_t id);
-
-       int read_fd(uint32_t **ids);
-       int get_data(uint32_t id, sensor_data_t **data, int *length);
-
-       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, const char *value, int len) ;
-       bool get_attribute_int(uint32_t id, int32_t attribute, int32_t *value);
-       bool get_attribute_str(uint32_t id, int32_t attribute, char **value, int *len);
-
-       bool flush(uint32_t id);
-
-private:
-       uint64_t sensor_device_id;
+       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, int *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, int 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, int *len) {
+               return true;
+       }
+
+       virtual bool flush(uint32_t id) { return true; }
 };
diff --git a/src/server/hal_sensor_device.cpp b/src/server/hal_sensor_device.cpp
new file mode 100644 (file)
index 0000000..09c9b97
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * sensord
+ *
+ * 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.
+ *
+ */
+
+#include <climits>
+
+#include "sensor_log.h"
+#include "hal_sensor_device.h"
+
+hal_sensor_device::hal_sensor_device(uint64_t sensor_device_id):
+       sensor_device_id(sensor_device_id) { }
+
+hal_sensor_device::~hal_sensor_device()
+{
+       hal_sensor_delete(&sensor_device_id, 1);
+}
+
+int hal_sensor_device::get_poll_fd(void)
+{
+       int poll_fd = 0;
+       int ret = 0;
+
+       ret = hal_sensor_get_poll_fd(sensor_device_id, &poll_fd);
+       if (ret < 0)
+               return ret;
+
+       return poll_fd;
+}
+
+int hal_sensor_device::get_sensors(const sensor_info_t **sensors)
+{
+       size_t sensors_len = 0;
+       int ret = 0;
+
+       ret = hal_sensor_get_sensors(sensor_device_id, sensors, &sensors_len);
+       if (ret < 0)
+               return ret;
+
+       if (sensors_len > (size_t)INT_MAX)
+               return -EINVAL;
+
+       return sensors_len;
+}
+
+bool hal_sensor_device::enable(uint32_t id)
+{
+       return hal_sensor_enable(sensor_device_id, id) == 0;
+}
+
+bool hal_sensor_device::disable(uint32_t id)
+{
+       return hal_sensor_disable(sensor_device_id, id) == 0;
+}
+
+int hal_sensor_device::read_fd(uint32_t **ids)
+{
+       size_t ids_len = 0;
+       int ret = 0;
+
+       ret = hal_sensor_read_fd(sensor_device_id, ids, &ids_len);
+       if (ret < 0)
+               return ret;
+
+       if (ids_len > (size_t)INT_MAX)
+               return -EINVAL;
+
+       return ids_len;
+}
+
+int hal_sensor_device::get_data(uint32_t id, sensor_data_t **data, int *length)
+{
+       size_t data_length = 0;
+       int ret = 0;
+
+       ret = hal_sensor_get_data(sensor_device_id, id, data, &data_length);
+       if (ret < 0)
+               return ret;
+
+       if (data_length > (size_t)INT_MAX)
+               return -EINVAL;
+       *length = data_length;
+
+       return 0;
+}
+
+bool hal_sensor_device::set_interval(uint32_t id, unsigned long val)
+{
+       return hal_sensor_set_interval(sensor_device_id, id, val) == 0;
+}
+
+bool hal_sensor_device::set_batch_latency(uint32_t id, unsigned long val)
+{
+       return hal_sensor_set_batch_latency(sensor_device_id, id, val) == 0;
+}
+
+bool hal_sensor_device::set_attribute_int(uint32_t id, int32_t attribute, int32_t value)
+{
+       return hal_sensor_set_attribute_int(sensor_device_id, id, attribute, value) == 0;
+}
+
+bool hal_sensor_device::set_attribute_str(uint32_t id, int32_t attribute, const char *value, int len)
+{
+       if (len < 0)
+               return false;
+
+       return hal_sensor_set_attribute_str(sensor_device_id, id, attribute, value, len) == 0;
+}
+
+bool hal_sensor_device::get_attribute_int(uint32_t id, int32_t attribute, int32_t *value)
+{
+       return hal_sensor_get_attribute_int(sensor_device_id, id, attribute, value) == 0;
+}
+
+bool hal_sensor_device::get_attribute_str(uint32_t id, int32_t attribute, char **value, int *len)
+{
+       char *temp_value = nullptr;
+       size_t temp_value_len = 0;
+       int ret = 0;
+
+       ret = hal_sensor_get_attribute_str(sensor_device_id, id, attribute, &temp_value, &temp_value_len);
+       if (ret < 0)
+               return false;
+
+       if (temp_value_len > (size_t)INT_MAX) {
+               delete[] value;
+               return false;
+       }
+
+       *value = temp_value;
+       *len = temp_value_len;
+
+       return true;
+}
+
+bool hal_sensor_device::flush(uint32_t id)
+{
+       return hal_sensor_flush(sensor_device_id, id) == 0;
+}
diff --git a/src/server/sensor_device.cpp b/src/server/sensor_device.cpp
deleted file mode 100644 (file)
index e231f15..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * sensord
- *
- * 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.
- *
- */
-
-#include <climits>
-
-#include "sensor_log.h"
-#include "sensor_device.h"
-
-sensor_device::sensor_device(uint64_t sensor_device_id):
-       sensor_device_id(sensor_device_id) { }
-
-sensor_device::~sensor_device()
-{
-       hal_sensor_delete(&sensor_device_id, 1);
-}
-
-int sensor_device::get_poll_fd(void)
-{
-       int poll_fd = 0;
-       int ret = 0;
-
-       ret = hal_sensor_get_poll_fd(sensor_device_id, &poll_fd);
-       if (ret < 0)
-               return ret;
-
-       return poll_fd;
-}
-
-int sensor_device::get_sensors(const sensor_info_t **sensors)
-{
-       size_t sensors_len = 0;
-       int ret = 0;
-
-       ret = hal_sensor_get_sensors(sensor_device_id, sensors, &sensors_len);
-       if (ret < 0)
-               return ret;
-
-       if (sensors_len > (size_t)INT_MAX)
-               return -EINVAL;
-
-       return sensors_len;
-}
-
-bool sensor_device::enable(uint32_t id)
-{
-       return hal_sensor_enable(sensor_device_id, id) == 0;
-}
-
-bool sensor_device::disable(uint32_t id)
-{
-       return hal_sensor_disable(sensor_device_id, id) == 0;
-}
-
-int sensor_device::read_fd(uint32_t **ids)
-{
-       size_t ids_len = 0;
-       int ret = 0;
-
-       ret = hal_sensor_read_fd(sensor_device_id, ids, &ids_len);
-       if (ret < 0)
-               return ret;
-
-       if (ids_len > (size_t)INT_MAX)
-               return -EINVAL;
-
-       return ids_len;
-}
-
-int sensor_device::get_data(uint32_t id, sensor_data_t **data, int *length)
-{
-       size_t data_length = 0;
-       int ret = 0;
-
-       ret = hal_sensor_get_data(sensor_device_id, id, data, &data_length);
-       if (ret < 0)
-               return ret;
-
-       if (data_length > (size_t)INT_MAX)
-               return -EINVAL;
-       *length = data_length;
-
-       return 0;
-}
-
-bool sensor_device::set_interval(uint32_t id, unsigned long val)
-{
-       return hal_sensor_set_interval(sensor_device_id, id, val) == 0;
-}
-
-bool sensor_device::set_batch_latency(uint32_t id, unsigned long val)
-{
-       return hal_sensor_set_batch_latency(sensor_device_id, id, val) == 0;
-}
-
-bool sensor_device::set_attribute_int(uint32_t id, int32_t attribute, int32_t value)
-{
-       return hal_sensor_set_attribute_int(sensor_device_id, id, attribute, value) == 0;
-}
-
-bool sensor_device::set_attribute_str(uint32_t id, int32_t attribute, const char *value, int len)
-{
-       if (len < 0)
-               return false;
-
-       return hal_sensor_set_attribute_str(sensor_device_id, id, attribute, value, len) == 0;
-}
-
-bool sensor_device::get_attribute_int(uint32_t id, int32_t attribute, int32_t *value)
-{
-       return hal_sensor_get_attribute_int(sensor_device_id, id, attribute, value) == 0;
-}
-
-bool sensor_device::get_attribute_str(uint32_t id, int32_t attribute, char **value, int *len)
-{
-       char *temp_value = nullptr;
-       size_t temp_value_len = 0;
-       int ret = 0;
-
-       ret = hal_sensor_get_attribute_str(sensor_device_id, id, attribute, &temp_value, &temp_value_len);
-       if (ret < 0)
-               return false;
-
-       if (temp_value_len > (size_t)INT_MAX) {
-               delete[] value;
-               return false;
-       }
-
-       *value = temp_value;
-       *len = temp_value_len;
-
-       return true;
-}
-
-bool sensor_device::flush(uint32_t id)
-{
-       return hal_sensor_flush(sensor_device_id, id) == 0;
-}
index ab037942493d07f1174766572edb4bddee2f6b2a..62ffc45a9d4143cbca7625651ec3b55567dc3792 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "sensor_loader.h"
 #include "sensor_device.h"
+#include "hal_sensor_device.h"
 
 #include <dirent.h>
 #include <dlfcn.h>
@@ -58,7 +59,7 @@ void sensor_loader::load_hal(device_sensor_registry_t &devices) {
   }
 
   for (size_t i = 0; i < size; ++i) {
-    devices.emplace_back(new sensor_device(sensor_device_ids[i]));
+    devices.emplace_back(new hal_sensor_device(sensor_device_ids[i]));
   }
 
   free(sensor_device_ids);