Skip to content

Commit

Permalink
Use valid IR calibration data
Browse files Browse the repository at this point in the history
Previously, IR calibration data with an invalid checksum was used, because the calibration produced a strange offset.  I've replaced it with calibration data that encodes the same values as the data Nintendo falls back to when the checksum is bad.
  • Loading branch information
Pokechu22 committed Aug 5, 2019
1 parent 7f6abfb commit 7c892c0
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 6 deletions.
28 changes: 22 additions & 6 deletions Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,14 +76,30 @@ void Wiimote::Reset()
// EEPROM
m_eeprom = {};

// IR calibration and maybe more unknown purposes:
// The meaning of this data needs more investigation.
// Last byte is a checksum.
// IR calibration:
std::array<u8, 11> ir_calibration = {
0xA1, 0xAA, 0x8B, 0x99, 0xAE, 0x9E, 0x78, 0x30, 0xA7, 0x74, 0x00,
// Point 1
IR_LOW_X & 0xFF,
IR_LOW_Y & 0xFF,
// Mix
((IR_LOW_Y & 0x300) >> 2) | ((IR_LOW_X & 0x300) >> 4) | ((IR_LOW_Y & 0x300) >> 6) |
((IR_HIGH_X & 0x300) >> 8),
// Point 2
IR_HIGH_X & 0xFF,
IR_LOW_Y & 0xFF,
// Point 3
IR_HIGH_X & 0xFF,
IR_HIGH_Y & 0xFF,
// Mix
((IR_HIGH_Y & 0x300) >> 2) | ((IR_HIGH_X & 0x300) >> 4) | ((IR_HIGH_Y & 0x300) >> 6) |
((IR_LOW_X & 0x300) >> 8),
// Point 4
IR_LOW_X & 0xFF,
IR_HIGH_Y & 0xFF,
// Checksum
0x00,
};
// Purposely not updating checksum because using this data results in a weird IR offset..
// UpdateCalibrationDataChecksum(ir_calibration, 1);
UpdateCalibrationDataChecksum(ir_calibration, 1);
m_eeprom.ir_calibration_1 = ir_calibration;
m_eeprom.ir_calibration_2 = ir_calibration;

Expand Down
5 changes: 5 additions & 0 deletions Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ void UpdateCalibrationDataChecksum(T& data, int cksum_bytes)
class Wiimote : public ControllerEmu::EmulatedController
{
public:
static constexpr u16 IR_LOW_X = 0x7F;
static constexpr u16 IR_LOW_Y = 0x5D;
static constexpr u16 IR_HIGH_X = 0x380;
static constexpr u16 IR_HIGH_Y = 0x2A2;

static constexpr u8 ACCEL_ZERO_G = 0x80;
static constexpr u8 ACCEL_ONE_G = 0x9A;

Expand Down

0 comments on commit 7c892c0

Please sign in to comment.