From 207f8cdf9628de5cd2060df03dbc1d47916142c7 Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Sun, 28 Jul 2019 13:39:30 -0700 Subject: [PATCH] Document previously unknown fields --- .../Core/HW/WiimoteEmu/Extension/BalanceBoard.cpp | 13 ++++++------- .../Core/HW/WiimoteEmu/Extension/BalanceBoard.h | 7 +++++-- .../Core/Core/HW/WiimoteEmu/Extension/Extension.h | 2 +- Source/Core/DolphinQt/TAS/WiiTASInputWindow.cpp | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.cpp b/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.cpp index fe7c6efb1ee3..27a20860def5 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.cpp @@ -56,8 +56,8 @@ void BalanceBoard::Update() bb_data.bottom_right = Common::swap16(ConvertToSensorWeight(bottom_right)); bb_data.top_left = Common::swap16(ConvertToSensorWeight(top_left)); bb_data.bottom_left = Common::swap16(ConvertToSensorWeight(bottom_left)); - bb_data.unknown1 = 0x19; - bb_data.battery = 0x83; + bb_data.temperature = TEMPERATURE; + bb_data.battery = 0x83; // Above the threshold for 4 bars Common::BitCastPtr(&m_reg.controller_data) = bb_data; } @@ -74,7 +74,7 @@ void BalanceBoard::Reset() m_reg.identifier = balance_board_id; // Build calibration data: - m_reg.calibration = {{// Unknown byte data + m_reg.calibration = {{// Unused battery calibration 0x01, 0x69, 0x00, 0x00, // Top right 0kg u8(WEIGHT_0_KG >> 8), u8(WEIGHT_0_KG & 0xFF), @@ -102,8 +102,7 @@ void BalanceBoard::Reset() u8(WEIGHT_34_KG >> 8), u8(WEIGHT_34_KG & 0xFF), // Checksum - computed later 0xff, 0xff, 0xff, 0xff}}; - m_reg.bboard_unknown = {{// 2 used unknown bytes - 0x19, 0x01}}; + m_reg.calibration3 = {{TEMPERATURE, 0x01}}; ComputeCalibrationChecksum(); } @@ -186,8 +185,8 @@ void BalanceBoard::ComputeCalibrationChecksum() data[0x17] = m_reg.calibration2[0xb]; data[0x18] = m_reg.calibration[0]; data[0x19] = m_reg.calibration[1]; - data[0x1a] = m_reg.bboard_unknown[0]; - data[0x1b] = m_reg.bboard_unknown[1]; + data[0x1a] = m_reg.calibration3[0]; + data[0x1b] = m_reg.calibration3[1]; constexpr u32 CRC_POLYNOMIAL = 0xEDB88320; // Reversed diff --git a/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.h b/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.h index 9805d9d6dd8b..63642d64521b 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.h +++ b/Source/Core/Core/HW/WiimoteEmu/Extension/BalanceBoard.h @@ -33,8 +33,8 @@ class BalanceBoard : public Extension1stParty u16 bottom_right; u16 top_left; u16 bottom_left; - u8 unknown1; - u8 pad; + u8 temperature; + u8 padding; u8 battery; }; static_assert(sizeof(DataFormat) == 12, "Wrong size"); @@ -56,6 +56,9 @@ class BalanceBoard : public Extension1stParty static constexpr u16 WEIGHT_0_KG = 0; static constexpr u16 WEIGHT_17_KG = 17000; static constexpr u16 WEIGHT_34_KG = 34000; + // Chosen arbitrarily from the value for pokechu22's board. As long as the calibration and + // actual temperatures match, the value here doesn't matter. + static constexpr u8 TEMPERATURE = 0x19; private: u16 ConvertToSensorWeight(double weight_in_kilos); diff --git a/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h b/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h index 4b2d350fdc48..e2b7a1c3e477 100644 --- a/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h +++ b/Source/Core/Core/HW/WiimoteEmu/Extension/Extension.h @@ -89,7 +89,7 @@ class EncryptedExtension : public Extension std::array encryption_key_data; u8 unknown3[0x10]; // Address 0x60 - std::array bboard_unknown; + std::array calibration3; u8 unknown4[0x8e]; // address 0xF0 diff --git a/Source/Core/DolphinQt/TAS/WiiTASInputWindow.cpp b/Source/Core/DolphinQt/TAS/WiiTASInputWindow.cpp index 46c367fc6a00..f9b83ef85150 100644 --- a/Source/Core/DolphinQt/TAS/WiiTASInputWindow.cpp +++ b/Source/Core/DolphinQt/TAS/WiiTASInputWindow.cpp @@ -627,7 +627,7 @@ void WiiTASInputWindow::GetValues(DataReportBuilder& rpt, int ext, bb_data.bottom_right = Common::swap16(bottom_right); bb_data.top_left = Common::swap16(top_left); bb_data.bottom_left = Common::swap16(bottom_left); - bb_data.unknown1 = 0x19; + bb_data.temperature = BalanceBoard::TEMPERATURE; bb_data.battery = 0x83; Common::BitCastPtr(ext_data) = bb_data;