From 0b56427019e82ca7705680f4e7b1da46cccdc28d Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Wed, 1 Nov 2023 23:09:07 +0200 Subject: [PATCH] Add Y2R::SetCoefficientParams --- include/services/y2r.hpp | 1 + src/core/services/y2r.cpp | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/services/y2r.hpp b/include/services/y2r.hpp index 8b30525c..0a1cae2f 100644 --- a/include/services/y2r.hpp +++ b/include/services/y2r.hpp @@ -87,6 +87,7 @@ class Y2RService { void setAlpha(u32 messagePointer); void setBlockAlignment(u32 messagePointer); + void setCoefficientParams(u32 messagePointer); void setInputFormat(u32 messagePointer); void setInputLineWidth(u32 messagePointer); void setInputLines(u32 messagePointer); diff --git a/src/core/services/y2r.cpp b/src/core/services/y2r.cpp index 44a04958..62f933f6 100644 --- a/src/core/services/y2r.cpp +++ b/src/core/services/y2r.cpp @@ -23,6 +23,7 @@ namespace Y2RCommands { GetInputLineWidth = 0x001B0000, SetInputLines = 0x001C0040, GetInputLines = 0x001D0000, + SetCoefficientParams = 0x001E0100, GetCoefficientParams = 0x001F0000, SetStandardCoeff = 0x00200040, GetStandardCoefficientParams = 0x00210040, @@ -89,6 +90,7 @@ void Y2RService::handleSyncRequest(u32 messagePointer) { case Y2RCommands::StopConversion: stopConversion(messagePointer); break; // Intentionally break ordering a bit for less-used Y2R functions + case Y2RCommands::SetCoefficientParams: setCoefficientParams(messagePointer); break; case Y2RCommands::GetCoefficientParams: getCoefficientParams(messagePointer); break; default: Helpers::panic("Y2R service requested. Command: %08X\n", command); } @@ -345,6 +347,19 @@ void Y2RService::getStandardCoefficientParams(u32 messagePointer) { } } +void Y2RService::setCoefficientParams(u32 messagePointer) { + log("Y2R::SetCoefficientParams\n"); + mem.write32(messagePointer, IPC::responseHeader(0x1E, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); + auto& coeff = conversionCoefficients; + + // Write coefficient parameters to output buffer + for (int i = 0; i < 8; i++) { + const u32 pointer = messagePointer + 8 + i * sizeof(u16); // Pointer to write parameter to + coeff[i] = mem.read16(pointer); + } +} + void Y2RService::getCoefficientParams(u32 messagePointer) { log("Y2R::GetCoefficientParams\n"); mem.write32(messagePointer, IPC::responseHeader(0x1F, 5, 0)); @@ -358,7 +373,6 @@ void Y2RService::getCoefficientParams(u32 messagePointer) { } } - void Y2RService::setSendingY(u32 messagePointer) { log("Y2R::SetSendingY\n"); Helpers::warn("Unimplemented Y2R::SetSendingY");