Merge pull request #13249 from ToKe79/lakka2upstream

Upstream patches from Lakka
This commit is contained in:
Autechre 2021-11-20 22:07:47 +01:00 committed by GitHub
commit 9e40966dce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 378 additions and 2 deletions

View File

@ -1434,7 +1434,9 @@ endif
ifeq ($(HAVE_PLAIN_DRM), 1)
OBJ += gfx/drivers/drm_gfx.o
INCLUDE_DIRS += -I/usr/include/libdrm
ifneq ($(HAVE_LAKKA), 1)
INCLUDE_DIRS += -I/usr/include/libdrm
endif
LIBS += -ldrm
endif

View File

@ -43,6 +43,7 @@ typedef struct bluetooth_driver
bool (*device_is_connected)(void *data, unsigned i);
void (*device_get_sublabel)(void *data, char *s, unsigned i, size_t len);
bool (*connect_device)(void *data, unsigned i);
bool (*remove_device)(void *data, unsigned i);
const char *ident;
} bluetooth_driver_t;
@ -71,6 +72,8 @@ void driver_bluetooth_device_get_sublabel(char *s, unsigned i, size_t len);
bool driver_bluetooth_connect_device(unsigned i);
bool driver_bluetooth_remove_device(unsigned i);
bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data);
extern const bluetooth_driver_t *bluetooth_drivers[];

View File

@ -191,6 +191,45 @@ static bool bluetoothctl_connect_device(void *data, unsigned idx)
return true;
}
static bool bluetoothctl_remove_device(void *data, unsigned idx)
{
unsigned i;
bluetoothctl_t *btctl = (bluetoothctl_t*) data;
char device[18] = {0};
const char *line = btctl->lines->elems[idx].data;
static struct string_list* list = NULL;
/* bluetoothctl devices outputs lines of the format:
* $ bluetoothctl devices
* 'Device (mac address) (device name)'
*/
list = string_split(line, " ");
if (!list)
return false;
if (list->size == 0)
{
string_list_free(list);
return false;
}
strlcpy(device, list->elems[1].data, sizeof(device));
string_list_free(list);
snprintf(btctl->command, sizeof(btctl->command), "\
echo -e \"disconnect %s\\nremove %s\\n\" | bluetoothctl",
device, device);
pclose(popen(btctl->command, "r"));
runloop_msg_queue_push(msg_hash_to_str(MSG_BLUETOOTH_PAIRING_REMOVED),
1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT,
MESSAGE_QUEUE_CATEGORY_INFO);
btctl->bluetoothctl_counter[idx] = 0;
return true;
}
static void bluetoothctl_device_get_sublabel(
void *data, char *s, unsigned i, size_t len)
{
@ -211,5 +250,6 @@ bluetooth_driver_t bluetooth_bluetoothctl = {
bluetoothctl_device_is_connected,
bluetoothctl_device_get_sublabel,
bluetoothctl_connect_device,
bluetoothctl_remove_device,
"bluetoothctl",
};

View File

@ -604,6 +604,27 @@ static bool bluez_connect_device(void *data, unsigned i)
return true;
}
static bool bluez_remove_device(void *data, unsigned i)
{
bluez_t *bluez = (bluez_t*)data;
bluez_dbus_connect(bluez);
/* Disconnect the device */
device_method(bluez, bluez->devices->data[i].path, "Disconnect");
/* Remove the device */
if (device_method(bluez, bluez->devices->data[i].path, "RemoveDevice"))
return false;
runloop_msg_queue_push(msg_hash_to_str(MSG_BLUETOOTH_PAIRING_REMOVED),
1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT,
MESSAGE_QUEUE_CATEGORY_INFO);
bluez_dbus_disconnect(bluez);
bluez->bluez_cache_counter[i] = 0;
return true;
}
bluetooth_driver_t bluetooth_bluez = {
bluez_init,
bluez_free,
@ -612,5 +633,6 @@ bluetooth_driver_t bluetooth_bluez = {
bluez_device_is_connected,
bluez_device_get_sublabel,
bluez_connect_device,
bluez_remove_device,
"bluez",
};

View File

@ -646,6 +646,9 @@ static const bool menu_show_load_content = true;
#ifdef HAVE_CDROM
static const bool menu_show_load_disc = true;
static const bool menu_show_dump_disc = true;
#ifdef HAVE_LAKKA
static const bool menu_show_eject_disc = true;
#endif /* HAVE_LAKKA */
#endif
static const bool menu_show_information = true;
static const bool menu_show_configurations = true;

View File

@ -1828,6 +1828,9 @@ static struct config_bool_setting *populate_settings_bool(
#ifdef HAVE_CDROM
SETTING_BOOL("menu_show_load_disc", &settings->bools.menu_show_load_disc, true, menu_show_load_disc, false);
SETTING_BOOL("menu_show_dump_disc", &settings->bools.menu_show_dump_disc, true, menu_show_dump_disc, false);
#ifdef HAVE_LAKKA
SETTING_BOOL("menu_show_eject_disc", &settings->bools.menu_show_eject_disc, true, menu_show_eject_disc, false);
#endif /* HAVE_LAKKA */
#endif
SETTING_BOOL("menu_show_information", &settings->bools.menu_show_information, true, menu_show_information, false);
SETTING_BOOL("menu_show_configurations", &settings->bools.menu_show_configurations, true, menu_show_configurations, false);

View File

@ -653,6 +653,9 @@ typedef struct settings
bool menu_show_load_content;
bool menu_show_load_disc;
bool menu_show_dump_disc;
#ifdef HAVE_LAKKA
bool menu_show_eject_disc;
#endif
bool menu_show_information;
bool menu_show_configurations;
bool menu_show_help;

View File

@ -53,6 +53,7 @@ static bluetooth_driver_t bluetooth_null = {
NULL, /* device_is_connected */
NULL, /* device_get_sublabel */
NULL, /* connect_device */
NULL, /* remove_device */
"null",
};
@ -668,9 +669,11 @@ void drivers_init(
if (flags & DRIVER_MIDI_MASK)
midi_driver_init(settings);
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA
cpu_scaling_driver_init();
#endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
}
void driver_uninit(int flags)
@ -755,9 +758,11 @@ void driver_uninit(int flags)
if (flags & DRIVER_MIDI_MASK)
midi_driver_free();
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA
cpu_scaling_driver_free();
#endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
}
void retroarch_deinit_drivers(struct retro_callbacks *cbs)

View File

@ -131,7 +131,7 @@ static void set_aspect(videocrt_switch_t *p_switch, unsigned int width,
RARCH_LOG("[CRT]: Resolution is stretched. Fractal scaling @ X:%f Y:%f \n", srm_xscale, srm_yscale);
}
else
RARCH_LOG("[CRT]: SR integer scaled X:%d Y:%d \n",srm.x_scale, srm.y_scale);
RARCH_LOG("[CRT]: SR integer scaled X:%d Y:%d \n",(int)srm_xscale, (int)srm_yscale);
scaled_width = roundf(patched_width*srm_xscale);
scaled_height = roundf(patched_height*srm_yscale);

View File

@ -80,6 +80,13 @@
#define UDEV_XKB_HANDLING
#endif
/* Force UDEV_XKB_HANDLING for Lakka */
#ifdef HAVE_LAKKA
#ifndef UDEV_XKB_HANDLING
#define UDEV_XKB_HANDLING
#endif
#endif
#define UDEV_MAX_KEYS (KEY_MAX + 7) / 8
typedef struct udev_input udev_input_t;
@ -1391,7 +1398,12 @@ static void *udev_input_init(const char *joypad_driver)
goto error;
video_context_driver_get_ident(&ctx_ident);
#ifdef HAVE_LAKKA
/* Force xkb_handling on Lakka */
udev->xkb_handling = true;
#else
udev->xkb_handling = string_is_equal(ctx_ident.ident, "kms");
#endif /* HAVE_LAKKA */
#endif
#if defined(HAVE_EPOLL)

View File

@ -151,6 +151,7 @@ error:
return -1;
}
#ifndef HAVE_LAKKA_SWITCH
static bool udev_set_rumble_gain(unsigned i, unsigned gain)
{
struct input_event ie;
@ -179,6 +180,7 @@ static bool udev_set_rumble_gain(unsigned i, unsigned gain)
return true;
}
#endif
static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char *path)
{
@ -299,6 +301,7 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char
p, path, pad->num_effects);
}
#ifndef HAVE_LAKKA_SWITCH
/* Set rumble gain here, if supported */
if (test_bit(FF_RUMBLE, ffbit))
{
@ -307,6 +310,7 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char
: DEFAULT_RUMBLE_GAIN;
udev_set_rumble_gain(p, rumble_gain);
}
#endif
return ret;
}
@ -790,7 +794,11 @@ input_device_driver_t udev_joypad = {
udev_joypad_axis,
udev_joypad_poll,
udev_set_rumble,
#ifndef HAVE_LAKKA_SWITCH
udev_set_rumble_gain,
#else
NULL,
#endif
udev_joypad_name,
"udev",
};

View File

@ -1730,6 +1730,12 @@ MSG_HASH(
MENU_ENUM_LABEL_DUMP_DISC,
"dump_disc"
)
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_EJECT_DISC,
"eject_disc"
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL,
"load_special"
@ -2386,6 +2392,12 @@ MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST,
"deferred_load_disc_list"
)
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_EJECT_DISC,
"deferred_eject_disc"
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_CURSOR_MANAGER_LIST_RDB_ENTRY_DEVELOPER,
"deferred_cursor_manager_list_rdb_entry_developer"
@ -4030,6 +4042,12 @@ MSG_HASH(
MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC,
"menu_show_dump_disc"
)
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC,
"menu_show_eject_disc"
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_MENU_SHOW_INFORMATION,
"menu_show_information"

View File

@ -91,6 +91,16 @@ MSG_HASH( /* FIXME Is a specific image format used? Is it determined automatical
MENU_ENUM_SUBLABEL_DUMP_DISC,
"Dump the physical media disc to internal storage. It will be saved as an image file."
)
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_VALUE_EJECT_DISC,
"Eject Disc"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_EJECT_DISC,
"Ejects the disc from physical CD/DVD drive."
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB,
"Playlists"
@ -4335,6 +4345,16 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_MENU_SHOW_DUMP_DISC,
"Show the 'Dump Disc' option in the Main Menu."
)
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MENU_SHOW_EJECT_DISC,
"Show 'Eject Disc'"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_MENU_SHOW_EJECT_DISC,
"Show the 'Eject Disc' option in the Main Menu."
)
#endif
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MENU_SHOW_ONLINE_UPDATER,
"Show 'Online Updater'"
@ -11889,6 +11909,10 @@ MSG_HASH(
MSG_BLUETOOTH_SCAN_COMPLETE,
"Bluetooth scan complete."
)
MSG_HASH(
MSG_BLUETOOTH_PAIRING_REMOVED,
"Pairing removed. Restart RetroArch to connect/pair again."
)
MSG_HASH(
MSG_WIFI_SCAN_COMPLETE,
"Wi-Fi scan complete."

View File

@ -113,6 +113,9 @@ GENERIC_DEFERRED_PUSH(deferred_push_configurations_list, DISPLAYLIST_
GENERIC_DEFERRED_PUSH(deferred_push_load_content_special, DISPLAYLIST_LOAD_CONTENT_LIST)
GENERIC_DEFERRED_PUSH(deferred_push_load_content_list, DISPLAYLIST_LOAD_CONTENT_LIST)
GENERIC_DEFERRED_PUSH(deferred_push_dump_disk_list, DISPLAYLIST_DUMP_DISC)
#ifdef HAVE_LAKKA
GENERIC_DEFERRED_PUSH(deferred_push_eject_disc, DISPLAYLIST_EJECT_DISC)
#endif
GENERIC_DEFERRED_PUSH(deferred_push_cdrom_info_detail_list, DISPLAYLIST_CDROM_DETAIL_INFO)
GENERIC_DEFERRED_PUSH(deferred_push_load_disk_list, DISPLAYLIST_LOAD_DISC)
GENERIC_DEFERRED_PUSH(deferred_push_information_list, DISPLAYLIST_INFORMATION_LIST)
@ -676,6 +679,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
const deferred_info_list_t info_list[] = {
{MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, deferred_push_dump_disk_list},
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_DEFERRED_EJECT_DISC, deferred_push_eject_disc},
#endif
{MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, deferred_push_load_disk_list},
{MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, deferred_push_favorites_list},
{MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST, deferred_push_dropdown_box_list},
@ -1276,6 +1282,11 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_dump_disk_list);
break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_DEFERRED_EJECT_DISC:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_eject_disc);
break;
#endif
case MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_DETAIL_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cdrom_info_detail_list);
break;

View File

@ -678,6 +678,7 @@ static int manual_content_scan_core_name_left(unsigned type, const char *label,
return 0;
}
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA
static int cpu_policy_mode_change(unsigned type, const char *label,
bool wraparound)
@ -792,6 +793,7 @@ static int cpu_policy_freq_tweak(unsigned type, const char *label,
return 0;
}
#endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
static int core_setting_left(unsigned type, const char *label,
bool wraparound)

View File

@ -447,6 +447,10 @@ static enum msg_hash_enums action_ok_dl_to_enum(unsigned lbl)
return MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_FACEBOOK_LIST;
case ACTION_OK_DL_DUMP_DISC_LIST:
return MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST;
#ifdef HAVE_LAKKA
case ACTION_OK_DL_EJECT_DISC:
return MENU_ENUM_LABEL_DEFERRED_EJECT_DISC;
#endif
case ACTION_OK_DL_LOAD_DISC_LIST:
return MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST;
case ACTION_OK_DL_ACCOUNTS_YOUTUBE_LIST:
@ -1527,6 +1531,9 @@ int generic_action_ok_displaylist_push(const char *path,
case ACTION_OK_DL_IMAGES_LIST:
case ACTION_OK_DL_LOAD_DISC_LIST:
case ACTION_OK_DL_DUMP_DISC_LIST:
#ifdef HAVE_LAKKA
case ACTION_OK_DL_EJECT_DISC:
#endif
case ACTION_OK_DL_SHADER_PRESET_REMOVE:
case ACTION_OK_DL_SHADER_PRESET_SAVE:
case ACTION_OK_DL_CDROM_INFO_LIST:
@ -2733,6 +2740,17 @@ static int action_ok_dump_cdrom(const char *path,
return 0;
}
#ifdef HAVE_LAKKA
static int action_ok_eject_disc(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
#ifdef HAVE_CDROM
system("eject & disown");
#endif /* HAVE_CDROM */
return 0;
}
#endif /* HAVE_LAKKA */
static int action_ok_lookup_setting(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
@ -5642,6 +5660,9 @@ DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_youtube_list, ACTION_OK_DL_ACCOUN
DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_twitch_list, ACTION_OK_DL_ACCOUNTS_TWITCH_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_facebook_list, ACTION_OK_DL_ACCOUNTS_FACEBOOK_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_push_dump_disc_list, ACTION_OK_DL_DUMP_DISC_LIST)
#ifdef HAVE_LAKKA
DEFAULT_ACTION_OK_FUNC(action_ok_push_eject_disc, ACTION_OK_DL_EJECT_DISC)
#endif
DEFAULT_ACTION_OK_FUNC(action_ok_push_load_disc_list, ACTION_OK_DL_LOAD_DISC_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_open_archive, ACTION_OK_DL_OPEN_ARCHIVE)
DEFAULT_ACTION_OK_FUNC(action_ok_rgui_menu_theme_preset, ACTION_OK_DL_RGUI_MENU_THEME_PRESET)
@ -7863,6 +7884,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_ACCOUNTS_TWITCH, action_ok_push_accounts_twitch_list},
{MENU_ENUM_LABEL_ACCOUNTS_FACEBOOK, action_ok_push_accounts_facebook_list},
{MENU_ENUM_LABEL_DUMP_DISC, action_ok_push_dump_disc_list},
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_EJECT_DISC, action_ok_push_eject_disc},
#endif
{MENU_ENUM_LABEL_LOAD_DISC, action_ok_push_load_disc_list},
{MENU_ENUM_LABEL_SHADER_OPTIONS, action_ok_push_default},
{MENU_ENUM_LABEL_CORE_OPTIONS, action_ok_push_core_options_list},
@ -8043,6 +8067,12 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
{
BIND_ACTION_OK(cbs, action_ok_dump_cdrom);
}
#ifdef HAVE_LAKKA
else if (type == MENU_SET_EJECT_DISC)
{
BIND_ACTION_OK(cbs, action_ok_eject_disc);
}
#endif
else if (type == MENU_SET_CDROM_INFO)
{
BIND_ACTION_OK(cbs, action_ok_cdrom_info_list);

View File

@ -48,6 +48,10 @@
#include "../../config.def.h"
#ifdef HAVE_BLUETOOTH
#include "../../bluetooth/bluetooth_driver.h"
#endif
#ifdef HAVE_NETWORKING
#include "../../core_updater_list.h"
#endif
@ -539,6 +543,16 @@ static int action_start_load_core(
return ret;
}
#ifdef HAVE_BLUETOOTH
static int action_start_bluetooth(const char *path, const char *label,
unsigned menu_type, size_t idx, size_t entry_idx)
{
driver_bluetooth_remove_device((unsigned)idx);
return 0;
}
#endif
#ifdef HAVE_NETWORKING
static int action_start_core_updater_entry(
const char *path, const char *label,
@ -711,6 +725,11 @@ static int menu_cbs_init_bind_start_compare_label(menu_file_list_cbs_t *cbs)
case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME:
BIND_ACTION_START(cbs, action_start_manual_content_scan_core_name);
break;
#ifdef HAVE_BLUETOOTH
case MENU_ENUM_LABEL_CONNECT_BLUETOOTH:
BIND_ACTION_START(cbs, action_start_bluetooth);
break;
#endif
default:
return -1;
}

View File

@ -411,6 +411,9 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_sideload_core_list, MENU_
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_manager_list, MENU_ENUM_SUBLABEL_CORE_MANAGER_LIST)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_load_disc, MENU_ENUM_SUBLABEL_LOAD_DISC)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_dump_disc, MENU_ENUM_SUBLABEL_DUMP_DISC)
#ifdef HAVE_LAKKA
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_eject_disc, MENU_ENUM_SUBLABEL_EJECT_DISC)
#endif
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_list, MENU_ENUM_SUBLABEL_LOAD_CONTENT_LIST)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_special, MENU_ENUM_SUBLABEL_LOAD_CONTENT_SPECIAL)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_load_content_history, MENU_ENUM_SUBLABEL_LOAD_CONTENT_HISTORY)
@ -803,6 +806,9 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_core,
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_content, MENU_ENUM_SUBLABEL_MENU_SHOW_LOAD_CONTENT)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_LOAD_DISC)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_dump_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_DUMP_DISC)
#ifdef HAVE_LAKKA
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_eject_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_EJECT_DISC)
#endif
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_information, MENU_ENUM_SUBLABEL_MENU_SHOW_INFORMATION)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_configurations, MENU_ENUM_SUBLABEL_MENU_SHOW_CONFIGURATIONS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_help, MENU_ENUM_SUBLABEL_MENU_SHOW_HELP)
@ -2451,6 +2457,11 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_DUMP_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_dump_disc);
break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_EJECT_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_eject_disc);
break;
#endif
case MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_load_content);
break;
@ -2460,6 +2471,11 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_dump_disc);
break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_eject_disc);
break;
#endif
case MENU_ENUM_LABEL_MENU_SHOW_INFORMATION:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_information);
break;

View File

@ -602,6 +602,9 @@ DEFAULT_TITLE_MACRO(action_get_crt_switchres_settings_list, MENU_ENUM_LABEL_
DEFAULT_TITLE_MACRO(action_get_configuration_settings_list, MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS)
DEFAULT_TITLE_MACRO(action_get_load_disc_list, MENU_ENUM_LABEL_VALUE_LOAD_DISC)
DEFAULT_TITLE_MACRO(action_get_dump_disc_list, MENU_ENUM_LABEL_VALUE_DUMP_DISC)
#ifdef HAVE_LAKKA
DEFAULT_TITLE_MACRO(action_get_eject_disc, MENU_ENUM_LABEL_VALUE_EJECT_DISC)
#endif
DEFAULT_TITLE_MACRO(action_get_saving_settings_list, MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS)
DEFAULT_TITLE_MACRO(action_get_logging_settings_list, MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS)
DEFAULT_TITLE_MACRO(action_get_frame_throttle_settings_list, MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS)
@ -930,6 +933,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_DEFERRED_CORE_RESTORE_BACKUP_LIST, action_get_title_deferred_core_restore_backup_list},
{MENU_ENUM_LABEL_DEFERRED_CORE_DELETE_BACKUP_LIST, action_get_title_deferred_core_delete_backup_list},
{MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, action_get_dump_disc_list},
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_DEFERRED_EJECT_DISC, action_get_eject_disc},
#endif
{MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, action_get_load_disc_list},
{MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST, action_get_configuration_settings_list },
{MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST, action_get_saving_settings_list},

View File

@ -9302,6 +9302,17 @@ static int materialui_list_push(void *data, void *userdata,
false);
}
#ifdef HAVE_LAKKA
if (settings->bools.menu_show_eject_disc)
{
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION,
false);
}
#endif
#if defined(HAVE_NETWORKING)
#ifdef HAVE_LAKKA
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
@ -10082,6 +10093,9 @@ static void materialui_list_insert(
{
case MENU_SET_CDROM_INFO:
case MENU_SET_CDROM_LIST:
#ifdef HAVE_LAKKA
case MENU_SET_EJECT_DISC:
#endif
case MENU_SET_LOAD_CDROM_LIST:
node->icon_texture_index = MUI_TEXTURE_DISK;
node->icon_type = MUI_ICON_TYPE_INTERNAL;
@ -10362,6 +10376,9 @@ static void materialui_list_insert(
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_IMAGE_APPEND)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_DISC)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DUMP_DISC)) ||
#ifdef HAVE_LAKKA
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_EJECT_DISC)) ||
#endif
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISC_INFORMATION)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_INDEX))

View File

@ -1602,6 +1602,9 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
{
case MENU_ENUM_LABEL_LOAD_DISC:
case MENU_ENUM_LABEL_DUMP_DISC:
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_EJECT_DISC:
#endif
case MENU_ENUM_LABEL_DISC_INFORMATION:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_DISC];
case MENU_ENUM_LABEL_CORE_OPTIONS:
@ -1931,6 +1934,9 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
{
case MENU_SET_CDROM_INFO:
case MENU_SET_CDROM_LIST:
#ifdef HAVE_LAKKA
case MENU_SET_EJECT_DISC:
#endif
case MENU_SET_LOAD_CDROM_LIST:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_DISC];
case FILE_TYPE_DIRECTORY:
@ -7857,6 +7863,17 @@ static int ozone_list_push(void *data, void *userdata,
false);
}
#ifdef HAVE_LAKKA
if (settings->bools.menu_show_eject_disc)
{
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION,
false);
}
#endif
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_ADD_CONTENT_LIST,

View File

@ -2638,6 +2638,9 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_LOAD_DISC:
case MENU_ENUM_LABEL_DUMP_DISC:
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_EJECT_DISC:
#endif
case MENU_ENUM_LABEL_DISC_INFORMATION:
return xmb->textures.list[XMB_TEXTURE_DISC];
@ -6882,6 +6885,9 @@ static int xmb_list_push(void *data, void *userdata,
bool menu_show_configurations = settings->bools.menu_show_configurations;
bool menu_show_load_disc = settings->bools.menu_show_load_disc;
bool menu_show_dump_disc = settings->bools.menu_show_dump_disc;
#ifdef HAVE_LAKKA
bool menu_show_eject_disc = settings->bools.menu_show_eject_disc;
#endif
bool menu_show_shutdown = settings->bools.menu_show_shutdown;
bool menu_show_reboot = settings->bools.menu_show_reboot;
#if !defined(IOS)
@ -7023,6 +7029,17 @@ static int xmb_list_push(void *data, void *userdata,
false);
}
#ifdef HAVE_LAKKA
if (menu_show_eject_disc)
{
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION,
false);
}
#endif
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_ADD_CONTENT_LIST,

View File

@ -198,6 +198,9 @@ enum
ACTION_OK_DL_MIDI_SETTINGS_LIST,
ACTION_OK_DL_LOAD_DISC_LIST,
ACTION_OK_DL_DUMP_DISC_LIST,
#ifdef HAVE_LAKKA
ACTION_OK_DL_EJECT_DISC,
#endif
ACTION_OK_DL_BROWSE_URL_START,
ACTION_OK_DL_CONTENT_SETTINGS,
ACTION_OK_DL_CDROM_INFO_DETAIL_LIST,

View File

@ -8211,6 +8211,9 @@ unsigned menu_displaylist_build_list(
{MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_LOAD_DISC, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC, PARSE_ONLY_BOOL, true },
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC, PARSE_ONLY_BOOL, true },
#endif
{MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_CORE_UPDATER, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_LEGACY_THUMBNAIL_UPDATER, PARSE_ONLY_BOOL, true },
@ -9537,6 +9540,14 @@ unsigned menu_displaylist_build_list(
MENU_SET_CDROM_LIST);
#endif
break;
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#ifdef HAVE_CDROM
count = menu_displaylist_parse_disc_info(list,
MENU_SET_EJECT_DISC);
#endif /* HAVE_CDROM */
break;
#endif /* HAVE_LAKKA */
default:
break;
}
@ -11841,6 +11852,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
case DISPLAYLIST_BROWSE_URL_LIST:
case DISPLAYLIST_DISC_INFO:
case DISPLAYLIST_DUMP_DISC:
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#endif
case DISPLAYLIST_LOAD_CONTENT_LIST:
case DISPLAYLIST_LOAD_CONTENT_SPECIAL:
case DISPLAYLIST_OPTIONS_REMAPPINGS:
@ -11884,6 +11898,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
break;
case DISPLAYLIST_DISC_INFO:
case DISPLAYLIST_DUMP_DISC:
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#endif
case DISPLAYLIST_MENU_SETTINGS_LIST:
case DISPLAYLIST_ADD_CONTENT_LIST:
case DISPLAYLIST_DROPDOWN_LIST_RESOLUTION:
@ -11942,6 +11959,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
{
case DISPLAYLIST_DISC_INFO:
case DISPLAYLIST_DUMP_DISC:
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#endif
info->need_clear = true;
break;
default:
@ -12344,6 +12364,16 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
PARSE_ACTION, false) == 0)
count++;
}
#ifdef HAVE_LAKKA
if (settings->bools.menu_show_eject_disc)
{
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION, false) == 0)
count++;
}
#endif /* HAVE_LAKKA */
#endif
#if defined(HAVE_RGUI) || defined(HAVE_MATERIALUI)

View File

@ -134,6 +134,9 @@ enum menu_displaylist_ctl_state
DISPLAYLIST_VIDEO_FONTS,
DISPLAYLIST_LOAD_DISC,
DISPLAYLIST_DUMP_DISC,
#ifdef HAVE_LAKKA
DISPLAYLIST_EJECT_DISC,
#endif
DISPLAYLIST_OVERLAYS,
#ifdef HAVE_VIDEO_LAYOUT
DISPLAYLIST_VIDEO_LAYOUT_PATH,

View File

@ -6704,9 +6704,11 @@ void menu_driver_toggle(
if (on)
{
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_MENU);
#endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
#ifdef HAVE_OVERLAY
/* If an overlay was displayed before the toggle
* and overlays are disabled in menu, need to
@ -6725,9 +6727,11 @@ void menu_driver_toggle(
}
else
{
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_CORE);
#endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
#ifdef HAVE_OVERLAY
/* Inhibits pointer 'select' and 'cancel' actions
* (until the next time 'select'/'cancel' are released) */

View File

@ -240,6 +240,7 @@ enum menu_settings_type
MENU_SET_CDROM_LIST,
MENU_SET_LOAD_CDROM_LIST,
MENU_SET_EJECT_DISC,
MENU_SET_CDROM_INFO,
MENU_SETTING_ACTION_DELETE_PLAYLIST,
MENU_SETTING_ACTION_PLAYLIST_MANAGER_RESET_CORES,

View File

@ -9044,6 +9044,16 @@ static bool setting_append_list(
&group_info,
&subgroup_info,
parent_group);
#ifdef HAVE_LAKKA
CONFIG_ACTION(
list, list_info,
MENU_ENUM_LABEL_EJECT_DISC,
MENU_ENUM_LABEL_VALUE_EJECT_DISC,
&group_info,
&subgroup_info,
parent_group);
#endif
}
string_list_free(drive_list);
@ -16102,6 +16112,23 @@ static bool setting_append_list(
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
#ifdef HAVE_LAKKA
CONFIG_BOOL(
list, list_info,
&settings->bools.menu_show_eject_disc,
MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC,
MENU_ENUM_LABEL_VALUE_MENU_SHOW_EJECT_DISC,
menu_show_eject_disc,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
#endif /* HAVE_LAKKA */
#endif
CONFIG_BOOL(

View File

@ -386,6 +386,7 @@ enum msg_hash_enums
MSG_TOGGLE_CONTENT_METADATA,
MSG_NO_THUMBNAIL_AVAILABLE,
MSG_PRESS_AGAIN_TO_QUIT,
MSG_BLUETOOTH_PAIRING_REMOVED,
MSG_BLUETOOTH_SCAN_COMPLETE,
MSG_WIFI_SCAN_COMPLETE,
MSG_WIFI_CONNECTING_TO,
@ -1123,6 +1124,9 @@ enum msg_hash_enums
MENU_LABEL(MENU_SHOW_LOAD_CONTENT),
MENU_LABEL(MENU_SHOW_LOAD_DISC),
MENU_LABEL(MENU_SHOW_DUMP_DISC),
#ifdef HAVE_LAKKA
MENU_LABEL(MENU_SHOW_EJECT_DISC),
#endif
MENU_LABEL(MENU_SHOW_INFORMATION),
MENU_LABEL(MENU_SHOW_CONFIGURATIONS),
MENU_LABEL(MENU_SHOW_HELP),
@ -1466,6 +1470,9 @@ enum msg_hash_enums
MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_DETAIL_LIST,
MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST,
MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST,
#ifdef HAVE_LAKKA
MENU_ENUM_LABEL_DEFERRED_EJECT_DISC,
#endif
MENU_ENUM_LABEL_DEFERRED_REMAPPINGS_PORT_LIST,
MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST,
MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SPECIAL,
@ -2231,6 +2238,9 @@ enum msg_hash_enums
MENU_LABEL(LOAD_CONTENT_HISTORY),
MENU_LABEL(LOAD_DISC),
MENU_LABEL(DUMP_DISC),
#ifdef HAVE_LAKKA
MENU_LABEL(EJECT_DISC),
#endif
MENU_LABEL(NETWORK_INFORMATION),
MENU_LABEL(SYSTEM_INFORMATION),
MENU_LABEL(ACHIEVEMENT_LIST),

View File

@ -3626,15 +3626,19 @@ static void runloop_pause_checks(void)
command_event(CMD_EVENT_DISCORD_UPDATE, &userdata);
#endif
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_MENU);
#endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
}
else
{
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_CORE);
#endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
}
#if defined(HAVE_TRANSLATE) && defined(HAVE_GFX_WIDGETS)
@ -4727,8 +4731,12 @@ bool command_event(enum event_command cmd, void *data)
runloop_msg_queue_push(msg_hash_to_str(MSG_VALUE_SHUTTING_DOWN), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL);
}
#ifdef HAVE_LAKKA
system("(sleep 1 && shutdown -P now) & disown");
#else
command_event(CMD_EVENT_QUIT, NULL);
system("shutdown -P now");
#endif /* HAVE_LAKKA */
#endif
break;
case CMD_EVENT_REBOOT:
@ -4738,8 +4746,12 @@ bool command_event(enum event_command cmd, void *data)
runloop_msg_queue_push(msg_hash_to_str(MSG_VALUE_REBOOTING), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL);
}
#ifdef HAVE_LAKKA
system("(sleep 1 && shutdown -r now) & disown");
#else
command_event(CMD_EVENT_QUIT, NULL);
system("shutdown -r now");
#endif /* HAVE_LAKKA */
#endif
break;
case CMD_EVENT_RESUME:
@ -9965,6 +9977,14 @@ bool driver_bluetooth_connect_device(unsigned i)
return false;
}
bool driver_bluetooth_remove_device(unsigned i)
{
struct rarch_state *p_rarch = &rarch_st;
if (p_rarch->bluetooth_driver_active)
return p_rarch->bluetooth_driver->remove_device(p_rarch->bluetooth_data, i);
return false;
}
bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data)
{
struct rarch_state *p_rarch = &rarch_st;