mirror of
https://github.com/par274/sharpemu.git
synced 2026-07-22 19:06:15 +08:00
373100a6b0
Fills NID gaps hit by PS5 titles during boot, controller setup, and rendering, and surfaces the common runtime switches in the GUI. All exports are additive (no behavior change to existing exports) and free of NID and export-name collisions with upstream. New export libraries: - libSceBluetoothHid: Init/RegisterDevice/RegisterCallback success stubs so titles proceed past Bluetooth controller setup (opt-out via SHARPEMU_BTHID_UNAVAILABLE=1). - libSceNpCppWebApi: Common::initialize no-op success; UE5 online titles abort PS5-component startup on a negative SCE error. Additions to existing libraries: - libScePad: scePadOpenExt (shared PadOpenCore, accepts special ports 1/2 and the ScePadOpenExtParam pointer), scePadClose, scePadGetExtControllerInformation. - libSceVideoOut: sceVideoOutConfigureOutput, sceVideoOutInitializeOutputOptions. - libSceAgc: DCB builders sceAgcDcbSetIndexCount, sceAgcDcbJump, DcbSetPredication, SetPacketPredication (emit valid skippable packets; full draw processing TODO). - libSceAmpr: measure and write KernelEventQueueOnCompletion pair. - libKernel: scePthreadGet/Setschedparam, sceKernelChmod (validate and accept; POSIX permission bits have no host equivalent on Windows). - libSceNetCtl: sceNetCtlRegisterCallbackV6 (delegates to the v4 callback). - libSceMouse: sceMouseInit. - libSceUserService: sceUserServiceGetAgeLevel (adult, skips parental gates). GUI: new Options Environment tab exposing common SHARPEMU_* switches as toggles (BTHID_UNAVAILABLE, DISABLE_IMPORT_LOOP_GUARD, VK_VALIDATION, DUMP_SPIRV, LOG_DIRECT_MEMORY, LOG_NP). Persisted in gui-settings.json and applied to the emulator process environment at launch; localized with English fallback.
43 lines
1.5 KiB
C#
43 lines
1.5 KiB
C#
// Copyright (C) 2026 SharpEmu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
using SharpEmu.HLE;
|
|
|
|
namespace SharpEmu.Libs.Pad;
|
|
|
|
// Minimal libSceBluetoothHid stub: no host Bluetooth passthrough, so report
|
|
// success and let the Pad path provide input (SHARPEMU_BTHID_UNAVAILABLE=1 fails instead).
|
|
public static class BluetoothHidExports
|
|
{
|
|
private const int BluetoothHidUnavailable = unchecked((int)0x80960001);
|
|
|
|
private static readonly bool _reportUnavailable = string.Equals(
|
|
Environment.GetEnvironmentVariable("SHARPEMU_BTHID_UNAVAILABLE"),
|
|
"1",
|
|
StringComparison.Ordinal);
|
|
|
|
private static int Result(CpuContext ctx) =>
|
|
ctx.SetReturn(_reportUnavailable ? BluetoothHidUnavailable : 0);
|
|
|
|
[SysAbiExport(
|
|
Nid = "tul3-GzejQc",
|
|
ExportName = "sceBluetoothHidInit",
|
|
Target = Generation.Gen4 | Generation.Gen5,
|
|
LibraryName = "libSceBluetoothHid")]
|
|
public static int BluetoothHidInit(CpuContext ctx) => Result(ctx);
|
|
|
|
[SysAbiExport(
|
|
Nid = "4FUZ+c52d2k",
|
|
ExportName = "sceBluetoothHidRegisterDevice",
|
|
Target = Generation.Gen4 | Generation.Gen5,
|
|
LibraryName = "libSceBluetoothHid")]
|
|
public static int BluetoothHidRegisterDevice(CpuContext ctx) => Result(ctx);
|
|
|
|
[SysAbiExport(
|
|
Nid = "4Ypfo9RIwfM",
|
|
ExportName = "sceBluetoothHidRegisterCallback",
|
|
Target = Generation.Gen4 | Generation.Gen5,
|
|
LibraryName = "libSceBluetoothHid")]
|
|
public static int BluetoothHidRegisterCallback(CpuContext ctx) => Result(ctx);
|
|
}
|