From 58c275cf8c670367322f0d5a9ebfe1cf9631ac3e Mon Sep 17 00:00:00 2001 From: Arisotura Date: Fri, 16 Jun 2023 23:42:03 +0200 Subject: [PATCH] fix MKDS touchscreen --- src/HLE_Retail/IPC.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/HLE_Retail/IPC.cpp b/src/HLE_Retail/IPC.cpp index 48ab92d3..b70f48d7 100644 --- a/src/HLE_Retail/IPC.cpp +++ b/src/HLE_Retail/IPC.cpp @@ -72,7 +72,7 @@ namespace Retail u16 FW_Data[16]; -bool TS_Inited; +int TS_Status; u16 TS_Data[16]; u16 TS_NumSamples; u16 TS_SamplePos[4]; @@ -113,7 +113,7 @@ void Reset() { memset(FW_Data, 0, sizeof(FW_Data)); - TS_Inited = false; + TS_Status = 0; memset(TS_Data, 0, sizeof(TS_Data)); TS_NumSamples = 0; memset(TS_SamplePos, 0, sizeof(TS_SamplePos)); @@ -360,7 +360,7 @@ void OnIPCRequest_Touchscreen(u32 data) case 1: // setup auto sampling { - if (TS_Inited) + if (TS_Status != 0) { SendIPCReply(0x6, 0x03008103); break; @@ -382,6 +382,8 @@ void OnIPCRequest_Touchscreen(u32 data) break; } + TS_Status = 1; + TS_NumSamples = num; for (int i = 0; i < num; i++) { @@ -389,17 +391,25 @@ void OnIPCRequest_Touchscreen(u32 data) TS_SamplePos[i] = ypos; } - TS_Inited = true; + TS_Status = 2; SendIPCReply(0x6, 0x03008100); } break; case 2: // stop autosampling { + if (TS_Status != 2) + { + SendIPCReply(0x6, 0x03008103); + break; + } + + TS_Status = 3; + // TODO CHECKME - // Mario Kart uses this - // but this here is wrong TS_NumSamples = 0; + + TS_Status = 0; SendIPCReply(0x6, 0x03008200); } break;