private void InitJoystick() { lock (lockObj) { // Verify the vJoy driver is enabled. if (!VirtualJoystick.vJoyEnabled()) { throw new VJoyNotEnabledException("vJoy is not enabled! Please install and enable vJoy!"); } // Get the state of the requested device. VjdStat Status = VirtualJoystick.GetVJDStatus(JoystickID); switch (Status) { case VjdStat.VJD_STAT_OWN: case VjdStat.VJD_STAT_FREE: break; case VjdStat.VJD_STAT_BUSY: case VjdStat.VJD_STAT_MISS: default: throw new VJoyAccessException("Cannot access vJoy! Code: " + Status.ToString()); } ; // Acquire the target joystick. if (!VirtualJoystick.AcquireVJD(JoystickID)) { throw new VJoyAcquisitionException("Could not acquire vJoy with ID: " + JoystickID.ToString()); } // Open the Stream Deck device. try { Deck = StreamDeck.OpenDevice(); } catch (Exception ex) { //Catch the internal StreamDeck error and handle it our way. Deck = null; #if DEBUG Console.WriteLine(ex.ToString()); #endif } if (Deck == null || !Deck.IsConnected) { throw new StreamDeckAccessException("Stream Deck could not be opened!"); } // Set the brightness of the keys. Deck.SetBrightness(100); // Register the key pressed event handler. Deck.KeyStateChanged += StreamDeckKeyPressed; } ReloadButtonImages(); }
readonly long BUTTON_FILTER = 0; // Ignore new button presses less than this (ms) public AxisProcessor(int axisSensitivity, OutputAxis outputAxis) { Debug.WriteLine("Multiplier is {0}", axisSensitivity); _sensitivity = axisSensitivity; _vJoyId = outputAxis.VJoyDevice; _vJoyAxisNumber = outputAxis.VJoyItem; _joystick = new vJoy(); if (!_joystick.vJoyEnabled()) { Debug.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); } else { Debug.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", _joystick.GetvJoyManufacturerString(), _joystick.GetvJoyProductString(), _joystick.GetvJoySerialNumberString()); } // Acquire the target (Not currently used really...) VjdStat status = _joystick.GetVJDStatus(_vJoyId); Debug.WriteLine("vJoy Status: " + status.ToString()); if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_vJoyId)))) { Debug.WriteLine("Failed to acquire vJoy device number {0}.", _vJoyId); } _joystick.GetVJDAxisMax(_vJoyId, (HID_USAGES)_vJoyAxisNumber, ref _maxAxisValue); Debug.WriteLine("Max value of VJID {0} axis {1} is {2}", _vJoyId, (HID_USAGES)_vJoyAxisNumber, _maxAxisValue); Centre(); }
public EncoderAxisProcessor(int encoderPPR, float revsInPerRevsOut, OutputAxis outputAxis) { _vJoyId = outputAxis.VJoyDevice; _vJoyAxisNumber = outputAxis.VJoyItem; _joystick = new vJoy(); if (!_joystick.vJoyEnabled()) { Debug.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); } else { Debug.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", _joystick.GetvJoyManufacturerString(), _joystick.GetvJoyProductString(), _joystick.GetvJoySerialNumberString()); } // Acquire the target (Not currently used really...) VjdStat status = _joystick.GetVJDStatus(_vJoyId); Debug.WriteLine("vJoy Status: " + status.ToString()); if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_vJoyId)))) { Debug.WriteLine("Failed to acquire vJoy device number {0}.", _vJoyId); } _joystick.GetVJDAxisMax(_vJoyId, (HID_USAGES)_vJoyAxisNumber, ref _maxAxisValue); Debug.WriteLine("Max value of VJID {0} axis {1} is {2}", _vJoyId, (HID_USAGES)_vJoyAxisNumber, _maxAxisValue); Centre(); // Calculate how much to move the output by for each input pulse Debug.WriteLine("Encoder PPR is {0} and Revs In per Out is {1}", encoderPPR, revsInPerRevsOut); float outputRevolutionSize = _maxAxisValue / revsInPerRevsOut; encoderPPR *= 4; // I think I can get 4x the resolution out of the encoder using the tranistions between pulses Debug.WriteLine("Modifying Encoder PPR to {0}", encoderPPR); _outputIncrement = (int)(outputRevolutionSize / encoderPPR); Debug.WriteLine("Output Increment calculated as {0}", _outputIncrement); }
public void Evaluate(int SpreadMax) { if (init) { VJInstance = new vJoy(); VJState = new vJoy.JoystickState(); if (!VJInstance.vJoyEnabled()) { FEnabled[0] = false; return; } Status = VJInstance.GetVJDStatus(FID[0]); FStatus[0] = Status.ToString(); ButtonCount = VJInstance.GetVJDButtonNumber(FID[0]); PovCount = VJInstance.GetVJDContPovNumber(FID[0]); if (Status != VjdStat.VJD_STAT_FREE && Status != VjdStat.VJD_STAT_OWN) { return; } if (!VJInstance.AcquireVJD(FID[0])) { return; } Axes = new[] { HID_USAGES.HID_USAGE_X, HID_USAGES.HID_USAGE_Y, HID_USAGES.HID_USAGE_Z, HID_USAGES.HID_USAGE_RX, HID_USAGES.HID_USAGE_RY, HID_USAGES.HID_USAGE_RZ, HID_USAGES.HID_USAGE_SL0, HID_USAGES.HID_USAGE_SL1, HID_USAGES.HID_USAGE_WHL, HID_USAGES.HID_USAGE_ACCELERATOR, HID_USAGES.HID_USAGE_BRAKE, HID_USAGES.HID_USAGE_CLUTCH, HID_USAGES.HID_USAGE_STEERING, HID_USAGES.HID_USAGE_AILERON, HID_USAGES.HID_USAGE_RUDDER, HID_USAGES.HID_USAGE_THROTTLE }; FAxisPresent.SliceCount = Axes.Length; AxisMaxVal = new long[Axes.Length]; AxisMinVal = new long[Axes.Length]; for (int i = 0; i < Axes.Length; i++) { FAxisPresent[i] = VJInstance.GetVJDAxisExist(FID[0], Axes[i]); if (FAxisPresent[i]) { long minv = 0, maxv = 0; VJInstance.GetVJDAxisMin(FID[0], Axes[i], ref minv); VJInstance.GetVJDAxisMax(FID[0], Axes[i], ref maxv); AxisMinVal[i] = minv; AxisMaxVal[i] = maxv; } } init = false; } FEnabled[0] = true; FStatus[0] = Status.ToString(); for (int i = 0; i < Math.Min(FAxesIn.SliceCount, Axes.Length); i++) { if (FAxisPresent[i]) { VJInstance.SetAxis( (int)(FAxesIn[i] * AxisMaxVal[i] + (1 - FAxesIn[i]) * AxisMinVal[i]), FID[0], Axes[i]); } } for (int i = 0; i < Math.Min(FButtonsIn.SliceCount, ButtonCount); i++) { VJInstance.SetBtn(FButtonsIn[i], FID[0], (uint)i + 1); } for (int i = 0; i < Math.Min(FPovPosIn.SliceCount, PovCount); i++) { if (!FPovSetIn[i]) { VJInstance.SetContPov(-1, FID[0], (uint)i + 1); } else { VJInstance.SetContPov((int)(FPovPosIn[i] * 35999), FID[0], (uint)i + 1); } } }