Adds implementation for the missing ActivateDebugMouse HID service function
that was causing crashes when games attempted to call it.
- Add ActivateDebugMouse declaration to IHidServer header
- Implement ActivateDebugMouse function following the same pattern as ActivateMouse
- Update function table to call the actual implementation instead of nullptr
- Add missing include for debug_mouse.h
Fixes crashes in games (GEX Trilogy) that use debug mouse functionality.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Change mix size mismatch from error to warning with recovery
- Adjust input pointer when consumed size doesn't match header size
to prevent desync and allow processing to continue
- Expand VoiceInfo::InParameter struct by 24 bytes (0x170 -> 0x188)
to support newer audio renderer versions
- Update static_assert to reflect new structure size
This improves compatibility with games that use newer audio renderer versions or have slight structural differences.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Extract and display Base Build ID and Update Build ID for Nintendo Switch games
- Support multiple file formats: NSO, Deconstructed ROM, XCI, NSP, and NCA
- Read build IDs directly from NSO headers at offset 0x40 (32 bytes)
- Handle complex file structures with proper fallback mechanisms
- Add dedicated UI fields for both base and update build IDs
- Improve cheat compatibility by showing build IDs needed for cheat files
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Change storage assignment from SetDataStorage() method to direct array indexing to prevent crashes when newer game updates are detected.
- The previous method was incorrectly handling storage info assignment for integrity verification layers.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add IContentsServiceManager class with RequestContentsAuthorizationToken function
- Add IAsyncData class for handling asynchronous authorization token operations
- Implement CreateContentsServiceManager in IAddOnContentManager (was previously stubbed)
- Add support for GetSize, Read, Cancel, and GetSystemEvent operations in IAsyncData
- Update CMakeLists.txt to include new source files
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Bumps HOS version from 20.0.1 to 20.1.1.
- Updates the corresponding `VERSION_HASH`, `DISPLAY_VERSION`, and
`DISPLAY_TITLE` strings.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add complete OpenAL sink implementation with robust error handling
- Support for device enumeration using ALC extensions
- Implement dummy streams for graceful degradation when OpenAL fails
- Add proper audio threading and buffer management
- Include comprehensive logging and diagnostic information
- Add stream limits and retry mechanisms for stability
Additional changes:
- Add ENABLE_OPENAL CMake option and OpenAL dependency management
- Include openal-soft in vcpkg dependencies
- Add OpenAL to audio engine settings enum
The OpenAL backend provides an alternative audio solution alongside
existing Cubeb and SDL2 backends, with enhanced device compatibility
and improved error recovery mechanisms.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Replace circular clipping with subtle rounded corners (radius = size/8) for a more modern and polished appearance.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Implement toggle between list and grid view modes (Ctrl+G)
- Add round icon rendering with anti-aliased circular clipping
- Display game titles below icons in grid layout
- Create flat model for grid view showing only games
- Add View menu option and Ctrl+G hotkey for toggling
- Implement separate filtering logic for both view modes
- Update grid layout with proper spacing and text alignment
- Maintain existing tree view functionality and features
- Support double-click to launch and right-click context menus in both modes
The grid view provides a more visual game browsing experience while
preserving all existing functionality of the original list view.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Replace old text-based FPS/thermal overlays with custom views
- Add new FpsIndicatorView with color-coded performance display
- Add ThermalIndicatorView showing battery temperature in °C/°F
- Add RamMeterView with usage percentage and visual progress bar
- Arrange all overlays horizontally at top center of screen
- Add native configuration support for show_ram_meter setting
- Update overlay options menu to include RAM meter toggle
- Implement proper battery temperature reading via BatteryManager
- Use compact 120x60 (FPS/thermal) and 140x60 (RAM) dimensions
- Add color coding: green (good), orange (moderate), red (poor/hot)
- Include appropriate icons and shadows for better visibility (WIP)
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Mark ResultNotImplemented and ResultNsdNotInitialized with
[[maybe_unused]] to avoid compiler warnings.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Check if libVkLayer_khronos_validation.so exists before downloading
- Skip extraction if android-binaries directory already exists
- Reduces redundant downloads and extractions during CMake reconfiguration
- Maintains backward compatibility with existing build process
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Extended MemoryLayout enum with new memory size options
- Added corresponding SMC memory size and arrangement constants
- Updated system control functions to handle new memory configurations
- Added appropriate application pool sizes for higher memory modes
- Updated UI translations to display new DRAM options as "Unsafe"
- Increased maximum memory layout setting from 8GB to 16GB
This allows users to configure higher memory amounts for games and
texture mods that require more than the standard 4-8GB configurations.
All new options are marked as "Unsafe" in the UI to indicate they
are experimental features beyond Nintendo's official specifications.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add complete IAudioController implementation with 32 missing functions:
* Volume control (GetTargetVolume, SetTargetVolume, etc.)
* Mute control (IsTargetMute, SetTargetMute, etc.)
* Target management (SetDefaultTarget, GetDefaultTarget, etc.)
* Play report functions (10000+ series command IDs)
* Hearing protection safeguard functions
* Debug and system functions
- Add new audio services:
* codecctl - Codec controller service with 13 functions
* auddebug - Audio debug service placeholder
* Device suspend/resume services (audout:d, audin:d, audrec:d, audren:d)
* System audio services (aud:a, aud:d)
* Applet audio services (audout:a, audin:a, audren:a)
- Update IAudioDevice with missing functions:
* GetAudioSystemMasterVolumeSetting
* GetActiveAudioOutputDeviceName
* Fix function ID mappings to match official documentation
- Register all services in main audio LoopProcess function
- Update CMakeLists.txt with new source files
All implementations follow the official Switch audio services documentation
from switchbrew.org and provide appropriate stub implementations with
sensible default values for enhanced game compatibility.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Add acc:e service with full account management functionality
- Add acc:e:u1 service (minimal implementation)
- Add acc:e:u2 service with extended functionality including PIN code support
- Add dauth:0 device authentication service
- Update acc_su function mappings to match newer firmware versions
- Move TrySelectUserWithoutInteraction from ID 51 to 52 with deprecated fallback
These services provide additional account management interfaces used by
newer Switch firmware versions and some games that require extended
account functionality.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
- Addition of all documented commands for `INpnsSystem` and `INpnsUser` as `nullptr` stubs. This includes newly added commands and ensures all known commands have a placeholder.
- Introduction of empty class definitions for `INotificationReceiver`, `ICreateTokenAsyncContext`, `ISubscriptionUpdateNotifier`, and `IFuture` interfaces as specified in the documentation.
- Reversion of the previous change that made `nullptr` stubs call an `UnimplementedMethod` that returned success. Stubs are now back to being `nullptr`.
- Update of the copyright year in `npns.cpp`.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit introduces support for a 32:9 aspect ratio throughout Citron.
Key changes include:
- **Enum Updates**: Added `R32_9` to `Settings::AspectRatio` and `Layout::AspectRatio` enums, ensuring consistent integer mapping for casting between them.
- **Core Logic**:
- Modified `UISettings::CalculateWidth` to correctly compute width for the 32:9 ratio.
- Updated `Layout::EmulationAspectRatio` to handle the new `R32_9` case and return the appropriate float value (9.0f / 32.0f).
- **Android Integration**:
- Updated `EmulationFragment.kt` and `EmulationActivity.kt` (for Picture-in-Picture) to recognize and apply the 32:9 aspect ratio (mapping setting value `4` to `Rational(32, 9)`).
- **UI Configuration**:
- Added "Force 32:9" to the aspect ratio selection in the graphics settings UI via `shared_translation.cpp`. This string is translatable.
This enhancement allows users to utilize ultra-widescreen 32:9 displays for a more immersive experience.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Adds implementations for missing nsd:u and nsd:a services
as documented in SwitchBrew. This includes:
- Defining necessary data structures (Url, SettingName, DeviceId, Fqdn,
NasServiceSetting, NasServiceName, SaveData, TestParameter, DeleteMode,
ImportMode) in nsd.cpp.
- Adding declarations for new service methods to nsd.h.
- Implementing basic stub logic for each new service method in nsd.cpp,
including logging, returning default success/error codes, and handling
output buffers where applicable.
- Implementing checks for nsd:a specific functions using a new
IsNsdA() helper.
- Updating the copyright year in nsd.h.
This provides a complete interface for the nsd service, allowing
further development and reducing unknown service calls.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Adds implementations for missing `sfdnsres` (nn::socket::resolver::IResolver) service functions and corrects command ID mappings to align with Switchbrew documentation.
Key changes:
- Implemented stubs for the following `sfdnsres` functions:
- `SetDnsAddresses` (Cmd 0)
- `GetDnsAddressList` (Cmd 1)
- `GetHostByAddrRequest` (Cmd 4, deprecated)
- `GetHostStringError` (Cmd 5)
- `CancelRequest` (Cmd 7)
- `GetOptions` (Cmd 9)
- `GetAddrInfoRequestRaw` (Cmd 11)
- Updated the command registration table in the `SFDNSRES` constructor to use correct Switchbrew command IDs and map them to the appropriate existing or new (stubbed) implementations.
- Retained and stubbed `GetNameInfoRequest` and `GetNameInfoRequestWithOptions` with placeholder IDs, as they were present in the previous command table.
- Corrected usage of `GetAddrInfoError` constants in stubs to use valid members (e.g., `GetAddrInfoError::AGAIN` instead of a non-standard `INTERNAL`).
This significantly expands the implemented interface for the `sfdnsres` service, bringing it closer to the documented functionality and resolving related compilation errors.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Adds implementations for all `bsdcfg` (aliased as `ifcfg`) service functions as listed in the existing codebase and supplemented by Switchbrew documentation.
The following functions have been added to the `BSDCFG` service:
- `SetIfUp` (Cmd 0)
- `SetIfUpWithEvent` (Cmd 1)
- `CancelIf` (Cmd 2)
- `SetIfDown` (Cmd 3)
- `GetIfState` (Cmd 4)
- `DhcpRenew` (Cmd 5)
- `AddStaticArpEntry` (Cmd 6)
- `RemoveArpEntry` (Cmd 7)
- `LookupArpEntry` (Cmd 8)
- `LookupArpEntry2` (Cmd 9)
- `ClearArpEntries` (Cmd 10)
- `ClearArpEntries2` (Cmd 11)
- `PrintArpEntries` (Cmd 12)
- `Unknown13` (Cmd 13)
- `Unknown14` (Cmd 14)
- `Unknown15` (Cmd 15)
These functions are initially stubbed to log a warning and return `EOPNOTSUPP`.
Command handlers have been updated in the `BSDCFG` constructor.
Additionally, this commit corrects the logging category in these new `BSDCFG` stubs from an undefined `Service_BSDCFG` to the existing `Service` category, resolving compilation errors.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Adds implementations for several previously unimplemented BSD socket service functions, as documented in Switchbrew. REF: https://switchbrew.org/wiki/Sockets_services#bsd:u.2C_bsd:s.2C_bsd:a
The following functions have been added to the `bsd:u`, `bsd:s`, and `bsd:a` services:
* `SocketExempt` (Cmd 3)
* `Open` (Cmd 4)
* `Sysctl` (Cmd 7)
* `Ioctl` (Cmd 19)
* `ShutdownAllSockets` (Cmd 23)
* `GetResourceStatistics` (Cmd 28)
* `RecvMMsg` (Cmd 29)
* `SendMMsg` (Cmd 30)
* `RegisterResourceStatisticsName` (Cmd 32)
* `RegisterClientShared` (Cmd 33) (replaces the placeholder `Initialize2`)
* `GetSocketStatistics` (Cmd 34)
* `NifIoctl` (Cmd 35)
* `SetThreadCoreMask` (Cmd 200)
* `GetThreadCoreMask` (Cmd 201)
These functions are initially set to log a warning and return an appropriate error code (typically `EOPNOTSUPP` or `ENOTTY`), or success in the case of registration-type functions.
The command handlers have been registered in the BSD service constructor.
This resolves various compilation errors encountered during the implementation process related to IPC response generation and enum usage.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
1. Update NASM from 2.16.01 to 2.16.03 and use the official nasm.us download URL
2. Update clang-format from version 15 to version 20
3. Change all repository URLs from yuzu-mirror GitHub to Citron's self-hosted Git server
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Boost.Process is not compatible with Android platform, causing build failures. This change conditionally includes the package only on non-Android platforms.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Updates UDP client code to use boost::asio::io_context instead of the
deprecated boost::asio::io_service, fixing compilation errors with newer
Boost versions.
Signed-off-by: Zephyron <zephyron@citron-emu.org>