From 1dbc1e5c7dbf171b96f4350d014f154ac3e8f498 Mon Sep 17 00:00:00 2001 From: lokilee73 Date: Fri, 15 Jan 2021 19:50:58 +0900 Subject: [PATCH] Add led device type ex) CAMERA_FRONT, CAMERA_BACK, NOTIFICATION, TOUCH_KEY Change-Id: If98bb54dddd9574c12b8d25d935353b05bc1b9de Signed-off-by: lokilee73 --- include/backend/hal-led-interface.h | 20 +++++-- include/hal-led.h | 4 +- src/led.c | 101 +++++++++++++++++++++++++++++------- 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/include/backend/hal-led-interface.h b/include/backend/hal-led-interface.h index d9d5bdd..d38bca1 100644 --- a/include/backend/hal-led-interface.h +++ b/include/backend/hal-led-interface.h @@ -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 diff --git a/include/hal-led.h b/include/hal-led.h index 7ba6663..346771f 100644 --- a/include/hal-led.h +++ b/include/hal-led.h @@ -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); diff --git a/src/led.c b/src/led.c index 928f0ce..530beb0 100644 --- 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); } -- 2.7.4