#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);
+ }
}