public void SetReportType(EInputReport type, EIRSensitivity irSensitivity, bool continuous) { if (!Connected) { return; } switch (type) { case EInputReport.IRAccel: _EnableIR(EIRMode.Extended, irSensitivity); break; default: _DisableIR(); break; } _ClearReport(); _Buff[0] = (byte)EOutputReport.Type; _Buff[1] = (byte)((continuous ? 0x04 : 0x00) | (byte)(_WiiMoteState.Rumble ? 0x01 : 0x00)); _Buff[2] = (byte)type; CHIDApi.Write(_Handle, _Buff); }
private void _EnableIR(EIRMode mode, EIRSensitivity sensitivity) { _WiiMoteState.IRState.Mode = mode; _ClearReport(); _Buff[0] = (byte)EOutputReport.IR; _Buff[1] = (byte)(0x04 | _RumbleBit); CHIDApi.Write(_Handle, _Buff); Thread.Sleep(50); _ClearReport(); _Buff[0] = (byte)EOutputReport.IR2; _Buff[1] = (byte)(0x04 | _RumbleBit); CHIDApi.Write(_Handle, _Buff); Thread.Sleep(50); _WriteData(_RegisterIR, 0x08); Thread.Sleep(50); switch (sensitivity) { case EIRSensitivity.Level1: _WriteData(_RegisterIRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe }); Thread.Sleep(50); _WriteData(_RegisterIRSensitivity2, 2, new byte[] { 0xfd, 0x05 }); break; case EIRSensitivity.Level2: _WriteData(_RegisterIRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4 }); Thread.Sleep(50); _WriteData(_RegisterIRSensitivity2, 2, new byte[] { 0xb3, 0x04 }); break; case EIRSensitivity.Level3: _WriteData(_RegisterIRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64 }); Thread.Sleep(50); _WriteData(_RegisterIRSensitivity2, 2, new byte[] { 0x63, 0x03 }); break; case EIRSensitivity.Level4: _WriteData(_RegisterIRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36 }); Thread.Sleep(50); _WriteData(_RegisterIRSensitivity2, 2, new byte[] { 0x35, 0x03 }); break; case EIRSensitivity.Level5: _WriteData(_RegisterIRSensitivity1, 9, new byte[] { 0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20 }); Thread.Sleep(50); _WriteData(_RegisterIRSensitivity2, 2, new byte[] { 0x1, 0x03 }); break; case EIRSensitivity.Max: _WriteData(_RegisterIRSensitivity1, 9, new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x41 }); Thread.Sleep(50); _WriteData(_RegisterIRSensitivity2, 2, new byte[] { 0x40, 0x00 }); break; } Thread.Sleep(50); _WriteData(_RegisterIRMode, (byte)mode); Thread.Sleep(50); _WriteData(_RegisterIR, 0x08); Thread.Sleep(50); }