From 24adb6e1e27a8b3916ef57d30721aca7c9003592 Mon Sep 17 00:00:00 2001 From: Hyotaek Shim Date: Tue, 18 Aug 2020 14:00:00 +0900 Subject: [PATCH 01/16] Fix build warnings Change-Id: Ibcc05e48990655e0d62e08dc43fa7fe448c1cb9c Signed-off-by: Hyotaek Shim --- src/apps/apps.c | 1 + src/display/display-signal.c | 1 + 2 files changed, 2 insertions(+) diff --git a/src/apps/apps.c b/src/apps/apps.c index 72deb24..13ccf7e 100644 --- a/src/apps/apps.c +++ b/src/apps/apps.c @@ -21,6 +21,7 @@ #include "core/common.h" #include "display/display-ops.h" #include "apps.h" +#include "shared/plugin.h" #define POPUP_METHOD "PopupLaunch" #define BUFF_MAX 255 diff --git a/src/display/display-signal.c b/src/display/display-signal.c index e695e99..0b64ff0 100644 --- a/src/display/display-signal.c +++ b/src/display/display-signal.c @@ -19,6 +19,7 @@ #include "display-signal.h" #include "display-ops.h" #include "poll.h" +#include "shared/plugin.h" #define ACTIVE_ACT "active" #define INACTIVE_ACT "inactive" -- 2.7.4 From 1fd766c1aca88ec15bfd4bf56ebdc57dae6fbb5d Mon Sep 17 00:00:00 2001 From: Yunmi Ha Date: Fri, 7 Aug 2020 16:23:17 +0900 Subject: [PATCH 02/16] Change battery global variable to static Change-Id: I2d2b3e024e0518bf9f442ec4820c12546085160f Signed-off-by: Yunmi Ha --- plugins/mobile/battery/battery-notification.c | 34 +++++++------ plugins/wearable/battery/battery-notification.c | 18 +++++-- plugins/wearable/display/device-interface.c | 7 ++- src/apps/apps.c | 1 - src/battery/battery-time.c | 11 ++++- src/battery/lowbat-handler.c | 64 +++++++++++++------------ src/battery/power-supply.c | 7 ++- src/battery/power-supply.h | 2 +- src/display/display-signal.c | 1 - src/touchscreen/touchscreen.c | 8 ++-- 10 files changed, 93 insertions(+), 60 deletions(-) diff --git a/plugins/mobile/battery/battery-notification.c b/plugins/mobile/battery/battery-notification.c index d72c287..c3fe9f1 100644 --- a/plugins/mobile/battery/battery-notification.c +++ b/plugins/mobile/battery/battery-notification.c @@ -52,6 +52,7 @@ enum event_noti_type { }; static struct display_plugin *disp_plgn; +static struct battery_status *battery; static guint abnormal_timer; static int noti_low = NOTI_NONE; @@ -163,7 +164,7 @@ static int launch_lowbat_noti(int capacity, int option) disp_plgn->pm_change_internal(INTERNAL_LOCK_LOWBAT, LCD_NORMAL); } prev_level = battery_info.warning; - if (battery.charge_now) + if (battery->charge_now) ret = dbus_handle_method_async_var(POPUP_BUS_NAME, POPUP_PATH_BATTERY, POPUP_INTERFACE_BATTERY, @@ -204,7 +205,7 @@ static int launch_lowbat_noti(int capacity, int option) disp_plgn->pm_change_internal(INTERNAL_LOCK_LOWBAT, LCD_NORMAL); } prev_level = battery_info.critical; - if (battery.charge_now) + if (battery->charge_now) ret = dbus_handle_method_async_var(POPUP_BUS_NAME, POPUP_PATH_BATTERY, POPUP_INTERFACE_BATTERY, @@ -237,13 +238,13 @@ static void clean_lowbat_noti(const char *prev, const char *str) return; } - if (prev == str && !battery.charge_now) + if (prev == str && !battery->charge_now) return; condition = check_remove_condition(prev, str); _D("Condition: %d", condition); - if (condition || battery.charge_now) { + if (condition || battery->charge_now) { if (noti_crit > 1) { /* remove critical notiid */ noti_id = noti_crit; @@ -306,14 +307,14 @@ static int check_power_supply_noti(void) static void update_ovp(enum battery_noti_status status) { - _I("charge %d ovp %d(old %d)", battery.charge_now, battery.health, old_battery.health); + _I("charge %d ovp %d(old %d)", battery->charge_now, battery->health, old_battery.health); - old_battery.health = battery.health; + old_battery.health = battery->health; if (status == DEVICE_NOTI_ON) battery_pm_change_internal(INTERNAL_LOCK_POPUP, LCD_DIM); else battery_pm_change_internal(INTERNAL_LOCK_POPUP, LCD_NORMAL); - device_notify(DEVICE_NOTIFIER_BATTERY_OVP, (void *)&battery.health); + device_notify(DEVICE_NOTIFIER_BATTERY_OVP, (void *)&battery->health); } static void health_timer_reset(void) @@ -325,19 +326,19 @@ static gboolean health_timer_cb(void *data) { health_timer_reset(); - if (battery.health != HEALTH_LOW && battery.health != HEALTH_HIGH) + if (battery->health != HEALTH_LOW && battery->health != HEALTH_HIGH) return G_SOURCE_REMOVE; - CRITICAL_LOG("Popup: Battery health status is not good, %s.", battery.health_s); - device_notify(DEVICE_NOTIFIER_BATTERY_HEALTH, (void *)&battery.health); + CRITICAL_LOG("Popup: Battery health status is not good, %s.", battery->health_s); + device_notify(DEVICE_NOTIFIER_BATTERY_HEALTH, (void *)&battery->health); battery_pm_change_internal(INTERNAL_LOCK_POPUP, LCD_DIM); if (disp_plgn->pm_unlock_internal) disp_plgn->pm_unlock_internal(INTERNAL_LOCK_POPUP, LCD_OFF, PM_SLEEP_MARGIN); if (disp_plgn->pm_lock_internal) disp_plgn->pm_lock_internal(INTERNAL_LOCK_POPUP, LCD_DIM, STAY_CUR_STATE, 0); - if (battery.health == HEALTH_LOW) + if (battery->health == HEALTH_LOW) battery_charge_err_low_act(NULL); - else if (battery.health == HEALTH_HIGH) + else if (battery->health == HEALTH_HIGH) battery_charge_err_high_act(NULL); return G_SOURCE_REMOVE; } @@ -351,7 +352,7 @@ static void abnormal_popup_dbus_signal_handler(GDBusConnection *conn, gpointer user_data) { - if (battery.health == HEALTH_GOOD) + if (battery->health == HEALTH_GOOD) return; _I("Restart health timer."); @@ -410,7 +411,10 @@ BATTERY_OPS_REGISTER(&battery_notification_ops) static void __CONSTRUCTOR__ initialize(void) { disp_plgn = get_display_plugin(); - if (!disp_plgn) { + if (!disp_plgn) _E("Failed to get display plugin."); - } + + battery = get_battery_status(); + if (!battery) + _E("Failed to get battery status structure."); } diff --git a/plugins/wearable/battery/battery-notification.c b/plugins/wearable/battery/battery-notification.c index 8ab24f4..0d8e1e0 100644 --- a/plugins/wearable/battery/battery-notification.c +++ b/plugins/wearable/battery/battery-notification.c @@ -27,6 +27,8 @@ #include "battery.h" #include "dd-display.h" +static struct battery_status *battery; + static int display_changed(void *data) { static enum state_t old; @@ -38,7 +40,7 @@ static int display_changed(void *data) old = state; state = *(int *)data; - if (battery.health != HEALTH_LOW && battery.health != HEALTH_HIGH) + if (battery->health != HEALTH_LOW && battery->health != HEALTH_HIGH) return state; /* relaunch health popup on LCDON */ @@ -68,11 +70,11 @@ static void update_ovp(enum battery_noti_status status) return; old = status; - _I("Charge(%d) ovp(%d, old: %d) with lcd(%s)", battery.charge_now, battery.health, + _I("Charge(%d) ovp(%d, old: %d) with lcd(%s)", battery->charge_now, battery->health, old_battery.health, (status == DEVICE_NOTI_ON) ? "dim" : "normal"); - old_battery.health = battery.health; - device_notify(DEVICE_NOTIFIER_BATTERY_OVP, (void *)&battery.health); + old_battery.health = battery->health; + device_notify(DEVICE_NOTIFIER_BATTERY_OVP, (void *)&battery->health); battery_pm_change_internal(INTERNAL_LOCK_POPUP, LCD_NORMAL); } @@ -86,7 +88,6 @@ static void battery_notification_init(void *data) _D("Add plugins for battery notification."); plugin->check_power_supply_noti = check_power_supply_noti; plugin->update_ovp = update_ovp; - plugin->display_changed = display_changed; register_notifier(DEVICE_NOTIFIER_LCD, display_changed); @@ -98,3 +99,10 @@ static const struct battery_ops battery_notification_ops = { }; BATTERY_OPS_REGISTER(&battery_notification_ops) + +static void __CONSTRUCTOR__ initialize(void) +{ + battery = get_battery_status(); + if (!battery) + _E("Failed to get battery status structure."); +} diff --git a/plugins/wearable/display/device-interface.c b/plugins/wearable/display/device-interface.c index c26937e..dd1a03f 100644 --- a/plugins/wearable/display/device-interface.c +++ b/plugins/wearable/display/device-interface.c @@ -646,6 +646,11 @@ static int backlight_transit_state(int state) int brt, val; int start, end; static int aod_brightness_level; + struct battery_status *battery = get_battery_status(); + if (!battery) { + _E("Failed to get battery status structure."); + return -EINVAL; + } backlight_ops.get_brightness(&brt); @@ -691,7 +696,7 @@ static int backlight_transit_state(int state) return 0; } - if (battery.charge_now == CHARGER_CHARGING) { + if (battery->charge_now == CHARGER_CHARGING) { if (aod_charging_level > 0 && val >= aod_charging_level) aod_brightness_level = aod_charging_level; else if (aod_min_level > 0 && val >= aod_min_level) diff --git a/src/apps/apps.c b/src/apps/apps.c index 13ccf7e..744e3af 100644 --- a/src/apps/apps.c +++ b/src/apps/apps.c @@ -19,7 +19,6 @@ #include #include "core/log.h" #include "core/common.h" -#include "display/display-ops.h" #include "apps.h" #include "shared/plugin.h" diff --git a/src/battery/battery-time.c b/src/battery/battery-time.c index 154be9a..f557448 100644 --- a/src/battery/battery-time.c +++ b/src/battery/battery-time.c @@ -263,8 +263,15 @@ static int battinfo_calculation(void) int capacity = 0; int estimated_time = 0; int tmp = 0; + struct battery_status *battery; - capacity = battery.capacity; + battery = get_battery_status(); + if (!battery) { + _E("Failed to get battery status structure."); + return -EINVAL; + } + + capacity = battery->capacity; if (capacity <= 0) return -1; @@ -281,7 +288,7 @@ static int battinfo_calculation(void) del_all_batt_node(B_UNCHARGING); if ((capacity * 100 / FULL_CAPACITY) >= BATTERY_FULL_THRESHOLD) { - if (battery.charge_full == CHARGING_FULL) { + if (battery->charge_full == CHARGING_FULL) { del_all_batt_node(B_CHARGING); _I("Battery fully charged."); update_time(A_TIMETOFULL, 0); diff --git a/src/battery/lowbat-handler.c b/src/battery/lowbat-handler.c index e8e32a2..c25523c 100644 --- a/src/battery/lowbat-handler.c +++ b/src/battery/lowbat-handler.c @@ -70,6 +70,8 @@ struct lowbat_process_entry { static struct display_plugin *disp_plgn; static struct battery_plugin *battery_plgn; +static struct battery_status *battery; + static int cur_bat_state = BATTERY_UNKNOWN; static int cur_bat_capacity = BATTERY_UNKNOWN; static int custom_warning_level = BATTERY_UNKNOWN; @@ -107,7 +109,7 @@ static int lowbat_scenario(int old, int now, void *data) struct lowbat_process_entry *scenario; int found = 0; - if (old == now && battery.charge_now) + if (old == now && battery->charge_now) return found; DD_LIST_FOREACH(lpe, n, scenario) { if (old != scenario->old || now != scenario->now) @@ -178,8 +180,8 @@ static int booting_done(void *data) _I("Booting done."); if (popup) { popup = 0; - if (battery.charge_now != CHARGER_CHARGING && - battery.charge_full != CHARGING_FULL) + if (battery->charge_now != CHARGER_CHARGING && + battery->charge_full != CHARGING_FULL) lowbat_popup(BAT_OPT_NONE); else _I("Skip low battery popup during charging."); @@ -340,7 +342,7 @@ static void battery_level_send_system_event(int bat_percent) const char *str; static const char *prev; - if (bat_percent >= battery_info.normal && battery.charge_full == CHARGING_FULL) + if (bat_percent >= battery_info.normal && battery->charge_full == CHARGING_FULL) str = EVT_VAL_BATTERY_LEVEL_FULL; else if (bat_percent > battery_info.warning) str = EVT_VAL_BATTERY_LEVEL_HIGH; @@ -376,7 +378,7 @@ static void change_lowbat_level(int bat_percent) } if (bat_percent >= battery_info.normal) { - if (battery.charge_full == CHARGING_FULL) + if (battery->charge_full == CHARGING_FULL) now = VCONFKEY_SYSMAN_BAT_LEVEL_FULL; else now = VCONFKEY_SYSMAN_BAT_LEVEL_HIGH; @@ -427,13 +429,13 @@ static void lowbat_custom_popup(int online, int capacity) custom_warning_launch = false; return; } - if (online == battery.online && custom_warning_launch) + if (online == battery->online && custom_warning_launch) return; - if (battery.online > POWER_SUPPLY_TYPE_BATTERY && custom_warning_launch) + if (battery->online > POWER_SUPPLY_TYPE_BATTERY && custom_warning_launch) return; custom_warning_launch = true; - _I("Launch custom lowbattery warning popup. online(%d, %d), capacity(%d, %d)", online, battery.online, capacity, custom_warning_level); + _I("Launch custom lowbattery warning popup. online(%d, %d), capacity(%d, %d)", online, battery->online, capacity, custom_warning_level); (void)battery_warning_low_act(NULL); } @@ -489,9 +491,9 @@ static int lowbat_process(int bat_percent, void *ad) } if (new_bat_capacity <= battery_info.realoff) { - if (battery.charge_now == CHARGER_CHARGING || battery.charger_charging == CHARGER_DISABLED) { + if (battery->charge_now == CHARGER_CHARGING || battery->charger_charging == CHARGER_DISABLED) { _I("Skip lowbat poweroff during test (c:%d charge:%d online:%d charger_charging:%d)", - battery.capacity, battery.charge_now, battery.online, battery.charger_charging); + battery->capacity, battery->charge_now, battery->online, battery->charger_charging); new_bat_state = battery_info.poweroff; if (vconf_state != VCONFKEY_SYSMAN_BAT_POWER_OFF) status = VCONFKEY_SYSMAN_BAT_POWER_OFF; @@ -515,7 +517,7 @@ static int lowbat_process(int bat_percent, void *ad) } else { new_bat_state = battery_info.normal; if (new_bat_capacity == BATTERY_FULL) { - if (battery.charge_full) { + if (battery->charge_full) { if (vconf_state != VCONFKEY_SYSMAN_BAT_FULL) status = VCONFKEY_SYSMAN_BAT_FULL; } else { @@ -530,14 +532,14 @@ static int lowbat_process(int bat_percent, void *ad) /* If the battery continues to run out even though it is being charged * for a certain period of time, turn off the device. */ - if (new_bat_capacity <= battery_info.realoff && battery.charge_now == CHARGER_CHARGING) { + if (new_bat_capacity <= battery_info.realoff && battery->charge_now == CHARGER_CHARGING) { if (low_bat_skip_cnt >= RETRY_MAX) { new_bat_state = battery_info.realoff; status = VCONFKEY_SYSMAN_BAT_REAL_POWER_OFF; _I("Go to real poweroff inspite of charging (c:%d charge:%d online:%d charger_charging %d current now %d)", - battery.capacity, battery.charge_now, battery.online, battery.charger_charging, battery.current_now); + battery->capacity, battery->charge_now, battery->online, battery->charger_charging, battery->current_now); low_bat_skip_cnt = 0; - } else if (battery.current_now <= MIN_INOW_VALUE) { + } else if (battery->current_now <= MIN_INOW_VALUE) { low_bat_skip_cnt++; } else { low_bat_skip_cnt = 0; @@ -563,12 +565,12 @@ static int lowbat_process(int bat_percent, void *ad) low_bat_old = low_bat; } - if (battery.online == POWER_SUPPLY_TYPE_UNKNOWN) + if (battery->online == POWER_SUPPLY_TYPE_UNKNOWN) return result; - if (cur_bat_state == new_bat_state && online == battery.online) + if (cur_bat_state == new_bat_state && online == battery->online) return result; - online = battery.online; + online = battery->online; if (cur_bat_state == BATTERY_UNKNOWN) cur_bat_state = battery_info.normal; if (lowbat_scenario(cur_bat_state, new_bat_state, NULL)) @@ -582,7 +584,7 @@ static int check_lowbat_percent(int *pct) { int bat_percent; - bat_percent = battery.capacity; + bat_percent = battery->capacity; if (bat_percent < 0) return -ENODEV; if (bat_percent > 100) @@ -599,12 +601,12 @@ static int lowbat_monitor(void *data) r = lowbat_initialized(NULL); if (r != BATTERY_ENABLED) - return battery.charging_level; + return battery->charging_level; if (data == NULL) { r = check_lowbat_percent(&bat_percent); if (r < 0) - return battery.charging_level; + return battery->charging_level; } else bat_percent = *(int *)data; return lowbat_process(bat_percent, NULL); @@ -630,8 +632,8 @@ static int lowbat_monitor_init(void *data) battery_info.critical, battery_info.poweroff, battery_info.realoff); lowbat_scenario_init(); - check_lowbat_percent(&battery.capacity); - lowbat_process(battery.capacity, NULL); + check_lowbat_percent(&battery->capacity); + lowbat_process(battery->capacity, NULL); return 0; } @@ -731,11 +733,11 @@ static void lowbat_exit(void *data) static gboolean low_battery_charge_status(void *data) { low_batt_sig_timer = 0; - battery.charging_level = lowbat_monitor(data); - if (battery.charging_level > 0 && old_battery.charging_level != battery.charging_level) { - if (vconf_set_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, battery.charging_level) < 0) + battery->charging_level = lowbat_monitor(data); + if (battery->charging_level > 0 && old_battery.charging_level != battery->charging_level) { + if (vconf_set_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, battery->charging_level) < 0) _E("Fail to set level."); - if (power_supply_broadcast(CHARGE_LEVEL_SIGNAL, battery.charging_level) < 0) + if (power_supply_broadcast(CHARGE_LEVEL_SIGNAL, battery->charging_level) < 0) _E("power_supply_broadcast failed"); } return G_SOURCE_REMOVE; @@ -779,12 +781,14 @@ DEVICE_OPS_REGISTER(&lowbat_device_ops) static void __CONSTRUCTOR__ initialize(void) { disp_plgn = get_display_plugin(); - if (!disp_plgn) { + if (!disp_plgn) _E("Failed to get display plugin."); - } battery_plgn = get_battery_plugin(); - if (!battery_plgn) { + if (!battery_plgn) _E("Failed to get battery plugin."); - } + + battery = get_battery_status(); + if (!battery) + _E("Failed to get battery status structure."); } diff --git a/src/battery/power-supply.c b/src/battery/power-supply.c index 44f0711..c7e3203 100644 --- a/src/battery/power-supply.c +++ b/src/battery/power-supply.c @@ -91,7 +91,7 @@ static const struct uevent_handler uh = { .uevent_func = uevent_power_handler, }; -struct battery_status battery; +static struct battery_status battery; struct battery_status old_battery; static int noti_id; static int online_status; @@ -113,6 +113,11 @@ static struct battery_device *battery_dev; static int load_uevent(struct parse_result *result, void *user_data); static int event_handler_state_changed(void *data); +inline struct battery_status *get_battery_status() +{ + return &battery; +} + static int lowbat_execute(void *data) { static const struct device_ops *lowbat_ops; diff --git a/src/battery/power-supply.h b/src/battery/power-supply.h index 1a2dfee..ebc050b 100644 --- a/src/battery/power-supply.h +++ b/src/battery/power-supply.h @@ -118,7 +118,7 @@ struct battery_status { char power_source_s[32]; }; -extern struct battery_status battery; +struct battery_status *get_battery_status(); extern struct battery_status old_battery; extern bool battery_initialized; diff --git a/src/display/display-signal.c b/src/display/display-signal.c index 0b64ff0..cf2cf83 100644 --- a/src/display/display-signal.c +++ b/src/display/display-signal.c @@ -17,7 +17,6 @@ */ #include "display-signal.h" -#include "display-ops.h" #include "poll.h" #include "shared/plugin.h" diff --git a/src/touchscreen/touchscreen.c b/src/touchscreen/touchscreen.c index dff61ce..adc244c 100644 --- a/src/touchscreen/touchscreen.c +++ b/src/touchscreen/touchscreen.c @@ -212,7 +212,9 @@ static int touchscreen_start(enum device_flags flags) static int touchscreen_stop(enum device_flags flags) { - if (!_display_conf || !_backlight_ops) { + struct battery_status *battery = get_battery_status(); + + if (!_display_conf || !_backlight_ops || !battery) { _I("Touchscreen is not initialized."); goto exit; } @@ -232,8 +234,8 @@ static int touchscreen_stop(enum device_flags flags) return touchscreen_set_state(TOUCHSCREEN_OFF); } - if (battery.online_type >= CHARGER_TYPE_WIRE) { - _I("Battery charging one %d %d.", battery.online, battery.online_type); + if (battery && battery->online_type >= CHARGER_TYPE_WIRE) { + _I("Battery charging one %d %d.", battery->online, battery->online_type); return touchscreen_powersaving(POWERSAVING_ON); } -- 2.7.4 From eeb12e2e8ddddeb04631d2242e08925d67e0cc48 Mon Sep 17 00:00:00 2001 From: Yunmi Ha Date: Fri, 7 Aug 2020 17:51:23 +0900 Subject: [PATCH 03/16] Change states global variable to static Change-Id: I86483d65ad63f6ceca0c12111f994ffaf95669eb Signed-off-by: Yunmi Ha --- plugins/iot/display/core.c | 7 +++++- plugins/mobile/display/core.c | 7 +++++- plugins/tv/display/core.c | 7 +++++- plugins/tv/display/state-tv.c | 42 +++++++++++++++++------------------ plugins/wearable/display/core.c | 7 +++++- plugins/wearable/display/powersaver.c | 4 ++-- src/display/auto-brightness.c | 6 ++--- src/display/core.h | 3 ++- src/display/display-lock.c | 8 +++---- src/display/poll.c | 2 +- 10 files changed, 57 insertions(+), 36 deletions(-) diff --git a/plugins/iot/display/core.c b/plugins/iot/display/core.c index ba2fb8a..a2e4ae7 100644 --- a/plugins/iot/display/core.c +++ b/plugins/iot/display/core.c @@ -132,7 +132,7 @@ static gboolean del_off_cond(void *data); static int default_proc_change_state(unsigned int cond, pid_t pid); static int (*proc_change_state)(unsigned int cond, pid_t pid) = default_proc_change_state; -struct state states[S_END] = { +static struct state states[S_END] = { { S_START, "S_START", NULL, NULL, NULL, NULL }, { S_NORMAL, "S_NORMAL", default_trans, default_action, default_check, del_normal_cond }, { S_LCDDIM, "S_LCDDIM", default_trans, default_action, default_check, del_dim_cond }, @@ -211,6 +211,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct state* state_st(enum state_t state) +{ + return &states[state]; +} + void change_state_action(enum state_t state, int (*func)(int timeout)) { _I("[%s] 'action' is changed.", states[state].name); diff --git a/plugins/mobile/display/core.c b/plugins/mobile/display/core.c index e9cc44c..13f219f 100644 --- a/plugins/mobile/display/core.c +++ b/plugins/mobile/display/core.c @@ -135,7 +135,7 @@ static gboolean del_off_cond(void *data); static int default_proc_change_state(unsigned int cond, pid_t pid); static int (*proc_change_state)(unsigned int cond, pid_t pid) = default_proc_change_state; -struct state states[S_END] = { +static struct state states[S_END] = { { S_START, "S_START", NULL, NULL, NULL, NULL }, { S_NORMAL, "S_NORMAL", default_trans, default_action, default_check, del_normal_cond }, { S_LCDDIM, "S_LCDDIM", default_trans, default_action, default_check, del_dim_cond }, @@ -214,6 +214,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct state* state_st(enum state_t state) +{ + return &states[state]; +} + void change_state_action(enum state_t state, int (*func)(int timeout)) { _I("[%s] 'action' is changed.", states[state].name); diff --git a/plugins/tv/display/core.c b/plugins/tv/display/core.c index fbf58d0..6220f09 100644 --- a/plugins/tv/display/core.c +++ b/plugins/tv/display/core.c @@ -133,7 +133,7 @@ static gboolean del_off_cond(void *data); static int default_proc_change_state(unsigned int cond, pid_t pid); static int (*proc_change_state)(unsigned int cond, pid_t pid) = default_proc_change_state; -struct state states[S_END] = { +static struct state states[S_END] = { { S_START, "S_START", NULL, NULL, NULL, NULL }, { S_NORMAL, "S_NORMAL", default_trans, default_action, default_check, del_normal_cond }, { S_LCDDIM, "S_LCDDIM", default_trans, default_action, default_check, del_dim_cond }, @@ -212,6 +212,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct state* state_st(enum state_t state) +{ + return &states[state]; +} + void change_state_action(enum state_t state, int (*func)(int timeout)) { _I("[%s] 'action' is changed.", states[state].name); diff --git a/plugins/tv/display/state-tv.c b/plugins/tv/display/state-tv.c index 0a86fde..3ce57d6 100644 --- a/plugins/tv/display/state-tv.c +++ b/plugins/tv/display/state-tv.c @@ -50,24 +50,24 @@ static int change_state(pid_t pid, int type, enum state_t st) { int ret; - if (type == PM_CONTROL_EVENT && states[st].check) { - ret = states[get_pm_cur_state()].check(get_pm_cur_state(), st); + if (type == PM_CONTROL_EVENT && state_st(st)->check) { + ret = state_st(get_pm_cur_state())->check(get_pm_cur_state(), st); if (ret != 0) { _E("(%s) State Locked. Cannot be changed to (%s)", - states[get_pm_cur_state()].name, states[st].name); + state_st(get_pm_cur_state())->name, state_st(st)->name); return ret; } } - if (states[st].trans) { - ret = states[st].trans(type); + if (state_st(st)->trans) { + ret = state_st(st)->trans(type); if (ret < 0) { - _E("Failed to trans state (%s, ret:%d)", states[st].name, ret); + _E("Failed to trans state (%s, ret:%d)", state_st(st)->name, ret); return ret; } } - _I("Success to change state (%s) requested by pid(%d)", states[st].name, pid); + _I("Success to change state (%s) requested by pid(%d)", state_st(st)->name, pid); return 0; } @@ -90,7 +90,7 @@ static int tv_proc_change_state(unsigned int cond, pid_t pid) } } - _I("Change State to %s (%d)", states[next].name, pid); + _I("Change State to %s (%d)", state_st(next)->name, pid); ret = change_state(pid, PM_CONTROL_EVENT, next); if (ret != 0) { @@ -138,7 +138,7 @@ static int lcdon_pre(void *data) DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY, SIGNAL_PRE_CHANGE_STATE, - g_variant_new("(s)", states[S_LCDON].name)); + g_variant_new("(s)", state_st(S_LCDON)->name)); if (ret < 0) _E("Failed to send dbus signal(%s)", SIGNAL_PRE_CHANGE_STATE); /*Give time to process callback */ @@ -156,7 +156,7 @@ static int lcdon_post(void *data) DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY, SIGNAL_CHANGE_STATE, - g_variant_new("(s)", states[S_LCDON].name)); + g_variant_new("(s)", state_st(S_LCDON)->name)); if (ret < 0) _E("Failed to send dbus signal(%s)", SIGNAL_CHANGE_STATE); @@ -173,7 +173,7 @@ static int lcdon_action(int timeout) if ((get_pm_old_state() != S_LCDOFF) && (get_pm_old_state() != S_SLEEP)) { - _I("pm_old_state (%s). Skip lcd on", states[get_pm_old_state()].name); + _I("pm_old_state (%s). Skip lcd on", state_st(get_pm_old_state())->name); return 0; } @@ -198,7 +198,7 @@ static int lcdon_trans(int evt) /* state transition */ set_pm_old_state(get_pm_cur_state()); set_pm_cur_state(S_LCDON); - st = &states[get_pm_cur_state()]; + st = state_st(get_pm_cur_state()); if (st->action) st->action(0); @@ -230,7 +230,7 @@ static int lcdoff_post(void *data) DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY, SIGNAL_CHANGE_STATE, - g_variant_new("(s)", states[S_LCDOFF].name)); + g_variant_new("(s)", state_st(S_LCDOFF)->name)); if (ret < 0) _E("Failed to send dbus signal(%s)", SIGNAL_CHANGE_STATE); @@ -266,7 +266,7 @@ static int lcdoff_trans(int evt) /* state transition */ set_pm_old_state(get_pm_cur_state()); set_pm_cur_state(S_LCDOFF); - st = &states[get_pm_cur_state()]; + st = state_st(get_pm_cur_state()); if (st->action) st->action(0); @@ -310,7 +310,7 @@ static int standby_post(void *data) DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY, SIGNAL_CHANGE_STATE, - g_variant_new("(s)", states[S_STANDBY].name)); + g_variant_new("(s)", state_st(S_STANDBY)->name)); if (ret < 0) _E("Failed to send dbus signal(%s)", SIGNAL_CHANGE_STATE); @@ -372,7 +372,7 @@ static int standby_trans(int evt) /* state transition */ set_pm_old_state(get_pm_cur_state()); set_pm_cur_state(S_STANDBY); - st = &states[get_pm_cur_state()]; + st = state_st(get_pm_cur_state()); if (st->action) st->action(0); @@ -405,7 +405,7 @@ static int suspend_post(void *data) cond = S_LCDON; ret = tv_proc_change_state(cond, INTERNAL_LOCK_SUSPEND); if (ret < 0) - _E("Fail to change state to next_state(%s)", states[cond].name); + _E("Fail to change state to next_state(%s)", state_st(cond)->name); /* Broadcast pre-wakeup signal */ ret = dbus_handle_emit_dbus_signal(NULL, @@ -441,7 +441,7 @@ static int suspend_action(int timeout) /* system waked up by devices */ set_pm_old_state(get_pm_cur_state()); set_pm_cur_state(S_LCDOFF); - st = &states[get_pm_cur_state()]; + st = state_st(get_pm_cur_state()); if (st->action) st->action(0); @@ -463,14 +463,14 @@ static int suspend_trans(int evt) /* state transition */ set_pm_old_state(get_pm_cur_state()); set_pm_cur_state(S_LCDOFF); - st = &states[get_pm_cur_state()]; + st = state_st(get_pm_cur_state()); if (st->action) st->action(0); set_pm_old_state(get_pm_cur_state()); set_pm_cur_state(S_SUSPEND); - st = &states[get_pm_cur_state()]; + st = state_st(get_pm_cur_state()); if (st->action) st->action(0); @@ -500,7 +500,7 @@ static int poweroff_action(int timeout) static int poweroff_trans(int evt) { struct state *st; - st = &states[S_POWEROFF]; + st = state_st(S_POWEROFF); if (st->action) st->action(0); return 0; diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index ab576e4..3637314 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -140,7 +140,7 @@ static gboolean del_off_cond(void *data); static int default_proc_change_state(unsigned int cond, pid_t pid); static int (*proc_change_state)(unsigned int cond, pid_t pid) = default_proc_change_state; -struct state states[S_END] = { +static struct state states[S_END] = { { S_START, "S_START", NULL, NULL, NULL, NULL }, { S_NORMAL, "S_NORMAL", default_trans, default_action, default_check, del_normal_cond }, { S_LCDDIM, "S_LCDDIM", default_trans, default_action, default_check, del_dim_cond }, @@ -219,6 +219,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct state *state_st(enum state_t state) +{ + return &states[state]; +} + void change_state_action(enum state_t state, int (*func)(int timeout)) { _I("[%s] 'action' is changed.", states[state].name); diff --git a/plugins/wearable/display/powersaver.c b/plugins/wearable/display/powersaver.c index 6c1de14..785acfa 100644 --- a/plugins/wearable/display/powersaver.c +++ b/plugins/wearable/display/powersaver.c @@ -56,8 +56,8 @@ static int set_powersaver_mode(int mode) backlight_ops->update(); get_run_timeout(&timeout); - states[S_NORMAL].timeout = timeout; - states[get_pm_cur_state()].trans(EVENT_INPUT); + state_st(S_NORMAL)->timeout = timeout; + state_st(get_pm_cur_state())->trans(EVENT_INPUT); return 0; } diff --git a/src/display/auto-brightness.c b/src/display/auto-brightness.c index 1afc48d..e220ec0 100644 --- a/src/display/auto-brightness.c +++ b/src/display/auto-brightness.c @@ -378,7 +378,7 @@ static int disconnect_sensor(void) } if (_default_action != NULL) { - states[S_NORMAL].action = _default_action; + state_st(S_NORMAL)->action = _default_action; _default_action = NULL; } if (alc_timeout_id > 0) { @@ -413,8 +413,8 @@ static int set_autobrightness_state(int status) /* change alc action func */ if (_default_action == NULL) - _default_action = states[S_NORMAL].action; - states[S_NORMAL].action = alc_action; + _default_action = state_st(S_NORMAL)->action; + state_st(S_NORMAL)->action = alc_action; display_info.update_auto_brightness(true); diff --git a/src/display/core.h b/src/display/core.h index d3fded2..712d2cc 100644 --- a/src/display/core.h +++ b/src/display/core.h @@ -104,7 +104,8 @@ struct state { GSourceFunc timeout_cb; int timeout; }; -extern struct state states[S_END]; + +struct state *state_st(enum state_t state); /* * @brief Configuration structure diff --git a/src/display/display-lock.c b/src/display/display-lock.c index 088b924..2facaac 100644 --- a/src/display/display-lock.c +++ b/src/display/display-lock.c @@ -91,7 +91,7 @@ static void pmlock_check_cb(GVariant *var, void *user_data, GError *err) diff = difftime(now, node->time); CRITICAL_LOG("%s(%d) has held %s lock for a long time(%.0f s).", - app_id, pid, states[state].name + 2, diff); + app_id, pid, state_st(state)->name + 2, diff); ret = dbus_handle_emit_dbus_signal(NULL, DEVICED_PATH_DISPLAY, @@ -253,7 +253,7 @@ int check_lock_condition(enum state_t state) int ret = false; pid_t owner = getpid(); - _D("check holdkey block : state of %s", states[state].name); + _D("check holdkey block : state of %s", state_st(state)->name); DD_LIST_FOREACH(cond_head[state], elem, t) { if (t->pid != owner && t->background == false) { @@ -272,7 +272,7 @@ int check_holdkey_block(enum state_t state) PmLockNode *t = NULL; int ret = 0; - _I("Check holdkey block: state of %s", states[state].name); + _I("Check holdkey block: state of %s", state_st(state)->name); if (custom_holdkey_block == true) { _I("Custom hold key blocked"); @@ -295,7 +295,7 @@ int delete_condition(enum state_t state) dd_list *elem, *next; PmLockNode *t = NULL; - _I("delete condition : state of %s", states[state].name); + _I("delete condition : state of %s", state_st(state)->name); if (!cond_head[state]) return 0; diff --git a/src/display/poll.c b/src/display/poll.c index 279675c..c8a4a59 100644 --- a/src/display/poll.c +++ b/src/display/poll.c @@ -75,7 +75,7 @@ static enum state_t get_state(int s_bits) static bool state_supported(enum state_t st) { - if (states[st].trans) + if (state_st(st)->trans) return true; return false; } -- 2.7.4 From 55b1ce1b1f9c17b672b7f477264cb68af805e5e1 Mon Sep 17 00:00:00 2001 From: Yunmi Ha Date: Fri, 7 Aug 2020 18:29:07 +0900 Subject: [PATCH 04/16] Change display_conf to static Change-Id: I64cc875bd0fb554f297bf95ba6994ffe429c52ef Signed-off-by: Yunmi Ha --- plugins/iot/display/core.c | 7 +++++- plugins/iot/display/device-interface.c | 25 +++++++++++++------- plugins/iot/display/key-filter.c | 11 ++++++--- plugins/mobile/display/core.c | 7 +++++- plugins/mobile/display/device-interface.c | 25 +++++++++++++------- plugins/mobile/display/key-filter.c | 11 ++++++--- plugins/tv/display/core.c | 7 +++++- plugins/tv/display/device-interface.c | 25 +++++++++++++------- plugins/tv/display/key-filter.c | 11 ++++++--- .../wearable/display/auto-brightness-sensorhub.c | 7 +++++- plugins/wearable/display/core.c | 7 +++++- plugins/wearable/display/device-interface.c | 19 +++++++++++---- plugins/wearable/display/key-filter.c | 11 ++++++--- src/display/auto-brightness.c | 27 +++++++++++++--------- src/display/core.h | 2 +- src/display/display-dbus.c | 12 +++++++--- src/display/display-lock.c | 7 +++++- src/display/input.c | 7 +++++- src/display/setting.c | 9 ++++++-- 19 files changed, 172 insertions(+), 65 deletions(-) diff --git a/plugins/iot/display/core.c b/plugins/iot/display/core.c index a2e4ae7..6d842c7 100644 --- a/plugins/iot/display/core.c +++ b/plugins/iot/display/core.c @@ -181,7 +181,7 @@ static int trans_table[S_END][EVENT_END] = { (b.tv_sec * 1000000 + b.tv_usec)) \ / 1000) -struct display_config display_conf = { +static struct display_config display_conf = { .lock_wait_time = LOCK_SCREEN_WATING_TIME, .longpress_interval = LONG_PRESS_INTERVAL, .lightsensor_interval = SAMPLING_INTERVAL, @@ -211,6 +211,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct display_config* get_display_config() +{ + return &display_conf; +} + inline struct state* state_st(enum state_t state) { return &states[state]; diff --git a/plugins/iot/display/device-interface.c b/plugins/iot/display/device-interface.c index 49c9172..64e4f1e 100644 --- a/plugins/iot/display/device-interface.c +++ b/plugins/iot/display/device-interface.c @@ -76,6 +76,7 @@ static int default_brightness; static int dpms_running_state = DPMS_SETTING_DONE; static struct display_device *display_dev; static guint release_timer; +static struct display_config *display_conf; inline struct _backlight_ops *get_backlight_ops(void) { @@ -363,7 +364,7 @@ static int backlight_standby(int force) static int set_default_brt(int level) { if (level < PM_MIN_BRIGHTNESS || level > PM_MAX_BRIGHTNESS) - level = display_conf.pm_default_brightness; + level = display_conf->pm_default_brightness; default_brightness = level; @@ -642,7 +643,7 @@ static int backlight_transit_state(int state) if (state == DPMS_OFF) { start = brt; - end = display_conf.aod_enter_level; + end = display_conf->aod_enter_level; /* * The value of backlight_ops.get_brightness is system brightness. @@ -651,19 +652,19 @@ static int backlight_transit_state(int state) */ get_brightness(&val); - if (val > display_conf.aod_enter_level) - backlight_ops.transit_brt(start, end, display_conf.brightness_change_step); + if (val > display_conf->aod_enter_level) + backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); } else { /* prevent transit effect when another effect is already executed */ - if (brt != display_conf.aod_enter_level) { + if (brt != display_conf->aod_enter_level) { _W("effect is already executed brt(%d) aod_level(%d)", - brt, display_conf.aod_enter_level); + brt, display_conf->aod_enter_level); return 0; } - start = display_conf.aod_enter_level; + start = display_conf->aod_enter_level; end = default_brightness; - backlight_ops.transit_brt(start, end, display_conf.brightness_change_step); + backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); } return 0; @@ -837,3 +838,11 @@ int exit_sysfs(void) return 0; } + +static void __CONSTRUCTOR__ initialize(void) +{ + display_conf = get_display_config(); + if (!display_conf) + _E("Failed to get display configuration."); +} + diff --git a/plugins/iot/display/key-filter.c b/plugins/iot/display/key-filter.c index d8d4df3..29d7de2 100644 --- a/plugins/iot/display/key-filter.c +++ b/plugins/iot/display/key-filter.c @@ -432,6 +432,11 @@ static int process_power_key(struct input_event *pinput) int ignore = true; static int value = KEY_RELEASED; unsigned int caps; + struct display_config *display_conf = get_display_config(); + if (!display_conf) { + _E("Failed to get display configuration."); + return ignore; + } caps = display_get_caps(DISPLAY_ACTOR_POWER_KEY); @@ -439,7 +444,7 @@ static int process_power_key(struct input_event *pinput) case KEY_RELEASED: check_key_pair(pinput->code, pinput->value, &value); - if (!display_conf.powerkey_doublepress) { + if (!display_conf->powerkey_doublepress) { if (display_has_caps(caps, DISPLAY_CAPA_LCDOFF)) lcdoff_powerkey(); else @@ -475,7 +480,7 @@ static int process_power_key(struct input_event *pinput) if (key_combination == KEY_COMBINATION_POWERKEY) { /* add long key timer */ longkey_timeout_id = g_timeout_add_seconds( - display_conf.longpress_interval, + display_conf->longpress_interval, longkey_pressed_cb, NULL); /* add long key restore timer */ longkey_restore_id = g_timeout_add_seconds( @@ -487,7 +492,7 @@ static int process_power_key(struct input_event *pinput) break; case KEY_BEING_PRESSED: if (timediff_usec(pressed_time, pinput->time) > - (display_conf.longpress_interval * USEC_PER_SEC)) + (display_conf->longpress_interval * USEC_PER_SEC)) longkey_pressed(); break; } diff --git a/plugins/mobile/display/core.c b/plugins/mobile/display/core.c index 13f219f..604135c 100644 --- a/plugins/mobile/display/core.c +++ b/plugins/mobile/display/core.c @@ -184,7 +184,7 @@ static int trans_table[S_END][EVENT_END] = { (b.tv_sec * 1000000 + b.tv_usec)) \ / 1000) -struct display_config display_conf = { +static struct display_config display_conf = { .lock_wait_time = LOCK_SCREEN_WATING_TIME, .longpress_interval = LONG_PRESS_INTERVAL, .lightsensor_interval = SAMPLING_INTERVAL, @@ -214,6 +214,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct display_config* get_display_config() +{ + return &display_conf; +} + inline struct state* state_st(enum state_t state) { return &states[state]; diff --git a/plugins/mobile/display/device-interface.c b/plugins/mobile/display/device-interface.c index 054e181..9b37f8b 100644 --- a/plugins/mobile/display/device-interface.c +++ b/plugins/mobile/display/device-interface.c @@ -75,6 +75,7 @@ static int default_brightness; static int dpms_running_state = DPMS_SETTING_DONE; static struct display_device *display_dev; static guint release_timer; +static struct display_config *display_conf; inline struct _backlight_ops *get_backlight_ops(void) { @@ -362,7 +363,7 @@ static int backlight_standby(int force) static int set_default_brt(int level) { if (level < PM_MIN_BRIGHTNESS || level > PM_MAX_BRIGHTNESS) - level = display_conf.pm_default_brightness; + level = display_conf->pm_default_brightness; default_brightness = level; @@ -641,7 +642,7 @@ static int backlight_transit_state(int state) if (state == DPMS_OFF) { start = brt; - end = display_conf.aod_enter_level; + end = display_conf->aod_enter_level; /* * The value of backlight_ops.get_brightness is system brightness. @@ -650,19 +651,19 @@ static int backlight_transit_state(int state) */ get_brightness(&val); - if (val > display_conf.aod_enter_level) - backlight_ops.transit_brt(start, end, display_conf.brightness_change_step); + if (val > display_conf->aod_enter_level) + backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); } else { /* prevent transit effect when another effect is already executed */ - if (brt != display_conf.aod_enter_level) { + if (brt != display_conf->aod_enter_level) { _W("effect is already executed brt(%d) aod_level(%d)", - brt, display_conf.aod_enter_level); + brt, display_conf->aod_enter_level); return 0; } - start = display_conf.aod_enter_level; + start = display_conf->aod_enter_level; end = default_brightness; - backlight_ops.transit_brt(start, end, display_conf.brightness_change_step); + backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); } return 0; @@ -852,3 +853,11 @@ int exit_sysfs(void) return 0; } + +static void __CONSTRUCTOR__ initialize(void) +{ + display_conf = get_display_config(); + if (!display_conf) + _E("Failed to get display configuration."); +} + diff --git a/plugins/mobile/display/key-filter.c b/plugins/mobile/display/key-filter.c index b5fdf71..4aead39 100644 --- a/plugins/mobile/display/key-filter.c +++ b/plugins/mobile/display/key-filter.c @@ -452,6 +452,11 @@ static int process_power_key(struct input_event *pinput) int ignore = true; static int value = KEY_RELEASED; unsigned int caps; + struct display_config *display_conf = get_display_config(); + if (!display_conf) { + _E("Failed to get display configuration."); + return ignore; + } caps = display_get_caps(DISPLAY_ACTOR_POWER_KEY); @@ -459,7 +464,7 @@ static int process_power_key(struct input_event *pinput) case KEY_RELEASED: check_key_pair(pinput->code, pinput->value, &value); - if (!display_conf.powerkey_doublepress) { + if (!display_conf->powerkey_doublepress) { if (display_has_caps(caps, DISPLAY_CAPA_LCDOFF)) lcdoff_powerkey(); else @@ -508,7 +513,7 @@ static int process_power_key(struct input_event *pinput) if (key_combination == KEY_COMBINATION_POWERKEY) { /* add long key timer */ longkey_timeout_id = g_timeout_add( - display_conf.longpress_interval, + display_conf->longpress_interval, longkey_pressed_cb, NULL); /* add long key restore timer */ longkey_restore_id = g_timeout_add_seconds( @@ -520,7 +525,7 @@ static int process_power_key(struct input_event *pinput) break; case KEY_BEING_PRESSED: if (timediff_usec(pressed_time, pinput->time) > - (display_conf.longpress_interval * USEC_PER_MSEC)) + (display_conf->longpress_interval * USEC_PER_MSEC)) longkey_pressed(); break; } diff --git a/plugins/tv/display/core.c b/plugins/tv/display/core.c index 6220f09..4d85fcd 100644 --- a/plugins/tv/display/core.c +++ b/plugins/tv/display/core.c @@ -182,7 +182,7 @@ static int trans_table[S_END][EVENT_END] = { (b.tv_sec * 1000000 + b.tv_usec)) \ / 1000) -struct display_config display_conf = { +static struct display_config display_conf = { .lock_wait_time = LOCK_SCREEN_WATING_TIME, .longpress_interval = LONG_PRESS_INTERVAL, .lightsensor_interval = SAMPLING_INTERVAL, @@ -212,6 +212,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct display_config* get_display_config() +{ + return &display_conf; +} + inline struct state* state_st(enum state_t state) { return &states[state]; diff --git a/plugins/tv/display/device-interface.c b/plugins/tv/display/device-interface.c index 28c4075..469b793 100644 --- a/plugins/tv/display/device-interface.c +++ b/plugins/tv/display/device-interface.c @@ -76,6 +76,7 @@ static int default_brightness; static int dpms_running_state = DPMS_SETTING_DONE; static struct display_device *display_dev; static guint release_timer; +static struct display_config *display_conf; inline struct _backlight_ops *get_backlight_ops(void) { @@ -363,7 +364,7 @@ static int backlight_standby(int force) static int set_default_brt(int level) { if (level < PM_MIN_BRIGHTNESS || level > PM_MAX_BRIGHTNESS) - level = display_conf.pm_default_brightness; + level = display_conf->pm_default_brightness; default_brightness = level; @@ -642,7 +643,7 @@ static int backlight_transit_state(int state) if (state == DPMS_OFF) { start = brt; - end = display_conf.aod_enter_level; + end = display_conf->aod_enter_level; /* * The value of backlight_ops.get_brightness is system brightness. @@ -651,19 +652,19 @@ static int backlight_transit_state(int state) */ get_brightness(&val); - if (val > display_conf.aod_enter_level) - backlight_ops.transit_brt(start, end, display_conf.brightness_change_step); + if (val > display_conf->aod_enter_level) + backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); } else { /* prevent transit effect when another effect is already executed */ - if (brt != display_conf.aod_enter_level) { + if (brt != display_conf->aod_enter_level) { _W("effect is already executed brt(%d) aod_level(%d)", - brt, display_conf.aod_enter_level); + brt, display_conf->aod_enter_level); return 0; } - start = display_conf.aod_enter_level; + start = display_conf->aod_enter_level; end = default_brightness; - backlight_ops.transit_brt(start, end, display_conf.brightness_change_step); + backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); } return 0; @@ -838,3 +839,11 @@ int exit_sysfs(void) return 0; } + +static void __CONSTRUCTOR__ initialize(void) +{ + display_conf = get_display_config(); + if (!display_conf) + _E("Failed to get display configuration."); +} + diff --git a/plugins/tv/display/key-filter.c b/plugins/tv/display/key-filter.c index 7abfd2f..24757b2 100644 --- a/plugins/tv/display/key-filter.c +++ b/plugins/tv/display/key-filter.c @@ -432,6 +432,11 @@ static int process_power_key(struct input_event *pinput) int ignore = true; static int value = KEY_RELEASED; unsigned int caps; + struct display_config *display_conf = get_display_config(); + if(!display_conf) { + _E("Failed to get display configuration."); + return ignore; + } caps = display_get_caps(DISPLAY_ACTOR_POWER_KEY); @@ -439,7 +444,7 @@ static int process_power_key(struct input_event *pinput) case KEY_RELEASED: check_key_pair(pinput->code, pinput->value, &value); - if (!display_conf.powerkey_doublepress) { + if (!display_conf->powerkey_doublepress) { if (display_has_caps(caps, DISPLAY_CAPA_LCDOFF)) lcdoff_powerkey(); else @@ -475,7 +480,7 @@ static int process_power_key(struct input_event *pinput) if (key_combination == KEY_COMBINATION_POWERKEY) { /* add long key timer */ longkey_timeout_id = g_timeout_add_seconds( - display_conf.longpress_interval, + display_conf->longpress_interval, longkey_pressed_cb, NULL); /* add long key restore timer */ longkey_restore_id = g_timeout_add_seconds( @@ -487,7 +492,7 @@ static int process_power_key(struct input_event *pinput) break; case KEY_BEING_PRESSED: if (timediff_usec(pressed_time, pinput->time) > - (display_conf.longpress_interval * USEC_PER_SEC)) + (display_conf->longpress_interval * USEC_PER_SEC)) longkey_pressed(); break; } diff --git a/plugins/wearable/display/auto-brightness-sensorhub.c b/plugins/wearable/display/auto-brightness-sensorhub.c index c2e1773..e5a5004 100644 --- a/plugins/wearable/display/auto-brightness-sensorhub.c +++ b/plugins/wearable/display/auto-brightness-sensorhub.c @@ -43,8 +43,13 @@ static bool lbm, hbm, hold_brt, lowdim; static void change_brightness_transit(int start, int end) { + struct display_config *display_conf = get_display_config(); + if(!display_conf) { + _E("Failed to get display configuration."); + return ; + } backlight_ops->transit_brt(start, end, - display_conf.brightness_change_step); + display_conf->brightness_change_step); } static void set_brightness_level(int level) diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index 3637314..9cf31dd 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -189,7 +189,7 @@ static int trans_table[S_END][EVENT_END] = { (b.tv_sec * 1000000 + b.tv_usec)) \ / 1000) -struct display_config display_conf = { +static struct display_config display_conf = { .lock_wait_time = LOCK_SCREEN_WATING_TIME, .longpress_interval = LONG_PRESS_INTERVAL, .lightsensor_interval = SAMPLING_INTERVAL, @@ -219,6 +219,11 @@ struct display_function_info display_info = { .face_detection = NULL, }; +inline struct display_config *get_display_config() +{ + return &display_conf; +} + inline struct state *state_st(enum state_t state) { return &states[state]; diff --git a/plugins/wearable/display/device-interface.c b/plugins/wearable/display/device-interface.c index dd1a03f..83dcb2c 100644 --- a/plugins/wearable/display/device-interface.c +++ b/plugins/wearable/display/device-interface.c @@ -84,6 +84,7 @@ static int aod_max_level = -1; static int aod_normal_level = -1; static int aod_min_level = -1; static int aod_charging_level = -1; +static struct display_config *display_conf; inline struct _backlight_ops *get_backlight_ops(void) { @@ -370,7 +371,7 @@ static int backlight_standby(int force) static int set_default_brt(int level) { if (level < PM_MIN_BRIGHTNESS || level > PM_MAX_BRIGHTNESS) - level = display_conf.pm_default_brightness; + level = display_conf->pm_default_brightness; default_brightness = level; @@ -702,7 +703,7 @@ static int backlight_transit_state(int state) else if (aod_min_level > 0 && val >= aod_min_level) aod_brightness_level = aod_min_level; else - aod_brightness_level = display_conf.aod_enter_level; + aod_brightness_level = display_conf->aod_enter_level; } else { if (aod_max_level > 0 && val >= aod_max_level) aod_brightness_level = aod_max_level; @@ -711,12 +712,12 @@ static int backlight_transit_state(int state) else if (aod_min_level > 0 && val >= aod_min_level) aod_brightness_level = aod_min_level; else - aod_brightness_level = display_conf.aod_enter_level; + aod_brightness_level = display_conf->aod_enter_level; } if (val > aod_brightness_level) { _D("backlight transit start %d end %d DPMS OFF", start, aod_brightness_level); - backlight_ops.transit_brt(start, aod_brightness_level, display_conf.brightness_change_step); + backlight_ops.transit_brt(start, aod_brightness_level, display_conf->brightness_change_step); } } else { /* prevent transit effect when another effect is already executed */ @@ -729,7 +730,7 @@ static int backlight_transit_state(int state) start = aod_brightness_level; end = default_brightness; _D("backlight transit start %d end %d DPMS ON", start, end); - backlight_ops.transit_brt(start, end, display_conf.brightness_change_step); + backlight_ops.transit_brt(start, end, display_conf->brightness_change_step); } return 0; @@ -916,3 +917,11 @@ int exit_sysfs(void) return 0; } + +static void __CONSTRUCTOR__ initialize(void) +{ + display_conf = get_display_config(); + if (!display_conf) + _E("Failed to get display configuration."); +} + diff --git a/plugins/wearable/display/key-filter.c b/plugins/wearable/display/key-filter.c index 26ecf11..3cf379f 100644 --- a/plugins/wearable/display/key-filter.c +++ b/plugins/wearable/display/key-filter.c @@ -429,6 +429,11 @@ static int process_power_key(struct input_event *pinput) int ignore = true; static int value = KEY_RELEASED; unsigned int caps; + struct display_config *display_conf = get_display_config(); + if (!display_conf) { + _E("Failed to get display configuration."); + return ignore; + } caps = display_get_caps(DISPLAY_ACTOR_POWER_KEY); @@ -436,7 +441,7 @@ static int process_power_key(struct input_event *pinput) case KEY_RELEASED: check_key_pair(pinput->code, pinput->value, &value); - if (!display_conf.powerkey_doublepress) { + if (!display_conf->powerkey_doublepress) { if (display_has_caps(caps, DISPLAY_CAPA_LCDOFF)) lcdoff_powerkey(); else @@ -472,7 +477,7 @@ static int process_power_key(struct input_event *pinput) if (key_combination == KEY_COMBINATION_POWERKEY) { /* add long key timer */ longkey_timeout_id = g_timeout_add( - display_conf.longpress_interval, + display_conf->longpress_interval, longkey_pressed_cb, NULL); /* add long key restore timer */ longkey_restore_id = g_timeout_add_seconds( @@ -484,7 +489,7 @@ static int process_power_key(struct input_event *pinput) break; case KEY_BEING_PRESSED: if (timediff_usec(pressed_time, pinput->time) > - (display_conf.longpress_interval * USEC_PER_MSEC)) + (display_conf->longpress_interval * USEC_PER_MSEC)) longkey_pressed(); break; } diff --git a/src/display/auto-brightness.c b/src/display/auto-brightness.c index e220ec0..e8b1621 100644 --- a/src/display/auto-brightness.c +++ b/src/display/auto-brightness.c @@ -73,6 +73,7 @@ static char *min_brightness_name = 0; /* light sensor */ static float lmax, lmin; +static struct display_config *display_conf; static bool update_working_position(void) { @@ -80,7 +81,7 @@ static bool update_working_position(void) int ret; float x, y, z, pitch, realg; - if (!display_conf.accel_sensor_on) + if (!display_conf->accel_sensor_on) return false; ret = sensor_listener_read_data(accel_listener, &data); @@ -119,7 +120,7 @@ static void alc_set_brightness(int setting, int value, float light) if (tmp_value != value) { if (!setting && min_brightness == PM_MIN_BRIGHTNESS && - display_conf.accel_sensor_on == true) { + display_conf->accel_sensor_on == true) { position = update_working_position(); if (!position && (old > light)) { _D("It's not working position, " @@ -130,11 +131,11 @@ static void alc_set_brightness(int setting, int value, float light) int diff, step; diff = value - tmp_value; - if (abs(diff) < display_conf.brightness_change_step) + if (abs(diff) < display_conf->brightness_change_step) step = (diff > 0 ? 1 : -1); else step = (int)ceil(diff / - (float)display_conf.brightness_change_step); + (float)display_conf->brightness_change_step); _D("%d", step); while (tmp_value != value) { @@ -205,7 +206,7 @@ static bool alc_update_brt(bool setting) fault_count = 0; - if (display_conf.continuous_sampling && + if (display_conf->continuous_sampling && !check_brightness_changed(value) && !setting) return true; @@ -257,7 +258,7 @@ static int alc_action(int timeout) display_info.update_auto_brightness(true); alc_timeout_id = - g_timeout_add_seconds(display_conf.lightsensor_interval, + g_timeout_add_seconds(display_conf->lightsensor_interval, alc_handler, NULL); } @@ -319,7 +320,7 @@ static int connect_sensor(void) goto error; } - if (!display_conf.accel_sensor_on) + if (!display_conf->accel_sensor_on) goto success; /* accelerometer sensor */ @@ -352,7 +353,7 @@ error: sensor_destroy_listener(light_listener); light_listener = 0; } - if (display_conf.accel_sensor_on && accel_listener > 0) { + if (display_conf->accel_sensor_on && accel_listener > 0) { sensor_listener_stop(accel_listener); sensor_destroy_listener(accel_listener); accel_listener = 0; @@ -371,7 +372,7 @@ static int disconnect_sensor(void) } /* accelerometer sensor*/ - if (display_conf.accel_sensor_on && accel_listener > 0) { + if (display_conf->accel_sensor_on && accel_listener > 0) { sensor_listener_stop(accel_listener); sensor_destroy_listener(accel_listener); accel_listener = 0; @@ -419,7 +420,7 @@ static int set_autobrightness_state(int status) display_info.update_auto_brightness(true); alc_timeout_id = - g_timeout_add_seconds(display_conf.lightsensor_interval, + g_timeout_add_seconds(display_conf->lightsensor_interval, alc_handler, NULL); } else if (status == SETTING_BRIGHTNESS_AUTOMATIC_PAUSE) { _I("Auto brightness paused."); @@ -432,7 +433,7 @@ static int set_autobrightness_state(int status) ret = get_setting_brightness(&default_brt); if (ret != 0 || (default_brt < PM_MIN_BRIGHTNESS || default_brt > PM_MAX_BRIGHTNESS)) { _I("Failed to read vconf value for brightness."); - brt = display_conf.pm_default_brightness; + brt = display_conf->pm_default_brightness; if (default_brt < PM_MIN_BRIGHTNESS || default_brt > PM_MAX_BRIGHTNESS) { ret = vconf_set_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, brt); if (ret < 0) @@ -686,4 +687,8 @@ static void __CONSTRUCTOR__ initialize(void) backlight_ops = get_backlight_ops(); if (!backlight_ops) _E("Failed to get backlight operator."); + + display_conf = get_display_config(); + if (!display_conf) + _E("Failed to get display configuration."); } diff --git a/src/display/core.h b/src/display/core.h index 712d2cc..caa97dc 100644 --- a/src/display/core.h +++ b/src/display/core.h @@ -138,7 +138,7 @@ struct display_config { * Global variables * display_conf : configuration of display */ -extern struct display_config display_conf; +struct display_config* get_display_config(); /* * @brief Display Extension features diff --git a/src/display/display-dbus.c b/src/display/display-dbus.c index a808ca0..7dbb69a 100644 --- a/src/display/display-dbus.c +++ b/src/display/display-dbus.c @@ -614,21 +614,27 @@ static GVariant *dbus_setrefreshrate(GDBusConnection *conn, GVariant *param, GDBusMethodInvocation *invocation, gpointer user_data) { int app, val, ret, control; + struct display_config *display_conf = get_display_config(); + if (!display_conf) { + _E("Failed to get display configuration."); + ret = -EINVAL; + goto error; + } g_variant_get(param, "(ii)", &app, &val); - if (app < 0 || app >= ARRAY_SIZE(display_conf.framerate_app) || val < 0) { + if (app < 0 || app >= ARRAY_SIZE(display_conf->framerate_app) || val < 0) { ret = -EINVAL; goto error; } - if (!display_conf.framerate_app[app]) { + if (!display_conf->framerate_app[app]) { _I("This case(%d) is not support in this target", app); ret = -EPERM; goto error; } - control = display_conf.control_display; + control = display_conf->control_display; if (control) backlight_ops->off(NORMAL_MODE); diff --git a/src/display/display-lock.c b/src/display/display-lock.c index 2facaac..4450a76 100644 --- a/src/display/display-lock.c +++ b/src/display/display-lock.c @@ -188,6 +188,11 @@ PmLockNode *add_node(enum state_t s_index, pid_t pid, guint timeout_id, PmLockNode *n; GVariant *v = NULL; time_t now; + struct display_config *display_conf = get_display_config(); + if (!display_conf) { + _E("Failed to get display configuration."); + return NULL; + } n = (PmLockNode *) malloc(sizeof(PmLockNode)); if (n == NULL) { @@ -198,7 +203,7 @@ PmLockNode *add_node(enum state_t s_index, pid_t pid, guint timeout_id, if (pid < INTERNAL_LOCK_BASE) { v = g_variant_new("(ii)", s_index, pid); if (v) { - warning_id = g_timeout_add_seconds(display_conf.lockcheck_timeout, + warning_id = g_timeout_add_seconds(display_conf->lockcheck_timeout, pmlock_check, (void *)v); } else { _E("Failed to make GVariant."); diff --git a/src/display/input.c b/src/display/input.c index a55d05b..b985652 100644 --- a/src/display/input.c +++ b/src/display/input.c @@ -44,6 +44,11 @@ static inline void process_event(struct libinput_event *ev) struct libinput_event_keyboard *k; unsigned int time; int fd = 0; + struct display_config *display_conf = get_display_config(); + if(!display_conf) { + _E("Failed to get display configuration."); + return; + } if (!pm_callback) return; @@ -92,7 +97,7 @@ static inline void process_event(struct libinput_event *ev) break; case LIBINPUT_EVENT_TOUCH_MOTION: case LIBINPUT_EVENT_TOUCH_FRAME: - if (touch_event_blocked() && !ambient_get_state() && !display_conf.touch_wakeup) + if (touch_event_blocked() && !ambient_get_state() && !display_conf->touch_wakeup) return; input.type = EV_ABS; input.value = KEY_BEING_PRESSED; diff --git a/src/display/setting.c b/src/display/setting.c index 0552001..e493c7f 100644 --- a/src/display/setting.c +++ b/src/display/setting.c @@ -48,6 +48,7 @@ static int force_lcdtimeout = 0; static int custom_on_timeout = 0; static int custom_normal_timeout = 0; static int custom_dim_timeout = 0; +static struct display_config *display_conf; int (*update_pm_setting) (int key_idx, int val); @@ -147,7 +148,7 @@ void get_dim_timeout(int *dim_timeout) return; } - if (!display_conf.dimming || ambient_get_condition()) { + if (!display_conf->dimming || ambient_get_condition()) { *dim_timeout = LCD_MIN_DIM_TIMEOUT; return; } @@ -214,7 +215,7 @@ int set_custom_lcdon_timeout(int timeout) return changed; } - if (display_conf.dimming) + if (display_conf->dimming) custom_dim_timeout = (double)timeout * LCD_DIM_RATIO; else custom_dim_timeout = LCD_MIN_DIM_TIMEOUT; @@ -281,4 +282,8 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + display_conf = get_display_config(); + if (!display_conf) + _E("Failed to get display configuration."); } -- 2.7.4 From 1d73ac2e0003a531a7014337a246c192f40f6447 Mon Sep 17 00:00:00 2001 From: Youngjae Cho Date: Thu, 20 Aug 2020 13:45:08 +0900 Subject: [PATCH 05/16] Fix display not to go into AOD when poweroff Change-Id: Ie57cc79a23eb20b948e8bdf54ce6acadcd1474b6 Signed-off-by: Youngjae Cho --- src/power/power-handler.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/power/power-handler.c b/src/power/power-handler.c index 4376b57..c00b17f 100644 --- a/src/power/power-handler.c +++ b/src/power/power-handler.c @@ -136,9 +136,7 @@ static void disable_display(void) { const struct device_ops *display_device_ops = NULL; FIND_DEVICE_VOID(display_device_ops, "display"); - if (disp_plgn->pm_change_internal) - disp_plgn->pm_change_internal(INTERNAL_LOCK_POWEROFF, LCD_OFF); - display_device_ops->exit(NULL); + display_device_ops->stop(NORMAL_MODE); } static int disable_systemd_journald(void) -- 2.7.4 From fdd07fc33a1cfd218f4a069589d4b5f25095ce5a Mon Sep 17 00:00:00 2001 From: lokilee73 Date: Fri, 21 Aug 2020 15:48:51 +0900 Subject: [PATCH 06/16] Add internal CAPIs to auto test ex) device_touchscreen_disable device_touchscreen_enable device_display_get_brightness_state device_display_get_max_brightness_state device_display_set_brightness_state device_display_change_state_by_reason device_multi_led_get_number device_multi_led_control device_battery_get_info_direct device_pmqos_app_launch_home device_pmqos_homescreen device_get_reboot_mode Change-Id: I3f45437591ed29c9477851b138d51d9fd5864295 Signed-off-by: lokilee73 --- src/auto-test/CMakeLists.txt | 7 ++ src/auto-test/auto-test.conf | 12 ++++ src/auto-test/battery.c | 16 +++++ src/auto-test/boot.c | 86 +++++++++++++++++++++++++ src/auto-test/display.c | 150 ++++++++++++++++++++++--------------------- src/auto-test/led.c | 30 +++++++++ src/auto-test/pmqos.c | 99 ++++++++++++++++++++++++++++ src/auto-test/test.c | 53 +++++++++++++++ src/auto-test/test.h | 5 ++ src/auto-test/touchscreen.c | 99 ++++++++++++++++++++++++++++ 10 files changed, 484 insertions(+), 73 deletions(-) create mode 100644 src/auto-test/boot.c create mode 100644 src/auto-test/pmqos.c create mode 100644 src/auto-test/touchscreen.c diff --git a/src/auto-test/CMakeLists.txt b/src/auto-test/CMakeLists.txt index 5623865..3631df5 100644 --- a/src/auto-test/CMakeLists.txt +++ b/src/auto-test/CMakeLists.txt @@ -25,8 +25,15 @@ SET(SRCS battery-monitor-test.c udev.c brightness.c + boot.c + touchscreen.c + pmqos.c ) +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED + capi-system-device) + FOREACH(flag ${pkgs_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) diff --git a/src/auto-test/auto-test.conf b/src/auto-test/auto-test.conf index 6ae9444..c7fa510 100644 --- a/src/auto-test/auto-test.conf +++ b/src/auto-test/auto-test.conf @@ -1,4 +1,5 @@ [mobile] +booting=1 battery-monitor=0 battery=1 display=1 @@ -9,8 +10,11 @@ extcon=1 ir=1 time=1 udev=1 +touchscreen=1 +pmqos=1 [wearable] +booting=1 battery-monitor=1 battery=1 display=1 @@ -22,8 +26,11 @@ extcon=1 ir=0 time=1 udev=1 +touchscreen=1 +pmqos=1 [tv] +booting=0 battery-monitor=0 battery=0 display=1 @@ -34,8 +41,11 @@ extcon=1 ir=0 time=1 udev=1 +touchscreen=0 +pmqos=0 [common] +booting=1 battery-monitor=0 battery=0 display=1 @@ -46,3 +56,5 @@ extcon=1 ir=0 time=1 udev=1 +touchscreen=1 +pmqos=1 \ No newline at end of file diff --git a/src/auto-test/battery.c b/src/auto-test/battery.c index ebb3bd2..4ebf33e 100644 --- a/src/auto-test/battery.c +++ b/src/auto-test/battery.c @@ -18,6 +18,7 @@ #include #include "test.h" #include +#include #define METHOD_BATTERY_TIMETOFULL "TimeToFull" #define METHOD_BATTERY_TIMETOEMPTY "TimeToEmpty" @@ -31,6 +32,7 @@ #define METHOD_BATTERY_ISFULL "IsFull" #define METHOD_BATTERY_HEALTH "GetHealth" #define METHOD_BATTERY_GETINFO "GetBatteryInfo" +#define METHOD_BATTERY_GETINFO_DIRECT "GetBatteryInfoDirect" #define METHOD_BATTERY_POWERSUPPLY "power_supply" #define METHOD_BATTERY_GET_POWERSUPPLY "get_power_supply" @@ -441,6 +443,15 @@ static bool get_battery_info() return ret; } +static bool get_battery_info_direct(struct device_battery_info *info) +{ + int ret; + + ret = device_battery_get_info_direct(info); + + return capi_result(METHOD_BATTERY_GETINFO_DIRECT, ret); +} + static int change_charge_status_to_enum(const char *env_value) { int len, ret; @@ -846,6 +857,7 @@ void battery_test_all(int *success, int *fail) int f = 0; int rsp[12]; char *power_source = NULL; + struct device_battery_info info; (get_battery_time_to_full()) ? s++ : f++; (get_battery_time_to_empty()) ? s++ : f++; @@ -860,6 +872,7 @@ void battery_test_all(int *success, int *fail) (get_battery_is_full()) ? s++ : f++; (get_battery_health()) ? s++ : f++; (get_battery_info()) ? s++ : f++; + (get_battery_info_direct(&info)) ? s++ : f++; for (int index = 0; index < ARRAY_SIZE(power_supply_types); index++) { (set_battery_power_supply(index) && @@ -894,6 +907,7 @@ static int battery_unit(int argc, char **argv) { int rsp[12]; char *power_source = NULL; + struct device_battery_info info; if (argc < 4) { int success = 0; @@ -925,6 +939,8 @@ static int battery_unit(int argc, char **argv) get_battery_health(); } else if (0 == strcasecmp(argv[3], METHOD_BATTERY_GETINFO)) { get_battery_info(); + } else if (0 == strcasecmp(argv[3], METHOD_BATTERY_GETINFO_DIRECT)) { + get_battery_info_direct(&info); } else if (0 == strcasecmp(argv[3], METHOD_BATTERY_POWERSUPPLY)) { for (int index = 0; index < ARRAY_SIZE(power_supply_types); index++) { set_battery_power_supply(index); diff --git a/src/auto-test/boot.c b/src/auto-test/boot.c new file mode 100644 index 0000000..d589f8c --- /dev/null +++ b/src/auto-test/boot.c @@ -0,0 +1,86 @@ +/* + * test + * + * Copyright (c) 2020 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 "test.h" +#include + +#define METHOD_GET_REBOOT_MODE "GetRebootMode" + +static bool get_reboot_mode(void) +{ + int ret; + + ret = device_get_reboot_mode(); + + return capi_reboot_result(METHOD_GET_REBOOT_MODE, ret); +} + +static void booting_test_all(int *success, int *fail) +{ + int s = 0; + int f = 0; + + (get_reboot_mode()) ? s++ : f++; + + if (NULL != success) *success = s; + if (NULL != fail) *fail = f; +} + +static void booting_init(void *data) +{ + int success = 0; + int fail = 0; + + _I("start test"); + + booting_test_all(&success, &fail); + + _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail); +} + +static void booting_exit(void *data) +{ + _I("end test"); +} + +static int booting_unit(int argc, char **argv) +{ + if (argc < 4) { + int success = 0; + int fail = 0; + + _I("start test"); + booting_test_all(&success, &fail); + _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail); + } else if (0 == strcasecmp(argv[3], METHOD_GET_REBOOT_MODE)) { + get_reboot_mode(); + } else { + _E("Unknown test case!!!"); + } + + return 0; +} + +static const struct test_ops booting_test_ops = { + .priority = TEST_PRIORITY_NORMAL, + .name = "booting", + .init = booting_init, + .exit = booting_exit, + .unit = booting_unit, +}; + +TEST_OPS_REGISTER(&booting_test_ops) diff --git a/src/auto-test/display.c b/src/auto-test/display.c index 9b5e2f3..c2494f5 100644 --- a/src/auto-test/display.c +++ b/src/auto-test/display.c @@ -18,7 +18,7 @@ #include #include #include - +#include #include "test.h" @@ -49,8 +49,10 @@ #define METHOD_DISPLAY_ACTORCONTROL "ActorControl" #define METHOD_DISPLAY_START "start" #define METHOD_DISPLAY_STOP "stop" +#define METHOD_CHANGE_STATE_BY_REASON "ChangeStateByReason" #define PM_STATE_LOG_FILE "/var/log/pm_state.log" +#define PALM_STR "palm" static bool get_display_method(const char *method, GVariant *param, int *value) { @@ -129,70 +131,6 @@ static bool set_display_method_noreply(const char *method, GVariant *var) return TRUE; } -static bool get_display_brightness(int *brightness) -{ - return get_display_method(METHOD_DISPLAY_GETBRIGHTNESS, g_variant_new("(i)", 0), brightness); -} - -static bool set_display_brightness(int brightness) -{ - GVariant *msg; - int getbrightness = -1; - int val = 0; - bool ret = FALSE; - - msg = dbus_handle_method_sync_with_reply_var(DEVICED_BUS_NAME, - DEVICED_PATH_DISPLAY, - DEVICED_INTERFACE_DISPLAY, - METHOD_DISPLAY_SETBRIGHTNESS, - g_variant_new("(ii)", 0, brightness)); - if (!msg) { - _E("fail : no reply"); - return ret; - } - - if (!dh_get_param_from_var(msg, "(i)", &val)) { - _E("fail : no message"); - goto out; - } - - if (0 != val) { //setbrightness fail - if ((brightness <= 0) && (val == -EPERM)) { - _I("success : can't set brightness (%d) lower than zero", brightness); - ret = TRUE; - } else if (val == -EPERM) { - _E("fail : please check display api capability or brightness_automatic setting."); - } else { - _E("fail : return fail %d", val); - } - goto out; - } else { - if (brightness <= 0) { - _E("fail : can't set brightness (%d) lower than zero, but returned success", brightness); - goto out; - } - } - - if (!get_display_brightness(&getbrightness)) { - _E("fail : can't get brightness"); - } else { - if (brightness == getbrightness) { - _I("success : %d", getbrightness); - ret = TRUE; - } else { - _E("fail : set brightness %d, but current brightness is %d", brightness, getbrightness); - } - } -out: - g_variant_unref(msg); - return ret; -} - -static bool get_display_maxbrightness() -{ - return get_display_method(METHOD_DISPLAY_GETMAXBRIGHTNESS, g_variant_new("(i)", 0), NULL); -} - static bool set_display_maxbrightness(int brightness) { return set_display_method(METHOD_DISPLAY_SETMAXBRIGHTNESS, g_variant_new("(i)", brightness)); @@ -414,6 +352,61 @@ static bool set_display_actorcontrol(char *command, int actor, int caps) return set_display_method(METHOD_DISPLAY_ACTORCONTROL, g_variant_new("(sii)", command, actor, caps)); } +static bool get_display_brightness_state(display_state_e state, int *brightness) +{ + int ret; + + ret = device_display_get_brightness_state(0, state, brightness); + + return capi_result(METHOD_DISPLAY_GETBRIGHTNESS, ret); +} + +static bool get_display_max_brightness_state(display_state_e state, int *brightness) +{ + int ret; + + ret = device_display_get_max_brightness_state(0, state, brightness); + + return capi_result(METHOD_DISPLAY_GETMAXBRIGHTNESS, ret); +} + +static bool set_display_brightness_state(display_state_e state, int brightness) +{ + int ret; + int getbrightness; + + ret = device_display_set_brightness_state(0, state, brightness); + if (!capi_result(METHOD_DISPLAY_SETBRIGHTNESS, ret)) + return FALSE; + + if (state == DISPLAY_STATE_NORMAL) + set_display_changestate("lcdon"); + else if (state == DISPLAY_STATE_SCREEN_DIM) + set_display_changestate("lcddim"); + else { + _E("fail: unknown state(%d)", state); + return FALSE; + } + + ret = device_display_get_brightness_state(0, state, &getbrightness); + if (!capi_result(METHOD_DISPLAY_SETBRIGHTNESS, ret)) + return FALSE; + + if (brightness != getbrightness) + return FALSE; + + return TRUE; +} + +static bool set_display_state_by_reason(display_state_e type, const char *reason, int timeout, device_dbus_pending_cb cb) +{ + int ret; + + ret = device_display_change_state_by_reason(type, reason, timeout, cb); + + return capi_result(METHOD_CHANGE_STATE_BY_REASON, ret); +} + static bool set_display_start() { return set_display_method_noreply(METHOD_DISPLAY_START, NULL); @@ -428,11 +421,14 @@ void display_test_all(int *success, int *fail) { int s = 0; int f = 0; - - (get_display_brightness(NULL)) ? s++ : f++; - (set_display_brightness(67)) ? s++ : f++; - (set_display_brightness(0)) ? s++ : f++; - (get_display_maxbrightness()) ? s++ : f++; + int brt = 0; + + (get_display_brightness_state(DISPLAY_STATE_NORMAL, &brt)) ? s++ : f++; + (get_display_brightness_state(DISPLAY_STATE_SCREEN_DIM, &brt)) ? s++ : f++; + (set_display_brightness_state(DISPLAY_STATE_NORMAL, 100)) ? s++ : f++; + (set_display_brightness_state(DISPLAY_STATE_SCREEN_DIM, 1)) ? s++ : f++; + (get_display_max_brightness_state(DISPLAY_STATE_NORMAL, &brt)) ? s++ : f++; + (get_display_max_brightness_state(DISPLAY_STATE_SCREEN_DIM, &brt)) ? s++ : f++; (set_display_maxbrightness(80)) ? s++ : f++; //not support, always success. (set_display_holdbrightness(30)) ? s++ : f++; (set_display_releasebrightness()) ? s++ : f++; @@ -462,6 +458,7 @@ void display_test_all(int *success, int *fail) (set_display_actorcontrol("reset", 4, 1<<3)) ? s++ : f++; (set_display_stop()) ? s++ : f++; (set_display_start()) ? s++ : f++; + (set_display_state_by_reason(DISPLAY_STATE_SCREEN_OFF, PALM_STR, 0, __cb)) ? s++ : f++; if (NULL != success) *success = s; if (NULL != fail) *fail = f; @@ -487,6 +484,8 @@ static void display_exit(void *data) static int display_unit(int argc, char **argv) { + int brt = 0; + if (argc < 4) { int success = 0; int fail = 0; @@ -494,11 +493,14 @@ static int display_unit(int argc, char **argv) display_test_all(&success, &fail); _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail); } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_GETBRIGHTNESS)) { - get_display_brightness(NULL); + get_display_brightness_state(DISPLAY_STATE_NORMAL, &brt); + get_display_brightness_state(DISPLAY_STATE_SCREEN_DIM, &brt); } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_SETBRIGHTNESS)) { - set_display_brightness(atoi(argv[4])); + set_display_brightness_state(DISPLAY_STATE_NORMAL, 100); + set_display_brightness_state(DISPLAY_STATE_SCREEN_DIM, 1); } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_GETMAXBRIGHTNESS)) { - get_display_maxbrightness(); + get_display_max_brightness_state(DISPLAY_STATE_NORMAL, &brt); + get_display_max_brightness_state(DISPLAY_STATE_SCREEN_DIM, &brt); } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_SETMAXBRIGHTNESS)) { set_display_maxbrightness(atoi(argv[4])); } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_HOLDBRIGHTNESS)) { @@ -519,6 +521,8 @@ static int display_unit(int argc, char **argv) // set_display_lockstate_nopt(argv[4], argv[5], argv[6], atoi(argv[7])); // } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_UNLOCKSTATE)) { // set_display_lockstate_nopt(argv[4], argv[5]); + } else if (0 == strcasecmp(argv[3], METHOD_CHANGE_STATE_BY_REASON)) { + set_display_state_by_reason(DISPLAY_STATE_SCREEN_OFF, PALM_STR, 0, __cb); } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_SETLCDTIMEOUT)) { set_display_lcdtimeout(atoi(argv[4]), atoi(argv[5]), atoi(argv[6])); } else if (0 == strcasecmp(argv[3], METHOD_DISPLAY_CUSTOMLCDON)) { diff --git a/src/auto-test/led.c b/src/auto-test/led.c index 79cfae3..7e4356d 100644 --- a/src/auto-test/led.c +++ b/src/auto-test/led.c @@ -19,6 +19,7 @@ #include "test.h" #include +#include #define METHOD_LED_PLAYCUSTOM "playcustom" #define METHOD_LED_STOPCUSTOM "stopcustom" @@ -26,12 +27,16 @@ #define METHOD_LED_GETBRIGHTNESS "GetBrightness" #define METHOD_LED_GETMAXBRIGHTNESS "GetMaxBrightness" #define METHOD_LED_SETBRIGHTNESS "SetBrightness" +#define METHOD_MULTI_LED_GETNUMBER "GetNumOfLeds" +#define METHOD_MULTI_LED_CONTROL "MultiLedControl" #define RED 0xff0000 #define GREEN 0x00ff00 #define BLUE 0x0000ff #define DEFAULT_FLAG (1 << 0) +static unsigned int color[] = {BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE,BLUE}; + static bool get_led_method(const char *method) { GVariant *msg; @@ -116,6 +121,25 @@ static bool set_led_stopcustom() return set_led_method(METHOD_LED_STOPCUSTOM, NULL); } +static bool get_multi_led_number(void) +{ + int ret; + int number_of_led; + + ret = device_multi_led_get_number(&number_of_led); + + return capi_result(METHOD_MULTI_LED_GETNUMBER, ret); +} + +static bool set_multi_led_control(unsigned int color[]) +{ + int ret; + + ret = device_multi_led_control(color); + + return capi_result(METHOD_MULTI_LED_CONTROL, ret); +} + void led_test_all(int *success, int *fail) { int s = 0; @@ -127,6 +151,8 @@ void led_test_all(int *success, int *fail) (get_led_brightness()) ? s++ : f++; (set_led_playcustom(1, 0, RED, DEFAULT_FLAG)) ? s++ : f++; (set_led_stopcustom()) ? s++ : f++; + (get_multi_led_number()) ? s++ : f++; + (set_multi_led_control(color)) ? s++ : f++; if (NULL != success) *success = s; if (NULL != fail) *fail = f; @@ -165,6 +191,10 @@ static int led_unit(int argc, char **argv) set_led_brightness(atoi(argv[4]), atoi(argv[5])); } else if (0 == strcasecmp(argv[3], METHOD_LED_PLAYCUSTOM)) { set_led_playcustom(atoi(argv[4]), atoi(argv[5]), strtoul(argv[6], NULL, 16), DEFAULT_FLAG); + } else if (0 == strcasecmp(argv[3], METHOD_MULTI_LED_GETNUMBER)) { + get_multi_led_number(); + } else if (0 == strcasecmp(argv[3], METHOD_MULTI_LED_CONTROL)) { + set_multi_led_control(color); } else if (0 == strcasecmp(argv[3], METHOD_LED_STOPCUSTOM)) { set_led_stopcustom(); } else { diff --git a/src/auto-test/pmqos.c b/src/auto-test/pmqos.c new file mode 100644 index 0000000..de871b3 --- /dev/null +++ b/src/auto-test/pmqos.c @@ -0,0 +1,99 @@ +/* + * test + * + * Copyright (c) 2020 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 "test.h" +#include + +#define METHOD_APP_LAUNCH_HOME "AppLaunchHome" +#define METHOD_HOMESCREEN "HomeScreen" + +static bool pmqos_app_launch_home(void) +{ + int ret; + + ret = device_pmqos_app_launch_home(3000); + + return capi_result(METHOD_APP_LAUNCH_HOME, ret); +} + +static bool pmqos_homescreen(void) +{ + int ret; + + ret = device_pmqos_homescreen(3000); + + return capi_result(METHOD_HOMESCREEN, ret); +} + +static void pmqos_test_all(int *success, int *fail) +{ + int s = 0; + int f = 0; + + (pmqos_app_launch_home()) ? s++ : f++; + (pmqos_homescreen()) ? s++ : f++; + + if (NULL != success) *success = s; + if (NULL != fail) *fail = f; +} + +static void pmqos_init(void *data) +{ + int success = 0; + int fail = 0; + + _I("start test"); + + pmqos_test_all(&success, &fail); + + _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail); +} + +static void pmqos_exit(void *data) +{ + _I("end test"); +} + +static int pmqos_unit(int argc, char **argv) +{ + if (argc < 4) { + int success = 0; + int fail = 0; + + _I("start test"); + pmqos_test_all(&success, &fail); + _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail); + } else if (0 == strcasecmp(argv[3], METHOD_APP_LAUNCH_HOME)) { + pmqos_app_launch_home(); + } else if (0 == strcasecmp(argv[3], METHOD_HOMESCREEN)) { + pmqos_homescreen(); + } else { + _E("Unknown test case!!!"); + } + + return 0; +} + +static const struct test_ops pmqos_test_ops = { + .priority = TEST_PRIORITY_NORMAL, + .name = "pmqos", + .init = pmqos_init, + .exit = pmqos_exit, + .unit = pmqos_unit, +}; + +TEST_OPS_REGISTER(&pmqos_test_ops) diff --git a/src/auto-test/test.c b/src/auto-test/test.c index 57106d8..794bb74 100644 --- a/src/auto-test/test.c +++ b/src/auto-test/test.c @@ -81,3 +81,56 @@ void test_exit(void *data) d->exit(data); } } + +void __cb(void *data, GVariant *result, GError *err) +{ + int temp = 0; + + if (!result) + { + _E("Can't get result of touchscreen request.:%s", err->message); + return; + } + + if (!dh_get_param_from_var(result, "(i)", &temp)) { + _E("Failed to get variant(%s): no call back message", g_variant_get_type_string(result)); + goto out; + } + _I("replay message(%d)", temp); + +out: + g_variant_unref(result); +} + +bool capi_result(const char *method, int val) +{ + bool ret; + + if (val == DEVICE_ERROR_NOT_SUPPORTED) { + _I("Not supported feature! (%s): %d", method, val); + ret = TRUE; + } else if (val < 0) { + _E("fail (%s): returned fail (%d)", method, val); + ret = FALSE; + } else { + _I("success (%s): %d", method, val); + ret = TRUE; + } + + return ret; +} + +bool capi_reboot_result(const char *method, int val) +{ + bool ret = FALSE; + + if (val == NORMAL_BOOT || val == SILENT_BOOT) { + _I("success (%s): %d", method, val); + ret = TRUE; + } else { + _E("fail (%s): returned fail (%d)", method, val); + ret = FALSE; + } + + return ret; +} diff --git a/src/auto-test/test.h b/src/auto-test/test.h index b324511..65dbd44 100644 --- a/src/auto-test/test.h +++ b/src/auto-test/test.h @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include "core/list.h" #include "core/common.h" @@ -103,4 +105,7 @@ void remove_test(const struct test_ops *c); const struct test_ops *find_test(const char *name); void config_test(); void _R(const char *format, ...); +void __cb(void *data, GVariant *result, GError *err); +bool capi_result(const char *method, int val); +bool capi_reboot_result(const char *method, int val); #endif diff --git a/src/auto-test/touchscreen.c b/src/auto-test/touchscreen.c new file mode 100644 index 0000000..88e370e --- /dev/null +++ b/src/auto-test/touchscreen.c @@ -0,0 +1,99 @@ +/* + * test + * + * Copyright (c) 2020 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 "test.h" +#include + +#define METHOD_TOUCHSCREEN_ENABLE "Enable" +#define METHOD_TOUCHSCREEN_DISABLE "Disable" + +static bool touchscreen_disable(void) +{ + int ret; + + ret = device_touchscreen_disable(__cb); + + return capi_result(METHOD_TOUCHSCREEN_DISABLE, ret); +} + +static bool touchscreen_enable(void) +{ + int ret; + + ret = device_touchscreen_enable(__cb); + + return capi_result(METHOD_TOUCHSCREEN_ENABLE, ret); +} + +static void touchscreen_test_all(int *success, int *fail) +{ + int s = 0; + int f = 0; + + (touchscreen_disable()) ? s++ : f++; + (touchscreen_enable()) ? s++ : f++; + + if (NULL != success) *success = s; + if (NULL != fail) *fail = f; +} + +static void touchscreen_init(void *data) +{ + int success = 0; + int fail = 0; + + _I("start test"); + + touchscreen_test_all(&success, &fail); + + _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail); +} + +static void touchscreen_exit(void *data) +{ + _I("end test"); +} + +static int touchscreen_unit(int argc, char **argv) +{ + if (argc < 4) { + int success = 0; + int fail = 0; + + _I("start test"); + touchscreen_test_all(&success, &fail); + _I("Total: %d, Success: %d, Fail: %d", success+fail, success, fail); + } else if (0 == strcasecmp(argv[3], METHOD_TOUCHSCREEN_ENABLE)) { + touchscreen_enable(); + } else if (0 == strcasecmp(argv[3], METHOD_TOUCHSCREEN_DISABLE)) { + touchscreen_disable(); + } else { + _E("Unknown test case!!!"); + } + + return 0; +} + +static const struct test_ops touchscreen_test_ops = { + .priority = TEST_PRIORITY_NORMAL, + .name = "touchscreen", + .init = touchscreen_init, + .exit = touchscreen_exit, + .unit = touchscreen_unit, +}; + +TEST_OPS_REGISTER(&touchscreen_test_ops) -- 2.7.4 From 534534cb487ff555d79f5b0405e6e1549585f7a6 Mon Sep 17 00:00:00 2001 From: lokilee73 Date: Tue, 25 Aug 2020 19:51:28 +0900 Subject: [PATCH 07/16] Deduplicate Power Manager history functions ex) pm_history_init pm_history_save pm_history_print Change-Id: Ib322155e0091d6f972a833d140beb3c1bd4c890b Signed-off-by: lokilee73 --- plugins/iot/display/core.c | 74 ----------------------------------------- plugins/mobile/display/core.c | 74 ----------------------------------------- plugins/tv/display/core.c | 74 ----------------------------------------- plugins/wearable/display/core.c | 74 ----------------------------------------- src/power/power-control.c | 74 +++++++++++++++++++++++++++++++++++++++++ src/power/power-control.h | 8 +++++ 6 files changed, 82 insertions(+), 296 deletions(-) mode change 100755 => 100644 src/power/power-control.c diff --git a/plugins/iot/display/core.c b/plugins/iot/display/core.c index 6d842c7..7495514 100644 --- a/plugins/iot/display/core.c +++ b/plugins/iot/display/core.c @@ -1163,80 +1163,6 @@ void update_lcdoff_source(int source) _E("Failed to set vconf value for lcd off source: %d", vconf_get_ext_errno()); } -#ifdef ENABLE_PM_LOG - -typedef struct _pm_history { - time_t time; - enum pm_log_type log_type; - int keycode; -} pm_history; - -static int max_history_count = MAX_LOG_COUNT; -static pm_history pm_history_log[MAX_LOG_COUNT] = {{0, }, }; -static int history_count = 0; - -static const char history_string[PM_LOG_MAX][15] = { - "PRESS", "LONG PRESS", "RELEASE", "LCD ON", "LCD ON COMPL", "LCD ON FAIL", - "LCD DIM", "LCD DIM FAIL", "LCD OFF", "LCD OFF COMPL", "LCD OFF FAIL", - "LCD FAIL", "SLEEP"}; - -void pm_history_init() -{ - memset(pm_history_log, 0x0, sizeof(pm_history_log)); - history_count = 0; - max_history_count = MAX_LOG_COUNT; -} - -void pm_history_save(enum pm_log_type log_type, int code) -{ - time_t now; - - time(&now); - pm_history_log[history_count].time = now; - pm_history_log[history_count].log_type = log_type; - pm_history_log[history_count].keycode = code; - history_count++; - - if (history_count >= max_history_count) - history_count = 0; -} - -void pm_history_print(int fd, int count) -{ - int start_index, index, i; - int ret; - char buf[255]; - char time_buf[30]; - - if (count <= 0 || count > max_history_count) - return; - - start_index = (history_count - count + max_history_count) - % max_history_count; - - for (i = 0; i < count; i++) { - index = (start_index + i) % max_history_count; - - if (pm_history_log[index].time == 0) - continue; - - if (pm_history_log[index].log_type < PM_LOG_MIN || - pm_history_log[index].log_type >= PM_LOG_MAX) - continue; - ctime_r(&pm_history_log[index].time, time_buf); - time_buf[strlen(time_buf) - 1] = 0; - snprintf(buf, sizeof(buf), "[%3d] %15s %3d %s\n", - index, - history_string[pm_history_log[index].log_type], - pm_history_log[index].keycode, - time_buf); - ret = write(fd, buf, strlen(buf)); - if (ret < 0) - _E("Write() failed: %d", errno); - } -} -#endif - void print_info(int fd) { int s_index = 0; diff --git a/plugins/mobile/display/core.c b/plugins/mobile/display/core.c index 604135c..1826433 100644 --- a/plugins/mobile/display/core.c +++ b/plugins/mobile/display/core.c @@ -1174,80 +1174,6 @@ void update_lcdoff_source(int source) _E("Failed to set vconf value for lcd off source: %d", vconf_get_ext_errno()); } -#ifdef ENABLE_PM_LOG - -typedef struct _pm_history { - time_t time; - enum pm_log_type log_type; - int keycode; -} pm_history; - -static int max_history_count = MAX_LOG_COUNT; -static pm_history pm_history_log[MAX_LOG_COUNT] = {{0, }, }; -static int history_count = 0; - -static const char history_string[PM_LOG_MAX][15] = { - "PRESS", "LONG PRESS", "RELEASE", "LCD ON", "LCD ON COMPL", "LCD ON FAIL", - "LCD DIM", "LCD DIM FAIL", "LCD OFF", "LCD OFF COMPL", "LCD OFF FAIL", - "LCD FAIL", "SLEEP"}; - -void pm_history_init() -{ - memset(pm_history_log, 0x0, sizeof(pm_history_log)); - history_count = 0; - max_history_count = MAX_LOG_COUNT; -} - -void pm_history_save(enum pm_log_type log_type, int code) -{ - time_t now; - - time(&now); - pm_history_log[history_count].time = now; - pm_history_log[history_count].log_type = log_type; - pm_history_log[history_count].keycode = code; - history_count++; - - if (history_count >= max_history_count) - history_count = 0; -} - -void pm_history_print(int fd, int count) -{ - int start_index, index, i; - int ret; - char buf[255]; - char time_buf[30]; - - if (count <= 0 || count > max_history_count) - return; - - start_index = (history_count - count + max_history_count) - % max_history_count; - - for (i = 0; i < count; i++) { - index = (start_index + i) % max_history_count; - - if (pm_history_log[index].time == 0) - continue; - - if (pm_history_log[index].log_type < PM_LOG_MIN || - pm_history_log[index].log_type >= PM_LOG_MAX) - continue; - ctime_r(&pm_history_log[index].time, time_buf); - time_buf[strlen(time_buf) - 1] = 0; - snprintf(buf, sizeof(buf), "[%3d] %15s %3d %s\n", - index, - history_string[pm_history_log[index].log_type], - pm_history_log[index].keycode, - time_buf); - ret = write(fd, buf, strlen(buf)); - if (ret < 0) - _E("Write() failed: %d", errno); - } -} -#endif - void print_info(int fd) { int s_index = 0; diff --git a/plugins/tv/display/core.c b/plugins/tv/display/core.c index 4d85fcd..665df86 100644 --- a/plugins/tv/display/core.c +++ b/plugins/tv/display/core.c @@ -1164,80 +1164,6 @@ void update_lcdoff_source(int source) _E("Failed to set vconf value for lcd off source: %d", vconf_get_ext_errno()); } -#ifdef ENABLE_PM_LOG - -typedef struct _pm_history { - time_t time; - enum pm_log_type log_type; - int keycode; -} pm_history; - -static int max_history_count = MAX_LOG_COUNT; -static pm_history pm_history_log[MAX_LOG_COUNT] = {{0, }, }; -static int history_count = 0; - -static const char history_string[PM_LOG_MAX][15] = { - "PRESS", "LONG PRESS", "RELEASE", "LCD ON", "LCD ON COMPL", "LCD ON FAIL", - "LCD DIM", "LCD DIM FAIL", "LCD OFF", "LCD OFF COMPL", "LCD OFF FAIL", - "LCD FAIL", "SLEEP"}; - -void pm_history_init() -{ - memset(pm_history_log, 0x0, sizeof(pm_history_log)); - history_count = 0; - max_history_count = MAX_LOG_COUNT; -} - -void pm_history_save(enum pm_log_type log_type, int code) -{ - time_t now; - - time(&now); - pm_history_log[history_count].time = now; - pm_history_log[history_count].log_type = log_type; - pm_history_log[history_count].keycode = code; - history_count++; - - if (history_count >= max_history_count) - history_count = 0; -} - -void pm_history_print(int fd, int count) -{ - int start_index, index, i; - int ret; - char buf[255]; - char time_buf[30]; - - if (count <= 0 || count > max_history_count) - return; - - start_index = (history_count - count + max_history_count) - % max_history_count; - - for (i = 0; i < count; i++) { - index = (start_index + i) % max_history_count; - - if (pm_history_log[index].time == 0) - continue; - - if (pm_history_log[index].log_type < PM_LOG_MIN || - pm_history_log[index].log_type >= PM_LOG_MAX) - continue; - ctime_r(&pm_history_log[index].time, time_buf); - time_buf[strlen(time_buf) - 1] = 0; - snprintf(buf, sizeof(buf), "[%3d] %15s %3d %s\n", - index, - history_string[pm_history_log[index].log_type], - pm_history_log[index].keycode, - time_buf); - ret = write(fd, buf, strlen(buf)); - if (ret < 0) - _E("Write() failed: %d", errno); - } -} -#endif - void print_info(int fd) { int s_index = 0; diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index 9cf31dd..4a5c8e0 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -1231,80 +1231,6 @@ void update_lcdoff_source(int source) _E("Failed to set vconf value for lcd off source: %d", vconf_get_ext_errno()); } -#ifdef ENABLE_PM_LOG - -typedef struct _pm_history { - time_t time; - enum pm_log_type log_type; - int keycode; -} pm_history; - -static int max_history_count = MAX_LOG_COUNT; -static pm_history pm_history_log[MAX_LOG_COUNT] = {{0, }, }; -static int history_count = 0; - -static const char history_string[PM_LOG_MAX][15] = { - "PRESS", "LONG PRESS", "RELEASE", "LCD ON", "LCD ON COMPL", "LCD ON FAIL", - "LCD DIM", "LCD DIM FAIL", "LCD OFF", "LCD OFF COMPL", "LCD OFF FAIL", - "LCD FAIL", "SLEEP"}; - -void pm_history_init() -{ - memset(pm_history_log, 0x0, sizeof(pm_history_log)); - history_count = 0; - max_history_count = MAX_LOG_COUNT; -} - -void pm_history_save(enum pm_log_type log_type, int code) -{ - time_t now; - - time(&now); - pm_history_log[history_count].time = now; - pm_history_log[history_count].log_type = log_type; - pm_history_log[history_count].keycode = code; - history_count++; - - if (history_count >= max_history_count) - history_count = 0; -} - -void pm_history_print(int fd, int count) -{ - int start_index, index, i; - int ret; - char buf[255]; - char time_buf[30]; - - if (count <= 0 || count > max_history_count) - return; - - start_index = (history_count - count + max_history_count) - % max_history_count; - - for (i = 0; i < count; i++) { - index = (start_index + i) % max_history_count; - - if (pm_history_log[index].time == 0) - continue; - - if (pm_history_log[index].log_type < PM_LOG_MIN || - pm_history_log[index].log_type >= PM_LOG_MAX) - continue; - ctime_r(&pm_history_log[index].time, time_buf); - time_buf[strlen(time_buf) - 1] = 0; - snprintf(buf, sizeof(buf), "[%3d] %15s %3d %s\n", - index, - history_string[pm_history_log[index].log_type], - pm_history_log[index].keycode, - time_buf); - ret = write(fd, buf, strlen(buf)); - if (ret < 0) - _E("Write() failed: %d", errno); - } -} -#endif - void print_info(int fd) { int s_index = 0; diff --git a/src/power/power-control.c b/src/power/power-control.c old mode 100755 new mode 100644 index ccef818..e133c55 --- a/src/power/power-control.c +++ b/src/power/power-control.c @@ -48,6 +48,80 @@ static int vital_service; static bool vital_sleep; static int vital_support = -2; +#ifdef ENABLE_PM_LOG + +typedef struct _pm_history { + time_t time; + enum pm_log_type log_type; + int keycode; +} pm_history; + +static int max_history_count = MAX_LOG_COUNT; +static pm_history pm_history_log[MAX_LOG_COUNT] = {{0, }, }; +static int history_count = 0; + +static const char history_string[PM_LOG_MAX][15] = { + "PRESS", "LONG PRESS", "RELEASE", "LCD ON", "LCD ON COMPL", "LCD ON FAIL", + "LCD DIM", "LCD DIM FAIL", "LCD OFF", "LCD OFF COMPL", "LCD OFF FAIL", + "LCD FAIL", "SLEEP"}; + +void pm_history_init() +{ + memset(pm_history_log, 0x0, sizeof(pm_history_log)); + history_count = 0; + max_history_count = MAX_LOG_COUNT; +} + +void pm_history_save(enum pm_log_type log_type, int code) +{ + time_t now; + + time(&now); + pm_history_log[history_count].time = now; + pm_history_log[history_count].log_type = log_type; + pm_history_log[history_count].keycode = code; + history_count++; + + if (history_count >= max_history_count) + history_count = 0; +} + +void pm_history_print(int fd, int count) +{ + int start_index, index, i; + int ret; + char buf[255]; + char time_buf[30]; + + if (count <= 0 || count > max_history_count) + return; + + start_index = (history_count - count + max_history_count) + % max_history_count; + + for (i = 0; i < count; i++) { + index = (start_index + i) % max_history_count; + + if (pm_history_log[index].time == 0) + continue; + + if (pm_history_log[index].log_type < PM_LOG_MIN || + pm_history_log[index].log_type >= PM_LOG_MAX) + continue; + ctime_r(&pm_history_log[index].time, time_buf); + time_buf[strlen(time_buf) - 1] = 0; + snprintf(buf, sizeof(buf), "[%3d] %15s %3d %s\n", + index, + history_string[pm_history_log[index].log_type], + pm_history_log[index].keycode, + time_buf); + ret = write(fd, buf, strlen(buf)); + if (ret < 0) + _E("Write() failed: %d", errno); + } +} +#endif + bool vital_mode(void) { return vital_sleep; diff --git a/src/power/power-control.h b/src/power/power-control.h index f1016b4..61d4f53 100644 --- a/src/power/power-control.h +++ b/src/power/power-control.h @@ -19,6 +19,9 @@ #ifndef __POWER_CONTROL_H__ #define __POWER_CONTROL_H__ +#include "display/core.h" + + #define POWER_AUTOSLEEP_PATH "/sys/power/autosleep" #define POWER_LOCK_PATH "/sys/power/wake_lock" #define POWER_UNLOCK_PATH "/sys/power/wake_unlock" @@ -44,6 +47,11 @@ enum vital_state { VITAL_EXIT, }; +#ifdef ENABLE_PM_LOG +void pm_history_init(void); +void pm_history_save(enum pm_log_type log_type, int code); +void pm_history_print(int fd, int count); +#endif bool vital_mode(void); int vital_state_changed(void *data); int pm_suspend(void); -- 2.7.4 From 65f766d7131344ac95cfb53360ea20ea98bfe89e Mon Sep 17 00:00:00 2001 From: lokilee73 Date: Thu, 27 Aug 2020 14:35:56 +0900 Subject: [PATCH 08/16] Dosen't lock becasue it could prevent Suspend-to-RAM If internal lock by USB-HOST is on, it can prevent going to suspend-to-ram. So, remove it. Change-Id: I87852664313d662cf38af120383506bd2116932f Signed-off-by: lokilee73 --- src/usbhost/usb-host.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/usbhost/usb-host.c b/src/usbhost/usb-host.c index fd076fe..c3b5750 100644 --- a/src/usbhost/usb-host.c +++ b/src/usbhost/usb-host.c @@ -1190,15 +1190,11 @@ DEVICE_OPS_REGISTER(&usbhost_device_ops) static int extcon_usbhost_state_changed(int status) { - if (status == USBHOST_DISCONNECTED) { + if (status == USBHOST_DISCONNECTED) _I("USB host connector disconnected."); - if (disp_plgn->pm_unlock_internal) - disp_plgn->pm_unlock_internal(INTERNAL_LOCK_USB_HOST, LCD_OFF, STAY_CUR_STATE); - } else { + else _I("USB host connector connected."); - if (disp_plgn->pm_lock_internal) - disp_plgn->pm_lock_internal(INTERNAL_LOCK_USB_HOST, LCD_OFF, STAY_CUR_STATE, 0); - } + return 0; } -- 2.7.4 From e9731fde6488fd49dbeb937f280d5769886eef76 Mon Sep 17 00:00:00 2001 From: Youngjae Cho Date: Tue, 1 Sep 2020 11:12:49 +0900 Subject: [PATCH 09/16] Return errno for failing fopen in config_parse Change-Id: I23c0e54128f59c9a3b3e533add1670cfb74bf9df Signed-off-by: Youngjae Cho --- src/core/config-parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/config-parser.c b/src/core/config-parser.c index 02f07d0..68b9f76 100644 --- a/src/core/config-parser.c +++ b/src/core/config-parser.c @@ -61,8 +61,8 @@ int config_parse(const char *file_name, int cb(struct parse_result *result, /* open conf file */ f = fopen(file_name, "r"); if (!f) { + ret = -errno; _E("Failed to open file '%s'.", file_name); - ret = -EIO; goto error; } -- 2.7.4 From b8087749b614f5460bec2a321756c661cbd86310 Mon Sep 17 00:00:00 2001 From: Youngjae Cho Date: Mon, 31 Aug 2020 11:38:10 +0900 Subject: [PATCH 10/16] Enhance display/power lock managemenent Summary: - Detect someone who holds lock longer than 30 minutes. - If a general application is detected, deviced generates signal with time information in addtion to pid. - If a specific daemon is detected, deviced tries to kill it directly. For general applications: Added an addition information, lock holding time in second, to the signal "pmlock_expired". This makes someone, who is in charge of application lifecycle and notification, possible to determine whether to kill that application or not. For some specific killable daemon: Added list of killable daemon to conf file and deviced loads that list. If a killable daemon holds lock longer than 30 minutes, deviced directly sends SIGTERM to that daemon, releasing lock. After for a while, deviced checks once more, if the daemon is still alive then, sends SIGKILL. Change-Id: Ia0d433facdcc7814e19278619a58a111ff7ff7c3 Signed-off-by: Youngjae Cho --- plugins/wearable/display/core.c | 231 +++++++++++++++++++++++++++++++++++++++- src/display/core.h | 7 ++ src/display/display-lock.c | 62 ++++++----- src/display/display-lock.h | 13 +++ 4 files changed, 279 insertions(+), 34 deletions(-) diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index 4a5c8e0..6f3bb43 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -69,6 +69,7 @@ #include "shared/plugin.h" #define DISPLAY_CONF_FILE "/etc/deviced/display.conf" +#define POWERLOCK_CONF_FILE "/etc/deviced/powerlock.conf" #ifndef VCONFKEY_HOMESCREEN_TUTORIAL_OOBE_ENABLED #define VCONFKEY_HOMESCREEN_TUTORIAL_OOBE_ENABLED "db/private/com.samsung.w-home/tutorial_oobe_enabled" @@ -189,6 +190,19 @@ static int trans_table[S_END][EVENT_END] = { (b.tv_sec * 1000000 + b.tv_usec)) \ / 1000) +#define KILLABLE_DAEMON_LOCK_LIMIT 1800 /* seconds, 30min */ +#define FORCE_RELEASE_LOCK_INTERVAL 5 /* seconds */ + +static void get_comm(pid_t pid, char *comm); +static bool is_killable_daemon(pid_t pid); +static gboolean pmlock_terminate_daemon_to_release_lock(gpointer data); +static int pmlock_check(void *data); +static int powerlock_load_config(struct parse_result *result, void *user_data); +static void free_killable_daemon_list(void); + +static dd_list *display_lock_killable_daemon; +static bool initialized_killable_daemon_list; + static struct display_config display_conf = { .lock_wait_time = LOCK_SCREEN_WATING_TIME, .longpress_interval = LONG_PRESS_INTERVAL, @@ -206,6 +220,7 @@ static struct display_config display_conf = { .timeout_enable = true, .input_support = true, .lockcheck_timeout = 600, + .pmlock_check = pmlock_check, .aod_enter_level = 40, .aod_tsp = true, .touch_wakeup = false, @@ -319,6 +334,181 @@ static const char* __device_flags_to_string(enum device_flags flags) return UNKNOWN_STR; } +static void get_comm(pid_t pid, char *comm) +{ + char buf[PATH_MAX]; + int fd, r; + + if (pid >= INTERNAL_LOCK_BASE) + snprintf(buf, PATH_MAX, "/proc/%d/comm", getpid()); + else + snprintf(buf, PATH_MAX, "/proc/%d/comm", pid); + + fd = open(buf, O_RDONLY); + if (fd < 0) { + comm[0] = '\0'; + _E("Process(%d) does not exist now(may be dead without unlock).", pid); + return; + } + + r = read(fd, comm, PATH_MAX); + if ((r > 0) && (r < PATH_MAX)) { + if (comm[r - 1] == '\n') + comm[r - 1] = '\0'; + else + comm[r] = '\0'; + } else + comm[0] = '\0'; + + close(fd); +} + +static bool is_killable_daemon(pid_t pid) +{ + char pname[PATH_MAX] = {0, }; + const char *blacklist; + dd_list *l; + + get_comm(pid, pname); + if (!(*pname)) + return false; + + DD_LIST_FOREACH(display_lock_killable_daemon, l, blacklist) { + if (MATCH(pname, blacklist)) + return true; + } + + return false; +} + +static gboolean pmlock_terminate_daemon_to_release_lock(gpointer data) +{ + pid_t pid; + PmLockNode *node; + enum state_t state; + int ret; + bool pid_exist; + char pname[PATH_MAX] = {0, }; + + if (!data) { + _E("Invalid parameter."); + return G_SOURCE_REMOVE; + } + + node = (PmLockNode *) data; + state = node->state; + pid = node->pid; + + if (pid <= 0) { + _E("Invalid lock pid."); + del_node(state, node); + return G_SOURCE_REMOVE; + } + + if (!node->killable_daemon) { + _E("Incorrect checker, this is not a killable daemon. Stop checking lock."); + return G_SOURCE_REMOVE; + } + + pid_exist = (kill(pid, 0) == 0); + if (pid_exist) + get_comm(pid, pname); + + if (node->force_release == false) { + /* Stop checking lock if process had been terminated */ + if (!pid_exist) { + del_node(state, node); + _I("Process %d not found. Stop checking lock.", pid); + return G_SOURCE_REMOVE; + } + + /* KILLABLE_DAEMON_LOCK_LIMIT is expired. Kill the daemon */ + CRITICAL_LOG("%s(%d) holds %s lock for %ds. kill SIGTERM.", + *pname ? pname : "Unknown", pid, states[state].name, KILLABLE_DAEMON_LOCK_LIMIT); + ret = kill(pid, SIGTERM); + if (ret < 0) + CRITICAL_LOG("Failed to send SIGTERM to process %s(%d), %d.", + *pname ? pname : "Unknown", pid, errno); + + node->force_release = true; + g_timeout_add_seconds(FORCE_RELEASE_LOCK_INTERVAL, + pmlock_terminate_daemon_to_release_lock, (gpointer)node); + } else if (node->force_release == true) { + /* kill confirmation */ + if (pid_exist) { + CRITICAL_LOG("%s(%d) is still alive, kill SIGKILL.", + *pname ? pname : "Unknown", pid); + + ret = kill(pid, SIGKILL); + if (ret < 0) + CRITICAL_LOG("Failed to kill process %s(%d), %d.", + *pname ? pname : "Unknown", pid, errno); + } + + /* release lock */ + CRITICAL_LOG("Release %s lock occupied by PID %d.", states[state].name, pid); + del_node(state, node); + set_unlock_time(pid, state); + + if (!timeout_src_id) + states[get_pm_cur_state()].trans(EVENT_TIMEOUT); + } + + return G_SOURCE_REMOVE; +} + +static int pmlock_check(void *data) +{ + PmLockNode *node; + int ret; + + assert(data); + node = (PmLockNode *) data; + + if (!initialized_killable_daemon_list) { + ret = config_parse(POWERLOCK_CONF_FILE, powerlock_load_config, NULL); + /* config file may not exist */ + if (ret < 0 && ret != -ENOENT) + _W("Failed to load %s, %d.", POWERLOCK_CONF_FILE, ret); + + if (status == DEVICE_OPS_STATUS_UNINIT) { + _W("Lock request before display init. Preloaded killable list."); + initialized_killable_daemon_list = true; + } else if (status == DEVICE_OPS_STATUS_STOP) { + _W("Lock request after display stop. Loaded list will be freed immediately."); + node->killable_daemon = is_killable_daemon(node->pid); + free_killable_daemon_list(); + goto killable_marked; + } + } + + node->killable_daemon = is_killable_daemon(node->pid); + +killable_marked: + /* use default lock checker */ + if (!node->killable_daemon) + return 0; + + return g_timeout_add_seconds(KILLABLE_DAEMON_LOCK_LIMIT, + pmlock_terminate_daemon_to_release_lock, (gpointer)node); +} + +static void free_killable_daemon_list(void) +{ + dd_list *l, *l_next; + char *blacklist; + + if (!display_lock_killable_daemon) + return; + + DD_LIST_FOREACH_SAFE(display_lock_killable_daemon, l, l_next, blacklist) { + DD_LIST_REMOVE(display_lock_killable_daemon, blacklist); + free(blacklist); + } + display_lock_killable_daemon = NULL; + initialized_killable_daemon_list = false; +} + static unsigned long get_lcd_on_flags(void) { unsigned long flags = NORMAL_MODE; @@ -1089,9 +1279,13 @@ static void proc_condition_lock(PMMsg *data) holdkey_block = GET_COND_FLAG(data->cond) & PM_FLAG_BLOCK_HOLDKEY; tmp = find_node(state, pid); - if (!tmp) - add_node(state, pid, cond_timeout_id, holdkey_block); - else { + if (!tmp) { + tmp = add_node(state, pid, cond_timeout_id, holdkey_block); + if (!tmp) { + _E("Failed to acquire lock, state: %d, pid: %d.", state, pid); + return; + } + } else { update_lock_timer(data, tmp, cond_timeout_id); tmp->holdkey_block = holdkey_block; } @@ -1122,8 +1316,8 @@ static void proc_condition_lock(PMMsg *data) } } - _SD("be requested LOCK info pname(%s), holdkeyblock(%d) flags(%d)", - pname, holdkey_block, flags); + _SD("be requested LOCK info pname(%s), holdkeyblock(%d) flags(%d) killable_daemon(%d)", + pname, holdkey_block, flags, tmp->killable_daemon); set_lock_time(pid, pname, state); device_notify(DEVICE_NOTIFIER_DISPLAY_LOCK, (void *)&value); @@ -2172,6 +2366,26 @@ static int display_load_config(struct parse_result *result, void *user_data) return 0; } +static int powerlock_load_config(struct parse_result *result, void *user_data) +{ + char *name = NULL; + + _D("powerlock_load_config: section=%s name=%s value=%s", result->section, result->name, result->value); + + if (MATCH(result->section, "KillableDaemon") && MATCH(result->name, "KillableList")) { + name = strndup(result->value, PATH_MAX - 1); + if (!name) { + _E("Not enough memory."); + return -ENOMEM; + } + + CRITICAL_LOG("Add %s to killable daemon list.", name); + DD_LIST_APPEND(display_lock_killable_daemon, name); + } + + return 0; +} + static gboolean delayed_init_dpms(gpointer data) { int timeout; @@ -2331,6 +2545,12 @@ static void display_init(void *data) _W("Failed to load '%s', use default value: %d", DISPLAY_CONF_FILE, ret); + ret = config_parse(POWERLOCK_CONF_FILE, powerlock_load_config, NULL); + /* config file may not exist */ + if (ret < 0 && ret != -ENOENT) + _W("Failed to load %s, %d.", POWERLOCK_CONF_FILE, ret); + initialized_killable_daemon_list = true; + register_kernel_uevent_control(&lcd_uevent_ops); register_kernel_uevent_control(&sec_dsim_uevent_ops); @@ -2489,6 +2709,7 @@ static void display_exit(void *data) exit_lcd_operation(); free_lock_info_list(); + free_killable_daemon_list(); /* free display service */ display_service_free(); diff --git a/src/display/core.h b/src/display/core.h index caa97dc..5bfb1d1 100644 --- a/src/display/core.h +++ b/src/display/core.h @@ -126,6 +126,13 @@ struct display_config { int accel_sensor_on; int continuous_sampling; int lockcheck_timeout; + + /* Define pmlock checker. + * Return id of the lock checker. + * + * Returning 0 will use default lock checker */ + int (*pmlock_check) (void *data); + int aod_enter_level; bool aod_tsp; bool timeout_enable; diff --git a/src/display/display-lock.c b/src/display/display-lock.c index 4450a76..b1e08d4 100644 --- a/src/display/display-lock.c +++ b/src/display/display-lock.c @@ -37,6 +37,8 @@ static struct _backlight_ops *backlight_ops; static dd_list *cond_head[S_END]; static int trans_condition; +static struct display_config *display_conf; + bool check_lock_state(int state) { dd_list *elem; @@ -62,7 +64,7 @@ static void refresh_app_cond() trans_condition |= MASK_OFF; } -static void pmlock_check_cb(GVariant *var, void *user_data, GError *err) +static void default_pmlock_check_cb(GVariant *var, void *user_data, GError *err) { pid_t pid = 0; int ret, detected = 0; @@ -97,7 +99,7 @@ static void pmlock_check_cb(GVariant *var, void *user_data, GError *err) DEVICED_PATH_DISPLAY, DEVICED_INTERFACE_DISPLAY, "pmlock_expired", - g_variant_new("(i)", pid)); + g_variant_new("(ii)", pid, (int)diff)); if (ret < 0) _E("Failed to send dbus pmlock_expired"); @@ -107,12 +109,11 @@ out: g_variant_unref(var); } -static gboolean pmlock_check(void *data) +static gboolean default_pmlock_check(void *data) { const char *arr[2]; char chr_pid[PID_MAX]; PmLockNode *node; - GVariant *v; enum state_t state; pid_t pid; int ret; @@ -122,8 +123,9 @@ static gboolean pmlock_check(void *data) return G_SOURCE_REMOVE; } - v = (GVariant*)data; - g_variant_get(v, "(ii)", &state, &pid); + node = (PmLockNode *) data; + state = node->state; + pid = node->pid; if (state == S_LCDOFF && backlight_ops->get_lcd_power() == DPMS_ON) { _D("Lcd state is PM_LCD_POWER_ON"); @@ -152,7 +154,6 @@ static gboolean pmlock_check(void *data) break; default: _E("Invalid state."); - g_variant_unref(v); return G_SOURCE_REMOVE; } @@ -160,7 +161,7 @@ static gboolean pmlock_check(void *data) RESOURCED_PATH_PROCESS, RESOURCED_INTERFACE_PROCESS, METHOD_APP_STATUS, - "is", arr, pmlock_check_cb, -1, (void *)(intptr_t)state); + "is", arr, default_pmlock_check_cb, -1, (void *)(intptr_t)state); if (ret < 0) _E("Failed to call dbus method"); @@ -184,41 +185,39 @@ PmLockNode *find_node(enum state_t s_index, pid_t pid) PmLockNode *add_node(enum state_t s_index, pid_t pid, guint timeout_id, bool holdkey_block) { - guint warning_id = 0; PmLockNode *n; - GVariant *v = NULL; time_t now; - struct display_config *display_conf = get_display_config(); - if (!display_conf) { - _E("Failed to get display configuration."); - return NULL; - } - n = (PmLockNode *) malloc(sizeof(PmLockNode)); + assert(display_conf); + + n = (PmLockNode *) calloc(1, sizeof(PmLockNode)); if (n == NULL) { - _E("Not enough memory, add cond. fail"); + _E("Not enough memory, failed to alloc lock node."); return NULL; } - if (pid < INTERNAL_LOCK_BASE) { - v = g_variant_new("(ii)", s_index, pid); - if (v) { - warning_id = g_timeout_add_seconds(display_conf->lockcheck_timeout, - pmlock_check, (void *)v); - } else { - _E("Failed to make GVariant."); - } - } - time(&now); + n->state = s_index; n->pid = pid; n->timeout_id = timeout_id; - n->warning_id = warning_id; - n->warning_param = v; n->time = now; n->holdkey_block = holdkey_block; n->background = false; n->broadcast_warning = true; + + if (pid < INTERNAL_LOCK_BASE) { + /* check if this lock node needs custom-defined lock checker. + * n->warning_id would be 0 if fails to register the checker, + * or there is no need to use that checker */ + if (display_conf->pmlock_check) + n->warning_id = display_conf->pmlock_check(n); + + /* use default lock checker */ + if (!n->warning_id) + n->warning_id = g_timeout_add_seconds(display_conf->lockcheck_timeout, + default_pmlock_check, (gpointer)n); + } + DD_LIST_APPEND(cond_head[s_index], n); refresh_app_cond(); @@ -403,4 +402,9 @@ static void __CONSTRUCTOR__ initialize(void) backlight_ops = get_backlight_ops(); if (!backlight_ops) _E("Failed to get backlight operator."); + + display_conf = get_display_config(); + if (!display_conf) { + _E("Failed to get display config."); + } } diff --git a/src/display/display-lock.h b/src/display/display-lock.h index bde19db..c52ac84 100644 --- a/src/display/display-lock.h +++ b/src/display/display-lock.h @@ -27,6 +27,7 @@ #include "core.h" typedef struct _pm_lock_node { + enum state_t state; pid_t pid; guint timeout_id; guint warning_id; @@ -35,6 +36,18 @@ typedef struct _pm_lock_node { bool holdkey_block; bool background; bool broadcast_warning; + + /* Set true when the lock holder is an entry of + * the list display_lock_killable_daemon. + * If true, deviced tries to kill this lock holder when + * the holder holds lock longer than KILLABLE_DAEMON_LOCK_LIMIT */ + bool killable_daemon; + + /* Set true when the lock holder holds lock + * longer than KILLABLE_DAEMON_LOCK_LIMIT. + * After a while, FORCE_RELEASE_LOCK_INTERVAL, + * this lock will be released. */ + bool force_release; } PmLockNode; bool check_lock_state(int state); -- 2.7.4 From 55798963183d65a4e2a1b50deed79ca90888abe4 Mon Sep 17 00:00:00 2001 From: Yunmi Ha Date: Fri, 28 Aug 2020 17:41:33 +0900 Subject: [PATCH 11/16] Fix dlsym() caller for get_display_conf Change-Id: If9eac834f99620e52807881c321d2f08e4a6e194 --- src/touchscreen/touchscreen.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/touchscreen/touchscreen.c b/src/touchscreen/touchscreen.c index adc244c..44ad171 100644 --- a/src/touchscreen/touchscreen.c +++ b/src/touchscreen/touchscreen.c @@ -51,6 +51,7 @@ static struct display_config *_display_conf; static struct _backlight_ops *_backlight_ops; static struct _backlight_ops* (*_get_backlight_ops)(void); +static struct display_config* (*_get_display_config)(void); static void touchscreen_wakeup_status(keynode_t *key, void *data) { @@ -318,9 +319,13 @@ static void touchscreen_init(void *data) { int ret, val; - _display_conf = dlsym(disp_plgn->handle, "display_conf"); - if (!_display_conf) - _E("Failed to obtain address of display_conf, %s.", dlerror()); + _get_display_config = dlsym(disp_plgn->handle, "get_display_config"); + if (_get_display_config) { + _display_conf = _get_display_config(); + if (!_display_conf) + _E("Failed to get display config."); + } else + _E("Failed to obtain address of get_display_config, %s.", dlerror()); /* 'backlight_ops' is declared static and used a lot of places with same name. * So it fails that fetching symbol directly with name 'backlight_ops'. -- 2.7.4 From 1105b08b7f9e98a06a1c8b9b72193554ed0f7730 Mon Sep 17 00:00:00 2001 From: lokilee73 Date: Sat, 29 Aug 2020 17:13:31 +0900 Subject: [PATCH 12/16] Support multi HDMI + Svace fix 1) Support multi HDMI There are two HDMI ports in RPI4 target and it can be increased in the future. So, make a bitmap table for HDMI. Supported MAX HDMI number is 64 for now. Below data is listed up. extcon# : 1 is shifted by # ex) type value bitmap extcon1 1/0 0x10/0x00 extcon2 1/0 0x100/0x000 extcon3 1/0 0x1000/0x0000 If one of them is 1, then 1(connected) is broadcasted. Otherwise, 0(disconnected) is broadcasted. 2) Svace fix src/power/power-control.c Below condition is removed, because .log_type is same or bigger than PM_LOG_MIN pm_history_log[index].log_type < PM_LOG_MIN Change-Id: Ib9dbaa374cc5ccbbde1ebac45840befe1fb786d2 Signed-off-by: lokilee73 --- src/core/common.h | 1 + src/extcon/cradle.c | 2 +- src/extcon/earjack.c | 2 +- src/extcon/extcon.c | 37 +++++++++++++++------------- src/extcon/extcon.h | 3 ++- src/extcon/hdmi.c | 63 +++++++++++++++++++++++++++++++++++++++++++---- src/power/power-control.c | 3 +-- src/usb/usb.c | 2 +- src/usbhost/usb-host.c | 2 +- 9 files changed, 86 insertions(+), 29 deletions(-) diff --git a/src/core/common.h b/src/core/common.h index 3f53d1e..b49e52b 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -29,6 +29,7 @@ #define ARRAY_SIZE(name) (sizeof(name)/sizeof(name[0])) #define BITS_PER_LONG (sizeof(long) * 8) +#define BITS_PER_CHAR (sizeof(char) * 8) #define OFFSET(x) ((x) & (BITS_PER_LONG - 1)) #define BIT(x) (1UL << OFFSET(x)) #define LONG(x) ((x) / BITS_PER_LONG) diff --git a/src/extcon/cradle.c b/src/extcon/cradle.c index 72e368c..1eeffa1 100644 --- a/src/extcon/cradle.c +++ b/src/extcon/cradle.c @@ -55,7 +55,7 @@ static void cradle_send_broadcast(int status) _E("Failed to send dbus signal(%s)", SIGNAL_CRADLE_STATE); } -static int cradle_update(int status) +static int cradle_update(const char *index, int status) { int ret; diff --git a/src/extcon/earjack.c b/src/extcon/earjack.c index 003b7bb..1fb99c2 100644 --- a/src/extcon/earjack.c +++ b/src/extcon/earjack.c @@ -68,7 +68,7 @@ static void earjack_send_system_event(int status) bundle_free(b); } -static int earjack_update(int status) +static int earjack_update(const char *index, int status) { int ret; diff --git a/src/extcon/extcon.c b/src/extcon/extcon.c index a0c06f5..9bb0118 100644 --- a/src/extcon/extcon.c +++ b/src/extcon/extcon.c @@ -22,7 +22,6 @@ #include #include "core/log.h" -#include "core/list.h" #include "core/common.h" #include "core/devices.h" #include "core/config-parser.h" @@ -32,6 +31,7 @@ #define EXTCON_PATH "/sys/class/extcon" #define STATE_NAME "STATE" +#define DEVICE_TYPE "DEVTYPE" #define METHOD_SYSPOPUP_SHOW "show" @@ -92,7 +92,7 @@ void extcon_update_count(extcon_index_type_e index, unsigned long count) device_notify(DEVICE_NOTIFIER_EXTCON_COUNT, (void *)&extcon); } -static int extcon_update(const char *name, const char *value) +static int extcon_update(const char *name, const char *index, const char *value) { struct extcon_ops *dev; char buf[BUF_MAX]; @@ -109,7 +109,7 @@ static int extcon_update(const char *name, const char *value) status = atoi(value); /* Do not invoke update func. if it's the same value */ - if (dev->status == status) + if (dev->status == status && !index) return 0; _I("Changed %s device: (%d) to (%d).", name, dev->status, status); @@ -132,7 +132,7 @@ static int extcon_update(const char *name, const char *value) } if (dev->update) - dev->update(status); + dev->update(index, status); return 0; } @@ -155,11 +155,11 @@ int extcon_enable_device(const char *name) dev->enabled = true; if (strncmp(name, "USB", strlen("USB")) == 0) { - ret = extcon_update("USB", "0"); + ret = extcon_update("USB", NULL, "0"); if (ret != 0) _E("Failed to disconnect USB."); - ret = extcon_update("USB", "1"); + ret = extcon_update("USB", NULL, "1"); if (ret != 0) _E("Failed to connect USB."); } @@ -200,12 +200,13 @@ int extcon_disable_device(const char *name) return 0; } -static int extcon_parsing_value(const char *value) + +static int extcon_parsing_value(const char *index, const char *value) { char *s, *p; char name[NAME_MAX]; - if (!value) + if (!value || !index) return -EINVAL; s = (char*)value; @@ -216,7 +217,7 @@ static int extcon_parsing_value(const char *value) memset(name, 0, sizeof(name)); memcpy(name, s, p-s); /* name is env_name and p+1 is env_value */ - extcon_update(name, p+1); + extcon_update(name, index, p+1); s = strchr(p, '\n'); if (!s) break; @@ -229,26 +230,28 @@ static int extcon_parsing_value(const char *value) static void uevent_extcon_handler(struct udev_device *dev) { const char *env_value; + const char *dev_index; int ret; env_value = udev_device_get_property_value(dev, STATE_NAME); - if (!env_value) - return; + dev_index = udev_device_get_property_value(dev, DEVICE_TYPE); - ret = extcon_parsing_value(env_value); + ret = extcon_parsing_value(dev_index, env_value); if (ret < 0) _E("Failed to parse extcon value: %d", ret); } static int extcon_load_uevent(struct parse_result *result, void *user_data) { + char *index = user_data; + if (!result) return 0; if (!result->name || !result->value) return 0; - extcon_update(result->name, result->value); + extcon_update(result->name, index, result->value); return 0; } @@ -277,7 +280,7 @@ static int get_extcon_init_state(void) if (access(node, F_OK) != 0) continue; - ret = config_parse(node, extcon_load_uevent, NULL); + ret = config_parse(node, extcon_load_uevent, result->d_name); if (ret < 0) _E("Failed to parse %s data: %d", node, ret); } @@ -322,7 +325,7 @@ static GVariant *dbus_enable_device(GDBusConnection *conn, g_variant_get(param, "(s)", &device); - ret = extcon_update(device, "1"); + ret = extcon_update(device, NULL, "1"); g_free(device); return g_variant_new("(i)", ret); @@ -337,7 +340,7 @@ static GVariant *dbus_disable_device(GDBusConnection *conn, g_variant_get(param, "(s)", &device); - ret = extcon_update(device, "0"); + ret = extcon_update(device, NULL, "0"); g_free(device); return g_variant_new("(i)", ret); @@ -373,7 +376,7 @@ static void extcon_changed(struct connection_info *info, void *data) return; /* call to update */ - extcon_update(info->name, info->state); + extcon_update(info->name, NULL, info->state); } static int extcon_probe(void *data) diff --git a/src/extcon/extcon.h b/src/extcon/extcon.h index 7369fb0..4148096 100644 --- a/src/extcon/extcon.h +++ b/src/extcon/extcon.h @@ -21,6 +21,7 @@ #define __EXTCON_H__ #include "core/common.h" +#include "core/list.h" #include #include "extcon-count.h" @@ -42,7 +43,7 @@ struct extcon_ops { int enabled; void (*init)(void *data); void (*exit)(void *data); - int (*update)(int status); + int (*update)(const char *index, int status); }; /* Status for External Connectors */ diff --git a/src/extcon/hdmi.c b/src/extcon/hdmi.c index 9eac710..6f38b31 100644 --- a/src/extcon/hdmi.c +++ b/src/extcon/hdmi.c @@ -20,6 +20,7 @@ #include #include #include "core/log.h" +#include "core/list.h" #include "core/device-notifier.h" #include "display/core.h" #include "display/display-ops.h" @@ -29,6 +30,16 @@ #define METHOD_GET_HDMI "GetHDMI" #define SIGNAL_HDMI_STATE "ChangedHDMI" +#define HDMI_NUMBER_MAX (64) // max number of supported hdmi +#define HDMI_BITMAP_T (sizeof(hdmi_bitmap_t) * BITS_PER_CHAR) // size of hdmi_bitmap_t + +/* macro to set/unset bit */ +#define HDMI_SET_BIT(num) (hdmi_bitmap |= (1ULL << ((num) % HDMI_BITMAP_T))) +#define HDMI_UNSET_BIT(num) (hdmi_bitmap &= ~(1ULL << ((num) % HDMI_BITMAP_T))) + +typedef unsigned long long hdmi_bitmap_t; + +static hdmi_bitmap_t hdmi_bitmap; static struct display_plugin *disp_plgn; static struct extcon_ops hdmi_extcon_ops; @@ -52,20 +63,62 @@ static void hdmi_send_broadcast(int status) _E("Failed to send dbus signal(%s)", SIGNAL_HDMI_STATE); } -static int hdmi_update(int status) +/* if hdmi_bitmap is bigger than 0, we assume hdmi is connected */ +static int get_hdmi_status(void) +{ + if (hdmi_bitmap > 0) + return HDMI_CONNECTED; + + return HDMI_DISCONNECTED; +} + + +static void update_hdmi_bitmap(int index, int status) +{ + if (status == HDMI_CONNECTED) + HDMI_SET_BIT(index); + else + HDMI_UNSET_BIT(index); +} + +static void update_all_hdmi_bitmap(int status) +{ + if (status == HDMI_CONNECTED) + hdmi_bitmap = ULLONG_MAX; + else + hdmi_bitmap = 0; +} + +static int hdmi_update(const char *index, int status) { int ret; + int num = -1; + int hdmi_status; - _I("Hdmi changed. status=%d", status); + _I("Hdmi changed"); if (disp_plgn->pm_change_internal) disp_plgn->pm_change_internal(INTERNAL_LOCK_HDMI, LCD_NORMAL); - ret = vconf_set_int(VCONFKEY_SYSMAN_HDMI, status); + + if (!index) + update_all_hdmi_bitmap(status); + else { + sscanf(index, "extcon%d", &num); + if (num < 0 || num >= HDMI_NUMBER_MAX) { + _E("Invalid HDMI number: %d", num); + return -EINVAL; + } + update_hdmi_bitmap(num, status); + } + + hdmi_status = get_hdmi_status(); + ret = vconf_set_int(VCONFKEY_SYSMAN_HDMI, hdmi_status); if (ret < 0) _E("Failed to set vconf value for hdmi: %d", vconf_get_ext_errno()); - hdmi_send_broadcast(status); + hdmi_extcon_ops.status = hdmi_status; + hdmi_send_broadcast(hdmi_status); - if (status == HDMI_CONNECTED) { + if (hdmi_status == HDMI_CONNECTED) { if (disp_plgn->pm_lock_internal) disp_plgn->pm_lock_internal(INTERNAL_LOCK_HDMI, LCD_DIM, STAY_CUR_STATE, 0); } else { diff --git a/src/power/power-control.c b/src/power/power-control.c index e133c55..fbb6b9f 100644 --- a/src/power/power-control.c +++ b/src/power/power-control.c @@ -105,8 +105,7 @@ void pm_history_print(int fd, int count) if (pm_history_log[index].time == 0) continue; - if (pm_history_log[index].log_type < PM_LOG_MIN || - pm_history_log[index].log_type >= PM_LOG_MAX) + if (pm_history_log[index].log_type >= PM_LOG_MAX) continue; ctime_r(&pm_history_log[index].time, time_buf); time_buf[strlen(time_buf) - 1] = 0; diff --git a/src/usb/usb.c b/src/usb/usb.c index 691d0c3..0b24297 100644 --- a/src/usb/usb.c +++ b/src/usb/usb.c @@ -383,7 +383,7 @@ int usb_change_mode(unsigned int new_mode, bool change_debug_mode) } /* Called by extcon udev event */ -static int usb_state_changed(int new_status) +static int usb_state_changed(const char *index, int new_status) { int ret = -1; static int old_status = -1; diff --git a/src/usbhost/usb-host.c b/src/usbhost/usb-host.c index c3b5750..0c02247 100644 --- a/src/usbhost/usb-host.c +++ b/src/usbhost/usb-host.c @@ -1188,7 +1188,7 @@ static const struct device_ops usbhost_device_ops = { DEVICE_OPS_REGISTER(&usbhost_device_ops) -static int extcon_usbhost_state_changed(int status) +static int extcon_usbhost_state_changed(const char *index, int status) { if (status == USBHOST_DISCONNECTED) _I("USB host connector disconnected."); -- 2.7.4 From fe0822e49485931c831440b7f3e8fcf538f62b94 Mon Sep 17 00:00:00 2001 From: lokilee73 Date: Tue, 8 Sep 2020 11:05:37 +0900 Subject: [PATCH 13/16] Deduplicate display_load_config Change-Id: I450a89b1e115a0302101aae95cfd643eb651ff6b Signed-off-by: lokilee73 --- plugins/iot/display/core.c | 76 ----------------------------------------- plugins/mobile/display/core.c | 76 ----------------------------------------- plugins/tv/display/core.c | 76 ----------------------------------------- plugins/wearable/display/core.c | 76 ----------------------------------------- src/display/display.c | 75 ++++++++++++++++++++++++++++++++++++++++ src/display/display.h | 2 ++ 6 files changed, 77 insertions(+), 304 deletions(-) diff --git a/plugins/iot/display/core.c b/plugins/iot/display/core.c index 7495514..b8aa6ee 100644 --- a/plugins/iot/display/core.c +++ b/plugins/iot/display/core.c @@ -50,7 +50,6 @@ #include "core/udev.h" #include "core/list.h" #include "core/common.h" -#include "core/config-parser.h" #include "core/launch.h" #include "apps/apps.h" #include "extcon/extcon.h" @@ -59,7 +58,6 @@ #include "power/power-control.h" #include "power/boot.h" #include "power/doze.h" -#include "dd-display.h" #include "display-dpms.h" #include "display-signal.h" #include "display-lock.h" @@ -2005,80 +2003,6 @@ static int battery_health_changed(void *data) return 0; } -static int display_load_config(struct parse_result *result, void *user_data) -{ - struct display_config *c = user_data; - - _D("display_load_config: section=%s name=%s value=%s", result->section, result->name, result->value); - - if (!c) - return -EINVAL; - - if (!MATCH(result->section, "Display")) - return 0; - - if (MATCH(result->name, "LockScreenWaitingTime")) { - SET_CONF(c->lock_wait_time, atof(result->value)); - _D("lock wait time is %.3f", c->lock_wait_time); - } else if (MATCH(result->name, "LongPressInterval")) { - SET_CONF(c->longpress_interval, atof(result->value)); - _D("long press interval is %.3f", c->longpress_interval); - } else if (MATCH(result->name, "LightSensorSamplingInterval")) { - SET_CONF(c->lightsensor_interval, atof(result->value)); - _D("lightsensor interval is %.3f", c->lightsensor_interval); - } else if (MATCH(result->name, "LCDOffTimeout")) { - SET_CONF(c->lcdoff_timeout, atoi(result->value)); - _D("lcdoff timeout is %d ms", c->lcdoff_timeout); - } else if (MATCH(result->name, "BrightnessChangeStep")) { - SET_CONF(c->brightness_change_step, atoi(result->value)); - _D("brightness change step is %d", c->brightness_change_step); - } else if (MATCH(result->name, "LCDAlwaysOn")) { - c->lcd_always_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("LCD always on is %d", c->lcd_always_on); - } else if (MATCH(result->name, "Dimming")) { - c->dimming = (MATCH(result->value, "yes") ? 1 : 0); - _D("Dimming is %d", c->dimming); - } else if (MATCH(result->name, "ChangedFrameRateAllowed")) { - if (strstr(result->value, "setting")) { - c->framerate_app[REFRESH_SETTING] = 1; - _D("framerate app is Setting"); - } - if (strstr(result->value, "all")) { - memset(c->framerate_app, 1, sizeof(c->framerate_app)); - _D("framerate app is All"); - } - } else if (MATCH(result->name, "ControlDisplay")) { - c->control_display = (MATCH(result->value, "yes") ? 1 : 0); - _D("ControlDisplay is %d", c->control_display); - } else if (MATCH(result->name, "PowerKeyDoublePressSupport")) { - c->powerkey_doublepress = (MATCH(result->value, "yes") ? 1 : 0); - _D("PowerKeyDoublePressSupport is %d", c->powerkey_doublepress); - } else if (MATCH(result->name, "AccelSensorOn")) { - c->accel_sensor_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("AccelSensorOn is %d", c->accel_sensor_on); - } else if (MATCH(result->name, "ContinuousSampling")) { - c->continuous_sampling = (MATCH(result->value, "yes") ? 1 : 0); - _D("ContinuousSampling is %d", c->continuous_sampling); - } else if (MATCH(result->name, "TimeoutEnable")) { - c->timeout_enable = (MATCH(result->value, "yes") ? true : false); - _D("Timeout is %s", c->timeout_enable ? "enalbed" : "disabled"); - } else if (MATCH(result->name, "InputSupport")) { - c->input_support = (MATCH(result->value, "yes") ? true : false); - _D("Input is %s", c->input_support ? "supported" : "NOT supported"); - } else if (MATCH(result->name, "LockCheckTimeout")) { - SET_CONF(c->lockcheck_timeout, atoi(result->value)); - _D("LockCheckTimeout is %d", c->lockcheck_timeout); - } else if (MATCH(result->name, "AODTSP")) { - c->aod_tsp = (MATCH(result->value, "yes") ? true : false); - _D("TSP control at is %d at aod", c->aod_tsp); - } else if (MATCH(result->name, "SleepSupport")) { - c->sleep_support = (MATCH(result->value, "yes") ? true : false); - _D("SleepSupport is %d", c->sleep_support); - } - - return 0; -} - static gboolean delayed_init_dpms(gpointer data) { int timeout; diff --git a/plugins/mobile/display/core.c b/plugins/mobile/display/core.c index 1826433..66f7bce 100644 --- a/plugins/mobile/display/core.c +++ b/plugins/mobile/display/core.c @@ -50,7 +50,6 @@ #include "core/udev.h" #include "core/list.h" #include "core/common.h" -#include "core/config-parser.h" #include "core/launch.h" #include "apps/apps.h" #include "extcon/extcon.h" @@ -59,7 +58,6 @@ #include "power/power-control.h" #include "power/boot.h" #include "power/doze.h" -#include "dd-display.h" #include "display/display-dpms.h" #include "proximity.h" #include "display-info.h" @@ -2016,80 +2014,6 @@ static int battery_health_changed(void *data) return 0; } -static int display_load_config(struct parse_result *result, void *user_data) -{ - struct display_config *c = user_data; - - _D("display_load_config: section=%s name=%s value=%s", result->section, result->name, result->value); - - if (!c) - return -EINVAL; - - if (!MATCH(result->section, "Display")) - return 0; - - if (MATCH(result->name, "LockScreenWaitingTime")) { - SET_CONF(c->lock_wait_time, atof(result->value)); - _D("lock wait time is %.3f", c->lock_wait_time); - } else if (MATCH(result->name, "LongPressInterval")) { - SET_CONF(c->longpress_interval, atof(result->value)); - _D("long press interval is %.3f", c->longpress_interval); - } else if (MATCH(result->name, "LightSensorSamplingInterval")) { - SET_CONF(c->lightsensor_interval, atof(result->value)); - _D("lightsensor interval is %.3f", c->lightsensor_interval); - } else if (MATCH(result->name, "LCDOffTimeout")) { - SET_CONF(c->lcdoff_timeout, atoi(result->value)); - _D("lcdoff timeout is %d ms", c->lcdoff_timeout); - } else if (MATCH(result->name, "BrightnessChangeStep")) { - SET_CONF(c->brightness_change_step, atoi(result->value)); - _D("brightness change step is %d", c->brightness_change_step); - } else if (MATCH(result->name, "LCDAlwaysOn")) { - c->lcd_always_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("LCD always on is %d", c->lcd_always_on); - } else if (MATCH(result->name, "Dimming")) { - c->dimming = (MATCH(result->value, "yes") ? 1 : 0); - _D("Dimming is %d", c->dimming); - } else if (MATCH(result->name, "ChangedFrameRateAllowed")) { - if (strstr(result->value, "setting")) { - c->framerate_app[REFRESH_SETTING] = 1; - _D("framerate app is Setting"); - } - if (strstr(result->value, "all")) { - memset(c->framerate_app, 1, sizeof(c->framerate_app)); - _D("framerate app is All"); - } - } else if (MATCH(result->name, "ControlDisplay")) { - c->control_display = (MATCH(result->value, "yes") ? 1 : 0); - _D("ControlDisplay is %d", c->control_display); - } else if (MATCH(result->name, "PowerKeyDoublePressSupport")) { - c->powerkey_doublepress = (MATCH(result->value, "yes") ? 1 : 0); - _D("PowerKeyDoublePressSupport is %d", c->powerkey_doublepress); - } else if (MATCH(result->name, "AccelSensorOn")) { - c->accel_sensor_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("AccelSensorOn is %d", c->accel_sensor_on); - } else if (MATCH(result->name, "ContinuousSampling")) { - c->continuous_sampling = (MATCH(result->value, "yes") ? 1 : 0); - _D("ContinuousSampling is %d", c->continuous_sampling); - } else if (MATCH(result->name, "TimeoutEnable")) { - c->timeout_enable = (MATCH(result->value, "yes") ? true : false); - _D("Timeout is %s", c->timeout_enable ? "enalbed" : "disabled"); - } else if (MATCH(result->name, "InputSupport")) { - c->input_support = (MATCH(result->value, "yes") ? true : false); - _D("Input is %s", c->input_support ? "supported" : "NOT supported"); - } else if (MATCH(result->name, "LockCheckTimeout")) { - SET_CONF(c->lockcheck_timeout, atoi(result->value)); - _D("LockCheckTimeout is %d", c->lockcheck_timeout); - } else if (MATCH(result->name, "AODTSP")) { - c->aod_tsp = (MATCH(result->value, "yes") ? true : false); - _D("TSP control at is %d at aod", c->aod_tsp); - } else if (MATCH(result->name, "SleepSupport")) { - c->sleep_support = (MATCH(result->value, "yes") ? true : false); - _D("SleepSupport is %d", c->sleep_support); - } - - return 0; -} - static gboolean delayed_init_dpms(gpointer data) { int timeout; diff --git a/plugins/tv/display/core.c b/plugins/tv/display/core.c index 665df86..2db8f62 100644 --- a/plugins/tv/display/core.c +++ b/plugins/tv/display/core.c @@ -50,7 +50,6 @@ #include "core/udev.h" #include "core/list.h" #include "core/common.h" -#include "core/config-parser.h" #include "core/launch.h" #include "apps/apps.h" #include "extcon/extcon.h" @@ -59,7 +58,6 @@ #include "power/power-control.h" #include "power/boot.h" #include "power/doze.h" -#include "dd-display.h" #include "display-dpms.h" #include "display-signal.h" #include "display-lock.h" @@ -2006,80 +2004,6 @@ static int battery_health_changed(void *data) return 0; } -static int display_load_config(struct parse_result *result, void *user_data) -{ - struct display_config *c = user_data; - - _D("display_load_config: section=%s name=%s value=%s", result->section, result->name, result->value); - - if (!c) - return -EINVAL; - - if (!MATCH(result->section, "Display")) - return 0; - - if (MATCH(result->name, "LockScreenWaitingTime")) { - SET_CONF(c->lock_wait_time, atof(result->value)); - _D("lock wait time is %.3f", c->lock_wait_time); - } else if (MATCH(result->name, "LongPressInterval")) { - SET_CONF(c->longpress_interval, atof(result->value)); - _D("long press interval is %.3f", c->longpress_interval); - } else if (MATCH(result->name, "LightSensorSamplingInterval")) { - SET_CONF(c->lightsensor_interval, atof(result->value)); - _D("lightsensor interval is %.3f", c->lightsensor_interval); - } else if (MATCH(result->name, "LCDOffTimeout")) { - SET_CONF(c->lcdoff_timeout, atoi(result->value)); - _D("lcdoff timeout is %d ms", c->lcdoff_timeout); - } else if (MATCH(result->name, "BrightnessChangeStep")) { - SET_CONF(c->brightness_change_step, atoi(result->value)); - _D("brightness change step is %d", c->brightness_change_step); - } else if (MATCH(result->name, "LCDAlwaysOn")) { - c->lcd_always_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("LCD always on is %d", c->lcd_always_on); - } else if (MATCH(result->name, "Dimming")) { - c->dimming = (MATCH(result->value, "yes") ? 1 : 0); - _D("Dimming is %d", c->dimming); - } else if (MATCH(result->name, "ChangedFrameRateAllowed")) { - if (strstr(result->value, "setting")) { - c->framerate_app[REFRESH_SETTING] = 1; - _D("framerate app is Setting"); - } - if (strstr(result->value, "all")) { - memset(c->framerate_app, 1, sizeof(c->framerate_app)); - _D("framerate app is All"); - } - } else if (MATCH(result->name, "ControlDisplay")) { - c->control_display = (MATCH(result->value, "yes") ? 1 : 0); - _D("ControlDisplay is %d", c->control_display); - } else if (MATCH(result->name, "PowerKeyDoublePressSupport")) { - c->powerkey_doublepress = (MATCH(result->value, "yes") ? 1 : 0); - _D("PowerKeyDoublePressSupport is %d", c->powerkey_doublepress); - } else if (MATCH(result->name, "AccelSensorOn")) { - c->accel_sensor_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("AccelSensorOn is %d", c->accel_sensor_on); - } else if (MATCH(result->name, "ContinuousSampling")) { - c->continuous_sampling = (MATCH(result->value, "yes") ? 1 : 0); - _D("ContinuousSampling is %d", c->continuous_sampling); - } else if (MATCH(result->name, "TimeoutEnable")) { - c->timeout_enable = (MATCH(result->value, "yes") ? true : false); - _D("Timeout is %s", c->timeout_enable ? "enalbed" : "disabled"); - } else if (MATCH(result->name, "InputSupport")) { - c->input_support = (MATCH(result->value, "yes") ? true : false); - _D("Input is %s", c->input_support ? "supported" : "NOT supported"); - } else if (MATCH(result->name, "LockCheckTimeout")) { - SET_CONF(c->lockcheck_timeout, atoi(result->value)); - _D("LockCheckTimeout is %d", c->lockcheck_timeout); - } else if (MATCH(result->name, "AODTSP")) { - c->aod_tsp = (MATCH(result->value, "yes") ? true : false); - _D("TSP control at is %d at aod", c->aod_tsp); - } else if (MATCH(result->name, "SleepSupport")) { - c->sleep_support = (MATCH(result->value, "yes") ? true : false); - _D("SleepSupport is %d", c->sleep_support); - } - - return 0; -} - static gboolean delayed_init_dpms(gpointer data) { int timeout; diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index 6f3bb43..33907f1 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -51,7 +51,6 @@ #include "core/udev.h" #include "core/list.h" #include "core/common.h" -#include "core/config-parser.h" #include "core/launch.h" #include "apps/apps.h" #include "extcon/extcon.h" @@ -60,7 +59,6 @@ #include "power/power-control.h" #include "power/boot.h" #include "power/doze.h" -#include "dd-display.h" #include "display/display-dpms.h" #include "display-info.h" #include "battery-monitor.h" @@ -2292,80 +2290,6 @@ static int battery_health_changed(void *data) return 0; } -static int display_load_config(struct parse_result *result, void *user_data) -{ - struct display_config *c = user_data; - - _D("display_load_config: section=%s name=%s value=%s", result->section, result->name, result->value); - - if (!c) - return -EINVAL; - - if (!MATCH(result->section, "Display")) - return 0; - - if (MATCH(result->name, "LockScreenWaitingTime")) { - SET_CONF(c->lock_wait_time, atof(result->value)); - _D("lock wait time is %.3f", c->lock_wait_time); - } else if (MATCH(result->name, "LongPressInterval")) { - SET_CONF(c->longpress_interval, atof(result->value)); - _D("long press interval is %.3f", c->longpress_interval); - } else if (MATCH(result->name, "LightSensorSamplingInterval")) { - SET_CONF(c->lightsensor_interval, atof(result->value)); - _D("lightsensor interval is %.3f", c->lightsensor_interval); - } else if (MATCH(result->name, "LCDOffTimeout")) { - SET_CONF(c->lcdoff_timeout, atoi(result->value)); - _D("lcdoff timeout is %d ms", c->lcdoff_timeout); - } else if (MATCH(result->name, "BrightnessChangeStep")) { - SET_CONF(c->brightness_change_step, atoi(result->value)); - _D("brightness change step is %d", c->brightness_change_step); - } else if (MATCH(result->name, "LCDAlwaysOn")) { - c->lcd_always_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("LCD always on is %d", c->lcd_always_on); - } else if (MATCH(result->name, "Dimming")) { - c->dimming = (MATCH(result->value, "yes") ? 1 : 0); - _D("Dimming is %d", c->dimming); - } else if (MATCH(result->name, "ChangedFrameRateAllowed")) { - if (strstr(result->value, "setting")) { - c->framerate_app[REFRESH_SETTING] = 1; - _D("framerate app is Setting"); - } - if (strstr(result->value, "all")) { - memset(c->framerate_app, 1, sizeof(c->framerate_app)); - _D("framerate app is All"); - } - } else if (MATCH(result->name, "ControlDisplay")) { - c->control_display = (MATCH(result->value, "yes") ? 1 : 0); - _D("ControlDisplay is %d", c->control_display); - } else if (MATCH(result->name, "PowerKeyDoublePressSupport")) { - c->powerkey_doublepress = (MATCH(result->value, "yes") ? 1 : 0); - _D("PowerKeyDoublePressSupport is %d", c->powerkey_doublepress); - } else if (MATCH(result->name, "AccelSensorOn")) { - c->accel_sensor_on = (MATCH(result->value, "yes") ? 1 : 0); - _D("AccelSensorOn is %d", c->accel_sensor_on); - } else if (MATCH(result->name, "ContinuousSampling")) { - c->continuous_sampling = (MATCH(result->value, "yes") ? 1 : 0); - _D("ContinuousSampling is %d", c->continuous_sampling); - } else if (MATCH(result->name, "TimeoutEnable")) { - c->timeout_enable = (MATCH(result->value, "yes") ? true : false); - _D("Timeout is %s", c->timeout_enable ? "enalbed" : "disabled"); - } else if (MATCH(result->name, "InputSupport")) { - c->input_support = (MATCH(result->value, "yes") ? true : false); - _D("Input is %s", c->input_support ? "supported" : "NOT supported"); - } else if (MATCH(result->name, "LockCheckTimeout")) { - SET_CONF(c->lockcheck_timeout, atoi(result->value)); - _D("LockCheckTimeout is %d", c->lockcheck_timeout); - } else if (MATCH(result->name, "AODTSP")) { - c->aod_tsp = (MATCH(result->value, "yes") ? true : false); - _D("TSP control at is %d at aod", c->aod_tsp); - } else if (MATCH(result->name, "SleepSupport")) { - c->sleep_support = (MATCH(result->value, "yes") ? true : false); - _D("SleepSupport is %d", c->sleep_support); - } - - return 0; -} - static int powerlock_load_config(struct parse_result *result, void *user_data) { char *name = NULL; diff --git a/src/display/display.c b/src/display/display.c index e4de7d3..7ee2523 100644 --- a/src/display/display.c +++ b/src/display/display.c @@ -22,8 +22,10 @@ #include "util.h" #include "core.h" #include "display-ops.h" +#include "dd-display.h" #include "core/list.h" #include "core/common.h" +#include "core/config-parser.h" static int pm_cur_state; static int pm_old_state; @@ -84,3 +86,76 @@ void lcd_direct_control(enum dpms_state state, int flags) } } +int display_load_config(struct parse_result *result, void *user_data) +{ + struct display_config *c = user_data; + + _D("display_load_config: section=%s name=%s value=%s", result->section, result->name, result->value); + + if (!c) + return -EINVAL; + + if (!MATCH(result->section, "Display")) + return 0; + + if (MATCH(result->name, "LockScreenWaitingTime")) { + SET_CONF(c->lock_wait_time, atof(result->value)); + _D("lock wait time is %.3f", c->lock_wait_time); + } else if (MATCH(result->name, "LongPressInterval")) { + SET_CONF(c->longpress_interval, atof(result->value)); + _D("long press interval is %.3f", c->longpress_interval); + } else if (MATCH(result->name, "LightSensorSamplingInterval")) { + SET_CONF(c->lightsensor_interval, atof(result->value)); + _D("lightsensor interval is %.3f", c->lightsensor_interval); + } else if (MATCH(result->name, "LCDOffTimeout")) { + SET_CONF(c->lcdoff_timeout, atoi(result->value)); + _D("lcdoff timeout is %d ms", c->lcdoff_timeout); + } else if (MATCH(result->name, "BrightnessChangeStep")) { + SET_CONF(c->brightness_change_step, atoi(result->value)); + _D("brightness change step is %d", c->brightness_change_step); + } else if (MATCH(result->name, "LCDAlwaysOn")) { + c->lcd_always_on = (MATCH(result->value, "yes") ? 1 : 0); + _D("LCD always on is %d", c->lcd_always_on); + } else if (MATCH(result->name, "Dimming")) { + c->dimming = (MATCH(result->value, "yes") ? 1 : 0); + _D("Dimming is %d", c->dimming); + } else if (MATCH(result->name, "ChangedFrameRateAllowed")) { + if (strstr(result->value, "setting")) { + c->framerate_app[REFRESH_SETTING] = 1; + _D("framerate app is Setting"); + } + if (strstr(result->value, "all")) { + memset(c->framerate_app, 1, sizeof(c->framerate_app)); + _D("framerate app is All"); + } + } else if (MATCH(result->name, "ControlDisplay")) { + c->control_display = (MATCH(result->value, "yes") ? 1 : 0); + _D("ControlDisplay is %d", c->control_display); + } else if (MATCH(result->name, "PowerKeyDoublePressSupport")) { + c->powerkey_doublepress = (MATCH(result->value, "yes") ? 1 : 0); + _D("PowerKeyDoublePressSupport is %d", c->powerkey_doublepress); + } else if (MATCH(result->name, "AccelSensorOn")) { + c->accel_sensor_on = (MATCH(result->value, "yes") ? 1 : 0); + _D("AccelSensorOn is %d", c->accel_sensor_on); + } else if (MATCH(result->name, "ContinuousSampling")) { + c->continuous_sampling = (MATCH(result->value, "yes") ? 1 : 0); + _D("ContinuousSampling is %d", c->continuous_sampling); + } else if (MATCH(result->name, "TimeoutEnable")) { + c->timeout_enable = (MATCH(result->value, "yes") ? true : false); + _D("Timeout is %s", c->timeout_enable ? "enalbed" : "disabled"); + } else if (MATCH(result->name, "InputSupport")) { + c->input_support = (MATCH(result->value, "yes") ? true : false); + _D("Input is %s", c->input_support ? "supported" : "NOT supported"); + } else if (MATCH(result->name, "LockCheckTimeout")) { + SET_CONF(c->lockcheck_timeout, atoi(result->value)); + _D("LockCheckTimeout is %d", c->lockcheck_timeout); + } else if (MATCH(result->name, "AODTSP")) { + c->aod_tsp = (MATCH(result->value, "yes") ? true : false); + _D("TSP control at is %d at aod", c->aod_tsp); + } else if (MATCH(result->name, "SleepSupport")) { + c->sleep_support = (MATCH(result->value, "yes") ? true : false); + _D("SleepSupport is %d", c->sleep_support); + } + + return 0; +} diff --git a/src/display/display.h b/src/display/display.h index 4acb2ea..c87c06e 100644 --- a/src/display/display.h +++ b/src/display/display.h @@ -21,6 +21,7 @@ #define __DISPLAY_H__ #include "device-interface.h" +#include "core/config-parser.h" void lcd_direct_control(enum dpms_state state, int flags); int get_pm_cur_state(void); @@ -30,6 +31,7 @@ void set_pm_old_state(int old_state); unsigned int get_pm_status_flag(void); void set_pm_status_flag(unsigned int status_flag); void clear_pm_status_flag(unsigned int status_flag); +int display_load_config(struct parse_result *result, void *user_data); enum brightness_request_e { BR_MIN = 0, -- 2.7.4 From e94b9e4520e5c1a16b8d9a8424a1014cfabb5e49 Mon Sep 17 00:00:00 2001 From: Yunmi Ha Date: Fri, 4 Sep 2020 11:57:18 +0900 Subject: [PATCH 14/16] Get battery status from battery plugin. - When battery_module option is off, there is link error about undefined function. - Change battery reference to battery plugin same as display. Change-Id: I75924fd15f81e2485463f0d3eca3f8e798ecaec6 Signed-off-by: Yunmi Ha --- plugins/mobile/battery/battery-notification.c | 2 +- plugins/wearable/battery/battery-notification.c | 2 +- plugins/wearable/display/device-interface.c | 2 +- src/battery/battery-time.c | 2 +- src/battery/lowbat-handler.c | 2 +- src/battery/power-supply.c | 2 +- src/battery/power-supply.h | 2 +- src/touchscreen/touchscreen.c | 39 ++++++++++++++++++------- 8 files changed, 35 insertions(+), 18 deletions(-) diff --git a/plugins/mobile/battery/battery-notification.c b/plugins/mobile/battery/battery-notification.c index c3fe9f1..11cd6d7 100644 --- a/plugins/mobile/battery/battery-notification.c +++ b/plugins/mobile/battery/battery-notification.c @@ -414,7 +414,7 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) _E("Failed to get display plugin."); - battery = get_battery_status(); + battery = get_var_battery_status(); if (!battery) _E("Failed to get battery status structure."); } diff --git a/plugins/wearable/battery/battery-notification.c b/plugins/wearable/battery/battery-notification.c index 0d8e1e0..84ad217 100644 --- a/plugins/wearable/battery/battery-notification.c +++ b/plugins/wearable/battery/battery-notification.c @@ -102,7 +102,7 @@ BATTERY_OPS_REGISTER(&battery_notification_ops) static void __CONSTRUCTOR__ initialize(void) { - battery = get_battery_status(); + battery = get_var_battery_status(); if (!battery) _E("Failed to get battery status structure."); } diff --git a/plugins/wearable/display/device-interface.c b/plugins/wearable/display/device-interface.c index 83dcb2c..c803437 100644 --- a/plugins/wearable/display/device-interface.c +++ b/plugins/wearable/display/device-interface.c @@ -647,7 +647,7 @@ static int backlight_transit_state(int state) int brt, val; int start, end; static int aod_brightness_level; - struct battery_status *battery = get_battery_status(); + struct battery_status *battery = get_var_battery_status(); if (!battery) { _E("Failed to get battery status structure."); return -EINVAL; diff --git a/src/battery/battery-time.c b/src/battery/battery-time.c index f557448..eb61816 100644 --- a/src/battery/battery-time.c +++ b/src/battery/battery-time.c @@ -265,7 +265,7 @@ static int battinfo_calculation(void) int tmp = 0; struct battery_status *battery; - battery = get_battery_status(); + battery = get_var_battery_status(); if (!battery) { _E("Failed to get battery status structure."); return -EINVAL; diff --git a/src/battery/lowbat-handler.c b/src/battery/lowbat-handler.c index c25523c..e0829b4 100644 --- a/src/battery/lowbat-handler.c +++ b/src/battery/lowbat-handler.c @@ -788,7 +788,7 @@ static void __CONSTRUCTOR__ initialize(void) if (!battery_plgn) _E("Failed to get battery plugin."); - battery = get_battery_status(); + battery = get_var_battery_status(); if (!battery) _E("Failed to get battery status structure."); } diff --git a/src/battery/power-supply.c b/src/battery/power-supply.c index c7e3203..06b2ed7 100644 --- a/src/battery/power-supply.c +++ b/src/battery/power-supply.c @@ -113,7 +113,7 @@ static struct battery_device *battery_dev; static int load_uevent(struct parse_result *result, void *user_data); static int event_handler_state_changed(void *data); -inline struct battery_status *get_battery_status() +inline struct battery_status *get_var_battery_status(void) { return &battery; } diff --git a/src/battery/power-supply.h b/src/battery/power-supply.h index ebc050b..84c459c 100644 --- a/src/battery/power-supply.h +++ b/src/battery/power-supply.h @@ -118,7 +118,7 @@ struct battery_status { char power_source_s[32]; }; -struct battery_status *get_battery_status(); +struct battery_status *get_var_battery_status(void); extern struct battery_status old_battery; extern bool battery_initialized; diff --git a/src/touchscreen/touchscreen.c b/src/touchscreen/touchscreen.c index 44ad171..b592bad 100644 --- a/src/touchscreen/touchscreen.c +++ b/src/touchscreen/touchscreen.c @@ -38,6 +38,7 @@ enum ps_mode { }; static struct display_plugin *disp_plgn; +static struct battery_plugin *battery_plgn; static struct touchscreen_device *touchscreen_dev; static int touchscreen_enable = DEVICE_OPS_STATUS_START; static int powersaving_support = true; @@ -49,9 +50,11 @@ static int booting_done(void *data); static struct display_config *_display_conf; static struct _backlight_ops *_backlight_ops; +static struct battery_status *battery = NULL; -static struct _backlight_ops* (*_get_backlight_ops)(void); -static struct display_config* (*_get_display_config)(void); +static struct _backlight_ops* (*_get_var_backlight_ops)(void); +static struct display_config* (*_get_var_display_config)(void); +static struct battery_status* (*_get_var_battery_status)(void); static void touchscreen_wakeup_status(keynode_t *key, void *data) { @@ -213,9 +216,7 @@ static int touchscreen_start(enum device_flags flags) static int touchscreen_stop(enum device_flags flags) { - struct battery_status *battery = get_battery_status(); - - if (!_display_conf || !_backlight_ops || !battery) { + if (!_display_conf || !_backlight_ops) { _I("Touchscreen is not initialized."); goto exit; } @@ -319,9 +320,9 @@ static void touchscreen_init(void *data) { int ret, val; - _get_display_config = dlsym(disp_plgn->handle, "get_display_config"); - if (_get_display_config) { - _display_conf = _get_display_config(); + _get_var_display_config = dlsym(disp_plgn->handle, "get_display_config"); + if (_get_var_display_config) { + _display_conf = _get_var_display_config(); if (!_display_conf) _E("Failed to get display config."); } else @@ -331,14 +332,25 @@ static void touchscreen_init(void *data) * So it fails that fetching symbol directly with name 'backlight_ops'. * To avoid this, fetches getter function 'get_backlight_ops' instead, and * retrieve the 'backlight_ops' by using it */ - _get_backlight_ops = dlsym(disp_plgn->handle, "get_backlight_ops"); - if (_get_backlight_ops) { - _backlight_ops = _get_backlight_ops(); + _get_var_backlight_ops = dlsym(disp_plgn->handle, "get_backlight_ops"); + if (_get_var_backlight_ops) { + _backlight_ops = _get_var_backlight_ops(); if (!_backlight_ops) _E("Failed to get backlight operator."); } else _E("Failed to obtain address of get_backlight_ops, %s.", dlerror()); + if (battery_plgn->handle) { + _get_var_battery_status = dlsym(battery_plgn->handle, "get_var_battery_status"); + if (_get_var_battery_status) { + battery = _get_var_battery_status(); + if (!battery) + _E("Failed to get battery status."); + } else + _E("Failed to obtain address of get_var_battery_status, %s.", dlerror()); + } else + _I("There is no battery module."); + if (touchscreen_dev && touchscreen_dev->set_powersaving) { ret = touchscreen_dev->set_powersaving(0); if (ret < 0) @@ -383,4 +395,9 @@ static void __CONSTRUCTOR__ initialize(void) if (!disp_plgn) { _E("Failed to get display plugin."); } + + battery_plgn = get_battery_plugin(); + if (!battery_plgn) { + _E("Failed to get battery plugin."); + } } -- 2.7.4 From 7fed44c306a8b81560694e64286c756db3110b2a Mon Sep 17 00:00:00 2001 From: Youngjae Cho Date: Thu, 10 Sep 2020 13:36:35 +0900 Subject: [PATCH 15/16] Update warning_id when registering lockcheck timer Segfault occurs when the lock node had been deleted during FORCE_RELEASE_LOCK_INTERVAL and accessed by lockcheck timer callback. Change-Id: I8defd4fa15a3276588286ef6ae7811d34433241b Signed-off-by: Youngjae Cho (cherry picked from commit dd12492f83aa2a72e1f580569b81c594e72e042c) --- plugins/wearable/display/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/wearable/display/core.c b/plugins/wearable/display/core.c index 33907f1..6ba132b 100644 --- a/plugins/wearable/display/core.c +++ b/plugins/wearable/display/core.c @@ -429,7 +429,7 @@ static gboolean pmlock_terminate_daemon_to_release_lock(gpointer data) *pname ? pname : "Unknown", pid, errno); node->force_release = true; - g_timeout_add_seconds(FORCE_RELEASE_LOCK_INTERVAL, + node->warning_id = g_timeout_add_seconds(FORCE_RELEASE_LOCK_INTERVAL, pmlock_terminate_daemon_to_release_lock, (gpointer)node); } else if (node->force_release == true) { /* kill confirmation */ -- 2.7.4 From d2ec47c434e5dfe9433358ef11e34eeed859583d Mon Sep 17 00:00:00 2001 From: lokilee73 Date: Thu, 10 Sep 2020 16:14:30 +0900 Subject: [PATCH 16/16] Change function name ex) dh_get_param_from_var to g_variant_get_safe Change-Id: Ie8f2efe288b983debe60ec29100a4e146e280827 Signed-off-by: lokilee73 --- plugins/mobile/battery/battery-notification.c | 4 ++-- plugins/wearable/display/display-handler.c | 2 +- plugins/wearable/display/swim.c | 2 +- src/apps/apps.c | 2 +- src/auto-test/battery.c | 14 +++++++------- src/auto-test/brightness.c | 2 +- src/auto-test/display.c | 6 +++--- src/auto-test/extcon.c | 6 +++--- src/auto-test/ir.c | 4 ++-- src/auto-test/led.c | 4 ++-- src/auto-test/power.c | 4 ++-- src/auto-test/proc.c | 2 +- src/auto-test/test.c | 2 +- src/auto-test/time.c | 2 +- src/auto-test/udev.c | 2 +- src/battery-monitor/battery-monitor.c | 2 +- src/battery/power-supply.c | 6 +++--- src/devicectl/devicectl.c | 12 ++++++------ src/display/ambient-mode.c | 2 +- src/display/display-dbus.c | 2 +- src/display/display-lock.c | 2 +- src/dump/dump.c | 2 +- src/libdeviced/deviced-noti.c | 10 +++++----- src/libdeviced/display.c | 6 +++--- src/libdeviced/led.c | 6 +++--- src/libdeviced/usbhost.c | 6 +++--- src/usb-host-test/usb-host-test.c | 4 ++-- src/usb/usb-dbus.c | 2 +- src/usb/usb-state.c | 2 +- src/usbhost/usb-host.c | 2 +- 30 files changed, 62 insertions(+), 62 deletions(-) mode change 100644 => 100755 src/auto-test/led.c mode change 100644 => 100755 src/auto-test/time.c diff --git a/plugins/mobile/battery/battery-notification.c b/plugins/mobile/battery/battery-notification.c index 11cd6d7..6b9c4b4 100644 --- a/plugins/mobile/battery/battery-notification.c +++ b/plugins/mobile/battery/battery-notification.c @@ -92,7 +92,7 @@ static void low_noti_cb(GVariant *var, void *user_data, GError *err) return; } - if (!dh_get_param_from_var(var, "(i)", ¬i_low)) { + if (!g_variant_get_safe(var, "(i)", ¬i_low)) { _E("Failed to notify low: no message(%s)", g_variant_get_type_string(var)); goto out; } @@ -110,7 +110,7 @@ static void critical_noti_cb(GVariant *var, void *user_data, GError *err) if (!var) return; - if (!dh_get_param_from_var(var, "(i)", &id)) { + if (!g_variant_get_safe(var, "(i)", &id)) { _E("Failed to notify critical: no message(%s)", g_variant_get_type_string(var)); goto out; } diff --git a/plugins/wearable/display/display-handler.c b/plugins/wearable/display/display-handler.c index 1c2f778..27b97a8 100644 --- a/plugins/wearable/display/display-handler.c +++ b/plugins/wearable/display/display-handler.c @@ -122,7 +122,7 @@ static void aod_change_signal(GDBusConnection *conn, { char *screen = NULL; - if (!dh_get_param_from_var(param, "(s)", &screen)) { + if (!g_variant_get_safe(param, "(s)", &screen)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(s)", g_variant_get_type_string(param)); goto out; } diff --git a/plugins/wearable/display/swim.c b/plugins/wearable/display/swim.c index 0361d62..2b093dc 100644 --- a/plugins/wearable/display/swim.c +++ b/plugins/wearable/display/swim.c @@ -78,7 +78,7 @@ static void swimmode_signal_handler(GDBusConnection *conn, pid_t pid; bool lcd_state = false; - if (!dh_get_param_from_var(param, "(i)", &val)) { + if (!g_variant_get_safe(param, "(i)", &val)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(i)", g_variant_get_type_string(param)); return; } diff --git a/src/apps/apps.c b/src/apps/apps.c index 744e3af..a192797 100644 --- a/src/apps/apps.c +++ b/src/apps/apps.c @@ -50,7 +50,7 @@ static void __cb(GVariant *var, void *user_data, GError *err) return; } - if (!dh_get_param_from_var(var, "(i)", &ret)) { + if (!g_variant_get_safe(var, "(i)", &ret)) { _E("No message: %s", g_variant_get_type_string(var)); goto out; } diff --git a/src/auto-test/battery.c b/src/auto-test/battery.c index 4ebf33e..93a69c4 100644 --- a/src/auto-test/battery.c +++ b/src/auto-test/battery.c @@ -236,7 +236,7 @@ static bool get_battery_method(const char *method, int *value) } if (!strncmp(method, METHOD_BATTERY_HEALTH, strlen(METHOD_BATTERY_HEALTH))) { - if (!dh_get_param_from_var(msg, "(s)", &health)) { + if (!g_variant_get_safe(msg, "(s)", &health)) { _E("Failed to call dbus method(%s): No message.", METHOD_BATTERY_HEALTH); } else { _I("Success. %s=%s", METHOD_BATTERY_HEALTH, health); @@ -245,7 +245,7 @@ static bool get_battery_method(const char *method, int *value) } else { - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to call dbus method(%s): No message.", method); } else { _I("Success. %s=%d", method, val); @@ -277,7 +277,7 @@ static bool get_battery_method_vconf(const char *method) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("Failed to call dbus method(%s): No message.", method); else { if (val == -EIO) { @@ -324,7 +324,7 @@ static bool set_battery_low_level(int newlevel) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to call dbus method(%s): No message", METHOD_BATTERY_SETLOWBATLEVEL); goto out; } else { @@ -410,7 +410,7 @@ static bool get_battery_info() return ret; } - if (!dh_get_param_from_var(msg, "(isssiiiiiiii)", &val[0], //return value + if (!g_variant_get_safe(msg, "(isssiiiiiiii)", &val[0], //return value &argv[0],//status &argv[1],//health &argv[2],//power source @@ -709,7 +709,7 @@ static bool set_battery_power_supply(int index) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to call dbus method(%s): No message", POWER_SUBSYSTEM); val = -EBADMSG; } else { @@ -742,7 +742,7 @@ static bool get_battery_power_supply(int rsp[], char **power_source) return ret; } - if (!dh_get_param_from_var(msg, "(iiiiiiiisiiiii)", &val, //return value + if (!g_variant_get_safe(msg, "(iiiiiiiisiiiii)", &val, //return value &rsp[0], //capacity &rsp[1], //charge_status &rsp[2], //health diff --git a/src/auto-test/brightness.c b/src/auto-test/brightness.c index 97d9912..424adb6 100644 --- a/src/auto-test/brightness.c +++ b/src/auto-test/brightness.c @@ -72,7 +72,7 @@ static void check_result(int expect_default, int expect_current) return; } - if (!dh_get_param_from_var(msg, "(ii)", &result_default, &result_current)) { + if (!g_variant_get_safe(msg, "(ii)", &result_default, &result_current)) { _D("Return type mismatching from GetBrightnessInfo."); return; } diff --git a/src/auto-test/display.c b/src/auto-test/display.c index c2494f5..0b92d84 100644 --- a/src/auto-test/display.c +++ b/src/auto-test/display.c @@ -68,7 +68,7 @@ static bool get_display_method(const char *method, GVariant *param, int *value) _E("fail (%s): no reply", method); return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { _I("success (%s): %d", method, val); @@ -96,7 +96,7 @@ static bool set_display_method(const char *method, GVariant *param) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { @@ -167,7 +167,7 @@ static bool set_display_autobrightness_min(int min) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("fail : no message"); } else { if ((min < 1) || (min > 100)) { diff --git a/src/auto-test/extcon.c b/src/auto-test/extcon.c index ed2c187..645eda6 100644 --- a/src/auto-test/extcon.c +++ b/src/auto-test/extcon.c @@ -40,7 +40,7 @@ static bool request_extcon_method(const char *method, GVariant *param) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { @@ -73,7 +73,7 @@ static bool get_sysnoti_method(const char *method) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { @@ -107,7 +107,7 @@ static bool get_extcon_status(char *device_name) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail : no message"); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { diff --git a/src/auto-test/ir.c b/src/auto-test/ir.c index de548b9..48ad1c0 100644 --- a/src/auto-test/ir.c +++ b/src/auto-test/ir.c @@ -52,7 +52,7 @@ static bool request_ir_method(const char *method, const char *sig, int *param) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { @@ -106,7 +106,7 @@ static bool set_ir_command(char *command) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail : no message"); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { diff --git a/src/auto-test/led.c b/src/auto-test/led.c old mode 100644 new mode 100755 index 7e4356d..9d3ffe8 --- a/src/auto-test/led.c +++ b/src/auto-test/led.c @@ -52,7 +52,7 @@ static bool get_led_method(const char *method) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { _I("success (%s): %d", method, val); @@ -78,7 +78,7 @@ static bool set_led_method(const char *method, GVariant *param) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { diff --git a/src/auto-test/power.c b/src/auto-test/power.c index 96a6a85..2a88a98 100644 --- a/src/auto-test/power.c +++ b/src/auto-test/power.c @@ -40,7 +40,7 @@ static bool set_reboot_method(const char *method, GVariant *param) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { @@ -86,7 +86,7 @@ static bool request_lowpower_method(const char *method, GVariant *param) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if (val == -EAGAIN) { diff --git a/src/auto-test/proc.c b/src/auto-test/proc.c index 44bb8dc..914d922 100644 --- a/src/auto-test/proc.c +++ b/src/auto-test/proc.c @@ -35,7 +35,7 @@ static bool get_sysnoti_revision() return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail : no message"); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { diff --git a/src/auto-test/test.c b/src/auto-test/test.c index 794bb74..6039944 100644 --- a/src/auto-test/test.c +++ b/src/auto-test/test.c @@ -92,7 +92,7 @@ void __cb(void *data, GVariant *result, GError *err) return; } - if (!dh_get_param_from_var(result, "(i)", &temp)) { + if (!g_variant_get_safe(result, "(i)", &temp)) { _E("Failed to get variant(%s): no call back message", g_variant_get_type_string(result)); goto out; } diff --git a/src/auto-test/time.c b/src/auto-test/time.c old mode 100644 new mode 100755 index 036b919..5b9daae --- a/src/auto-test/time.c +++ b/src/auto-test/time.c @@ -36,7 +36,7 @@ static bool request_sysnoti_method(const char *method, GVariant *param) return ret; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail (%s): no message", method); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { diff --git a/src/auto-test/udev.c b/src/auto-test/udev.c index 25e3c8e..cc48c43 100644 --- a/src/auto-test/udev.c +++ b/src/auto-test/udev.c @@ -42,7 +42,7 @@ static int udev(int index) return -EBADMSG; } - if (!dh_get_param_from_var(msg, "(i)", &val)) + if (!g_variant_get_safe(msg, "(i)", &val)) _E("fail : no message"); else { if ((val == -ENOTSUP) || (val == -ENOSYS)) { diff --git a/src/battery-monitor/battery-monitor.c b/src/battery-monitor/battery-monitor.c index 50e719a..f6168dc 100644 --- a/src/battery-monitor/battery-monitor.c +++ b/src/battery-monitor/battery-monitor.c @@ -439,7 +439,7 @@ static void _dbus_cb_AppStatusChange(GDBusConnection *conn, char *status = NULL; /* (issss) : pid, appid, pkgid, status, type */ - if (!dh_get_param_from_var(param, "(issss)", &pid, &appid, NULL, &status, NULL)) { + if (!g_variant_get_safe(param, "(issss)", &pid, &appid, NULL, &status, NULL)) { _E("Failed to get params from gvariant. expected:%s, type:%s", "(issss)", g_variant_get_type_string(param)); goto out; } diff --git a/src/battery/power-supply.c b/src/battery/power-supply.c index 06b2ed7..34722aa 100644 --- a/src/battery/power-supply.c +++ b/src/battery/power-supply.c @@ -184,7 +184,7 @@ static void full_noti_cb(GVariant *var, void *user_data, GError *err) if (!var) return; - if (!dh_get_param_from_var(var, "(i)", &id)) { + if (!g_variant_get_safe(var, "(i)", &id)) { _E("Failed to notify full: no message(%s)", g_variant_get_type_string(var)); goto out; } @@ -200,7 +200,7 @@ static void noti_off_cb(GVariant *var, void *user_data, GError *err) { int ret = 0; - if (!dh_get_param_from_var(var, "(i)", &ret)) { + if (!g_variant_get_safe(var, "(i)", &ret)) { _E("Failed to off notification: no message(%s)", g_variant_get_type_string(var)); goto out; } @@ -267,7 +267,7 @@ static void charge_noti_on(GVariant *var, void *user_data, GError *err) if (!var) return; - if (!dh_get_param_from_var(var, "(i)", &id)) { + if (!g_variant_get_safe(var, "(i)", &id)) { _E("Failed to notify charge: no message(%s)", g_variant_get_type_string(var)); goto out; } diff --git a/src/devicectl/devicectl.c b/src/devicectl/devicectl.c index 1b4b0c4..8358377 100644 --- a/src/devicectl/devicectl.c +++ b/src/devicectl/devicectl.c @@ -128,7 +128,7 @@ static int dump_mode(char **args) goto out; } - if (!dh_get_param_from_var(msg, "(i)", &ret)) { + if (!g_variant_get_safe(msg, "(i)", &ret)) { printf("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret = -EBADMSG; } @@ -163,7 +163,7 @@ static int display_state(char **args) goto out; } - if (!dh_get_param_from_var(msg, "(i)", &ret)) { + if (!g_variant_get_safe(msg, "(i)", &ret)) { printf("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret = -EBADMSG; } @@ -242,7 +242,7 @@ static int save_dbus_name(char **args) return -EBADMSG; } - if (!dh_get_param_from_var(msg, "(as)", &iter)) { + if (!g_variant_get_safe(msg, "(as)", &iter)) { printf("Invalid list name arguments."); g_variant_unref(msg); return -EINVAL; @@ -316,7 +316,7 @@ static int enable_device(char **args) goto out; } - if (!dh_get_param_from_var(msg, "(i)", &ret)) { + if (!g_variant_get_safe(msg, "(i)", &ret)) { printf("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret = -EBADMSG; } @@ -349,7 +349,7 @@ static int disable_device(char **args) goto out; } - if (!dh_get_param_from_var(msg, "(i)", &ret)) { + if (!g_variant_get_safe(msg, "(i)", &ret)) { printf("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret = -EBADMSG; } @@ -382,7 +382,7 @@ static int power_operation(char **args, char *type) goto out; } - if (!dh_get_param_from_var(msg, "(i)", &ret)) { + if (!g_variant_get_safe(msg, "(i)", &ret)) { printf("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret = -EBADMSG; } diff --git a/src/display/ambient-mode.c b/src/display/ambient-mode.c index a0bb2bc..0e5e478 100644 --- a/src/display/ambient-mode.c +++ b/src/display/ambient-mode.c @@ -209,7 +209,7 @@ static void homescreen_signal_handler(GDBusConnection *conn, char *screen = NULL; pid_t pid; - if (!dh_get_param_from_var(param, "(s)", &screen)) { + if (!g_variant_get_safe(param, "(s)", &screen)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(s)", g_variant_get_type_string(param)); goto out; } diff --git a/src/display/display-dbus.c b/src/display/display-dbus.c index 7dbb69a..e56c7f3 100644 --- a/src/display/display-dbus.c +++ b/src/display/display-dbus.c @@ -1240,7 +1240,7 @@ static void changestate_signal_handler(GDBusConnection *conn, char *state = NULL; pid_t pid; - if (!dh_get_param_from_var(param, "(issss)", &val, NULL, NULL, &state, NULL)) { + if (!g_variant_get_safe(param, "(issss)", &val, NULL, NULL, &state, NULL)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(issss)", g_variant_get_type_string(param)); goto out; } diff --git a/src/display/display-lock.c b/src/display/display-lock.c index b1e08d4..b0d2568 100644 --- a/src/display/display-lock.c +++ b/src/display/display-lock.c @@ -77,7 +77,7 @@ static void default_pmlock_check_cb(GVariant *var, void *user_data, GError *err) if (!var) return; - if (!dh_get_param_from_var(var, "(iis)", &pid, &detected, &app_id)) { + if (!g_variant_get_safe(var, "(iis)", &pid, &detected, &app_id)) { _E("Failed to get params from gvariant. expected:%s, type:%s", "(iis)", g_variant_get_type_string(var)); goto out; } diff --git a/src/dump/dump.c b/src/dump/dump.c index da2d4fb..dc39db1 100644 --- a/src/dump/dump.c +++ b/src/dump/dump.c @@ -98,7 +98,7 @@ static void dump_signal_handler(GDBusConnection *conn, int mode = 0; char *log_path = NULL; - if (!dh_get_param_from_var(param, "(is)", &mode, &log_path)) { + if (!g_variant_get_safe(param, "(is)", &mode, &log_path)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(is)", g_variant_get_type_string(param)); goto out; } diff --git a/src/libdeviced/deviced-noti.c b/src/libdeviced/deviced-noti.c index fa371ee..7fbbd7e 100644 --- a/src/libdeviced/deviced-noti.c +++ b/src/libdeviced/deviced-noti.c @@ -67,7 +67,7 @@ static int dbus_proc_handler(char* type, char *buf) if (!msg) return -EBADMSG; - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); val = -EBADMSG; goto out; @@ -121,7 +121,7 @@ static int dbus_power_handler(char* type) if (!msg) return -EBADMSG; - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); val = -EBADMSG; goto out; @@ -165,7 +165,7 @@ static int dbus_time_handler(char* type, char* buf) if (!msg) return -EBADMSG; - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); val = -EBADMSG; goto out; @@ -202,7 +202,7 @@ static int alarm_set_time(time_t timet) return -EBADMSG; } - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to get type(%s): no message", g_variant_get_type_string(msg)); val = -EBADMSG; } @@ -243,7 +243,7 @@ static int dbus_cpu_handler(char* type, char* buf_pid, char* buf_freq) if (!msg) return -EBADMSG; - if (!dh_get_param_from_var(msg, "(i)", &val)) { + if (!g_variant_get_safe(msg, "(i)", &val)) { _E("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); val = -EBADMSG; goto out; diff --git a/src/libdeviced/display.c b/src/libdeviced/display.c index 5985d82..3247822 100644 --- a/src/libdeviced/display.c +++ b/src/libdeviced/display.c @@ -116,7 +116,7 @@ static void display_change_cb(GVariant *var, void *user_data, GError *err) if (!var) return; - if (!dh_get_param_from_var(var, "(i)", &val)) { + if (!g_variant_get_safe(var, "(i)", &val)) { _E("Failed to get(%s): no message", g_variant_get_type_string(var)); g_variant_unref(var); return; @@ -159,7 +159,7 @@ static void display_lock_cb(GVariant *var, void *user_data, GError *err) if (!var) return; - if (!dh_get_param_from_var(var, "(i)", &val)) { + if (!g_variant_get_safe(var, "(i)", &val)) { _E("Failed to get(%s): no message", g_variant_get_type_string(var)); goto out; } @@ -217,7 +217,7 @@ static void display_unlock_cb(GVariant *var, void *user_data, GError *err) if (!var) return; - if (!dh_get_param_from_var(var, "(i)", &val)) { + if (!g_variant_get_safe(var, "(i)", &val)) { _E("Failed to get(%s): no message", g_variant_get_type_string(var)); goto out; } diff --git a/src/libdeviced/led.c b/src/libdeviced/led.c index 85537b2..af43c64 100644 --- a/src/libdeviced/led.c +++ b/src/libdeviced/led.c @@ -43,7 +43,7 @@ API int led_get_brightness(void) if (!msg) return -EBADMSG; - if (!dh_get_param_from_var(msg, "(i)", &ret_val)) { + if (!g_variant_get_safe(msg, "(i)", &ret_val)) { _E("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret_val = -EBADMSG; } @@ -66,7 +66,7 @@ API int led_get_max_brightness(void) if (!msg) return -EBADMSG; - if (!dh_get_param_from_var(msg, "(i)", &ret_val)) { + if (!g_variant_get_safe(msg, "(i)", &ret_val)) { _E("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret_val = -EBADMSG; } @@ -89,7 +89,7 @@ API int led_set_brightness_with_noti(int val, bool enable) if (!msg) return -EBADMSG; - if (!dh_get_param_from_var(msg, "(i)", &ret_val)) { + if (!g_variant_get_safe(msg, "(i)", &ret_val)) { _E("Failed to get signature(%s): no message", g_variant_get_type_string(msg)); ret_val = -EBADMSG; } diff --git a/src/libdeviced/usbhost.c b/src/libdeviced/usbhost.c index 808ef1b..a813c1f 100644 --- a/src/libdeviced/usbhost.c +++ b/src/libdeviced/usbhost.c @@ -95,7 +95,7 @@ static void storage_signal_handler(GDBusConnection *conn, dd_list *elem; struct signal_handler *handler; - if (!dh_get_param_from_var(param, "(ssi)", &type, &syspath, &mount)) { + if (!g_variant_get_safe(param, "(ssi)", &type, &syspath, &mount)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(ssi)", g_variant_get_type_string(param)); goto out; } @@ -135,7 +135,7 @@ static void device_signal_handler(GDBusConnection *conn, dd_list *element; memset(&device, 0, sizeof(device)); - if (!dh_get_param_from_var(param, "(isiiiiisss)", &state, + if (!g_variant_get_safe(param, "(isiiiiisss)", &state, &syspath, &device.baseclass, &device.subclass, @@ -362,7 +362,7 @@ API int open_usb_device(char *path, int *out_fd) _E("Failed to get fd list."); return -1; } - if (!dh_get_param_from_var(reply, "(i)", &ret)) { + if (!g_variant_get_safe(reply, "(i)", &ret)) { _E("Failed to get(%s): no message.", g_variant_get_type_string(reply)); ret = -1; goto out; diff --git a/src/usb-host-test/usb-host-test.c b/src/usb-host-test/usb-host-test.c index 0f2ac13..cf10da9 100644 --- a/src/usb-host-test/usb-host-test.c +++ b/src/usb-host-test/usb-host-test.c @@ -268,7 +268,7 @@ static void service_started_handler(GDBusConnection *conn, char *unit = NULL; int ret; - if (!dh_get_param_from_var(param, "(uoss)", &id, NULL, &unit, NULL)) { + if (!g_variant_get_safe(param, "(uoss)", &id, NULL, &unit, NULL)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(uoss)", g_variant_get_type_string(param)); return ; } @@ -310,7 +310,7 @@ static void service_stopped_handler(GDBusConnection *conn, usbg_state *s; usbg_gadget *g; - if (!dh_get_param_from_var(param, "(uoss)", &id, NULL, &unit, NULL)) { + if (!g_variant_get_safe(param, "(uoss)", &id, NULL, &unit, NULL)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(uoss)", g_variant_get_type_string(param)); return ; } diff --git a/src/usb/usb-dbus.c b/src/usb/usb-dbus.c index 5bc9a87..db428aa 100644 --- a/src/usb/usb-dbus.c +++ b/src/usb/usb-dbus.c @@ -91,7 +91,7 @@ static void change_usb_client_mode(GDBusConnection *conn, unsigned int mode; int req_vconf = -1; - if (!dh_get_param_from_var(param, "(i)", &req_vconf)) { + if (!g_variant_get_safe(param, "(i)", &req_vconf)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(i)", g_variant_get_type_string(param)); return; } diff --git a/src/usb/usb-state.c b/src/usb/usb-state.c index 5e232a3..a88b5df 100644 --- a/src/usb/usb-state.c +++ b/src/usb/usb-state.c @@ -259,7 +259,7 @@ static void media_noti_cb(GVariant *var, void *user_data, GError *err) return; } - if (!dh_get_param_from_var(var, "(i)", &id)) { + if (!g_variant_get_safe(var, "(i)", &id)) { _E("Failed to get variant(%s): no USB notification message", g_variant_get_type_string(var)); goto out; } diff --git a/src/usbhost/usb-host.c b/src/usbhost/usb-host.c index 0c02247..91a5cf1 100644 --- a/src/usbhost/usb-host.c +++ b/src/usbhost/usb-host.c @@ -902,7 +902,7 @@ static void popup_result_signal_handler(GDBusConnection *conn, return; } - if (!dh_get_param_from_var(param, "(ii)", &allow, &always)) { + if (!g_variant_get_safe(param, "(ii)", &allow, &always)) { _E("failed to get params from gvariant. expected:%s, type:%s", "(ii)", g_variant_get_type_string(param)); free(req); return; -- 2.7.4