Merge branch 'dev' of github.com:justenoughlinuxos/distribution into dev
This commit is contained in:
commit
542543da6f
12 changed files with 1441 additions and 214 deletions
|
@ -10,7 +10,7 @@ case ${DEVICE} in
|
|||
RG552|handheld)
|
||||
PKG_SITE="https://github.com/dolphin-emu/dolphin"
|
||||
PKG_URL="${PKG_SITE}.git"
|
||||
PKG_VERSION="c931529e7aa5926b8a21a193bf8f80244b3ae888"
|
||||
PKG_VERSION="99a918d884b7fd9442e2c621e0b2fb566db6aa1c"
|
||||
PKG_PATCH_DIRS+=" wayland"
|
||||
;;
|
||||
*)
|
||||
|
|
|
@ -10,7 +10,7 @@ PKG_SHORTDESC="Fast PlayStation 1 emulator for x86-64/AArch32/AArch64 "
|
|||
|
||||
case ${DEVICE} in
|
||||
RG552|handheld)
|
||||
PKG_VERSION="8438506206af6f9bb7bcf2303d55913edb5579a0"
|
||||
PKG_VERSION="b2dcb417c10f0e3bf9b834acd8203d6b7e76f471"
|
||||
PKG_PATCH_DIRS+=" new"
|
||||
;;
|
||||
*)
|
||||
|
|
458
packages/games/emulators/yuzusa/config/sdl2-config.ini
Normal file
458
packages/games/emulators/yuzusa/config/sdl2-config.ini
Normal file
|
@ -0,0 +1,458 @@
|
|||
|
||||
[ControlsGeneral]
|
||||
# The input devices and parameters for each Switch native input
|
||||
# It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..."
|
||||
# Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values
|
||||
|
||||
# for button input, the following devices are available:
|
||||
# - "keyboard" (default) for keyboard input. Required parameters:
|
||||
# - "code": the code of the key to bind
|
||||
# - "sdl" for joystick input using SDL. Required parameters:
|
||||
# - "joystick": the index of the joystick to bind
|
||||
# - "button"(optional): the index of the button to bind
|
||||
# - "hat"(optional): the index of the hat to bind as direction buttons
|
||||
# - "axis"(optional): the index of the axis to bind
|
||||
# - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right"
|
||||
# - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is
|
||||
# triggered if the axis value crosses
|
||||
# - "direction"(only used for axis): "+" means the button is triggered when the axis value
|
||||
# is greater than the threshold; "-" means the button is triggered when the axis value
|
||||
# is smaller than the threshold
|
||||
[ControlsP0]
|
||||
button_a=
|
||||
button_b=
|
||||
button_x=
|
||||
button_y=
|
||||
button_lstick=
|
||||
button_rstick=
|
||||
button_l=
|
||||
button_r=
|
||||
button_zl=
|
||||
button_zr=
|
||||
button_plus=
|
||||
button_minus=
|
||||
button_dleft=
|
||||
button_dup=
|
||||
button_dright=
|
||||
button_ddown=
|
||||
button_lstick_left=
|
||||
button_lstick_up=
|
||||
button_lstick_right=
|
||||
button_lstick_down=
|
||||
button_sl=
|
||||
button_sr=
|
||||
button_home=
|
||||
button_screenshot=
|
||||
|
||||
# for analog input, the following devices are available:
|
||||
# - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters:
|
||||
# - "up", "down", "left", "right": sub-devices for each direction.
|
||||
# Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00"
|
||||
# - "modifier": sub-devices as a modifier.
|
||||
# - "modifier_scale": a float number representing the applied modifier scale to the analog input.
|
||||
# Must be in range of 0.0-1.0. Defaults to 0.5
|
||||
# - "sdl" for joystick input using SDL. Required parameters:
|
||||
# - "joystick": the index of the joystick to bind
|
||||
# - "axis_x": the index of the axis to bind as x-axis (default to 0)
|
||||
# - "axis_y": the index of the axis to bind as y-axis (default to 1)
|
||||
lstick=
|
||||
rstick=
|
||||
|
||||
# To use the debug_pad, prepend `debug_pad_` before each button setting above.
|
||||
# i.e. debug_pad_button_a=
|
||||
|
||||
# Enable debug pad inputs to the guest
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
debug_pad_enabled =
|
||||
|
||||
# Whether to enable or disable vibration
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
vibration_enabled=
|
||||
|
||||
# Whether to enable or disable accurate vibrations
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
enable_accurate_vibrations=
|
||||
|
||||
# Enables controller motion inputs
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
motion_enabled =
|
||||
|
||||
# Defines the udp device's touch screen coordinate system for cemuhookudp devices
|
||||
# - "min_x", "min_y", "max_x", "max_y"
|
||||
touch_device=
|
||||
|
||||
# for mapping buttons to touch inputs.
|
||||
#touch_from_button_map=1
|
||||
#touch_from_button_maps_0_name=default
|
||||
#touch_from_button_maps_0_count=2
|
||||
#touch_from_button_maps_0_bind_0=foo
|
||||
#touch_from_button_maps_0_bind_1=bar
|
||||
# etc.
|
||||
|
||||
# List of Cemuhook UDP servers, delimited by ','.
|
||||
# Default: 127.0.0.1:26760
|
||||
# Example: 127.0.0.1:26760,123.4.5.67:26761
|
||||
udp_input_servers =
|
||||
|
||||
# Enable controlling an axis via a mouse input.
|
||||
# 0 (default): Off, 1: On
|
||||
mouse_panning =
|
||||
|
||||
# Set mouse sensitivity.
|
||||
# Default: 1.0
|
||||
mouse_panning_sensitivity =
|
||||
|
||||
# Emulate an analog control stick from keyboard inputs.
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
emulate_analog_keyboard =
|
||||
|
||||
# Enable mouse inputs to the guest
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
mouse_enabled =
|
||||
|
||||
# Enable keyboard inputs to the guest
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
keyboard_enabled =
|
||||
|
||||
[Core]
|
||||
# Whether to use multi-core for CPU emulation
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
use_multi_core =
|
||||
|
||||
# Enable extended guest system memory layout (6GB DRAM)
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
use_extended_memory_layout =
|
||||
|
||||
[Cpu]
|
||||
# Adjusts various optimizations.
|
||||
# Auto-select mode enables choice unsafe optimizations.
|
||||
# Accurate enables only safe optimizations.
|
||||
# Unsafe allows any unsafe optimizations.
|
||||
# 0 (default): Auto-select, 1: Accurate, 2: Enable unsafe optimizations
|
||||
cpu_accuracy =
|
||||
|
||||
# Allow disabling safe optimizations.
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
cpu_debug_mode =
|
||||
|
||||
# Enable inline page tables optimization (faster guest memory access)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_page_tables =
|
||||
|
||||
# Enable block linking CPU optimization (reduce block dispatcher use during predictable jumps)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_block_linking =
|
||||
|
||||
# Enable return stack buffer CPU optimization (reduce block dispatcher use during predictable returns)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_return_stack_buffer =
|
||||
|
||||
# Enable fast dispatcher CPU optimization (use a two-tiered dispatcher architecture)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_fast_dispatcher =
|
||||
|
||||
# Enable context elimination CPU Optimization (reduce host memory use for guest context)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_context_elimination =
|
||||
|
||||
# Enable constant propagation CPU optimization (basic IR optimization)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_const_prop =
|
||||
|
||||
# Enable miscellaneous CPU optimizations (basic IR optimization)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_misc_ir =
|
||||
|
||||
# Enable reduction of memory misalignment checks (reduce memory fallbacks for misaligned access)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_reduce_misalign_checks =
|
||||
|
||||
# Enable Host MMU Emulation (faster guest memory access)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_fastmem =
|
||||
|
||||
# Enable Host MMU Emulation for exclusive memory instructions (faster guest memory access)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_fastmem_exclusives =
|
||||
|
||||
# Enable fallback on failure of fastmem of exclusive memory instructions (faster guest memory access)
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_recompile_exclusives =
|
||||
|
||||
# Enable unfuse FMA (improve performance on CPUs without FMA)
|
||||
# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select.
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_unsafe_unfuse_fma =
|
||||
|
||||
# Enable faster FRSQRTE and FRECPE
|
||||
# Only enabled if cpu_accuracy is set to Unsafe.
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_unsafe_reduce_fp_error =
|
||||
|
||||
# Enable faster ASIMD instructions (32 bits only)
|
||||
# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select.
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_unsafe_ignore_standard_fpcr =
|
||||
|
||||
# Enable inaccurate NaN handling
|
||||
# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select.
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_unsafe_inaccurate_nan =
|
||||
|
||||
# Disable address space checks (64 bits only)
|
||||
# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select.
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_unsafe_fastmem_check =
|
||||
|
||||
# Enable faster exclusive instructions
|
||||
# Only enabled if cpu_accuracy is set to Unsafe. Automatically chosen with cpu_accuracy = Auto-select.
|
||||
# 0: Disabled, 1 (default): Enabled
|
||||
cpuopt_unsafe_ignore_global_monitor =
|
||||
|
||||
[Renderer]
|
||||
# Which backend API to use.
|
||||
# 0: OpenGL, 1 (default): Vulkan
|
||||
backend =
|
||||
|
||||
# Enable graphics API debugging mode.
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
debug =
|
||||
|
||||
# Enable shader feedback.
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
renderer_shader_feedback =
|
||||
|
||||
# Enable Nsight Aftermath crash dumps
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
nsight_aftermath =
|
||||
|
||||
# Disable shader loop safety checks, executing the shader without loop logic changes
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
disable_shader_loop_safety_checks =
|
||||
|
||||
# Which Vulkan physical device to use (defaults to 0)
|
||||
vulkan_device =
|
||||
|
||||
# 0: 0.5x (360p/540p) [EXPERIMENTAL]
|
||||
# 1: 0.75x (540p/810p) [EXPERIMENTAL]
|
||||
# 2 (default): 1x (720p/1080p)
|
||||
# 3: 2x (1440p/2160p)
|
||||
# 4: 3x (2160p/3240p)
|
||||
# 5: 4x (2880p/4320p)
|
||||
# 6: 5x (3600p/5400p)
|
||||
# 7: 6x (4320p/6480p)
|
||||
resolution_setup = 0
|
||||
|
||||
# Pixel filter to use when up- or down-sampling rendered frames.
|
||||
# 0: Nearest Neighbor
|
||||
# 1 (default): Bilinear
|
||||
# 2: Bicubic
|
||||
# 3: Gaussian
|
||||
# 4: ScaleForce
|
||||
# 5: AMD FidelityFX™️ Super Resolution [Vulkan Only]
|
||||
scaling_filter =
|
||||
|
||||
# Anti-Aliasing (AA)
|
||||
# 0 (default): None, 1: FXAA
|
||||
anti_aliasing =
|
||||
|
||||
# Whether to use fullscreen or borderless window mode
|
||||
# 0 (Windows default): Borderless window, 1 (All other default): Exclusive fullscreen
|
||||
fullscreen_mode =
|
||||
|
||||
# Aspect ratio
|
||||
# 0: Default (16:9), 1: Force 4:3, 2: Force 21:9, 3: Stretch to Window
|
||||
aspect_ratio =
|
||||
|
||||
# Anisotropic filtering
|
||||
# 0: Default, 1: 2x, 2: 4x, 3: 8x, 4: 16x
|
||||
max_anisotropy =
|
||||
|
||||
# Whether to enable V-Sync (caps the framerate at 60FPS) or not.
|
||||
# 0 (default): Off, 1: On
|
||||
use_vsync =
|
||||
|
||||
# Selects the OpenGL shader backend. NV_gpu_program5 is required for GLASM. If NV_gpu_program5 is
|
||||
# not available and GLASM is selected, GLSL will be used.
|
||||
# 0: GLSL, 1 (default): GLASM, 2: SPIR-V
|
||||
shader_backend =
|
||||
|
||||
# Whether to allow asynchronous shader building.
|
||||
# 0 (default): Off, 1: On
|
||||
use_asynchronous_shaders =
|
||||
|
||||
# NVDEC emulation.
|
||||
# 0: Disabled, 1: CPU Decoding, 2 (default): GPU Decoding
|
||||
nvdec_emulation =
|
||||
|
||||
# Accelerate ASTC texture decoding.
|
||||
# 0: Off, 1 (default): On
|
||||
accelerate_astc =
|
||||
|
||||
# Turns on the speed limiter, which will limit the emulation speed to the desired speed limit value
|
||||
# 0: Off, 1: On (default)
|
||||
use_speed_limit =
|
||||
|
||||
# Limits the speed of the game to run no faster than this value as a percentage of target speed
|
||||
# 1 - 9999: Speed limit as a percentage of target game speed. 100 (default)
|
||||
speed_limit =
|
||||
|
||||
# Whether to use disk based shader cache
|
||||
# 0: Off, 1 (default): On
|
||||
use_disk_shader_cache =
|
||||
|
||||
# Which gpu accuracy level to use
|
||||
# 0: Normal, 1 (default): High, 2: Extreme (Very slow)
|
||||
gpu_accuracy =
|
||||
|
||||
# Whether to use asynchronous GPU emulation
|
||||
# 0 : Off (slow), 1 (default): On (fast)
|
||||
use_asynchronous_gpu_emulation =
|
||||
|
||||
# Inform the guest that GPU operations completed more quickly than they did.
|
||||
# 0: Off, 1 (default): On
|
||||
use_fast_gpu_time =
|
||||
|
||||
# Force unmodified buffers to be flushed, which can cost performance.
|
||||
# 0: Off (default), 1: On
|
||||
use_pessimistic_flushes =
|
||||
|
||||
# Whether to use garbage collection or not for GPU caches.
|
||||
# 0 (default): Off, 1: On
|
||||
use_caches_gc =
|
||||
|
||||
# The clear color for the renderer. What shows up on the sides of the bottom screen.
|
||||
# Must be in range of 0-255. Defaults to 0 for all.
|
||||
bg_red =
|
||||
bg_blue =
|
||||
bg_green =
|
||||
|
||||
[Audio]
|
||||
# Which audio output engine to use.
|
||||
# auto (default): Auto-select
|
||||
# cubeb: Cubeb audio engine (if available)
|
||||
# sdl2: SDL2 audio engine (if available)
|
||||
# null: No audio output
|
||||
output_engine = sdl2
|
||||
|
||||
# Which audio device to use.
|
||||
# auto (default): Auto-select
|
||||
output_device =
|
||||
|
||||
# Output volume.
|
||||
# 100 (default): 100%, 0; mute
|
||||
volume =
|
||||
|
||||
[Data Storage]
|
||||
# Whether to create a virtual SD card.
|
||||
# 1 (default): Yes, 0: No
|
||||
use_virtual_sd =
|
||||
|
||||
# Whether or not to enable gamecard emulation
|
||||
# 1: Yes, 0 (default): No
|
||||
gamecard_inserted =
|
||||
|
||||
# Whether or not the gamecard should be emulated as the current game
|
||||
# If 'gamecard_inserted' is 0 this setting is irrelevant
|
||||
# 1: Yes, 0 (default): No
|
||||
gamecard_current_game =
|
||||
|
||||
# Path to an XCI file to use as the gamecard
|
||||
# If 'gamecard_inserted' is 0 this setting is irrelevant
|
||||
# If 'gamecard_current_game' is 1 this setting is irrelevant
|
||||
gamecard_path =
|
||||
|
||||
[System]
|
||||
# Whether the system is docked
|
||||
# 1 (default): Yes, 0: No
|
||||
use_docked_mode =
|
||||
|
||||
# Sets the seed for the RNG generator built into the switch
|
||||
# rng_seed will be ignored and randomly generated if rng_seed_enabled is false
|
||||
rng_seed_enabled =
|
||||
rng_seed =
|
||||
|
||||
# Sets the current time (in seconds since 12:00 AM Jan 1, 1970) that will be used by the time service
|
||||
# This will auto-increment, with the time set being the time the game is started
|
||||
# This override will only occur if custom_rtc_enabled is true, otherwise the current time is used
|
||||
custom_rtc_enabled =
|
||||
custom_rtc =
|
||||
|
||||
# Sets the systems language index
|
||||
# 0: Japanese, 1: English (default), 2: French, 3: German, 4: Italian, 5: Spanish, 6: Chinese,
|
||||
# 7: Korean, 8: Dutch, 9: Portuguese, 10: Russian, 11: Taiwanese, 12: British English, 13: Canadian French,
|
||||
# 14: Latin American Spanish, 15: Simplified Chinese, 16: Traditional Chinese, 17: Brazilian Portuguese
|
||||
language_index =
|
||||
|
||||
# The system region that yuzu will use during emulation
|
||||
# -1: Auto-select (default), 0: Japan, 1: USA, 2: Europe, 3: Australia, 4: China, 5: Korea, 6: Taiwan
|
||||
region_index =
|
||||
|
||||
# The system time zone that yuzu will use during emulation
|
||||
# 0: Auto-select (default), 1: Default (system archive value), Others: Index for specified time zone
|
||||
time_zone_index =
|
||||
|
||||
# Sets the sound output mode.
|
||||
# 0: Mono, 1 (default): Stereo, 2: Surround
|
||||
sound_index =
|
||||
|
||||
[Miscellaneous]
|
||||
# A filter which removes logs below a certain logging level.
|
||||
# Examples: *:Debug Kernel.SVC:Trace Service.*:Critical
|
||||
log_filter = *:Trace
|
||||
|
||||
# Use developer keys
|
||||
# 0 (default): Disabled, 1: Enabled
|
||||
use_dev_keys =
|
||||
|
||||
[Debugging]
|
||||
# Record frame time data, can be found in the log directory. Boolean value
|
||||
record_frame_times =
|
||||
# Determines whether or not yuzu will dump the ExeFS of all games it attempts to load while loading them
|
||||
dump_exefs=false
|
||||
# Determines whether or not yuzu will dump all NSOs it attempts to load while loading them
|
||||
dump_nso=false
|
||||
# Determines whether or not yuzu will save the filesystem access log.
|
||||
enable_fs_access_log=false
|
||||
# Enables verbose reporting services
|
||||
reporting_services =
|
||||
# Determines whether or not yuzu will report to the game that the emulated console is in Kiosk Mode
|
||||
# false: Retail/Normal Mode (default), true: Kiosk Mode
|
||||
quest_flag =
|
||||
# Determines whether debug asserts should be enabled, which will throw an exception on asserts.
|
||||
# false: Disabled (default), true: Enabled
|
||||
use_debug_asserts =
|
||||
# Determines whether unimplemented HLE service calls should be automatically stubbed.
|
||||
# false: Disabled (default), true: Enabled
|
||||
use_auto_stub =
|
||||
# Enables/Disables the macro JIT compiler
|
||||
disable_macro_jit=false
|
||||
# Determines whether to enable the GDB stub and wait for the debugger to attach before running.
|
||||
# false: Disabled (default), true: Enabled
|
||||
use_gdbstub=false
|
||||
# The port to use for the GDB server, if it is enabled.
|
||||
gdbstub_port=6543
|
||||
|
||||
[WebService]
|
||||
# Whether or not to enable telemetry
|
||||
# 0: No, 1 (default): Yes
|
||||
enable_telemetry =
|
||||
# URL for Web API
|
||||
web_api_url = https://api.yuzu-emu.org
|
||||
# Username and token for yuzu Web Service
|
||||
# See https://profile.yuzu-emu.org/ for more info
|
||||
yuzu_username =
|
||||
yuzu_token =
|
||||
|
||||
[Network]
|
||||
# Name of the network interface device to use with yuzu LAN play.
|
||||
# e.g. On *nix: 'enp7s0', 'wlp6s0u1u3u3', 'lo'
|
||||
# e.g. On Windows: 'Ethernet', 'Wi-Fi'
|
||||
network_interface =
|
||||
|
||||
[AddOns]
|
||||
# Used to disable add-ons
|
||||
# List of title IDs of games that will have add-ons disabled (separated by '|'):
|
||||
title_ids =
|
||||
# For each title ID, have a key/value pair called `disabled_<title_id>` equal to the names of the add-ons to disable (sep. by '|')
|
||||
# e.x. disabled_0100000000010000 = Update|DLC <- disables Updates and DLC on Super Mario Odyssey
|
53
packages/games/emulators/yuzusa/package.mk
Normal file
53
packages/games/emulators/yuzusa/package.mk
Normal file
|
@ -0,0 +1,53 @@
|
|||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
|
||||
|
||||
PKG_NAME="yuzusa"
|
||||
PKG_VERSION="48b4eca28a397adbaa68d1042262172fcdee6be8"
|
||||
PKG_ARCH="x86_64"
|
||||
PKG_LICENSE="GPLv3"
|
||||
PKG_SITE="https://github.com/yuzu-emu/yuzu"
|
||||
PKG_URL="$PKG_SITE.git"
|
||||
PKG_DEPENDS_TARGET="toolchain libfmt boost ffmpeg zstd zlib libzip lz4 opus libusb"
|
||||
PKG_SHORTDESC="Nintendo Switch emulator"
|
||||
PKG_TOOLCHAIN="cmake"
|
||||
GET_HANDLER_SUPPORT="git"
|
||||
|
||||
if [ ! "${OPENGL}" = "no" ]; then
|
||||
PKG_DEPENDS_TARGET+=" ${OPENGL} glu libglvnd"
|
||||
PKG_CONFIGURE_OPTS_TARGET+=" -DENABLE_X11=OFF"
|
||||
fi
|
||||
|
||||
if [ "${OPENGLES_SUPPORT}" = yes ]; then
|
||||
PKG_DEPENDS_TARGET+=" ${OPENGLES}"
|
||||
fi
|
||||
|
||||
if [ "${DISPLAYSERVER}" = "wl" ]; then
|
||||
PKG_DEPENDS_TARGET+=" wayland ${WINDOWMANAGER} xorg-server xrandr libXi"
|
||||
fi
|
||||
|
||||
if [ "${VULKAN_SUPPORT}" = "yes" ]
|
||||
then
|
||||
PKG_DEPENDS_TARGET+=" vulkan-loader vulkan-headers"
|
||||
fi
|
||||
|
||||
PKG_CMAKE_OPTS_TARGET+=" -DENABLE_QT=OFF \
|
||||
-DCMAKE_BUILD_TYPE=Release \
|
||||
-DYUZU_USE_BUNDLED_SDL2=OFF \
|
||||
-DYUZU_TESTS=OFF \
|
||||
-DENABLE_SDL2=ON \
|
||||
-DARCHITECTURE_x86_64=ON \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DYUZU_USE_BUNDLED_LIBUSB=OFF \
|
||||
-DENABLE_WEB_SERVICE=OFF \
|
||||
-DUSE_DISCORD_PRESENCE=OFF"
|
||||
|
||||
makeinstall_target() {
|
||||
mkdir -p ${INSTALL}/usr/bin
|
||||
cp -rf ${PKG_BUILD}/.${TARGET_NAME}/bin/yuzu-cmd ${INSTALL}/usr/bin
|
||||
cp -rf ${PKG_DIR}/scripts/* ${INSTALL}/usr/bin
|
||||
|
||||
chmod +x ${INSTALL}/usr/bin/start_yuzu.sh
|
||||
|
||||
mkdir -p ${INSTALL}/usr/config/yuzu
|
||||
cp -rf ${PKG_DIR}/config/* ${INSTALL}/usr/config/yuzu
|
||||
}
|
59
packages/games/emulators/yuzusa/patches/001-fix-cmake.patch
Normal file
59
packages/games/emulators/yuzusa/patches/001-fix-cmake.patch
Normal file
|
@ -0,0 +1,59 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index c6fc5dd9e..78098416b 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -195,7 +195,7 @@ if (YUZU_TESTS)
|
||||
find_package(Catch2 2.13.7 REQUIRED CONFIG)
|
||||
endif()
|
||||
|
||||
-find_package(Boost 1.73.0 COMPONENTS context)
|
||||
+find_package(Boost 1.80.0 COMPONENTS context REQUIRED)
|
||||
if (Boost_FOUND)
|
||||
set(Boost_LIBRARIES Boost::boost)
|
||||
# Conditionally add Boost::context only if the found Boost package provides it
|
||||
@@ -205,7 +205,7 @@ if (Boost_FOUND)
|
||||
list(APPEND Boost_LIBRARIES Boost::context)
|
||||
endif()
|
||||
else()
|
||||
- message(FATAL_ERROR "Boost 1.73.0 or newer not found")
|
||||
+ message(FATAL_ERROR "Boost 1.80.0 or newer not found")
|
||||
endif()
|
||||
|
||||
# boost:asio has functions that require AcceptEx et al
|
||||
@@ -386,11 +386,9 @@ endif()
|
||||
|
||||
# Ensure libusb is properly configured (based on dolphin libusb include)
|
||||
if(NOT APPLE AND NOT YUZU_USE_BUNDLED_LIBUSB)
|
||||
- find_package(PkgConfig)
|
||||
+ add_definitions(-D__LIBUSB__)
|
||||
if (PKG_CONFIG_FOUND AND NOT CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD")
|
||||
- pkg_check_modules(LIBUSB QUIET libusb-1.0>=1.0.24)
|
||||
- else()
|
||||
- find_package(LibUSB)
|
||||
+ find_package(LibUSB)
|
||||
endif()
|
||||
|
||||
if (LIBUSB_FOUND)
|
||||
@@ -398,8 +396,7 @@ if(NOT APPLE AND NOT YUZU_USE_BUNDLED_LIBUSB)
|
||||
target_include_directories(usb INTERFACE "${LIBUSB_INCLUDE_DIRS}")
|
||||
target_link_libraries(usb INTERFACE "${LIBUSB_LIBRARIES}")
|
||||
else()
|
||||
- message(WARNING "libusb not found, falling back to externals")
|
||||
- set(YUZU_USE_BUNDLED_LIBUSB ON)
|
||||
+ message(WARNING "libusb not found")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
diff --git a/src/input_common/drivers/gc_adapter.cpp b/src/input_common/drivers/gc_adapter.cpp
|
||||
index 826fa2109..bc6d90f1d 100644
|
||||
--- a/src/input_common/drivers/gc_adapter.cpp
|
||||
+++ b/src/input_common/drivers/gc_adapter.cpp
|
||||
@@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <fmt/format.h>
|
||||
-#include <libusb.h>
|
||||
+#include <libusb-1.0/libusb.h>
|
||||
|
||||
#include "common/logging/log.h"
|
||||
#include "common/param_package.h"
|
|
@ -0,0 +1,15 @@
|
|||
diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp
|
||||
index 45ce588f0..402b4956c 100644
|
||||
--- a/src/input_common/drivers/sdl_driver.cpp
|
||||
+++ b/src/input_common/drivers/sdl_driver.cpp
|
||||
@@ -211,8 +211,8 @@ public:
|
||||
std::string GetControllerName() const {
|
||||
if (sdl_controller) {
|
||||
switch (SDL_GameControllerGetType(sdl_controller.get())) {
|
||||
- case SDL_CONTROLLER_TYPE_XBOX360:
|
||||
- return "Xbox 360 Controller";
|
||||
+ // case SDL_CONTROLLER_TYPE_XBOX360:
|
||||
+ // return "Xbox 360 Controller";
|
||||
case SDL_CONTROLLER_TYPE_XBOXONE:
|
||||
return "Xbox One Controller";
|
||||
case SDL_CONTROLLER_TYPE_PS3:
|
26
packages/games/emulators/yuzusa/scripts/start_yuzu.sh
Normal file
26
packages/games/emulators/yuzusa/scripts/start_yuzu.sh
Normal file
|
@ -0,0 +1,26 @@
|
|||
#!/bin/bash
|
||||
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
# Copyright (C) 2022-present BrooksyTech (https://github.com/brooksytech)
|
||||
|
||||
. /etc/profile
|
||||
|
||||
#Check if yuzu exists in .config
|
||||
if [ ! -d "/storage/.config/yuzu" ]; then
|
||||
mkdir -p "/storage/.config/yuzu"
|
||||
cp -r "/usr/config/yuzu" "/storage/.config/"
|
||||
fi
|
||||
|
||||
#Link yuzu keys to bios folder
|
||||
if [ ! -d "/storage/roms/bios/yuzu" ]; then
|
||||
mkdir -p "/storage/.config/yuzu"
|
||||
fi
|
||||
rm -rf /storage/.config/yuzu/keys
|
||||
ln -sf /storage/roms/bios/yuzu /storage/.config/yuzu/keys
|
||||
|
||||
#Link .config/yuzu to .local
|
||||
rm -rf /storage/.local/share/yuzu
|
||||
ln -sf /storage/.config/yuzu /storage/.local/share/yuzu
|
||||
|
||||
#Run Yuzu emulator
|
||||
/usr/bin/yuzu-cmd "${1}"
|
|
@ -297,6 +297,12 @@ then
|
|||
RUNTHIS='${TBASH} /usr/bin/start_dolphin_wii.sh "${ROMNAME}"'
|
||||
fi
|
||||
;;
|
||||
"switch")
|
||||
jslisten set "-9 yuzu-cmd"
|
||||
if [ "$EMU" = "yuzu" ]; then
|
||||
RUNTHIS='${TBASH} /usr/bin/start_yuzu.sh "${ROMNAME}"'
|
||||
fi
|
||||
;;
|
||||
"mplayer")
|
||||
jslisten set "mpv"
|
||||
RUNTHIS='${TBASH} /usr/bin/mpv_video.sh "${ROMNAME}"'
|
||||
|
|
|
@ -97,6 +97,7 @@ d /storage/roms/snesmsu1 0755 root root - -
|
|||
d /storage/roms/solarus 0755 root root - -
|
||||
d /storage/roms/sufami 0755 root root - -
|
||||
d /storage/roms/supervision 0755 root root - -
|
||||
d /storage/roms/switch 0755 root root - -
|
||||
d /storage/roms/tg16 0755 root root - -
|
||||
d /storage/roms/tg16cd 0755 root root - -
|
||||
d /storage/roms/tic-80 0755 root root - -
|
||||
|
|
542
packages/kernel/linux/patches/X86_64/steam-deck-controller.patch
Normal file
542
packages/kernel/linux/patches/X86_64/steam-deck-controller.patch
Normal file
|
@ -0,0 +1,542 @@
|
|||
diff -rupN hid.orig/hid-ids.h hid/hid-ids.h
|
||||
--- linux/drivers/hid.orig/hid-ids.h 2022-11-10 18:46:50.091977625 -0800
|
||||
+++ linux/drivers/hid/hid-ids.h 2022-11-10 18:51:51.442399828 -0800
|
||||
@@ -1175,6 +1175,7 @@
|
||||
|
||||
#define USB_VENDOR_ID_VALVE 0x28de
|
||||
#define USB_DEVICE_ID_STEAM_CONTROLLER 0x1102
|
||||
+#define USB_DEVICE_ID_STEAM_DECK_CONTROLLER 0x1205
|
||||
#define USB_DEVICE_ID_STEAM_CONTROLLER_WIRELESS 0x1142
|
||||
|
||||
#define USB_VENDOR_ID_STEELSERIES 0x1038
|
||||
diff -rupN hid.orig/hid-steam.c hid/hid-steam.c
|
||||
--- linux/drivers/hid.orig/hid-steam.c 2022-11-10 18:46:50.095977727 -0800
|
||||
+++ linux/drivers/hid/hid-steam.c 2022-11-10 18:50:19.152673800 -0800
|
||||
@@ -42,6 +42,9 @@
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/power_supply.h>
|
||||
+#include <linux/kthread.h>
|
||||
+#include <linux/sched.h>
|
||||
+#include <linux/delay.h>
|
||||
#include "hid-ids.h"
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
@@ -54,6 +57,7 @@ static LIST_HEAD(steam_devices);
|
||||
|
||||
#define STEAM_QUIRK_WIRELESS BIT(0)
|
||||
|
||||
+int lizard_reset_fn (void *data);
|
||||
/* Touch pads are 40 mm in diameter and 65535 units */
|
||||
#define STEAM_PAD_RESOLUTION 1638
|
||||
/* Trigger runs are about 5 mm and 256 units */
|
||||
@@ -82,9 +86,10 @@ static LIST_HEAD(steam_devices);
|
||||
#define STEAM_CMD_GET_REGISTER_DEFAULT 0x8c
|
||||
#define STEAM_CMD_SET_MODE 0x8d
|
||||
#define STEAM_CMD_DEFAULT_MOUSE 0x8e
|
||||
-#define STEAM_CMD_FORCEFEEDBAK 0x8f
|
||||
+#define STEAM_CMD_TOUCHPAD_HAPTIC 0x8f
|
||||
#define STEAM_CMD_REQUEST_COMM_STATUS 0xb4
|
||||
#define STEAM_CMD_GET_SERIAL 0xae
|
||||
+#define STEAM_CMD_RUMBLE 0xeb
|
||||
|
||||
/* Some useful register ids */
|
||||
#define STEAM_REG_LPAD_MODE 0x07
|
||||
@@ -97,6 +102,7 @@ static LIST_HEAD(steam_devices);
|
||||
#define STEAM_EV_INPUT_DATA 0x01
|
||||
#define STEAM_EV_CONNECT 0x03
|
||||
#define STEAM_EV_BATTERY 0x04
|
||||
+#define STEAM_DECK_EV_INPUT_DATA 0x09
|
||||
|
||||
/* Values for GYRO_MODE (bitmask) */
|
||||
#define STEAM_GYRO_MODE_OFF 0x0000
|
||||
@@ -118,12 +124,18 @@ struct steam_device {
|
||||
struct input_dev __rcu *input;
|
||||
unsigned long quirks;
|
||||
struct work_struct work_connect;
|
||||
+ struct work_struct work_effect;
|
||||
bool connected;
|
||||
char serial_no[STEAM_SERIAL_LEN + 1];
|
||||
struct power_supply_desc battery_desc;
|
||||
struct power_supply __rcu *battery;
|
||||
u8 battery_charge;
|
||||
u16 voltage;
|
||||
+ bool steamdeck;
|
||||
+ bool device_open;
|
||||
+ struct task_struct *lizard_reset;
|
||||
+ uint32_t rumble_weak;
|
||||
+ uint32_t rumble_strong;
|
||||
};
|
||||
|
||||
static int steam_recv_report(struct steam_device *steam,
|
||||
@@ -165,6 +177,7 @@ static int steam_send_report(struct stea
|
||||
u8 *cmd, int size)
|
||||
{
|
||||
struct hid_report *r;
|
||||
+ u32 len;
|
||||
u8 *buf;
|
||||
unsigned int retries = 50;
|
||||
int ret;
|
||||
@@ -175,13 +188,15 @@ static int steam_send_report(struct stea
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- if (hid_report_len(r) < 64)
|
||||
+ len = hid_report_len(r);
|
||||
+ if (len < 64)
|
||||
return -EINVAL;
|
||||
|
||||
buf = hid_alloc_report_buf(r, GFP_KERNEL);
|
||||
if (!buf)
|
||||
return -ENOMEM;
|
||||
|
||||
+ memset(buf, 0, len);
|
||||
/* The report ID is always 0 */
|
||||
memcpy(buf + 1, cmd, size);
|
||||
|
||||
@@ -193,7 +208,7 @@ static int steam_send_report(struct stea
|
||||
*/
|
||||
do {
|
||||
ret = hid_hw_raw_request(steam->hdev, 0,
|
||||
- buf, size + 1,
|
||||
+ buf, len,
|
||||
HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
|
||||
if (ret != -EPIPE)
|
||||
break;
|
||||
@@ -273,6 +288,10 @@ static inline int steam_request_conn_sta
|
||||
static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
|
||||
{
|
||||
if (enable) {
|
||||
+ if (steam->lizard_reset) {
|
||||
+ kthread_stop(steam->lizard_reset);
|
||||
+ steam->lizard_reset = NULL;
|
||||
+ }
|
||||
/* enable esc, enter, cursors */
|
||||
steam_send_report_byte(steam, STEAM_CMD_DEFAULT_MAPPINGS);
|
||||
/* enable mouse */
|
||||
@@ -287,17 +306,39 @@ static void steam_set_lizard_mode(struct
|
||||
STEAM_REG_RPAD_MODE, 0x07, /* disable mouse */
|
||||
STEAM_REG_RPAD_MARGIN, 0x00, /* disable margin */
|
||||
0);
|
||||
+
|
||||
+ if (steam->lizard_reset)
|
||||
+ return;
|
||||
+ steam->lizard_reset = kthread_create(lizard_reset_fn, (void*)steam, "lizard_reset");
|
||||
+ if (IS_ERR(steam->lizard_reset)) {
|
||||
+ steam->lizard_reset = NULL;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ wake_up_process(steam->lizard_reset);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+int lizard_reset_fn (void *data) {
|
||||
+ struct steam_device *steam = (struct steam_device*)data;
|
||||
+ while (steam->device_open) {
|
||||
+ mutex_lock(&steam->mutex);
|
||||
+ steam_set_lizard_mode(steam, false);
|
||||
+ mutex_unlock(&steam->mutex);
|
||||
+ msleep(1000);
|
||||
}
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int steam_input_open(struct input_dev *dev)
|
||||
{
|
||||
struct steam_device *steam = input_get_drvdata(dev);
|
||||
-
|
||||
+ steam->device_open = 1;
|
||||
mutex_lock(&steam->mutex);
|
||||
if (!steam->client_opened && lizard_mode)
|
||||
steam_set_lizard_mode(steam, false);
|
||||
mutex_unlock(&steam->mutex);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -305,6 +346,7 @@ static void steam_input_close(struct inp
|
||||
{
|
||||
struct steam_device *steam = input_get_drvdata(dev);
|
||||
|
||||
+ steam->device_open = 0;
|
||||
mutex_lock(&steam->mutex);
|
||||
if (!steam->client_opened && lizard_mode)
|
||||
steam_set_lizard_mode(steam, true);
|
||||
@@ -390,6 +432,62 @@ static int steam_battery_register(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int steam_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect)
|
||||
+{
|
||||
+ struct steam_device *steam = input_get_drvdata(dev);
|
||||
+ unsigned long flags;
|
||||
+ u32 strong, weak;
|
||||
+
|
||||
+ if (effect->u.rumble.strong_magnitude == 0 && effect->u.rumble.weak_magnitude == 0)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Steam uses a factor of 1.33 to the values. */
|
||||
+ strong = (effect->u.rumble.strong_magnitude * 100ul) / 75;
|
||||
+ weak = (effect->u.rumble.weak_magnitude * 100ul) / 75;
|
||||
+
|
||||
+ /* Clamp values to 16 bit */
|
||||
+ if (strong > 0xffff)
|
||||
+ strong = 0xffff;
|
||||
+
|
||||
+ if (weak > 0xffff)
|
||||
+ weak = 0xffff;
|
||||
+
|
||||
+ spin_lock_irqsave(&steam->lock, flags);
|
||||
+ steam->rumble_strong = strong;
|
||||
+ steam->rumble_weak = weak;
|
||||
+ spin_unlock_irqrestore(&steam->lock, flags);
|
||||
+
|
||||
+ schedule_work(&steam->work_effect);
|
||||
+ return 0;
|
||||
+}
|
||||
+/**
|
||||
+ * Prepares the command buffer for the rumble command.
|
||||
+ * It is reverse-engineered from captured traces when using Steam's
|
||||
+ * controller support.
|
||||
+ */
|
||||
+static void prepare_effect_buffer(u8 *buf,uint16_t strong, uint16_t weak)
|
||||
+{
|
||||
+ buf[0] = STEAM_CMD_RUMBLE;
|
||||
+ buf[1] = 9;
|
||||
+ buf[2] = 1;
|
||||
+ buf[3] = 0x40;
|
||||
+ buf[4] = 0x1f;
|
||||
+ buf[5] = strong & 0xff;
|
||||
+ buf[6] = strong >> 8;
|
||||
+ buf[7] = weak & 0xff;
|
||||
+ buf[8] = weak >> 8;
|
||||
+}
|
||||
+
|
||||
+static void steam_play_effect_cb(struct work_struct *work)
|
||||
+{
|
||||
+ struct steam_device *steam = container_of(work, struct steam_device, work_effect);
|
||||
+ u8 cmd_buf[9];
|
||||
+ prepare_effect_buffer(cmd_buf, steam->rumble_strong, steam->rumble_weak);
|
||||
+ mutex_lock(&steam->mutex);
|
||||
+ steam_send_report(steam, cmd_buf, sizeof(cmd_buf));
|
||||
+ mutex_unlock(&steam->mutex);
|
||||
+}
|
||||
+
|
||||
static int steam_input_register(struct steam_device *steam)
|
||||
{
|
||||
struct hid_device *hdev = steam->hdev;
|
||||
@@ -423,48 +521,107 @@ static int steam_input_register(struct s
|
||||
input->id.product = hdev->product;
|
||||
input->id.version = hdev->version;
|
||||
|
||||
- input_set_capability(input, EV_KEY, BTN_TR2);
|
||||
- input_set_capability(input, EV_KEY, BTN_TL2);
|
||||
- input_set_capability(input, EV_KEY, BTN_TR);
|
||||
- input_set_capability(input, EV_KEY, BTN_TL);
|
||||
- input_set_capability(input, EV_KEY, BTN_Y);
|
||||
- input_set_capability(input, EV_KEY, BTN_B);
|
||||
- input_set_capability(input, EV_KEY, BTN_X);
|
||||
- input_set_capability(input, EV_KEY, BTN_A);
|
||||
- input_set_capability(input, EV_KEY, BTN_DPAD_UP);
|
||||
- input_set_capability(input, EV_KEY, BTN_DPAD_RIGHT);
|
||||
- input_set_capability(input, EV_KEY, BTN_DPAD_LEFT);
|
||||
- input_set_capability(input, EV_KEY, BTN_DPAD_DOWN);
|
||||
- input_set_capability(input, EV_KEY, BTN_SELECT);
|
||||
- input_set_capability(input, EV_KEY, BTN_MODE);
|
||||
- input_set_capability(input, EV_KEY, BTN_START);
|
||||
- input_set_capability(input, EV_KEY, BTN_GEAR_DOWN);
|
||||
- input_set_capability(input, EV_KEY, BTN_GEAR_UP);
|
||||
- input_set_capability(input, EV_KEY, BTN_THUMBR);
|
||||
- input_set_capability(input, EV_KEY, BTN_THUMBL);
|
||||
- input_set_capability(input, EV_KEY, BTN_THUMB);
|
||||
- input_set_capability(input, EV_KEY, BTN_THUMB2);
|
||||
-
|
||||
- input_set_abs_params(input, ABS_HAT2Y, 0, 255, 0, 0);
|
||||
- input_set_abs_params(input, ABS_HAT2X, 0, 255, 0, 0);
|
||||
- input_set_abs_params(input, ABS_X, -32767, 32767, 0, 0);
|
||||
- input_set_abs_params(input, ABS_Y, -32767, 32767, 0, 0);
|
||||
- input_set_abs_params(input, ABS_RX, -32767, 32767,
|
||||
- STEAM_PAD_FUZZ, 0);
|
||||
- input_set_abs_params(input, ABS_RY, -32767, 32767,
|
||||
- STEAM_PAD_FUZZ, 0);
|
||||
- input_set_abs_params(input, ABS_HAT0X, -32767, 32767,
|
||||
- STEAM_PAD_FUZZ, 0);
|
||||
- input_set_abs_params(input, ABS_HAT0Y, -32767, 32767,
|
||||
- STEAM_PAD_FUZZ, 0);
|
||||
- input_abs_set_res(input, ABS_X, STEAM_JOYSTICK_RESOLUTION);
|
||||
- input_abs_set_res(input, ABS_Y, STEAM_JOYSTICK_RESOLUTION);
|
||||
- input_abs_set_res(input, ABS_RX, STEAM_PAD_RESOLUTION);
|
||||
- input_abs_set_res(input, ABS_RY, STEAM_PAD_RESOLUTION);
|
||||
- input_abs_set_res(input, ABS_HAT0X, STEAM_PAD_RESOLUTION);
|
||||
- input_abs_set_res(input, ABS_HAT0Y, STEAM_PAD_RESOLUTION);
|
||||
- input_abs_set_res(input, ABS_HAT2Y, STEAM_TRIGGER_RESOLUTION);
|
||||
- input_abs_set_res(input, ABS_HAT2X, STEAM_TRIGGER_RESOLUTION);
|
||||
+ if (!steam->steamdeck) {
|
||||
+ input_set_capability(input, EV_KEY, BTN_TR2);
|
||||
+ input_set_capability(input, EV_KEY, BTN_TL2);
|
||||
+ input_set_capability(input, EV_KEY, BTN_TR);
|
||||
+ input_set_capability(input, EV_KEY, BTN_TL);
|
||||
+ input_set_capability(input, EV_KEY, BTN_Y);
|
||||
+ input_set_capability(input, EV_KEY, BTN_B);
|
||||
+ input_set_capability(input, EV_KEY, BTN_X);
|
||||
+ input_set_capability(input, EV_KEY, BTN_A);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_UP);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_RIGHT);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_LEFT);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_DOWN);
|
||||
+ input_set_capability(input, EV_KEY, BTN_SELECT);
|
||||
+ input_set_capability(input, EV_KEY, BTN_MODE);
|
||||
+ input_set_capability(input, EV_KEY, BTN_START);
|
||||
+ input_set_capability(input, EV_KEY, BTN_GEAR_DOWN);
|
||||
+ input_set_capability(input, EV_KEY, BTN_GEAR_UP);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMBR);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMBL);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMB);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMB2);
|
||||
+
|
||||
+ input_set_abs_params(input, ABS_HAT2Y, 0, 255, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_HAT2X, 0, 255, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_X, -32767, 32767, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_Y, -32767, 32767, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_RX, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_RY, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_HAT0X, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_HAT0Y, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_abs_set_res(input, ABS_X, STEAM_JOYSTICK_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_Y, STEAM_JOYSTICK_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_RX, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_RY, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_HAT0X, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_HAT0Y, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_HAT2Y, STEAM_TRIGGER_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_HAT2X, STEAM_TRIGGER_RESOLUTION);
|
||||
+ } else {
|
||||
+ input_set_capability(input, EV_KEY, BTN_TR2);
|
||||
+ input_set_capability(input, EV_KEY, BTN_TL2);
|
||||
+ input_set_capability(input, EV_KEY, BTN_TR);
|
||||
+ input_set_capability(input, EV_KEY, BTN_TL);
|
||||
+ input_set_capability(input, EV_KEY, BTN_Y);
|
||||
+ input_set_capability(input, EV_KEY, BTN_B);
|
||||
+ input_set_capability(input, EV_KEY, BTN_X);
|
||||
+ input_set_capability(input, EV_KEY, BTN_A);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_UP);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_RIGHT);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_LEFT);
|
||||
+ input_set_capability(input, EV_KEY, BTN_DPAD_DOWN);
|
||||
+ input_set_capability(input, EV_KEY, BTN_SELECT);
|
||||
+ input_set_capability(input, EV_KEY, BTN_MODE);
|
||||
+ input_set_capability(input, EV_KEY, BTN_START);
|
||||
+ input_set_capability(input, EV_KEY, BTN_GEAR_DOWN);
|
||||
+ input_set_capability(input, EV_KEY, BTN_GEAR_UP);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMBR);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMBL);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMB);
|
||||
+ input_set_capability(input, EV_KEY, BTN_THUMB2);
|
||||
+ input_set_capability(input, EV_KEY, BTN_BASE);
|
||||
+ input_set_capability(input, EV_KEY, BTN_BASE2);
|
||||
+ input_set_capability(input, EV_KEY, BTN_MISC);
|
||||
+
|
||||
+ input_set_abs_params(input, ABS_Z, 0, 32767, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_RZ, 0, 32767, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_X, -32767, 32767, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_Y, -32767, 32767, 0, 0);
|
||||
+ input_set_abs_params(input, ABS_RX, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_RY, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_HAT0X, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_HAT0Y, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_HAT1X, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_set_abs_params(input, ABS_HAT1Y, -32767, 32767,
|
||||
+ STEAM_PAD_FUZZ, 0);
|
||||
+ input_abs_set_res(input, ABS_HAT0X, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_HAT0Y, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_HAT1X, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_HAT1Y, STEAM_PAD_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_X, STEAM_JOYSTICK_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_Y, STEAM_JOYSTICK_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_RX, STEAM_JOYSTICK_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_RY, STEAM_JOYSTICK_RESOLUTION);
|
||||
+
|
||||
+ input_abs_set_res(input, ABS_Z, STEAM_TRIGGER_RESOLUTION);
|
||||
+ input_abs_set_res(input, ABS_RZ, STEAM_TRIGGER_RESOLUTION);
|
||||
+
|
||||
+
|
||||
+ input_set_capability(input, EV_FF, FF_RUMBLE);
|
||||
+ input_ff_create_memless(input, NULL, steam_play_effect);
|
||||
+ }
|
||||
|
||||
ret = input_register_device(input);
|
||||
if (ret)
|
||||
@@ -670,6 +827,14 @@ static int steam_client_ll_raw_request(s
|
||||
{
|
||||
struct steam_device *steam = hdev->driver_data;
|
||||
|
||||
+ /*if (buf[1] != STEAM_CMD_CLEAR_MAPPINGS ) {
|
||||
+ pr_info("Steam cmd=%x count=%x\n", buf[1], count);
|
||||
+ for (size_t i = 0; i < count; i++) {
|
||||
+ pr_cont("%x,",buf[i]);
|
||||
+ if ((i+1) % 8 == 0)
|
||||
+ pr_cont("\n");
|
||||
+ }
|
||||
+ }*/
|
||||
return hid_hw_raw_request(steam->hdev, reportnum, buf, count,
|
||||
report_type, reqtype);
|
||||
}
|
||||
@@ -743,12 +908,19 @@ static int steam_probe(struct hid_device
|
||||
ret = -ENOMEM;
|
||||
goto steam_alloc_fail;
|
||||
}
|
||||
+
|
||||
+ if (id->product == USB_DEVICE_ID_STEAM_DECK_CONTROLLER) {
|
||||
+ hid_info(hdev, "Steam Deck Controller connected\n");
|
||||
+ steam->steamdeck = 1;
|
||||
+ }
|
||||
+
|
||||
steam->hdev = hdev;
|
||||
hid_set_drvdata(hdev, steam);
|
||||
spin_lock_init(&steam->lock);
|
||||
mutex_init(&steam->mutex);
|
||||
steam->quirks = id->driver_data;
|
||||
INIT_WORK(&steam->work_connect, steam_work_connect_cb);
|
||||
+ INIT_WORK(&steam->work_effect, steam_play_effect_cb);
|
||||
INIT_LIST_HEAD(&steam->list);
|
||||
|
||||
steam->client_hdev = steam_create_client_hid(hdev);
|
||||
@@ -805,6 +977,7 @@ hid_hw_start_fail:
|
||||
hid_destroy_device(steam->client_hdev);
|
||||
client_hdev_fail:
|
||||
cancel_work_sync(&steam->work_connect);
|
||||
+ cancel_work_sync(&steam->work_effect);
|
||||
steam_alloc_fail:
|
||||
hid_err(hdev, "%s: failed with error %d\n",
|
||||
__func__, ret);
|
||||
@@ -823,6 +996,7 @@ static void steam_remove(struct hid_devi
|
||||
hid_destroy_device(steam->client_hdev);
|
||||
steam->client_opened = false;
|
||||
cancel_work_sync(&steam->work_connect);
|
||||
+ cancel_work_sync(&steam->work_effect);
|
||||
if (steam->quirks & STEAM_QUIRK_WIRELESS) {
|
||||
hid_info(hdev, "Steam wireless receiver disconnected");
|
||||
}
|
||||
@@ -993,6 +1167,78 @@ static void steam_do_input_event(struct
|
||||
input_sync(input);
|
||||
}
|
||||
|
||||
+static void steam_deck_do_input_event(struct steam_device *steam,
|
||||
+ struct input_dev *input, u8 *data)
|
||||
+{
|
||||
+ /* 24 bits of buttons */
|
||||
+ u8 b8, b9, b10, b11, b12, b13, b14;
|
||||
+
|
||||
+ b8 = data[8];
|
||||
+ b9 = data[9];
|
||||
+ b10 = data[10];
|
||||
+ b11 = data[11];
|
||||
+ b12 = data[12];
|
||||
+ b13 = data[13];
|
||||
+ b14 = data[14];
|
||||
+
|
||||
+ /* Left analog joystick */
|
||||
+ input_report_abs(input, ABS_X, steam_le16(data + 48));
|
||||
+ input_report_abs(input, ABS_Y, -steam_le16(data + 50));
|
||||
+
|
||||
+ /* Right analog joystick */
|
||||
+ input_report_abs(input, ABS_RX, steam_le16(data + 52));
|
||||
+ input_report_abs(input, ABS_RY, -steam_le16(data + 54));
|
||||
+
|
||||
+ /* Left touchpad */
|
||||
+ input_report_abs(input, ABS_HAT0X, steam_le16(data + 16));
|
||||
+ input_report_abs(input, ABS_HAT0Y, -steam_le16(data + 18));
|
||||
+
|
||||
+ /* Right touchpad */
|
||||
+ input_report_abs(input, ABS_HAT1X, steam_le16(data + 20));
|
||||
+ input_report_abs(input, ABS_HAT1Y, -steam_le16(data + 22));
|
||||
+
|
||||
+ /* Trigger */
|
||||
+ input_report_abs(input, ABS_Z, steam_le16(data + 44));
|
||||
+ input_report_abs(input, ABS_RZ, steam_le16(data + 46));
|
||||
+
|
||||
+ input_event(input, EV_KEY, BTN_TR2, !!(b8 & BIT(0)));
|
||||
+ input_event(input, EV_KEY, BTN_TL2, !!(b8 & BIT(1)));
|
||||
+ input_event(input, EV_KEY, BTN_TR, !!(b8 & BIT(2)));
|
||||
+ input_event(input, EV_KEY, BTN_TL, !!(b8 & BIT(3)));
|
||||
+ input_event(input, EV_KEY, BTN_SELECT, !!(b9 & BIT(4)));
|
||||
+ input_event(input, EV_KEY, BTN_MODE, !!(b9 & BIT(5)));
|
||||
+ input_event(input, EV_KEY, BTN_START, !!(b9 & BIT(6)));
|
||||
+ input_event(input, EV_KEY, BTN_THUMBR, !!(b11 & BIT(2)));
|
||||
+ input_event(input, EV_KEY, BTN_THUMBL, !!(b10 & BIT(6)));
|
||||
+ input_event(input, EV_KEY, BTN_THUMB, !!(b10 & BIT(1)));
|
||||
+ input_event(input, EV_KEY, BTN_THUMB2, !!(b10 & BIT(2)));
|
||||
+
|
||||
+ input_event(input, EV_KEY, BTN_SELECT, !!(b9 & BIT(4)));
|
||||
+ input_event(input, EV_KEY, BTN_MODE, !!(b9 & BIT(5)));
|
||||
+ input_event(input, EV_KEY, BTN_START, !!(b9 & BIT(6)));
|
||||
+ input_event(input, EV_KEY, BTN_Y, !!(b8 & BIT(4)));
|
||||
+ input_event(input, EV_KEY, BTN_B, !!(b8 & BIT(5)));
|
||||
+ input_event(input, EV_KEY, BTN_X, !!(b8 & BIT(6)));
|
||||
+ input_event(input, EV_KEY, BTN_A, !!(b8 & BIT(7)));
|
||||
+ input_event(input, EV_KEY, BTN_DPAD_UP, !!(b9 & BIT(0)));
|
||||
+ input_event(input, EV_KEY, BTN_DPAD_RIGHT, !!(b9 & BIT(1)));
|
||||
+ input_event(input, EV_KEY, BTN_DPAD_LEFT, !!(b9 & BIT(2)));
|
||||
+ input_event(input, EV_KEY, BTN_DPAD_DOWN, !!(b9 & BIT(3)));
|
||||
+
|
||||
+ /* Back button lower left L5 */
|
||||
+ input_event(input, EV_KEY, BTN_GEAR_DOWN, !!(b9 & BIT(7)));
|
||||
+ /* Back button lower right R5 */
|
||||
+ input_event(input, EV_KEY, BTN_GEAR_UP, !!(b10 & BIT(0)));
|
||||
+ /* Back button upper left L4 */
|
||||
+ input_event(input, EV_KEY, BTN_BASE, !!(b13 & BIT(1)));
|
||||
+ /* Back button upper right R4 */
|
||||
+ input_event(input, EV_KEY, BTN_BASE2, !!(b13 & BIT(2)));
|
||||
+
|
||||
+ /* Menu botton right (3 dots) */
|
||||
+ input_event(input, EV_KEY, BTN_MISC, !!(b14 & BIT(2)));
|
||||
+ input_sync(input);
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* The size for this message payload is 11.
|
||||
* The known values are:
|
||||
@@ -1054,10 +1300,21 @@ static int steam_raw_event(struct hid_de
|
||||
* 0x04: battery status (11 bytes)
|
||||
*/
|
||||
|
||||
- if (size != 64 || data[0] != 1 || data[1] != 0)
|
||||
+ if (size != 64 || data[0] != 1 || data[1] != 0) {
|
||||
+ hid_info(hdev, "Can_t use it\n");
|
||||
return 0;
|
||||
+ }
|
||||
|
||||
switch (data[2]) {
|
||||
+ case STEAM_DECK_EV_INPUT_DATA:
|
||||
+ if (steam->client_opened)
|
||||
+ return 0;
|
||||
+ rcu_read_lock();
|
||||
+ input = rcu_dereference(steam->input);
|
||||
+ if (likely(input))
|
||||
+ steam_deck_do_input_event(steam, input, data);
|
||||
+ rcu_read_unlock();
|
||||
+ break;
|
||||
case STEAM_EV_INPUT_DATA:
|
||||
if (steam->client_opened)
|
||||
return 0;
|
||||
@@ -1136,6 +1393,10 @@ static const struct hid_device_id steam_
|
||||
HID_USB_DEVICE(USB_VENDOR_ID_VALVE,
|
||||
USB_DEVICE_ID_STEAM_CONTROLLER)
|
||||
},
|
||||
+ { /* Wired Steam Deck Controller */
|
||||
+ HID_USB_DEVICE(USB_VENDOR_ID_VALVE,
|
||||
+ USB_DEVICE_ID_STEAM_DECK_CONTROLLER)
|
||||
+ },
|
||||
{ /* Wireless Steam Controller */
|
||||
HID_USB_DEVICE(USB_VENDOR_ID_VALVE,
|
||||
USB_DEVICE_ID_STEAM_CONTROLLER_WIRELESS),
|
|
@ -837,6 +837,25 @@
|
|||
</emulator>
|
||||
</emulators>
|
||||
</system>
|
||||
<system>
|
||||
<fullname>Nintendo Switch</fullname>
|
||||
<name>switch</name>
|
||||
<manufacturer>Nintendo</manufacturer>
|
||||
<release>2017</release>
|
||||
<hardware>console</hardware>
|
||||
<path>/storage/roms/switch</path>
|
||||
<extension>.xci .XCI .nsp .NSP .nca .NCA .nso .NSO .nro .NRO</extension>
|
||||
<command>/usr/bin/runemu.sh %ROM% -P%SYSTEM% --core=%CORE% --emulator=%EMULATOR% --controllers="%CONTROLLERSCONFIG%"</command>
|
||||
<platform>switch</platform>
|
||||
<theme>switch</theme>
|
||||
<emulators>
|
||||
<emulator name="yuzu">
|
||||
<cores>
|
||||
<core default="true">yuzu</core>
|
||||
</cores>
|
||||
</emulator>
|
||||
</emulators>
|
||||
</system>
|
||||
<system>
|
||||
<name>gamegear</name>
|
||||
<fullname>Game Gear</fullname>
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue