From 11304a7886a3557b0800d8e608f8b9278dc28c02 Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Mon, 24 Apr 2023 02:42:42 +0300 Subject: [PATCH] [Y2R] Add StartConversion --- include/services/y2r.hpp | 2 ++ src/core/services/y2r.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/services/y2r.hpp b/include/services/y2r.hpp index ec0a6e65..bdd2d42d 100644 --- a/include/services/y2r.hpp +++ b/include/services/y2r.hpp @@ -82,6 +82,8 @@ class Y2RService { void setSpacialDithering(u32 messagePointer); void setStandardCoeff(u32 messagePointer); void setTemporalDithering(u32 messagePointer); + + void startConversion(u32 messagePointer); void stopConversion(u32 messagePointer); public: diff --git a/src/core/services/y2r.cpp b/src/core/services/y2r.cpp index 6991c49b..4b9a8fdb 100644 --- a/src/core/services/y2r.cpp +++ b/src/core/services/y2r.cpp @@ -20,6 +20,7 @@ namespace Y2RCommands { SetInputLines = 0x001C0040, SetStandardCoeff = 0x00200040, SetAlpha = 0x00220040, + StartConversion = 0x00260000, StopConversion = 0x00270000, IsBusyConversion = 0x00280000, PingProcess = 0x002A0000, @@ -72,6 +73,7 @@ void Y2RService::handleSyncRequest(u32 messagePointer) { case Y2RCommands::SetStandardCoeff: setStandardCoeff(messagePointer); break; case Y2RCommands::SetTemporalDithering: setTemporalDithering(messagePointer); break; case Y2RCommands::SetTransferEndInterrupt: setTransferEndInterrupt(messagePointer); break; + case Y2RCommands::StartConversion: [[likely]] startConversion(messagePointer); break; case Y2RCommands::StopConversion: stopConversion(messagePointer); break; default: Helpers::panic("Y2R service requested. Command: %08X\n", command); } @@ -285,4 +287,18 @@ void Y2RService::setReceiving(u32 messagePointer) { mem.write32(messagePointer, IPC::responseHeader(0x18, 1, 0)); mem.write32(messagePointer + 4, Result::Success); +} + +void Y2RService::startConversion(u32 messagePointer) { + log("Y2R::StartConversion\n"); + + // TODO: Actually launch conversion here + mem.write32(messagePointer, IPC::responseHeader(0x26, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); + + // Make Y2R conversion end instantly. + // Signal the transfer end event if it's been created. TODO: Is this affected by SetTransferEndInterrupt? + if (transferEndEvent.has_value()) { + kernel.signalEvent(transferEndEvent.value()); + } } \ No newline at end of file