--- /dev/null
+/*
+ * HAL Backend Service Plugin for HAL_MODULE_DEVICE_LED
+ *
+ * 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 <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <libgen.h>
+#include <dlog.h>
+#include <stdlib.h>
+
+#include <hal/hal-common.h>
+
+#include <hal_device_led_stub_1.h>
+#include <hal-api-device-led-passthrough.h>
+
+#include "common.h"
+
+static int device_led_early_init (void *data)
+{
+ return 0;
+}
+
+static void device_led_ipc_create(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ void *user_data)
+{
+ char *sender = NULL;
+ rpc_port_stub_hal_device_led_stub_1_device_led_context_get_sender(context, &sender);
+ if (!sender)
+ return;
+
+ free(sender);
+}
+
+static void device_led_ipc_terminate(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ void *user_data)
+{
+ char *sender = NULL;
+
+ rpc_port_stub_hal_device_led_stub_1_device_led_context_get_sender(context, &sender);
+ if (!sender)
+ return;
+
+ free(sender);
+}
+
+int hal_device_led_funcs_camera_front_set_state(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ rpc_port_stub_hal_device_led_stub_1_enums_type_e type,
+ rpc_port_stub_hal_device_led_stub_1_state_h state,
+ void *user_data)
+{
+ hal_device_led_state_s led_state;
+
+ rpc_port_stub_hal_device_led_stub_1_state_get_type(state, (rpc_port_stub_hal_device_led_stub_1_enums_type_e*)&led_state.type);
+ rpc_port_stub_hal_device_led_stub_1_state_get_color(state, &led_state.color);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_on(state, &led_state.duty_on);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_off(state, &led_state.duty_off);
+ return hal_device_led_passthrough_set_state(type, &led_state);
+}
+
+int hal_device_led_funcs_camera_back_set_state(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ rpc_port_stub_hal_device_led_stub_1_enums_type_e type,
+ rpc_port_stub_hal_device_led_stub_1_state_h state,
+ void *user_data)
+{
+ hal_device_led_state_s led_state;
+
+ rpc_port_stub_hal_device_led_stub_1_state_get_type(state, (rpc_port_stub_hal_device_led_stub_1_enums_type_e*)&led_state.type);
+ rpc_port_stub_hal_device_led_stub_1_state_get_color(state, &led_state.color);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_on(state, &led_state.duty_on);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_off(state, &led_state.duty_off);
+ return hal_device_led_passthrough_set_state(type, &led_state);
+}
+
+int hal_device_led_funcs_notification_set_state(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ rpc_port_stub_hal_device_led_stub_1_enums_type_e type,
+ rpc_port_stub_hal_device_led_stub_1_state_h state,
+ void *user_data)
+{
+ hal_device_led_state_s led_state;
+
+ rpc_port_stub_hal_device_led_stub_1_state_get_type(state, (rpc_port_stub_hal_device_led_stub_1_enums_type_e*)&led_state.type);
+ rpc_port_stub_hal_device_led_stub_1_state_get_color(state, &led_state.color);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_on(state, &led_state.duty_on);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_off(state, &led_state.duty_off);
+ return hal_device_led_passthrough_set_state(type, &led_state);
+}
+
+int hal_device_led_funcs_touch_key_set_state(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ rpc_port_stub_hal_device_led_stub_1_enums_type_e type,
+ rpc_port_stub_hal_device_led_stub_1_state_h state,
+ void *user_data)
+{
+ hal_device_led_state_s led_state;
+
+ rpc_port_stub_hal_device_led_stub_1_state_get_type(state, (rpc_port_stub_hal_device_led_stub_1_enums_type_e*)&led_state.type);
+ rpc_port_stub_hal_device_led_stub_1_state_get_color(state, &led_state.color);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_on(state, &led_state.duty_on);
+ rpc_port_stub_hal_device_led_stub_1_state_get_duty_off(state, &led_state.duty_off);
+ return hal_device_led_passthrough_set_state(type, &led_state);
+}
+
+int hal_device_led_funcs_notification_get_number(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context, void *user_data)
+{
+ return hal_device_led_passthrough_get_number();
+}
+
+int hal_device_led_funcs_notification_set_num(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context, int number, void *user_data)
+{
+ return hal_device_led_passthrough_set_number(number);
+}
+
+int hal_device_led_funcs_notification_get_max_num(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context, void *user_data)
+{
+ return hal_device_led_passthrough_get_max_num();
+}
+
+int hal_device_led_funcs_touch_key_keyled_set_state(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ rpc_port_stub_hal_device_led_stub_1_keyled_state_h state,
+ void *user_data)
+{
+ hal_device_led_keyled_state_s keyled_state;
+
+ rpc_port_stub_hal_device_led_stub_1_keyled_state_get_keycode(state, &keyled_state.keycode);
+ rpc_port_stub_hal_device_led_stub_1_keyled_state_get_brightness(state, &keyled_state.brightness);
+ return hal_device_keyled_passthrough_set_state(&keyled_state);
+}
+
+int hal_device_led_funcs_touch_key_keyled_get_state(rpc_port_stub_hal_device_led_stub_1_device_led_context_h context,
+ int *keycode,
+ int *brightness,
+ void *user_data)
+{
+ if (!keycode || !brightness)
+ return -EINVAL;
+
+ return hal_device_keyled_passthrough_get_state(keycode, brightness);
+}
+
+static int device_led_init (void *data)
+{
+ int ret = 0;
+
+ ret = hal_device_led_passthrough_get_backend();
+ if (ret != 0) {
+ _E("Failed to get passthrough led backend: %d", ret);
+ return ret;
+ }
+
+ rpc_port_stub_hal_device_led_stub_1_device_led_callback_s callback = {
+ .create = device_led_ipc_create,
+ .terminate = device_led_ipc_terminate,
+ .led_funcs_camera_front_set_state = hal_device_led_funcs_camera_front_set_state,
+ .led_funcs_camera_back_set_state = hal_device_led_funcs_camera_back_set_state,
+ .led_funcs_notification_set_state = hal_device_led_funcs_notification_set_state,
+ .led_funcs_touch_key_set_state = hal_device_led_funcs_touch_key_set_state,
+ .led_funcs_notification_get_number = hal_device_led_funcs_notification_get_number,
+ .led_funcs_notification_set_num = hal_device_led_funcs_notification_set_num,
+ .led_funcs_notification_get_max_num = hal_device_led_funcs_notification_get_max_num,
+ .led_funcs_touch_key_keyled_set_state = hal_device_led_funcs_touch_key_keyled_set_state,
+ .led_funcs_touch_key_keyled_get_state = hal_device_led_funcs_touch_key_keyled_get_state,
+ };
+
+ ret = rpc_port_stub_hal_device_led_stub_1_device_led_register(&callback, NULL);
+ if (ret != RPC_PORT_ERROR_NONE)
+ _E("Failed to register rpc_port_stub_hal_device_led_stub_1_device_led_callback_s ret(%d)", ret);
+
+ return 0;
+}
+
+static int device_led_exit (void *data)
+{
+ int ret = 0;
+
+ rpc_port_stub_hal_device_led_stub_1_device_led_unregister();
+
+ ret = hal_device_led_passthrough_put_backend();
+ if (ret != 0)
+ _E("Failed to hal_device_led_put_backend_passthrough ret(%d)", ret);
+
+ return 0;
+}
+
+static int device_led_late_exit (void *data)
+{
+ return 0;
+}
+
+hal_backend_service hal_backend_service_device_led_data = {
+ .module = HAL_MODULE_DEVICE_LED,
+ .name = "hal-backend-service-device-led",
+ .early_init = device_led_early_init,
+ .init = device_led_init,
+ .exit = device_led_exit,
+ .late_exit = device_led_late_exit,
+};