// Copyright 2014 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include #include #include #include #include #include "common/common_types.h" namespace Settings { namespace NativeButton { enum Values { A, B, X, Y, LStick, RStick, L, R, ZL, ZR, Plus, Minus, DLeft, DUp, DRight, DDown, LStick_Left, LStick_Up, LStick_Right, LStick_Down, RStick_Left, RStick_Up, RStick_Right, RStick_Down, SL, SR, Home, Screenshot, NumButtons, }; constexpr int BUTTON_HID_BEGIN = A; constexpr int BUTTON_NS_BEGIN = Home; constexpr int BUTTON_HID_END = BUTTON_NS_BEGIN; constexpr int BUTTON_NS_END = NumButtons; constexpr int NUM_BUTTONS_HID = BUTTON_HID_END - BUTTON_HID_BEGIN; constexpr int NUM_BUTTONS_NS = BUTTON_NS_END - BUTTON_NS_BEGIN; extern const std::array mapping; } // namespace NativeButton namespace NativeAnalog { enum Values { LStick, RStick, NumAnalogs, }; constexpr int STICK_HID_BEGIN = LStick; constexpr int STICK_HID_END = NumAnalogs; constexpr int NUM_STICKS_HID = NumAnalogs; extern const std::array mapping; } // namespace NativeAnalog namespace NativeMouseButton { enum Values { Left, Right, Middle, Forward, Back, NumMouseButtons, }; constexpr int MOUSE_HID_BEGIN = Left; constexpr int MOUSE_HID_END = NumMouseButtons; constexpr int NUM_MOUSE_HID = NumMouseButtons; extern const std::array mapping; } // namespace NativeMouseButton namespace NativeKeyboard { enum Keys { None, Error, A = 4, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, N1, N2, N3, N4, N5, N6, N7, N8, N9, N0, Enter, Escape, Backspace, Tab, Space, Minus, Equal, LeftBrace, RightBrace, Backslash, Tilde, Semicolon, Apostrophe, Grave, Comma, Dot, Slash, CapsLockKey, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, SystemRequest, ScrollLockKey, Pause, Insert, Home, PageUp, Delete, End, PageDown, Right, Left, Down, Up, NumLockKey, KPSlash, KPAsterisk, KPMinus, KPPlus, KPEnter, KP1, KP2, KP3, KP4, KP5, KP6, KP7, KP8, KP9, KP0, KPDot, Key102, Compose, Power, KPEqual, F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, Open, Help, Properties, Front, Stop, Repeat, Undo, Cut, Copy, Paste, Find, Mute, VolumeUp, VolumeDown, CapsLockActive, NumLockActive, ScrollLockActive, KPComma, KPLeftParenthesis, KPRightParenthesis, LeftControlKey = 0xE0, LeftShiftKey, LeftAltKey, LeftMetaKey, RightControlKey, RightShiftKey, RightAltKey, RightMetaKey, MediaPlayPause, MediaStopCD, MediaPrevious, MediaNext, MediaEject, MediaVolumeUp, MediaVolumeDown, MediaMute, MediaWebsite, MediaBack, MediaForward, MediaStop, MediaFind, MediaScrollUp, MediaScrollDown, MediaEdit, MediaSleep, MediaCoffee, MediaRefresh, MediaCalculator, NumKeyboardKeys, }; static_assert(NumKeyboardKeys == 0xFC, "Incorrect number of keyboard keys."); enum Modifiers { LeftControl, LeftShift, LeftAlt, LeftMeta, RightControl, RightShift, RightAlt, RightMeta, CapsLock, ScrollLock, NumLock, NumKeyboardMods, }; constexpr int KEYBOARD_KEYS_HID_BEGIN = None; constexpr int KEYBOARD_KEYS_HID_END = NumKeyboardKeys; constexpr int NUM_KEYBOARD_KEYS_HID = NumKeyboardKeys; constexpr int KEYBOARD_MODS_HID_BEGIN = LeftControl; constexpr int KEYBOARD_MODS_HID_END = NumKeyboardMods; constexpr int NUM_KEYBOARD_MODS_HID = NumKeyboardMods; } // namespace NativeKeyboard using ButtonsRaw = std::array; using AnalogsRaw = std::array; using MouseButtonsRaw = std::array; using KeyboardKeysRaw = std::array; using KeyboardModsRaw = std::array; constexpr u32 JOYCON_BODY_NEON_RED = 0xFF3C28; constexpr u32 JOYCON_BUTTONS_NEON_RED = 0x1E0A0A; constexpr u32 JOYCON_BODY_NEON_BLUE = 0x0AB9E6; constexpr u32 JOYCON_BUTTONS_NEON_BLUE = 0x001E1E; enum class ControllerType { ProController, DualJoycon, RightJoycon, LeftJoycon, }; struct PlayerInput { bool connected; ControllerType type; ButtonsRaw buttons; AnalogsRaw analogs; u32 body_color_right; u32 button_color_right; u32 body_color_left; u32 button_color_left; }; struct TouchscreenInput { bool enabled; std::string device; u32 finger; u32 diameter_x; u32 diameter_y; u32 rotation_angle; }; enum class NANDTotalSize : u64 { S29_1GB = 0x747C00000ULL, }; enum class NANDUserSize : u64 { S26GB = 0x680000000ULL, }; enum class NANDSystemSize : u64 { S2_5GB = 0xA0000000, }; enum class SDMCSize : u64 { S1GB = 0x40000000, S2GB = 0x80000000, S4GB = 0x100000000ULL, S8GB = 0x200000000ULL, S16GB = 0x400000000ULL, S32GB = 0x800000000ULL, S64GB = 0x1000000000ULL, S128GB = 0x2000000000ULL, S256GB = 0x4000000000ULL, S1TB = 0x10000000000ULL, }; enum class RendererBackend { OpenGL = 0, Vulkan = 1, }; enum class GPUAccuracy : u32 { Normal = 0, High = 1, Extreme = 2, }; struct Values { // System bool use_docked_mode; std::optional rng_seed; // Measured in seconds since epoch std::optional custom_rtc; // Set on game boot, reset on stop. Seconds difference between current time and `custom_rtc` std::chrono::seconds custom_rtc_differential; s32 current_user; s32 language_index; s32 region_index; s32 sound_index; // Controls std::array players; bool mouse_enabled; std::string mouse_device; MouseButtonsRaw mouse_buttons; bool keyboard_enabled; KeyboardKeysRaw keyboard_keys; KeyboardModsRaw keyboard_mods; bool debug_pad_enabled; ButtonsRaw debug_pad_buttons; AnalogsRaw debug_pad_analogs; std::string motion_device; TouchscreenInput touchscreen; std::atomic_bool is_device_reload_pending{true}; std::string udp_input_address; u16 udp_input_port; u8 udp_pad_index; // Core bool use_multi_core; // Data Storage bool use_virtual_sd; bool gamecard_inserted; bool gamecard_current_game; std::string gamecard_path; NANDTotalSize nand_total_size; NANDSystemSize nand_system_size; NANDUserSize nand_user_size; SDMCSize sdmc_size; // Renderer RendererBackend renderer_backend; bool renderer_debug; int vulkan_device; float resolution_factor; int aspect_ratio; int max_anisotropy; bool use_frame_limit; u16 frame_limit; bool use_disk_shader_cache; GPUAccuracy gpu_accuracy; bool use_asynchronous_gpu_emulation; bool use_vsync; bool force_30fps_mode; float bg_red; float bg_green; float bg_blue; std::string log_filter; bool use_dev_keys; // Audio std::string sink_id; bool enable_audio_stretching; bool enable_realtime_audio; std::string audio_device_id; float volume; // Debugging bool record_frame_times; bool use_gdbstub; u16 gdbstub_port; std::string program_args; bool dump_exefs; bool dump_nso; bool reporting_services; bool quest_flag; bool disable_cpu_opt; // BCAT std::string bcat_backend; bool bcat_boxcat_local; // WebService bool enable_telemetry; std::string web_api_url; std::string yuzu_username; std::string yuzu_token; // Add-Ons std::map> disabled_addons; } extern values; bool IsGPULevelExtreme(); bool IsGPULevelHigh(); void Apply(); void LogSettings(); } // namespace Settings