Add led device type 97/251597/2
authorlokilee73 <changjoo.lee@samsung.com>
Fri, 15 Jan 2021 10:50:58 +0000 (19:50 +0900)
committerlokilee73 <changjoo.lee@samsung.com>
Mon, 18 Jan 2021 04:55:06 +0000 (13:55 +0900)
ex) CAMERA_FRONT, CAMERA_BACK, NOTIFICATION, TOUCH_KEY

Change-Id: If98bb54dddd9574c12b8d25d935353b05bc1b9de
Signed-off-by: lokilee73 <changjoo.lee@samsung.com>
include/backend/hal-led-interface.h
include/hal-led.h
src/led.c

index d9d5bdd..d38bca1 100644 (file)
@@ -26,6 +26,13 @@ enum led_type {
        LED_TYPE_BLINK,
 };
 
+enum led_device_type {
+       CAMERA_FRONT,
+       CAMERA_BACK,
+       NOTIFICATION,
+       TOUCH_KEY,
+};
+
 struct led_state {
        /* Led type */
        enum led_type type;
@@ -47,12 +54,12 @@ struct keyled_state {
        int brightness;
 };
 
-typedef struct _hal_backend_led_funcs {
+struct led_funcs {
        /* Set led state */
-       int (*set_state)(struct led_state *state);
+       int (*set_state)(enum led_device_type type, struct led_state *state);
 
        /* Get led state */
-       int (*get_state)(struct led_state **state);
+       int (*get_state)(enum led_device_type type, struct led_state **state);
 
        /* Get led number */
        int (*get_number)(void);
@@ -68,6 +75,13 @@ typedef struct _hal_backend_led_funcs {
 
        /* Get keyled state */
        int (*keyled_get_state)(int *keycode, int *brightness);
+};
+
+typedef struct _hal_backend_led_funcs {
+    struct led_funcs *camera_front;
+    struct led_funcs *camera_back;
+    struct led_funcs *notification;
+    struct led_funcs *touch_key;
 } hal_backend_led_funcs;
 
 #ifdef __cplusplus
index 7ba6663..346771f 100644 (file)
@@ -26,8 +26,8 @@ extern "C" {
 
 int hal_device_led_get_backend(void);
 int hal_device_led_put_backend(void);
-int hal_device_led_set_state(struct led_state *state);
-int hal_device_led_get_state(struct led_state **state);
+int hal_device_led_set_state(enum led_device_type type, struct led_state *state);
+int hal_device_led_get_state(enum led_device_type type, struct led_state **state);
 int hal_device_led_get_number(void);
 int hal_device_led_set_number(int number);
 int hal_device_led_get_max_num(void);
index 928f0ce..530beb0 100644 (file)
--- a/src/led.c
+++ b/src/led.c
@@ -50,40 +50,98 @@ int hal_device_led_put_backend(void)
        return 0;
 }
 
-int hal_device_led_set_state(struct led_state *state)
+int hal_device_led_set_state(enum led_device_type type, struct led_state *state)
 {
-       if (!g_led_funcs ||
-           !g_led_funcs->set_state)
+       switch (type) {
+       case CAMERA_FRONT:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->camera_front) ||
+                       !(g_led_funcs->camera_front->set_state))
+                       return -ENODEV;
+               return g_led_funcs->camera_front->set_state(type, state);
+
+       case CAMERA_BACK:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->camera_back) ||
+                       !(g_led_funcs->camera_back->set_state))
+                       return -ENODEV;
+               return g_led_funcs->camera_back->set_state(type, state);
+
+       case NOTIFICATION:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->notification) ||
+                       !(g_led_funcs->notification->set_state))
+                       return -ENODEV;
+               return g_led_funcs->notification->set_state(type, state);
+
+       case TOUCH_KEY:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->touch_key) ||
+                       !(g_led_funcs->touch_key->set_state))
+                       return -ENODEV;
+               return g_led_funcs->touch_key->set_state(type, state);
+
+       default:
+               _E("Invalid led type: %d", type);
                return -ENODEV;
-
-       return g_led_funcs->set_state(state);
+       }
 }
 
-int hal_device_led_get_state(struct led_state **state)
+int hal_device_led_get_state(enum led_device_type type, struct led_state **state)
 {
-       if (!g_led_funcs ||
-           !g_led_funcs->get_state)
+       switch (type) {
+       case CAMERA_FRONT:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->camera_front) ||
+                       !(g_led_funcs->camera_front->get_state))
+                       return -ENODEV;
+               return g_led_funcs->camera_front->get_state(type, state);
+
+       case CAMERA_BACK:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->camera_back) ||
+                       !(g_led_funcs->camera_back->get_state))
+                       return -ENODEV;
+               return g_led_funcs->camera_back->get_state(type, state);
+
+       case NOTIFICATION:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->notification) ||
+                       !(g_led_funcs->notification->get_state))
+                       return -ENODEV;
+               return g_led_funcs->notification->get_state(type, state);
+
+       case TOUCH_KEY:
+               if (!g_led_funcs ||
+                       !(g_led_funcs->touch_key) ||
+                       !(g_led_funcs->touch_key->get_state))
+                       return -ENODEV;
+               return g_led_funcs->touch_key->get_state(type, state);
+
+       default:
+               _E("Invalid led type: %d", type);
                return -ENODEV;
-
-       return g_led_funcs->get_state(state);
+       }
 }
 
 int hal_device_led_get_number(void)
 {
        if (!g_led_funcs ||
-           !g_led_funcs->get_number)
+               !(g_led_funcs->notification) ||
+               !(g_led_funcs->notification->get_number))
                return -ENODEV;
 
-       return g_led_funcs->get_number();
+       return g_led_funcs->notification->get_number();
 }
 
 int hal_device_led_set_number(int number)
 {
        if (!g_led_funcs ||
-           !g_led_funcs->set_num)
+               !(g_led_funcs->notification) ||
+               !(g_led_funcs->notification->set_num))
                return -ENODEV;
 
-       g_led_funcs->set_num(number);
+       g_led_funcs->notification->set_num(number);
 
        return 0;
 }
@@ -91,27 +149,30 @@ int hal_device_led_set_number(int number)
 int hal_device_led_get_max_num(void)
 {
        if (!g_led_funcs ||
-           !g_led_funcs->get_max_num)
+               !(g_led_funcs->notification) ||
+               !(g_led_funcs->notification->get_max_num))
                return -ENODEV;
 
-       return g_led_funcs->get_max_num();
+       return g_led_funcs->notification->get_max_num();
 }
 
 int hal_device_keyled_set_state(struct keyled_state *state)
 {
        if (!g_led_funcs ||
-           !g_led_funcs->keyled_set_state)
+               !(g_led_funcs->touch_key) ||
+               !(g_led_funcs->touch_key->keyled_set_state))
                return -ENODEV;
 
-       return g_led_funcs->keyled_set_state(state);
+       return g_led_funcs->touch_key->keyled_set_state(state);
 }
 
 int hal_device_keyled_get_state(int *keycode, int *brightness)
 {
        if (!g_led_funcs ||
-           !g_led_funcs->keyled_get_state)
+               !(g_led_funcs->touch_key) ||
+               !(g_led_funcs->touch_key->keyled_get_state))
                return -ENODEV;
 
-       return g_led_funcs->keyled_get_state(keycode, brightness);
+       return g_led_funcs->touch_key->keyled_get_state(keycode, brightness);
 }