From e6b63f328b5760902c2632c91bbf6c0e8ecaae9b Mon Sep 17 00:00:00 2001 From: d0k3 Date: Sun, 28 Jul 2019 23:30:31 +0200 Subject: [PATCH] Store manual calibration data in a support file --- arm9/source/common/touchcal.c | 17 +++++++++++++++++ arm9/source/common/touchcal.h | 1 + arm9/source/godmode.c | 6 ++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/arm9/source/common/touchcal.c b/arm9/source/common/touchcal.c index 5a4a891..d4f874e 100644 --- a/arm9/source/common/touchcal.c +++ b/arm9/source/common/touchcal.c @@ -3,6 +3,10 @@ #include "hid.h" #include "crc16.h" #include "spiflash.h" +#include "support.h" + + +#define TOUCH_CALIB_FILENAME "gm9calib.bin" static const HID_CalibrationData default_calib = { @@ -74,6 +78,19 @@ bool ShowTouchCalibrationDialog(void) } is_calibrated = HID_SetCalibrationData(calibrations, countof(dot_positions), SCREEN_WIDTH_BOT, SCREEN_HEIGHT); + if (is_calibrated) { // store calibration data in a file + SaveSupportFile(TOUCH_CALIB_FILENAME, calibrations, sizeof(calibrations)); + } + return is_calibrated; +} + +bool CalibrateTouchFromSupportFile(void) { + HID_CalibrationData calibrations[10]; + size_t size = LoadSupportFile(TOUCH_CALIB_FILENAME, calibrations, sizeof(calibrations)); + u32 n_dots = size / sizeof(HID_CalibrationData); + + is_calibrated = (n_dots == 0) ? false : + HID_SetCalibrationData(calibrations, n_dots, SCREEN_WIDTH_BOT, SCREEN_HEIGHT); return is_calibrated; } diff --git a/arm9/source/common/touchcal.h b/arm9/source/common/touchcal.h index 45c5d32..4a909cb 100644 --- a/arm9/source/common/touchcal.h +++ b/arm9/source/common/touchcal.h @@ -3,5 +3,6 @@ #include "common.h" bool ShowTouchCalibrationDialog(void); +bool CalibrateTouchFromSupportFile(void); bool CalibrateTouchFromFlash(void); bool TouchIsCalibrated(void); diff --git a/arm9/source/godmode.c b/arm9/source/godmode.c index 15387d0..a1ac21c 100644 --- a/arm9/source/godmode.c +++ b/arm9/source/godmode.c @@ -2124,7 +2124,8 @@ u32 GodMode(int entrypoint) { AutoEmuNandBase(true); InitNandCrypto(true); // (entrypoint != ENTRY_B9S); InitExtFS(); - CalibrateTouchFromFlash(); + if (!CalibrateTouchFromSupportFile()) + CalibrateTouchFromFlash(); // brightness from file? s32 brightness = -1; @@ -2666,7 +2667,8 @@ u32 ScriptRunner(int entrypoint) { AutoEmuNandBase(true); InitNandCrypto(entrypoint != ENTRY_B9S); InitExtFS(); - CalibrateTouchFromFlash(); // !!! this may need some further checking + if (!CalibrateTouchFromSupportFile()) + CalibrateTouchFromFlash(); // brightness from file? s32 brightness = -1;