Example #1
0
        public bool IsClassicControllerButtonPressed(ClassicControllerButtons classicControllerButtons)
        {
            UInt16 value = (UInt16)classicControllerButtons;
            UInt16 orig  = (UInt16)ClassicController.Buttons;

            return((orig & value) == value);
        }
        protected void ParseExtensionData(byte[] buffer, int offset, int count)
        {
            for (int i = offset; i < offset + count; i++)
            {
                buffer[i] = (byte)((buffer[i] ^ 0x17) + 0x17 & 0xFF);
            }

            // 6 bits, so values range from 0 to 63
            _LeftStick.Raw.X = (byte)(buffer[offset + 0] & 0x3f);
            _LeftStick.Raw.Y = (byte)(buffer[offset + 1] & 0x3f);
            _LeftStick.Calibration.Calibrate(_LeftStick.Raw, _LeftStick.Calibrated);

            // 5 bits are scattered across 3 bytes for the x axis, values range from 0 to 31
            _RightStick.Raw.X = (byte)(((buffer[offset + 0] & 0xc0) >> 3) | ((buffer[offset + 1] & 0xc0) >> 5) | (buffer[offset + 2] >> 7));
            _RightStick.Raw.Y = (byte)(buffer[offset + 2] & 0x1f);
            _RightStick.Calibration.Calibrate(_RightStick.Raw, _RightStick.Calibrated);

            // 5 bits scattered across 2 bytes for the left trigger, values range from 0 to 31
            _LeftTrigger  = (byte)(((buffer[offset + 2] & 0x60) >> 2) | (buffer[offset + 3] >> 5));
            _RightTrigger = (byte)(buffer[offset + 3] & 0x1f);

            // buttons are pressed when values are zero
            // therefore if the bit equals one (not equals zero) the button is not pressed
            _Buttons =
                ((buffer[offset + 4] & 2) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.RT) |
                ((buffer[offset + 4] & 4) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Plus) |
                ((buffer[offset + 4] & 8) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Home) |
                ((buffer[offset + 4] & 16) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Minus) |
                ((buffer[offset + 4] & 32) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.LT) |
                ((buffer[offset + 4] & 64) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Down) |
                ((buffer[offset + 4] & 128) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Right) |

                ((buffer[offset + 5] & 1) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Up) |
                ((buffer[offset + 5] & 2) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Left) |
                ((buffer[offset + 5] & 4) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.ZR) |
                ((buffer[offset + 5] & 8) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.X) |
                ((buffer[offset + 5] & 16) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.A) |
                ((buffer[offset + 5] & 32) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Y) |
                ((buffer[offset + 5] & 64) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.B) |
                ((buffer[offset + 5] & 128) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.ZL);
        }
Example #3
0
 public bool button_down(ClassicControllerButtons b)
 {
     return(data.IsClassicControllerButtonPressed(b));
 }
        protected void ParseExtensionData(byte[] buffer, int offset, int count)
        {
            for (int i = offset; i < offset + count; i++)
            {
                buffer[i] = (byte)((buffer[i] ^ 0x17) + 0x17 & 0xFF);
            }

            // 6 bits, so values range from 0 to 63
            _LeftStick.Raw.X = (byte)(buffer[offset + 0] & 0x3f);
            _LeftStick.Raw.Y = (byte)(buffer[offset + 1] & 0x3f);
            _LeftStick.Calibration.Calibrate(_LeftStick.Raw, _LeftStick.Calibrated);

            // 5 bits are scattered across 3 bytes for the x axis, values range from 0 to 31
            _RightStick.Raw.X = (byte)(((buffer[offset + 0] & 0xc0) >> 3 ) | ((buffer[offset + 1] & 0xc0) >> 5) | (buffer[offset + 2] >> 7));
            _RightStick.Raw.Y = (byte)(buffer[offset + 2] & 0x1f);
            _RightStick.Calibration.Calibrate(_RightStick.Raw, _RightStick.Calibrated);

            // 5 bits scattered across 2 bytes for the left trigger, values range from 0 to 31
            _LeftTrigger = (byte)(((buffer[offset + 2] & 0x60) >> 2) | (buffer[offset + 3] >> 5));
            _RightTrigger = (byte)(buffer[offset + 3] & 0x1f);

            // buttons are pressed when values are zero
            // therefore if the bit equals one (not equals zero) the button is not pressed
            _Buttons =
                ((buffer[offset + 4] & 2) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.RT) |
                ((buffer[offset + 4] & 4) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Plus) |
                ((buffer[offset + 4] & 8) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Home) |
                ((buffer[offset + 4] & 16) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Minus) |
                ((buffer[offset + 4] & 32) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.LT) |
                ((buffer[offset + 4] & 64) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Down) |
                ((buffer[offset + 4] & 128) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Right) |

                ((buffer[offset + 5] & 1) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Up) |
                ((buffer[offset + 5] & 2) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Left) |
                ((buffer[offset + 5] & 4) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.ZR) |
                ((buffer[offset + 5] & 8) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.X) |
                ((buffer[offset + 5] & 16) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.A) |
                ((buffer[offset + 5] & 32) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.Y) |
                ((buffer[offset + 5] & 64) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.B) |
                ((buffer[offset + 5] & 128) != 0 ? ClassicControllerButtons.None : ClassicControllerButtons.ZL);
        }
Example #5
0
 public bool IsClassicControllerButtonPressed(ClassicControllerButtons classicControllerButtons)
 {
     UInt16 value = (UInt16)classicControllerButtons;
     return (data.classic_controller.buttons & value) == value;
 }