First attempt at adding proper brightness

Supports Switch and OGA
This commit is contained in:
David Guillen Fandos 2020-11-23 21:29:26 +01:00
parent e447b0f45a
commit a442696b71
37 changed files with 131 additions and 112 deletions

View File

@ -134,6 +134,8 @@
* thumbnails of different sizes */
#define DEFAULT_MATERIALUI_THUMBNAIL_BACKGROUND_ENABLE true
#define DEFAULT_SCREEN_BRIGHTNESS 100
#define DEFAULT_CRT_SWITCH_RESOLUTION CRT_SWITCH_NONE
#define DEFAULT_CRT_SWITCH_RESOLUTION_SUPER 2560

View File

@ -1851,6 +1851,7 @@ static struct config_uint_setting *populate_settings_uint(
#ifdef HAVE_NETWORKING
SETTING_UINT("streaming_mode", &settings->uints.streaming_mode, true, STREAMING_MODE_TWITCH, false);
#endif
SETTING_UINT("screen_brightness", &settings->uints.screen_brightness, true, DEFAULT_SCREEN_BRIGHTNESS, false);
SETTING_UINT("crt_switch_resolution", &settings->uints.crt_switch_resolution, true, DEFAULT_CRT_SWITCH_RESOLUTION, false);
SETTING_UINT("input_bind_timeout", &settings->uints.input_bind_timeout, true, input_bind_timeout, false);
SETTING_UINT("input_bind_hold", &settings->uints.input_bind_hold, true, input_bind_hold, false);

View File

@ -177,6 +177,7 @@ typedef struct settings
unsigned video_window_opacity;
unsigned crt_switch_resolution;
unsigned crt_switch_resolution_super;
unsigned screen_brightness;
unsigned video_monitor_index;
unsigned video_fullscreen_x;
unsigned video_fullscreen_y;

View File

@ -671,6 +671,7 @@ frontend_ctx_driver_t frontend_ctx_ctr =
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -202,6 +202,7 @@ frontend_ctx_driver_t frontend_ctx_dos = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -194,6 +194,7 @@ frontend_ctx_driver_t frontend_ctx_emscripten = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -564,6 +564,7 @@ frontend_ctx_driver_t frontend_ctx_gx = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -365,6 +365,7 @@ frontend_ctx_driver_t frontend_ctx_orbis = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -383,6 +383,7 @@ frontend_ctx_driver_t frontend_ctx_ps2 = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -707,6 +707,7 @@ frontend_ctx_driver_t frontend_ctx_ps3 = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -641,6 +641,7 @@ frontend_ctx_driver_t frontend_ctx_psp = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -201,6 +201,7 @@ frontend_ctx_driver_t frontend_ctx_qnx = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -928,6 +928,7 @@ frontend_ctx_driver_t frontend_ctx_switch =
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -1325,6 +1325,23 @@ static void frontend_unix_get_lakka_version(char *s,
pclose(command_file);
}
static void frontend_unix_set_screen_brightness(int value)
{
char svalue[16] = {0};
#if defined(HAVE_LAKKA_SWITCH)
/* Values from 0 to 100 */
int brightness = value;
#elif defined(HAVE_ODROIDGO2)
/* GOA screen PWM value does not linearly relate to perceived brightness */
int brightness = (pow(1.0369f, value) - 1) * 7;
#endif
snprintf(svalue, sizeof(svalue), "%d\n", brightness);
filestream_write_file("/sys/class/backlight/backlight/brightness",
svalue, strlen(svalue));
}
#endif
static void frontend_unix_get_env(int *argc,
@ -1905,6 +1922,7 @@ static void android_app_destroy(struct android_app *android_app)
static void frontend_unix_deinit(void *data)
{
settings_t *settings = config_get_ptr();
#ifdef ANDROID
struct android_app *android_app = (struct android_app*)data;
@ -1913,6 +1931,12 @@ static void frontend_unix_deinit(void *data)
android_app_destroy(android_app);
#endif
#ifdef HAVE_LAKKA
/* Reset brightness to maximum */
if (settings->uints.screen_brightness != DEFAULT_SCREEN_BRIGHTNESS)
frontend_unix_set_screen_brightness(DEFAULT_SCREEN_BRIGHTNESS);
#endif
}
static void frontend_unix_init(void *data)
@ -2734,6 +2758,11 @@ frontend_ctx_driver_t frontend_ctx_unix = {
frontend_unix_get_lakka_version, /* get_lakka_version */
#else
NULL, /* get_lakka_version */
#endif
#if defined(HAVE_LAKKA_SWITCH) || (defined(HAVE_LAKKA) && defined(HAVE_ODROIDGO2))
frontend_unix_set_screen_brightness, /* set_screen_brightness */
#else
NULL, /* set_screen_brightness */
#endif
frontend_unix_watch_path_for_changes,
frontend_unix_check_for_path_changes,

View File

@ -471,6 +471,7 @@ frontend_ctx_driver_t frontend_ctx_uwp = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -326,6 +326,7 @@ frontend_ctx_driver_t frontend_ctx_wiiu =
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -1146,6 +1146,7 @@ frontend_ctx_driver_t frontend_ctx_win32 = {
frontend_win32_attach_console, /* attach_console */
frontend_win32_detach_console, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -437,6 +437,7 @@ frontend_ctx_driver_t frontend_ctx_xdk = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -93,6 +93,7 @@ frontend_ctx_driver_t frontend_ctx_qnx = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -63,6 +63,7 @@ static frontend_ctx_driver_t frontend_ctx_null = {
NULL, /* attach_console */
NULL, /* detach_console */
NULL, /* get_lakka_version */
NULL, /* set_screen_brightness */
NULL, /* watch_path_for_changes */
NULL, /* check_for_path_changes */
NULL, /* set_sustained_performance_mode */

View File

@ -103,6 +103,8 @@ typedef struct frontend_ctx_driver
void (*attach_console)(void);
void (*detach_console)(void);
void (*get_lakka_version)(char *, size_t);
/* TODO/FIXME: Need to implement some sort of startup brightness setting. */
void (*set_screen_brightness)(int);
void (*watch_path_for_changes)(struct string_list *list, int flags, path_change_data_t **change_data);
bool (*check_for_path_changes)(path_change_data_t *change_data);
void (*set_sustained_performance_mode)(bool on);
@ -210,6 +212,10 @@ void frontend_driver_attach_console(void);
void frontend_driver_detach_console(void);
void frontend_driver_set_screen_brightness(int value);
bool frontend_driver_can_set_screen_brightness();
bool frontend_driver_can_watch_for_changes(void);
void frontend_driver_watch_path_for_changes(struct string_list *list, int flags, path_change_data_t **change_data);

View File

@ -3,10 +3,6 @@ MSG_HASH(
MENU_ENUM_LABEL_SWITCH_GPU_PROFILE,
"switch_gpu_profile"
)
MSG_HASH(
MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL,
"switch_backlight_control"
)
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MSG_HASH(
@ -2976,6 +2972,10 @@ MSG_HASH(
MENU_ENUM_LABEL_USE_THIS_DIRECTORY,
"use_this_directory"
)
MSG_HASH(
MENU_ENUM_LABEL_BRIGHTNESS_CONTROL,
"screen_brightness"
)
MSG_HASH(
MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE,
"video_allow_rotate"

View File

@ -11808,6 +11808,14 @@ MSG_HASH(
MSG_READ_ONLY,
"Read-Only"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_BRIGHTNESS_CONTROL,
"Screen Brightness"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_BRIGHTNESS_CONTROL,
"Increase or decrease the screen brightness."
)
#ifdef HAVE_LAKKA_SWITCH
MSG_HASH(
@ -11818,14 +11826,6 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_SWITCH_GPU_PROFILE,
"Overclock or underclock the Switch GPU."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL,
"Screen brightness"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
"Increase or decrease the Switch screen brightness."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_REBOOT_RCM,
"Reboot into RCM"

View File

@ -252,7 +252,6 @@ GENERIC_DEFERRED_PUSH(deferred_push_switch_cpu_profile, DISPLAYLIST_
#ifdef HAVE_LAKKA_SWITCH
GENERIC_DEFERRED_PUSH(deferred_push_switch_gpu_profile, DISPLAYLIST_SWITCH_GPU_PROFILE)
GENERIC_DEFERRED_PUSH(deferred_push_switch_backlight_control, DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL)
#endif
GENERIC_DEFERRED_PUSH(deferred_push_manual_content_scan_list, DISPLAYLIST_MANUAL_CONTENT_SCAN_LIST)
@ -759,7 +758,6 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{MENU_ENUM_LABEL_DEFERRED_LATENCY_SETTINGS_LIST, deferred_push_latency_settings_list},
#ifdef HAVE_LAKKA_SWITCH
{MENU_ENUM_LABEL_SWITCH_GPU_PROFILE, deferred_push_switch_gpu_profile},
{MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL, deferred_push_switch_backlight_control},
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
{MENU_ENUM_LABEL_SWITCH_CPU_PROFILE, deferred_push_switch_cpu_profile},

View File

@ -3430,27 +3430,6 @@ static int action_ok_set_switch_gpu_profile(const char *path,
return menu_cbs_exit();
}
static int action_ok_set_switch_backlight(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
char command[PATH_MAX_LENGTH] = {0};
int brightness = SWITCH_BRIGHTNESS[entry_idx];
snprintf(command, sizeof(command),
"echo %d > /sys/class/backlight/backlight/brightness",
brightness);
system(command);
snprintf(command, sizeof(command),
"Brightness set to %d%%", brightness);
runloop_msg_queue_push(command, 1, 90, true, NULL,
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
return 0;
}
#endif
static int action_ok_load_core_deferred(const char *path,
@ -7265,7 +7244,6 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
#endif
#ifdef HAVE_LAKKA_SWITCH
{MENU_ENUM_LABEL_SWITCH_GPU_PROFILE, action_ok_push_default},
{MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL, action_ok_push_default},
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
{MENU_ENUM_LABEL_SWITCH_CPU_PROFILE, action_ok_push_default},
@ -7715,9 +7693,6 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
case MENU_SET_SWITCH_GPU_PROFILE:
BIND_ACTION_OK(cbs, action_ok_set_switch_gpu_profile);
break;
case MENU_SET_SWITCH_BRIGHTNESS:
BIND_ACTION_OK(cbs, action_ok_set_switch_backlight);
break;
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_SET_SWITCH_CPU_PROFILE:

View File

@ -854,9 +854,10 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_switch_cpu_profile, MENU
#ifdef HAVE_LAKKA_SWITCH
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_switch_gpu_profile, MENU_ENUM_SUBLABEL_SWITCH_GPU_PROFILE)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_switch_backlight_control, MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL)
#endif
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_brightness_control, MENU_ENUM_SUBLABEL_BRIGHTNESS_CONTROL)
#if defined(_3DS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_3ds_lcd_bottom, MENU_ENUM_SUBLABEL_VIDEO_3DS_LCD_BOTTOM)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_3ds_display_mode, MENU_ENUM_SUBLABEL_VIDEO_3DS_DISPLAY_MODE)
@ -3874,10 +3875,10 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_switch_gpu_profile);
break;
case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_switch_backlight_control);
break;
#endif
case MENU_ENUM_LABEL_BRIGHTNESS_CONTROL:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_brightness_control);
break;
#if defined(_3DS)
case MENU_ENUM_LABEL_VIDEO_3DS_LCD_BOTTOM:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_3ds_lcd_bottom);

View File

@ -674,7 +674,6 @@ DEFAULT_TITLE_MACRO(action_get_title_switch_cpu_profile, MENU_ENUM_LABE
#ifdef HAVE_LAKKA_SWITCH
DEFAULT_TITLE_MACRO(action_get_title_switch_gpu_profile, MENU_ENUM_LABEL_VALUE_SWITCH_GPU_PROFILE)
DEFAULT_TITLE_MACRO(action_get_title_switch_backlight_control, MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL)
#endif
DEFAULT_TITLE_SEARCH_FILTER_MACRO(action_get_title_deferred_history_list, MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_HISTORY)
@ -1121,8 +1120,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
#ifdef HAVE_LAKKA_SWITCH
{MENU_ENUM_LABEL_SWITCH_GPU_PROFILE,
action_get_title_switch_gpu_profile},
{MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL,
action_get_title_switch_backlight_control},
#endif
{MENU_ENUM_LABEL_DEFERRED_MANUAL_CONTENT_SCAN_LIST,
action_get_title_manual_content_scan_list},
@ -1509,9 +1506,6 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_gpu_profile);
break;
case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_backlight_control);
break;
#endif
case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_LIST:
BIND_ACTION_GET_TITLE(cbs, action_get_title_manual_content_scan_list);

View File

@ -1588,9 +1588,6 @@ static int ozone_list_push(void *data, void *userdata,
#ifdef HAVE_LAKKA_SWITCH
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_GPU_PROFILE;
menu_displaylist_setting(&entry);
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL;
menu_displaylist_setting(&entry);
#endif
if (settings->bools.menu_show_configurations && !settings->bools.kiosk_mode_enable)

View File

@ -424,10 +424,8 @@ uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_PAUSE];
case MENU_SETTING_GROUP:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_SETTING];
#ifdef HAVE_LAKKA_SWITCH
case MENU_SET_SWITCH_BRIGHTNESS:
case MENU_SET_SCREEN_BRIGHTNESS:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_BRIGHTNESS];
#endif
case MENU_INFO_MESSAGE:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CORE_INFO];
case MENU_BLUETOOTH:

View File

@ -2862,10 +2862,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return xmb->textures.list[XMB_TEXTURE_RELOAD];
case MENU_SETTING_ACTION_PAUSE_ACHIEVEMENTS:
return xmb->textures.list[XMB_TEXTURE_PAUSE];
#ifdef HAVE_LAKKA_SWITCH
case MENU_SET_SWITCH_BRIGHTNESS:
case MENU_SET_SCREEN_BRIGHTNESS:
return xmb->textures.list[XMB_TEXTURE_BRIGHTNESS];
#endif
case MENU_SETTING_GROUP:
return xmb->textures.list[XMB_TEXTURE_SETTING];
case MENU_INFO_MESSAGE:
@ -6845,9 +6843,6 @@ static int xmb_list_push(void *data, void *userdata,
#ifdef HAVE_LAKKA_SWITCH
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_GPU_PROFILE;
menu_displaylist_setting(&entry);
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL;
menu_displaylist_setting(&entry);
#endif
if (menu_show_configurations && !kiosk_mode_enable)

View File

@ -5702,6 +5702,10 @@ unsigned menu_displaylist_build_list(
PARSE_ONLY_BOOL, false) == 0)
count++;
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
MENU_ENUM_LABEL_BRIGHTNESS_CONTROL,
PARSE_ONLY_UINT, false) == 0)
count++;
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
MENU_ENUM_LABEL_VIDEO_THREADED,
PARSE_ONLY_BOOL, false) == 0)
@ -9713,29 +9717,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
info->need_refresh = true;
info->need_clear = true;
break;
}
case DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL:
{
unsigned i;
const size_t brightness_count = sizeof(SWITCH_BRIGHTNESS)/sizeof(SWITCH_BRIGHTNESS[1]);
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
for (i = 0; i < brightness_count; i++)
{
char title[PATH_MAX_LENGTH] = {0};
snprintf(title, sizeof(title), "Set to %d%%", SWITCH_BRIGHTNESS[i]);
if (menu_entries_append_enum(info->list, title, "", 0, MENU_SET_SWITCH_BRIGHTNESS, 0, i))
count++;
}
info->need_push = true;
info->need_refresh = true;
info->need_clear = true;
break;
}
#endif /* HAVE_LAKKA_SWITCH */
@ -11686,11 +11667,6 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
PARSE_ACTION, false) == 0)
count++;
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(info->list,
MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL,
PARSE_ACTION, false) == 0)
count++;
if (settings->bools.menu_show_reboot)
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(info->list,
MENU_ENUM_LABEL_REBOOT,

View File

@ -234,7 +234,6 @@ enum menu_displaylist_ctl_state
DISPLAYLIST_CORE_CONTENT_DIRS_SUBDIR,
#ifdef HAVE_LAKKA_SWITCH
DISPLAYLIST_SWITCH_GPU_PROFILE,
DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL,
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
DISPLAYLIST_SWITCH_CPU_PROFILE,

View File

@ -194,9 +194,10 @@ enum menu_settings_type
MENU_SETTINGS_SUBSYSTEM_LAST = MENU_SETTINGS_SUBSYSTEM_ADD + RARCH_MAX_SUBSYSTEMS,
MENU_SETTINGS_CHEAT_MATCH,
MENU_SET_SCREEN_BRIGHTNESS,
#ifdef HAVE_LAKKA_SWITCH
MENU_SET_SWITCH_GPU_PROFILE,
MENU_SET_SWITCH_BRIGHTNESS,
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MENU_SET_SWITCH_CPU_PROFILE,

View File

@ -2947,6 +2947,15 @@ static void setting_get_string_representation_state_slot(rarch_setting_t *settin
strlcat(s, " (Auto)", len);
}
static void setting_get_string_representation_percentage(rarch_setting_t *setting,
char *s, size_t len)
{
if (!setting)
return;
snprintf(s, len, "%d%%", *setting->value.target.integer);
}
static void setting_get_string_representation_float_video_msg_color(rarch_setting_t *setting,
char *s, size_t len)
{
@ -7477,6 +7486,12 @@ static void general_write_handler(rarch_setting_t *setting)
}
}
break;
case MENU_ENUM_LABEL_BRIGHTNESS_CONTROL:
{
frontend_driver_set_screen_brightness(
*setting->value.target.unsigned_integer);
}
break;
default:
break;
}
@ -8402,14 +8417,6 @@ static bool setting_append_list(
&group_info,
&subgroup_info,
parent_group);
CONFIG_ACTION(
list, list_info,
MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL,
MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL,
&group_info,
&subgroup_info,
parent_group);
#endif
#ifdef HAVE_LAKKA_SWITCH
CONFIG_ACTION(
@ -10911,6 +10918,26 @@ static bool setting_append_list(
&subgroup_info,
parent_group);
if (frontend_driver_can_set_screen_brightness())
{
CONFIG_UINT(
list, list_info,
&settings->uints.screen_brightness,
MENU_ENUM_LABEL_BRIGHTNESS_CONTROL,
MENU_ENUM_LABEL_VALUE_BRIGHTNESS_CONTROL,
DEFAULT_SCREEN_BRIGHTNESS,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_COMBOBOX;
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint_special;
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_percentage;
menu_settings_list_current_add_range(list, list_info, 5, 100, 5, true, true);
}
#if defined(HAVE_THREADS)
CONFIG_BOOL(
list, list_info,

View File

@ -965,6 +965,7 @@ enum msg_hash_enums
#endif
/* Video */
MENU_LABEL(BRIGHTNESS_CONTROL),
MENU_LABEL(CRT_SWITCH_RESOLUTION),
MENU_LABEL(CRT_SWITCH_RESOLUTION_SUPER),
MENU_LABEL(CRT_SWITCH_RESOLUTION_OUTPUT_DISPLAY_ID),
@ -2950,7 +2951,6 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VALUE_TIMEDATE_HM_AMPM,
MENU_LABEL(SWITCH_GPU_PROFILE),
MENU_LABEL(SWITCH_BACKLIGHT_CONTROL),
MENU_LABEL(SWITCH_CPU_PROFILE),
MENU_ENUM_LABEL_VALUE_HOLD_START,

View File

@ -38644,6 +38644,21 @@ void frontend_driver_attach_console(void)
frontend->attach_console();
}
void frontend_driver_set_screen_brightness(int value)
{
struct rarch_state *p_rarch = &rarch_st;
frontend_ctx_driver_t *frontend = p_rarch->current_frontend_ctx;
if (frontend && frontend->set_screen_brightness)
frontend->set_screen_brightness(value);
}
bool frontend_driver_can_set_screen_brightness()
{
struct rarch_state *p_rarch = &rarch_st;
frontend_ctx_driver_t *frontend = p_rarch->current_frontend_ctx;
return (frontend && frontend->set_screen_brightness);
}
void frontend_driver_detach_console(void)
{
struct rarch_state *p_rarch = &rarch_st;

View File

@ -48,18 +48,6 @@ static char *SWITCH_GPU_SPEEDS[] = {
"153 Mhz",
"76 Mhz"
};
static int SWITCH_BRIGHTNESS[] = {
10,
20,
30,
40,
50,
60,
70,
80,
90,
100};
#endif
static char *SWITCH_CPU_PROFILES[] = {