Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #4
0
        /// <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;
        }
Beispiel #5
0
        /// <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();
        }
Beispiel #7
0
 public void SetReportType(InputReport type, IRSensitivity irSensitivity, bool continuous)
 {
     throw new NotImplementedException();
 }
Beispiel #8
0
		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);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
 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);
 }
Beispiel #13
0
 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");
            }




          


        }
Beispiel #15
0
        /// <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();
        }
Beispiel #16
0
        /// <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);
        }
Beispiel #18
0
        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);
        }