#include <hal/hal-common.h>
#include "hal-device-bezel-interface.h"
+#include "hal-api-device-bezel-ipc.h"
+#include "hal-api-device-bezel-passthrough.h"
#include "common.h"
-static hal_backend_device_bezel_funcs *hal_device_bezel_funcs = NULL;
+static enum hal_common_transport g_hal_transport = HAL_COMMON_TRANSPORT_UNKNOWN;
-int hal_device_bezel_get_backend(void)
+static void __attribute__((constructor)) hal_device_bezel_constructor(void)
{
- int ret;
-
- if (hal_device_bezel_funcs)
- return 0;
-
- hal_device_bezel_funcs = calloc(1, sizeof(hal_backend_device_bezel_funcs));
- if (!hal_device_bezel_funcs)
- return -ENOMEM;
-
- ret = hal_common_get_backend(HAL_MODULE_DEVICE_BEZEL, (void **)&hal_device_bezel_funcs);
+ int ret = hal_common_get_transport(HAL_MODULE_DEVICE_BEZEL,
+ &g_hal_transport);
if (ret < 0) {
- _E("Failed to get device-bezel backend");
- free(hal_device_bezel_funcs);
- hal_device_bezel_funcs = NULL;
- return -ENOTSUP;
+ if (ret != -ENOENT)
+ _W("Failed to get HAL transport from HAL manifest\n");
+ g_hal_transport = HAL_COMMON_TRANSPORT_PASSTHROUGH;
}
+}
- return 0;
+int hal_device_bezel_get_backend(void)
+{
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_get_backend();
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_get_backend();
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
+ return -ENOTSUP;
+ }
}
int hal_device_bezel_put_backend(void)
{
- int ret = 0;
-
- if (!hal_device_bezel_funcs)
- return 0;
-
- ret = hal_common_put_backend(HAL_MODULE_DEVICE_BEZEL, (void *)hal_device_bezel_funcs);
- if (ret < 0) {
- _E("Failed to put device-bezel backend");
- return ret;
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_get_backend();
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_get_backend();
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
+ return -ENOTSUP;
}
-
- free(hal_device_bezel_funcs);
- hal_device_bezel_funcs = NULL;
-
- return 0;
}
int hal_device_bezel_get_state(hal_device_bezel_state_e *state)
{
- int ret;
-
- if (!state)
- return -EINVAL;
-
- if (!hal_device_bezel_funcs) {
- if ((ret = hal_device_bezel_get_backend()) < 0)
- return ret;
- }
-
- if (!hal_device_bezel_funcs ||
- !hal_device_bezel_funcs->get_state)
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_get_state(state);
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_get_state(state);
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
return -ENOTSUP;
-
- return hal_device_bezel_funcs->get_state(state);
+ }
}
int hal_device_bezel_set_state(hal_device_bezel_state_e state)
{
- int ret;
-
- if (!hal_device_bezel_funcs) {
- if ((ret = hal_device_bezel_get_backend()) < 0)
- return ret;
- }
-
- if (!hal_device_bezel_funcs ||
- !hal_device_bezel_funcs->set_state)
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_set_state(state);
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_set_state(state);
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
return -ENOTSUP;
-
- return hal_device_bezel_funcs->set_state(state);
+ }
}
int hal_device_bezel_get_sw_state(hal_device_bezel_state_e *state)
{
- int ret;
-
- if (!state)
- return -EINVAL;
-
- if (!hal_device_bezel_funcs) {
- if ((ret = hal_device_bezel_get_backend()) < 0)
- return ret;
- }
-
- if (!hal_device_bezel_funcs ||
- !hal_device_bezel_funcs->get_sw_state)
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_get_sw_state(state);
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_get_sw_state(state);
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
return -ENOTSUP;
-
- return hal_device_bezel_funcs->get_sw_state(state);
+ }
}
int hal_device_bezel_set_sw_state(hal_device_bezel_state_e state)
{
- int ret;
-
- if (!hal_device_bezel_funcs) {
- if ((ret = hal_device_bezel_get_backend()) < 0)
- return ret;
- }
-
- if (!hal_device_bezel_funcs ||
- !hal_device_bezel_funcs->set_sw_state)
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_set_sw_state(state);
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_set_sw_state(state);
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
return -ENOTSUP;
-
- return hal_device_bezel_funcs->set_sw_state(state);
+ }
}
int hal_device_bezel_get_vib_state(hal_device_bezel_vib_state_e *state)
{
- int ret;
-
- if (!state)
- return -EINVAL;
-
- if (!hal_device_bezel_funcs) {
- if ((ret = hal_device_bezel_get_backend()) < 0)
- return ret;
- }
-
- if (!hal_device_bezel_funcs ||
- !hal_device_bezel_funcs->get_vib_state)
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_get_vib_state(state);
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_get_vib_state(state);
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
return -ENOTSUP;
-
- return hal_device_bezel_funcs->get_vib_state(state);
+ }
}
int hal_device_bezel_set_vib_state(hal_device_bezel_vib_state_e state)
{
- int ret;
-
- if (!hal_device_bezel_funcs) {
- if ((ret = hal_device_bezel_get_backend()) < 0)
- return ret;
- }
-
- if (!hal_device_bezel_funcs ||
- !hal_device_bezel_funcs->set_vib_state)
+ switch (g_hal_transport) {
+ case HAL_COMMON_TRANSPORT_IPC:
+ return hal_device_bezel_ipc_set_vib_state(state);
+ case HAL_COMMON_TRANSPORT_PASSTHROUGH:
+ return hal_device_bezel_passthrough_set_vib_state(state);
+ case HAL_COMMON_TRANSPORT_UNKNOWN:
+ default:
return -ENOTSUP;
-
- return hal_device_bezel_funcs->set_vib_state(state);
+ }
}