device-led: Support hal-api passthrough and IPC selectively by configuration
authorYunhee Seo <yuni.seo@samsung.com>
Fri, 14 Feb 2025 06:59:31 +0000 (15:59 +0900)
committerChanwoo Choi <cw00.choi@samsung.com>
Tue, 4 Mar 2025 10:06:02 +0000 (19:06 +0900)
Now, two-way communication method from HAL is supported.
Please refer changed communication method.

Before
- Passthrough
  - hal-api(led) --(dlopen)--> hal-backend

After
- Passthrough and IPC
  - hal-api(led) --(dlopen)--> hal-backend
           |
           |(proxy)
           |
           |-------(IPC)-----> hal-backend-serivce(stub) --> hal-backend

With hal_transport configuration, transport method can be selected.
It defines IPC or passthrough communication way.
Therefore, the existing hal-api code should call either IPC or passthrough.

Change-Id: I4f40e8fe9c5f66e28dd5c0765779b6d55246bc4e
Signed-off-by: Yunhee Seo <yuni.seo@samsung.com>
src/hal-api-device-led.c

index a40f4f760e7b1dcae7cff1fab4dd8ad0ad733846..58aa57e494c081b3d815ef34d5b852730803b9ae 100644 (file)
 
 #include "common.h"
 #include "hal-device-led-interface.h"
+#include "hal-api-device-led-ipc.h"
+#include "hal-api-device-led-passthrough.h"
 
-static hal_backend_device_led_funcs *hal_device_led_funcs = NULL;
+static enum hal_common_transport g_hal_transport = HAL_TRANSPORT;
 
 int hal_device_led_get_backend(void)
 {
-       int ret;
-
-       if (hal_device_led_funcs)
-               return 0;
-
-       hal_device_led_funcs = calloc(1, sizeof(hal_backend_device_led_funcs));
-       if (!hal_device_led_funcs)
-               return -ENOMEM;
-
-       ret = hal_common_get_backend(HAL_MODULE_DEVICE_LED, (void **)&hal_device_led_funcs);
-       if (ret < 0) {
-               _E("Failed to get device-led backend");
-               free(hal_device_led_funcs);
-               hal_device_led_funcs = NULL;
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_led_ipc_get_backend();
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_led_passthrough_get_backend();
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
+       default:
                return -ENOTSUP;
        }
-
-       return 0;
 }
 
 int hal_device_led_put_backend(void)
 {
-       int ret = 0;
-
-       if (!hal_device_led_funcs)
-               return 0;
-
-       ret = hal_common_put_backend(HAL_MODULE_DEVICE_LED, (void *)hal_device_led_funcs);
-       if (ret < 0) {
-               _E("Failed to put device-led backend");
-               return ret;
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_led_ipc_put_backend();
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_led_passthrough_put_backend();
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
+       default:
+               return -ENOTSUP;
        }
-
-       free(hal_device_led_funcs);
-       hal_device_led_funcs = NULL;
-
-       return 0;
 }
 
 int hal_device_led_set_state(hal_device_led_device_type_e type, hal_device_led_state_s *state)
 {
-       int ret;
-
        if (!state)
                return -EINVAL;
 
-       if (!hal_device_led_funcs) {
-               if ((ret = hal_device_led_get_backend()) < 0)
-                       return ret;
-       }
-
-       switch (type) {
-       case HAL_DEVICE_LED_CAMERA_FRONT:
-               if (!hal_device_led_funcs ||
-                       !(hal_device_led_funcs->camera_front) ||
-                       !(hal_device_led_funcs->camera_front->set_state))
-                       return -ENOTSUP;
-               return hal_device_led_funcs->camera_front->set_state(type, state);
-
-       case HAL_DEVICE_LED_CAMERA_BACK:
-               if (!hal_device_led_funcs ||
-                       !(hal_device_led_funcs->camera_back) ||
-                       !(hal_device_led_funcs->camera_back->set_state))
-                       return -ENOTSUP;
-               return hal_device_led_funcs->camera_back->set_state(type, state);
-
-       case HAL_DEVICE_LED_NOTIFICATION:
-               if (!hal_device_led_funcs ||
-                       !(hal_device_led_funcs->notification) ||
-                       !(hal_device_led_funcs->notification->set_state))
-                       return -ENOTSUP;
-               return hal_device_led_funcs->notification->set_state(type, state);
-
-       case HAL_DEVICE_LED_TOUCH_KEY:
-               if (!hal_device_led_funcs ||
-                       !(hal_device_led_funcs->touch_key) ||
-                       !(hal_device_led_funcs->touch_key->set_state))
-                       return -ENOTSUP;
-               return hal_device_led_funcs->touch_key->set_state(type, state);
-
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_led_ipc_set_state(type, state);
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_led_passthrough_set_state(type, state);
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
        default:
-               _E("Invalid led type: %d", type);
                return -ENOTSUP;
        }
 }
 
 int hal_device_led_get_number(void)
 {
-       int ret;
-
-       if (!hal_device_led_funcs) {
-               if ((ret = hal_device_led_get_backend()) < 0)
-                       return ret;
-       }
-
-       if (!hal_device_led_funcs ||
-               !(hal_device_led_funcs->notification) ||
-               !(hal_device_led_funcs->notification->get_number))
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_led_ipc_get_number();
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_led_passthrough_get_number();
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
+       default:
                return -ENOTSUP;
-
-       return hal_device_led_funcs->notification->get_number();
+       }
 }
 
 int hal_device_led_set_number(int number)
 {
-       int ret;
-
-       if (!hal_device_led_funcs) {
-               if ((ret = hal_device_led_get_backend()) < 0)
-                       return ret;
-       }
-
-       if (!hal_device_led_funcs ||
-               !(hal_device_led_funcs->notification) ||
-               !(hal_device_led_funcs->notification->set_num))
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_led_ipc_set_number(number);
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_led_passthrough_set_number(number);
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
+       default:
                return -ENOTSUP;
-
-       hal_device_led_funcs->notification->set_num(number);
-
-       return 0;
+       }
 }
 
 int hal_device_led_get_max_num(void)
 {
-       int ret;
-
-       if (!hal_device_led_funcs) {
-               if ((ret = hal_device_led_get_backend()) < 0)
-                       return ret;
-       }
-
-       if (!hal_device_led_funcs ||
-               !(hal_device_led_funcs->notification) ||
-               !(hal_device_led_funcs->notification->get_max_num))
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_led_ipc_get_max_num();
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_led_passthrough_get_max_num();
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
+       default:
                return -ENOTSUP;
-
-       return hal_device_led_funcs->notification->get_max_num();
+       }
 }
 
 int hal_device_keyled_set_state(hal_device_led_keyled_state_s *state)
 {
-       int ret;
-
-       if (!state)
-               return -EINVAL;
-
-       if (!hal_device_led_funcs) {
-               if ((ret = hal_device_led_get_backend()) < 0)
-                       return ret;
-       }
-
-       if (!hal_device_led_funcs ||
-               !(hal_device_led_funcs->touch_key) ||
-               !(hal_device_led_funcs->touch_key->keyled_set_state))
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_keyled_ipc_set_state(state);
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_keyled_passthrough_set_state(state);
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
+       default:
                return -ENOTSUP;
-
-       return hal_device_led_funcs->touch_key->keyled_set_state(state);
+       }
 }
 
 int hal_device_keyled_get_state(int *keycode, int *brightness)
 {
-       int ret;
-
-       if (!keycode || !brightness)
-               return -EINVAL;
-
-       if (!hal_device_led_funcs) {
-               if ((ret = hal_device_led_get_backend()) < 0)
-                       return ret;
-       }
-
-       if (!hal_device_led_funcs ||
-               !(hal_device_led_funcs->touch_key) ||
-               !(hal_device_led_funcs->touch_key->keyled_get_state))
+       switch (g_hal_transport) {
+       case HAL_COMMON_TRANSPORT_IPC:
+               return hal_device_keyled_ipc_get_state(keycode, brightness);
+       case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+               return hal_device_keyled_passthrough_get_state(keycode, brightness);
+       case HAL_COMMON_TRANSPORT_UNKNOWN:
+       default:
                return -ENOTSUP;
-
-       return hal_device_led_funcs->touch_key->keyled_get_state(keycode, brightness);
+       }
 }