Load HAL module before running API 94/256494/2
authorYunmi Ha <yunmi.ha@samsung.com>
Mon, 5 Apr 2021 11:10:04 +0000 (20:10 +0900)
committerYunmi Ha <yunmi.ha@samsung.com>
Fri, 9 Apr 2021 04:24:58 +0000 (13:24 +0900)
Change-Id: Ibe74a9b72c30ea96f61efb7110a8c897eeffd5c7
Signed-off-by: Yunmi Ha <yunmi.ha@samsung.com>
src/hal-api-sensor.cpp

index e4b535a..01683b7 100644 (file)
 #define EXPORT __attribute__((visibility("default")))
 #endif
 
-static hal_backend_sensor_funcs *g_sensor_funcs = NULL;
+static hal_backend_sensor_funcs *hal_sensor_funcs = NULL;
+/*
+-1 : failed to initialize
+0  : not initialized
+1  : succeeded to initialize
+*/
+static int hal_initialized = 0;
 
 EXPORT
-int hal_sensor_get_backend(void) {
-  int ret;
+int hal_sensor_get_backend(void)
+{
+       int ret;
 
-  if (g_sensor_funcs) return 0;
+       if (hal_sensor_funcs)
+               return 0;
 
-  ret = hal_common_get_backend(HAL_MODULE_SENSOR, (void **)&g_sensor_funcs);
-  if (ret < 0) {
-    _E("Failed to get backend\n");
-    return -EINVAL;
-  }
+       ret = hal_common_get_backend(HAL_MODULE_SENSOR, (void **)&hal_sensor_funcs);
+       if (ret < 0) {
+               _E("Failed to get backend");
+               hal_initialized = -1;
+               return -ENODEV;
+       }
 
-  return 0;
+       hal_initialized = 1;
+       return 0;
 }
 
 EXPORT
-int hal_sensor_put_backend(void) {
-  int ret;
-
-  if (!g_sensor_funcs) return -EINVAL;
+int hal_sensor_put_backend(void)
+{
+       if (!hal_sensor_funcs)
+               return -ENODEV;
 
-  ret = hal_common_put_backend(HAL_MODULE_SENSOR, (void *)g_sensor_funcs);
-  if (ret < 0) {
-    _E("Failed to put backend\n");
-    return -EINVAL;
-  }
-  g_sensor_funcs = NULL;
+       hal_common_put_backend(HAL_MODULE_SENSOR, (void *)hal_sensor_funcs);
+       hal_sensor_funcs = NULL;
+       hal_initialized = 0;
 
-  return 0;
+       return 0;
 }
 
 EXPORT
-int hal_sensor_create(sensor_device_t **devices) {
-  if (!g_sensor_funcs) {
-    return -ENOTSUP;
-  }
-  return g_sensor_funcs->create(devices);
+int hal_sensor_create(sensor_device_t **devices)
+{
+       int ret;
+
+       if (!hal_sensor_funcs && !hal_initialized) {
+               if ((ret = hal_sensor_get_backend()) < 0)
+                       return ret;
+       }
+
+       if (!hal_sensor_funcs || !hal_sensor_funcs->create)
+               return -ENODEV;
+
+       return hal_sensor_funcs->create(devices);
 }