feat(libSceSystemService): report the web browser as unavailable
sceSystemServiceLaunchWebBrowser fails with the kernel's EOPNOTSUPP: there is no web browser to open. RommPS PPSA76677 stops on main at this import and shows a QR code instead when the browser does not open.
This commit is contained in:
parent
f145139676
commit
9f7e2ca75d
|
|
@ -5,6 +5,7 @@
|
|||
#include "prx/libc/include/Shutdown.hpp"
|
||||
#include "SceTypes.hpp"
|
||||
#include "prx/libc/include/General.hpp"
|
||||
#include "prx/libkernel/KernelErrors.hpp"
|
||||
#include "prx/libSceSystemService/SystemService.hpp"
|
||||
|
||||
extern "C" {
|
||||
|
|
@ -135,6 +136,12 @@ int APS5_VABI sceSystemServiceLaunchPlayerDialog(const void* param) {
|
|||
return SYSTEM_SERVICE_OK;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemServiceLaunchWebBrowser(const char* uri, const void* param) {
|
||||
(void)uri;
|
||||
(void)param;
|
||||
return SCE_KERNEL_ERROR_EOPNOTSUPP;
|
||||
}
|
||||
|
||||
int APS5_VABI sceSystemServiceDisableMusicPlayer(void) {
|
||||
return SYSTEM_SERVICE_OK;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "SceTypes.hpp"
|
||||
#include "prx/libkernel/KernelErrors.hpp"
|
||||
#include "prx/libSceSystemService/SystemService.hpp"
|
||||
#include <cstddef>
|
||||
#include <cstdlib>
|
||||
|
|
@ -27,6 +28,7 @@ extern "C" int APS5_VABI sceSystemServicePowerTick(void);
|
|||
extern "C" int APS5_VABI sceSystemServiceReportAbnormalTermination(const void* info);
|
||||
extern "C" int APS5_VABI sceSystemServiceDisableMusicPlayer(void);
|
||||
extern "C" int APS5_VABI sceSystemServiceReenableMusicPlayer(void);
|
||||
extern "C" int APS5_VABI sceSystemServiceLaunchWebBrowser(const char* uri, const void* param);
|
||||
|
||||
int main() {
|
||||
Require(sceSystemServicePowerTick() == SYSTEM_SERVICE_OK);
|
||||
|
|
@ -38,6 +40,8 @@ int main() {
|
|||
Require(sceSystemServiceDisableMusicPlayer() == SYSTEM_SERVICE_OK);
|
||||
Require(sceSystemServiceReenableMusicPlayer() == SYSTEM_SERVICE_OK);
|
||||
Require(sceSystemServiceReenableMusicPlayer() == SYSTEM_SERVICE_OK);
|
||||
Require(sceSystemServiceLaunchWebBrowser("http://127.0.0.1:8780/video?v=0", nullptr) == SCE_KERNEL_ERROR_EOPNOTSUPP);
|
||||
Require(sceSystemServiceLaunchWebBrowser("https://example.com/", &info) == SCE_KERNEL_ERROR_EOPNOTSUPP);
|
||||
Require(sceSystemServiceGetHdrToneMapLuminance(nullptr) == SYSTEM_SERVICE_ERROR_PARAMETER);
|
||||
SystemServiceHdrToneMapLuminance luminance{-1.0f, -1.0f, -1.0f};
|
||||
Require(sceSystemServiceGetHdrToneMapLuminance(&luminance) == SYSTEM_SERVICE_OK);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ Throughout the project, every function at every stage either **does exactly what
|
|||
- [libSceNpCommerce](../../core/libs/prx/libSceNpCommerce/Export.cpp) - the PS Store icon show/hide calls and `sceNpCommerceSetPsStoreIconLayout` do nothing
|
||||
- [libSceUsbd](../../core/libs/prx/libSceUsbd/Export.cpp) implements only the no-device path: `sceUsbdInit` and `sceUsbdExit` succeed without a host USB context, the device list is always empty and event handling waits for its timeout; calls that need a device throw
|
||||
- [libSceSystemService](../../core/libs/prx/libSceSystemService/Export.cpp) - `sceSystemServicePowerTick`, `sceSystemServiceReportAbnormalTermination`, `sceSystemServiceDisableMusicPlayer` and `sceSystemServiceReenableMusicPlayer` return success and do nothing: the host has no auto power-off timer to reset, no system crash reporter to notify and no system music player to pause or resume
|
||||
- [sceSystemServiceLaunchWebBrowser](../../core/libs/prx/libSceSystemService/Export.cpp) (libSceSystemService) - there is no web browser to open, so the call fails and nothing is shown. RommPS PPSA76677 then shows a QR code for the video instead
|
||||
- [libSceBluetoothHid](../../core/libs/prx/libSceBluetoothHid/Export.cpp) implements only the no-device path: initialization and callback and device registration succeed, the callback is never called because no device connects, and calls that need a connected device throw
|
||||
- [sceVideoOutOpen](../../core/libs/prx/libSceVideoOut/src/Output.cpp) validates the priority and CPU affinity that the open param requests for the VideoOut service thread but does not apply them: the port's present and vblank threads are host threads, and guest priorities and affinities do not reach host scheduling
|
||||
- Without `VK_KHR_fragment_shader_barycentric` the shader recompiler [does not load the barycentric VGPRs](../../core/shader/recompiler/Translation/src/InstructionTranslator.cpp): [`v_interp_p1_f32` is dropped and `v_interp_p2_f32` reads the attribute Vulkan interpolated](../../core/shader/recompiler/Translation/src/AttributeInstructions.cpp), so pixel shaders that use the barycentrics for anything other than `v_interp` get wrong values.
|
||||
|
|
@ -60,6 +61,7 @@ Throughout the project, every function at every stage either **does exactly what
|
|||
- [sceVoiceChatRequestCreateVoiceChatGroup, sceVoiceChatRequestJoinVoiceChatGroup](../../core/libs/prx/libSceVoiceChat/Export.cpp) (libSceVoiceChat) - assumed to take a request id and two pointers like the other `sceVoiceChatRequest*` calls; offline, every argument is ignored and `SIGNED_OUT` is returned, as for those
|
||||
- [sceAvPlayerAddSource](../../core/libs/prx/libSceAvPlayer/src/Source.cpp) (libSceAvPlayer) - requests up to 4 additional decode-ahead video framebuffers from the memory replacement beyond `num_output_video_framebuffers` when memory is available; the console's internal buffering behaviour is unknown
|
||||
- [sceTextToSpeech2Initialize](../../core/libs/prx/libSceTextToSpeech2/Export.cpp) (libSceTextToSpeech2) - the console's error for an unavailable speech engine is unknown; it returns the kernel's `EOPNOTSUPP` (0x8002002D). PPSA01317 passes a param that starts with 0x2000000 and only tests the result for non-zero; the other exports it imports are declared without parameters
|
||||
- [sceSystemServiceLaunchWebBrowser](../../core/libs/prx/libSceSystemService/Export.cpp) (libSceSystemService) - the console's error for a web browser that cannot open is unknown; it returns the kernel's `EOPNOTSUPP` (0x8002002D). The (uri, param) signature follows [RommPS](https://github.com/s0liton/RommPS/blob/754d4d60f25938a5136b9e2efcd074313c4386c5/platform/ps5/app/rommps/examples/rommps/kit/credits.cpp#L86-L95), which passes a URL and a null param and only tests the result for zero
|
||||
- [sceAgcDcbClearState](../../core/libs/prx/libSceAgc/DcbFlow/src/Control.cpp) (libSceAgc) - the (buffer, command) signature follows [SharpProspero](https://github.com/SvenGDK/SharpProspero/blob/main/src/SharpProspero/Interop/Agc/SceAgc.cs) and [OpenAGC](https://github.com/OpenAGC/OpenAGC/blob/main/src/game_compat.c), and the 2-dword CLEAR_STATE (0x12) packet is OpenAGC's; OpenAGC masks the command to 4 bits, here a command above 0xf throws, as the driver rejects that payload
|
||||
- [Command buffer cursors](../../core/libs/prx/libSceAgc/Command/src/Packet.cpp) (libSceAgc) - a null `cursor_down` is taken as a buffer without downward allocations, whose limit is `top`. PPSA16064 builds one-packet buffers of 8 dwords that way; the console's handling is unconfirmed
|
||||
- [sceVideoOutRegisterBuffers2](../../core/libs/prx/libSceVideoOut/src/Buffer.cpp) (libSceVideoOut) - buffer option 8 (STRICT_COLORIMETRY) is presented as option 0, with the stored values unchanged; what the console changes for it is unknown. Only options 0 and 8 are accepted
|
||||
|
|
|
|||
Loading…
Reference in New Issue