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); }
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); }
public bool IsClassicControllerButtonPressed(ClassicControllerButtons classicControllerButtons) { UInt16 value = (UInt16)classicControllerButtons; return (data.classic_controller.buttons & value) == value; }