public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { if (!_Connected) { return; } switch (type) { case InputReport.IRAccel: EnableIR(IRMode.Extended, irSensitivity); break; default: DisableIR(); break; } ClearReport(); _Buff[0] = (byte)OutputReport.Type; _Buff[1] = (byte)((continuous ? 0x04 : 0x00) | (byte)(_WiiMoteState.Rumble ? 0x01 : 0x00)); _Buff[2] = (byte)type; CHIDAPI.Write(_Handle, _Buff); }
/// <summary> /// Turn on the IR sensor /// </summary> /// <param name="mode">The data report mode</param> /// <param name="irSensitivity">IR sensitivity</param> private void EnableIR(IRMode mode, IRSensitivity irSensitivity) { mWiimoteState.IRState.Mode = mode; ClearReport(); mBuff[0] = (byte)OutputReport.IR; mBuff[1] = (byte)(0x04 | GetRumbleBit()); WriteReport(); ClearReport(); mBuff[0] = (byte)OutputReport.IR2; mBuff[1] = (byte)(0x04 | GetRumbleBit()); WriteReport(); WriteData(REGISTER_IR, 0x08); switch (irSensitivity) { case IRSensitivity.WiiLevel1: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe }); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0xfd, 0x05 }); break; case IRSensitivity.WiiLevel2: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4 }); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0xb3, 0x04 }); break; case IRSensitivity.WiiLevel3: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64 }); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x63, 0x03 }); break; case IRSensitivity.WiiLevel4: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36 }); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x35, 0x03 }); break; case IRSensitivity.WiiLevel5: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20 }); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x1, 0x03 }); break; case IRSensitivity.Maximum: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x90, 0x00, 0x41 }); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x40, 0x00 }); break; default: throw new ArgumentOutOfRangeException("irSensitivity"); } WriteData(REGISTER_IR_MODE, (byte)mode); WriteData(REGISTER_IR, 0x08); }
/// <summary>Turn on the IR sensor.</summary> /// <param name="mode">The data report mode</param> /// <param name="irSensitivity">IR sensitivity</param> private void EnableIR(IRMode mode, IRSensitivity irSensitivity) { wiimoteState.Status.IREnabled = true; wiimoteState.IRState.Mode = mode; wiimoteState.IRState.Sensitivity = irSensitivity; byte[] buff = CreateReport(OutputReport.IRPixelClock); buff[1] = 0x04; WriteReport(buff); buff = CreateReport(OutputReport.IRLogic); buff[1] = 0x04; WriteReport(buff); WriteByte(Registers.IR, 0x08); switch (irSensitivity) { case IRSensitivity.WiiLevel1: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0xfd, 0x05 }); break; case IRSensitivity.WiiLevel2: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0xb3, 0x04 }); break; case IRSensitivity.WiiLevel3: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x63, 0x03 }); break; case IRSensitivity.WiiLevel4: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x35, 0x03 }); break; case IRSensitivity.WiiLevel5: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x1, 0x03 }); break; case IRSensitivity.Maximum: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x90, 0x00, 0x41 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x40, 0x00 }); break; default: throw new ArgumentOutOfRangeException("irSensitivity"); } WriteByte(Registers.IRMode, (byte)mode); WriteByte(Registers.IR, 0x08); }
/// <summary>Set Wiimote reporting mode.</summary> /// <param name="reportType">Report type</param> /// <param name="irSensitivity">IR sensitivity</param> /// <param name="continuous">Continuous data</param> public void SetReportType(ReportType reportType, IRSensitivity irSensitivity, bool continuous) { InputReport type = (InputReport)reportType; DataReportAttribute dataReport = EnumInfo <InputReport> .TryGetAttribute <DataReportAttribute>(type); if (dataReport == null) { throw new WiimoteException(this, $"{type} is not a valid report type!"); } int irSize = dataReport.IRSize; if (dataReport.IsInterleaved) { irSize *= 2; } switch (dataReport.IRSize) { case 10: EnableIR(IRMode.Basic, irSensitivity); break; case 12: EnableIR(IRMode.Extended, irSensitivity); break; case 36: EnableIR(IRMode.Full, irSensitivity); break; default: DisableIR(); break; } byte[] buff = CreateReport(OutputReport.InputReportType); buff[1] = (byte)(continuous ? 0x04 : 0x00); buff[2] = (byte)type; WriteReport(buff); wiimoteState.ReportType = reportType; wiimoteState.ContinuousReport = continuous; }
/// <summary> /// Set Wiimote reporting mode /// </summary> /// <param name="type">Report type</param> /// <param name="irSensitivity">IR sensitivity</param> /// <param name="continuous">Continuous data</param> public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { switch (type) { case InputReport.IRAccel: EnableIR(IRMode.Extended, irSensitivity); break; case InputReport.IRExtensionAccel: EnableIR(IRMode.Basic, irSensitivity); break; default: DisableIR(); break; } ClearReport(); mBuff[0] = (byte)OutputReport.Type; mBuff[1] = (byte)((continuous ? 0x04 : 0x00) | (byte)(mWiimoteState.Rumble ? 0x01 : 0x00)); mBuff[2] = (byte)type; WriteReport(); }
/// <summary> /// Set Wiimote reporting mode /// </summary> /// <param name="type">Report type</param> /// <param name="irSensitivity">IR sensitivity</param> /// <param name="continuous">Continuous data</param> public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { // only 1 report type allowed for the BB if(mWiimoteState.ExtensionType == ExtensionType.BalanceBoard) type = InputReport.ButtonsExtension; switch(type) { case InputReport.IRAccel: EnableIR(IRMode.Extended, irSensitivity); break; case InputReport.IRExtensionAccel: EnableIR(IRMode.Basic, irSensitivity); break; default: DisableIR(); break; } ClearReport(); mBuff[0] = (byte)OutputReport.Type; mBuff[1] = (byte)((continuous ? 0x04 : 0x00) | (byte)(mWiimoteState.Rumble ? 0x01 : 0x00)); mBuff[2] = (byte)type; WriteReport(); }
public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { throw new NotImplementedException(); }
private void EnableIR(IRMode mode, IRSensitivity Sensitivity) { _WiiMoteState.IRState.Mode = mode; ClearReport(); _Buff[0] = (byte)OutputReport.IR; _Buff[1] = (byte)(0x04 | RumbleBit); CHIDAPI.Write(_Handle, _Buff); Thread.Sleep(50); ClearReport(); _Buff[0] = (byte)OutputReport.IR2; _Buff[1] = (byte)(0x04 | RumbleBit); CHIDAPI.Write(_Handle, _Buff); Thread.Sleep(50); WriteData(REGISTER_IR, 0x08); Thread.Sleep(50); switch(Sensitivity) { case IRSensitivity.Level1: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe}); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0xfd, 0x05}); break; case IRSensitivity.Level2: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4}); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0xb3, 0x04}); break; case IRSensitivity.Level3: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64}); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x63, 0x03}); break; case IRSensitivity.Level4: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36}); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x35, 0x03}); break; case IRSensitivity.Level5: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20}); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x1, 0x03}); break; case IRSensitivity.Max: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x41}); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x40, 0x00}); break; } Thread.Sleep(50); WriteData(REGISTER_IR_MODE, (byte)mode); Thread.Sleep(50); WriteData(REGISTER_IR, 0x08); Thread.Sleep(50); }
/// <summary> /// Turn on the IR sensor /// </summary> /// <param name="mode">The data report mode</param> /// <param name="irSensitivity">IR sensitivity</param> void EnableIR(WiimoteDevice device, IRMode mode, IRSensitivity irSensitivity) { device.irMode = mode; UnityEngine.Debug.Log("Sync1"); byte[] mBuff = new byte[REPORT_LENGTH]; mBuff[0] = (byte)OutputReport.IR; mBuff[1] = (byte)(0x04 | device.RumbleBit); _hidInterface.Write(mBuff, device.ID); UnityEngine.Debug.Log("Sync2"); Array.Clear(mBuff, 0, mBuff.Length); mBuff = new byte[REPORT_LENGTH]; mBuff[0] = (byte)OutputReport.IR2; mBuff[1] = (byte)(0x04 | device.RumbleBit); _hidInterface.Write(mBuff, device.ID); UnityEngine.Debug.Log("Sync3"); WriteMemory(device, REGISTER_IR, 0x08); UnityEngine.Debug.Log("Sync2x"); setSensitivity(device,irSensitivity); UnityEngine.Debug.Log("Sync4"); WriteMemory(device, REGISTER_IR_MODE, (byte)mode); UnityEngine.Debug.Log("Sync5"); WriteMemory(device, REGISTER_IR, 0x08); }
/// <summary> /// Set Wiimote reporting mode /// </summary> /// <param name="type">Report type</param> /// <param name="irSensitivity">IR sensitivity</param> /// <param name="continuous">Continuous data</param> public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { // only 1 report type allowed for the BB //if (mWiimoteState.ExtensionType == ExtensionType.BalanceBoard) // type = InputReport.ButtonsExt19; DataReportAttribute dataReport = EnumInfo <InputReport> .TryGetAttribute <DataReportAttribute>(type); if (dataReport == null) { throw new WiimoteException($"{type} is not a valid report type!"); } int irSize = dataReport.IRSize; if (dataReport.IsInterleaved) { irSize *= 2; } switch (dataReport.IRSize) { case 10: EnableIR(IRMode.Basic, irSensitivity); break; case 12: EnableIR(IRMode.Extended, irSensitivity); break; case 36: EnableIR(IRMode.Full, irSensitivity); break; default: DisableIR(); break; } /*switch (type) { * case InputReport.ButtonsAccelIR12: * EnableIR(IRMode.Extended, irSensitivity); * break; * case InputReport.ButtonsAccelIR10Ext6: * EnableIR(IRMode.Basic, irSensitivity); * break; * default: * DisableIR(); * break; * }*/ /*byte[] buff = CreateReport(); * buff[0] = (byte) OutputReport.DataReportType; * buff[1] = (byte) ((continuous ? 0x04 : 0x00) | GetRumbleBit()); * buff[2] = (byte) type;*/ byte[] buff = CreateReport(); buff[0] = (byte)((continuous ? 0x04 : 0x00) | GetRumbleBit()); buff[1] = (byte)type; WriteReport2(OutputReport.DataReportType, buff); }
private void EnableIR(IRMode mode, IRSensitivity Sensitivity) { _WiiMoteState.IRState.Mode = mode; ClearReport(); _Buff[0] = (byte)OutputReport.IR; _Buff[1] = (byte)(0x04 | RumbleBit); CHIDAPI.Write(_Handle, _Buff); Thread.Sleep(50); ClearReport(); _Buff[0] = (byte)OutputReport.IR2; _Buff[1] = (byte)(0x04 | RumbleBit); CHIDAPI.Write(_Handle, _Buff); Thread.Sleep(50); WriteData(REGISTER_IR, 0x08); Thread.Sleep(50); switch (Sensitivity) { case IRSensitivity.Level1: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe }); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0xfd, 0x05 }); break; case IRSensitivity.Level2: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4 }); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0xb3, 0x04 }); break; case IRSensitivity.Level3: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64 }); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x63, 0x03 }); break; case IRSensitivity.Level4: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36 }); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x35, 0x03 }); break; case IRSensitivity.Level5: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20 }); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x1, 0x03 }); break; case IRSensitivity.Max: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x41 }); Thread.Sleep(50); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x40, 0x00 }); break; } Thread.Sleep(50); WriteData(REGISTER_IR_MODE, (byte)mode); Thread.Sleep(50); WriteData(REGISTER_IR, 0x08); Thread.Sleep(50); }
private void EnableIR(IRMode mode, IRSensitivity irSensitivity) { this.mWiimoteState.IRState.Mode = mode; this.ClearReport(); this.mBuff[0] = 19; this.mBuff[1] = (byte)(4 | this.GetRumbleBit()); this.WriteReport(); this.ClearReport(); this.mBuff[0] = 26; this.mBuff[1] = (byte)(4 | this.GetRumbleBit()); this.WriteReport(); this.WriteData(78643248, 8); switch (irSensitivity) { case IRSensitivity.WiiLevel1: this.WriteData(78643200, 9, new byte[] { 2, 0, 0, 113, 1, 0, 100, 0, 254 }); this.WriteData(78643226, 2, new byte[] { 253, 5 }); break; case IRSensitivity.WiiLevel2: this.WriteData(78643200, 9, new byte[] { 2, 0, 0, 113, 1, 0, 150, 0, 180 }); this.WriteData(78643226, 2, new byte[] { 179, 4 }); break; case IRSensitivity.WiiLevel3: this.WriteData(78643200, 9, new byte[] { 2, 0, 0, 113, 1, 0, 170, 0, 100 }); this.WriteData(78643226, 2, new byte[] { 99, 3 }); break; case IRSensitivity.WiiLevel4: this.WriteData(78643200, 9, new byte[] { 2, 0, 0, 113, 1, 0, 200, 0, 54 }); this.WriteData(78643226, 2, new byte[] { 53, 3 }); break; case IRSensitivity.WiiLevel5: this.WriteData(78643200, 9, new byte[] { 7, 0, 0, 113, 1, 0, 114, 0, 32 }); this.WriteData(78643226, 2, new byte[] { 1, 3 }); break; case IRSensitivity.Maximum: { this.WriteData(78643200, 9, new byte[] { 2, 0, 0, 113, 1, 0, 144, 0, 65 }); int arg_215_1 = 78643226; byte arg_215_2 = 2; byte[] array = new byte[2]; array[0] = 64; this.WriteData(arg_215_1, arg_215_2, array); break; } default: throw new ArgumentOutOfRangeException("irSensitivity"); } this.WriteData(78643251, (byte)mode); this.WriteData(78643248, 8); }
public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { long token1 = -1541405694; if (this.mWiimoteState.ExtensionType == (ExtensionType)((ulong)token1)) { type = InputReport.ButtonsExtension; } InputReport inputReport = type; if (inputReport != InputReport.IRAccel) { if (inputReport != InputReport.IRExtensionAccel) { this.DisableIR(); } else { this.EnableIR(IRMode.Basic, irSensitivity); } } else { this.EnableIR(IRMode.Extended, irSensitivity); } this.ClearReport(); this.mBuff[0] = 18; this.mBuff[1] = (byte)((continuous ? 4 : 0) | (this.mWiimoteState.Rumble ? 1 : 0)); this.mBuff[2] = (byte)type; this.WriteReport(); }
void setSensitivity(WiimoteDevice device, IRSensitivity irSensitivity) { switch (irSensitivity) { case IRSensitivity.WiiLevel1: WriteMemory(device, REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe }); WriteMemory(device, REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0xfd, 0x05 }); break; case IRSensitivity.WiiLevel2: WriteMemory(device, REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4 }); WriteMemory(device, REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0xb3, 0x04 }); break; case IRSensitivity.WiiLevel3: WriteMemory(device, REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64 }); WriteMemory(device, REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x63, 0x03 }); break; case IRSensitivity.WiiLevel4: WriteMemory(device, REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36 }); WriteMemory(device, REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x35, 0x03 }); break; case IRSensitivity.WiiLevel5: WriteMemory(device, REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20 }); WriteMemory(device, REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x1, 0x03 }); break; case IRSensitivity.Maximum: UnityEngine.Debug.Log("Sync2x1"); WriteMemory(device, REGISTER_IR_SENSITIVITY_1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x90, 0x00, 0x41 }); UnityEngine.Debug.Log("Sync2x2"); WriteMemory(device, REGISTER_IR_SENSITIVITY_2, 2, new byte[] { 0x40, 0x00 }); break; default: throw new ArgumentOutOfRangeException("irSensitivity"); } }
/// <summary> /// Set Wiimote reporting mode /// </summary> /// <param name="type">Report type</param> /// <param name="irSensitivity">IR sensitivity</param> /// <param name="continuous">Continuous data</param> public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { switch(type) { case InputReport.IRAccel: EnableIR(IRMode.Extended, irSensitivity); break; case InputReport.IRExtensionAccel: EnableIR(IRMode.Basic, irSensitivity); break; default: DisableIR(); break; } ClearReport(); mBuff[0] = (byte)OutputReport.Type; mBuff[1] = (byte)((continuous ? 0x04 : 0x00) | (byte)(mWiimoteState.Rumble ? 0x01 : 0x00)); mBuff[2] = (byte)type; WriteReport(); }
/// <summary> /// Turn on the IR sensor /// </summary> /// <param name="mode">The data report mode</param> /// <param name="irSensitivity">IR sensitivity</param> private void EnableIR(IRMode mode, IRSensitivity irSensitivity) { mWiimoteState.IRState.Mode = mode; ClearReport(); mBuff[0] = (byte)OutputReport.IR; mBuff[1] = (byte)(0x04 | GetRumbleBit()); WriteReport(); ClearReport(); mBuff[0] = (byte)OutputReport.IR2; mBuff[1] = (byte)(0x04 | GetRumbleBit()); WriteReport(); WriteData(REGISTER_IR, 0x08); switch(irSensitivity) { case IRSensitivity.WiiLevel1: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe}); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0xfd, 0x05}); break; case IRSensitivity.WiiLevel2: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4}); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0xb3, 0x04}); break; case IRSensitivity.WiiLevel3: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64}); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x63, 0x03}); break; case IRSensitivity.WiiLevel4: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36}); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x35, 0x03}); break; case IRSensitivity.WiiLevel5: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20}); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x1, 0x03}); break; case IRSensitivity.Maximum: WriteData(REGISTER_IR_SENSITIVITY_1, 9, new byte[] {0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x90, 0x00, 0x41}); WriteData(REGISTER_IR_SENSITIVITY_2, 2, new byte[] {0x40, 0x00}); break; default: throw new ArgumentOutOfRangeException("irSensitivity"); } WriteData(REGISTER_IR_MODE, (byte)mode); WriteData(REGISTER_IR, 0x08); }
/// <summary> /// Turn on the IR sensor /// </summary> /// <param name="mode">The data report mode</param> /// <param name="irSensitivity">IR sensitivity</param> private void EnableIR(IRMode mode, IRSensitivity irSensitivity) { mWiimoteState.Status.IREnabled = true; mWiimoteState.IRState.Mode = mode; /*byte[] buff = CreateReport(); * buff[0] = (byte) OutputReport.IR1; * buff[1] = (byte) (0x04 | GetRumbleBit()); * WriteReport(buff); * * Array.Clear(buff, 0, buff.Length); * buff[0] = (byte) OutputReport.IR2; * buff[1] = (byte) (0x04 | GetRumbleBit()); * WriteReport(buff);*/ byte[] buff = CreateReport2(); buff[0] = (byte)(0x04 | GetRumbleBit()); WriteReport2(OutputReport.IR1, buff); Array.Clear(buff, 0, buff.Length); buff[0] = (byte)(0x04 | GetRumbleBit()); WriteReport2(OutputReport.IR2, buff); WriteData(Registers.IR, 0x08); switch (irSensitivity) { case IRSensitivity.WiiLevel1: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x64, 0x00, 0xfe }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0xfd, 0x05 }); break; case IRSensitivity.WiiLevel2: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x96, 0x00, 0xb4 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0xb3, 0x04 }); break; case IRSensitivity.WiiLevel3: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xaa, 0x00, 0x64 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x63, 0x03 }); break; case IRSensitivity.WiiLevel4: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0xc8, 0x00, 0x36 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x35, 0x03 }); break; case IRSensitivity.WiiLevel5: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x07, 0x00, 0x00, 0x71, 0x01, 0x00, 0x72, 0x00, 0x20 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x1, 0x03 }); break; case IRSensitivity.Maximum: WriteData(Registers.IRSensitivity1, 9, new byte[] { 0x02, 0x00, 0x00, 0x71, 0x01, 0x00, 0x90, 0x00, 0x41 }); WriteData(Registers.IRSensitivity2, 2, new byte[] { 0x40, 0x00 }); break; default: throw new ArgumentOutOfRangeException("irSensitivity"); } WriteData(Registers.IRMode, (byte)mode); WriteData(Registers.IR, 0x08); }
public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous) { if (!_Connected) return; switch (type) { case InputReport.IRAccel: EnableIR(IRMode.Extended, irSensitivity); break; default: DisableIR(); break; } ClearReport(); _Buff[0] = (byte)OutputReport.Type; _Buff[1] = (byte)((continuous ? 0x04 : 0x00) | (byte)(_WiiMoteState.Rumble ? 0x01 : 0x00)); _Buff[2] = (byte)type; CHIDAPI.Write(_Handle, _Buff); }
/// <summary> /// Set Wiimote reporting mode /// </summary> /// <param name="type">Report type</param> /// <param name="irSensitivity">IR sensitivity</param> /// <param name="continuous">Continuous data</param> void SetReportType(WiimoteDevice device, InputReport type, IRSensitivity irSensitivity, bool continuous) { switch (type) { case InputReport.ButtonsIRAccel: EnableIR(device, IRMode.Extended, irSensitivity); break; case InputReport.ButtonsIRExtensionAccel: EnableIR(device, IRMode.Basic, irSensitivity); break; default: DisableIR(device); break; } UnityEngine.Debug.Log("SyncType"); byte[] mBuff = new byte[REPORT_LENGTH]; mBuff[0] = (byte)OutputReport.Type; // mBuff[1] = (byte)((continuous ? 0x04 : 0x00) | (byte)(mWiimoteState.Rumble ? 0x01 : 0x00)); mBuff[1] = (byte)((continuous ? (uint)0x04 : (uint)0x00) | (uint)device.RumbleBit); mBuff[2] = (byte)type; _hidInterface.Write(mBuff, device.ID); }