public JoystickHelper() { keys = new Keys(); joystick = new vJoy(); iReport = new vJoy.JoystickState(); long lAxisMax = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref lAxisMax); axisMax = (int)lAxisMax; string error = null; int nDevices = 0; for (uint i = 1; i <= 16; i++) { if ((error = vjoyhelper.setup(joystick, i)) != null) { // Assume no more devices are set up correctly break; } nDevices++; } for (int i = 1; i <= nDevices; i++) { availJoy.Add(i); } numberOfDevices = nDevices; }
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(); }
private void initAxis(HID_USAGES axis) { long maxval = 0; long minval = 0; joystick.GetVJDAxisMax(id, axis, ref maxval); joystick.GetVJDAxisMin(id, axis, ref minval); setAxis(axis, (int)(maxval - minval) / 2); }
public long GetMaxForAxis(HID_USAGES Axis) { long maxval = 0; if (bDeviceAcquired) { m_joystick.GetVJDAxisMax(m_vJoyID, Axis, ref maxval); } return(maxval); }
private void Button1_Click(object sender, EventArgs e) { //System.Diagnostics.Debug.Print("breakpoint passed"); System.Diagnostics.Debug.Print(": serial.IsOpen == " + serial.IsOpen.ToString()); long minax = 0, maxax = 0; //joy.AcquireVJD((uint)joyIDSelector.Value); joy.GetVJDAxisMin((uint)joyIDSelector.Value, HID_USAGES.HID_USAGE_X, ref minax); joy.GetVJDAxisMax((uint)joyIDSelector.Value, HID_USAGES.HID_USAGE_X, ref maxax); //joy.RelinquishVJD((uint)joyIDSelector.Value); System.Diagnostics.Debug.Print("x axis min == " + minax + ", max == " + maxax); }
IEnumerator Simulation() { controller.SetPolicy(Controller.PolicyFlag.POLICY_BACKGROUND_FRAMES); controller.SetPolicyFlags(Controller.PolicyFlag.POLICY_BACKGROUND_FRAMES); controller.AddListener(listener); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); //uint count = 0; long maxval = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); AxisMax = (int)maxval; AxisZero = AxisMax / 2; int AxisX = AxisZero; int AxisY = AxisZero; int AxisZ = AxisZero; int AxisZR = AxisZero; int AxisXR = AxisZero; AxisReset(); Vector3 OldPosition = Tool.transform.localPosition; while (true) { Vector3 pos = Tool.transform.localPosition; if (Mathf.Abs(OldPosition.sqrMagnitude - pos.sqrMagnitude) > 0.0001f) { AxisX = pos.x > 0 ? AxisPositive(pos.x, JoyConfig.Config.MaxPosition.x, JoyConfig.Config.Deadband.x) : AxisNegative(pos.x, JoyConfig.Config.MinPosition.x, -JoyConfig.Config.Deadband.x); AxisZ = pos.y > 0 ? AxisPositive(pos.y, JoyConfig.Config.MaxPosition.y, JoyConfig.Config.Deadband.y) : AxisNegative(pos.y, JoyConfig.Config.MinPosition.y, -JoyConfig.Config.Deadband.y); AxisY = pos.z > 0 ? AxisPositive(pos.z, JoyConfig.Config.MaxPosition.z, JoyConfig.Config.Deadband.z) : AxisNegative(pos.z, JoyConfig.Config.MinPosition.z, -JoyConfig.Config.Deadband.z); joystick.SetAxis(AxisX, id, HID_USAGES.HID_USAGE_X); joystick.SetAxis(AxisY, id, HID_USAGES.HID_USAGE_Y); joystick.SetAxis(AxisZ, id, HID_USAGES.HID_USAGE_Z); OldPosition = Tool.transform.localPosition; } ScreenLog.JLog.LinkString("AxisX = " + (float)AxisX / AxisMax); ScreenLog.JLog.LinkString("AxisY = " + (float)AxisY / AxisMax); ScreenLog.JLog.LinkString("AxisZ = " + (float)AxisZ / AxisMax); yield return(new WaitForFixedUpdate()); } }
private void ConnectToVirtualJoystick() { joystick = new vJoy(); if (!joystick.vJoyEnabled()) throw new Exception("Unable to connect to virtual joystick"); VjdStat joystickStatus = joystick.GetVJDStatus(JoystickId); if (joystickStatus != VjdStat.VJD_STAT_FREE) throw new Exception("State of Joystick is not free"); if (!joystick.AcquireVJD(JoystickId)) throw new Exception("Unable to acquire joystick"); joystick.GetVJDAxisMax(JoystickId, HID_USAGES.HID_USAGE_X, ref maxValue); joystick.ResetVJD(JoystickId); inputMultiplyer = maxValue / (maxDirectionVectorValue * 2d); // Max direction value }
int ConvertAxisRatioToAxisInt(float axisRatio, HID_USAGES hid) { long min = 0, max = 0; var gotMin = vjoy.GetVJDAxisMin(deviceId, HID_USAGES.HID_USAGE_X, ref min); var gotMax = vjoy.GetVJDAxisMax(deviceId, HID_USAGES.HID_USAGE_X, ref max); if (!gotMin || !gotMax) { Debug.LogWarningFormat("Error getting min/max of HID axis {0}", hid.ToString()); return(0); } // Get an absolute ratio where 0 is -Max, .5 is 0, and 1 is +Max float absRatio = axisRatio / 2f + .5f; long range = max - min; return((int)((long)(range * absRatio) + min)); }
/// <summary>Scale value m from any reference scale to the HID axis scale.</summary> /// <param name="m">the value to scale</param> /// <param name="hid">the HID axis type</param> /// <param name="rMin">minimum value of reference scale</param> /// <param name="rMax">maximum value of reference scale</param> private int ScaleAxis(float m, HID_USAGES hid, float rMin, float rMax) { // target range long tMin = 0, tMax = 0; // todo: no reason to keep requesting the min max, make these constants var gotMin = vjoy.GetVJDAxisMin(deviceId, hid, ref tMin); var gotMax = vjoy.GetVJDAxisMax(deviceId, hid, ref tMax); if (!gotMin || !gotMax) { Debug.LogWarning($"Error getting min/max of HID axis {hid}"); return(0); } // scale m to target scale var result = (m - rMin) / (rMax - rMin) * (tMax - tMin) + tMin; return((int)result); }
public vJoyHelper(USBHelper usb) { _joystick = new vJoy(); bool tmp = _joystick.vJoyEnabled(); _jState = new vJoy.JoystickState(); _joystick.AcquireVJD(1); _joystick.ResetVJD(1); _maxVal = 0; _axisAry = new Dictionary <HID_USAGES, bool>(); foreach (HID_USAGES hidUsage in Enum.GetValues(typeof(HID_USAGES))) { _axisAry.Add(hidUsage, _joystick.GetVJDAxisExist(1, hidUsage)); } _joystick.GetVJDAxisMax(1, HID_USAGES.HID_USAGE_X, ref _maxVal); _usb = usb; usb.Polled += new EventHandler(OnUSBPolled); }
private xState[] m_hasBtn = new xState[1 + 128]; // [0] is not used private xState GetState(HID_USAGES usage, int pindex = 0) { var ret = new xState { usage = usage, current = 0 }; if (usage == HID_USAGES.HID_USAGE_POV) { ret.has = (pindex > 0 && pindex <= m_nPov); ret.pindex = pindex; ret.current = (int)POVType.Nil; } else if (usage == HID_USAGES.HID_USAGE_WHL) // button { ret.has = (pindex > 0 && pindex <= m_nPov); ret.pindex = pindex; ret.current = 0; // == false... } else { ret.has = m_joy.GetVJDAxisExist(Index, usage); if (ret.has) { long val = 0; if (m_joy.GetVJDAxisMin(Index, usage, ref val)) { ret.min = (int)val; } if (m_joy.GetVJDAxisMax(Index, usage, ref val)) { ret.max = (int)val; } ret.range = (double)(ret.max - ret.min) / xState.MAXOUT; } } return(ret); }
private void SetGamepadItem(byte[] values, int index, GamepadConfigurationItem config) { double value = values[index]; if (config.Type == GamepadItemType.Axis) { long maxAxisValue = 0; var targetAxis = config.TargetUsage ?? HID_USAGES.HID_USAGE_X; _vJoy.GetVJDAxisMax(_gamepadId, targetAxis, ref maxAxisValue); value = NormalizeAxis((byte)value, config.ConvertAxis ?? false); if (config.InvertAxis ?? false) { value = InvertNormalizedAxis(value); } _vJoy.SetAxis((int)(value * maxAxisValue), _gamepadId, targetAxis); } else if (config.Type == GamepadItemType.Button) { _vJoy.SetBtn(ConvertToButtonState((byte)value), _gamepadId, config.TargetButtonId ?? 0); } }
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); }
private void FeederForm_Load(object sender, EventArgs e) { r = new Random(DateTime.Now.Millisecond); DiscPovNumber = joystick.GetVJDDiscPovNumber(id); ContPovNumber = joystick.GetVJDContPovNumber(id); joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); // Reset this device to default values joystick.ResetVJD(id); X = 20; Y = 30; Z = 40; XR = 60; ZR = 80; cPitch = cRoll = cYaw = 0.5; desPitch = desRoll = desYaw = 0.5; cThr = 0; desThr = 0; cConv = 0; state = ERAState.Disarmed; label2.Text = "НЕ ВЗВЕДЕНО"; joystick.SetBtn(false, id, 1); pParam = 2; waitTime = 1.5; }
public void Init(MainForm parent) { mainForm = parent; ClearDevices(); // Create one joystick object and a position structure. input = new DirectInput(); joystick = new vJoy(); iReport = new vJoy.JoystickState(); vjoyEnabled = false; // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { MessageBox.Show("vJoy driver not enabled: Failed Getting vJoy attributes.\n", "Error"); return; } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: case VjdStat.VJD_STAT_FREE: break; case VjdStat.VJD_STAT_BUSY: MessageBox.Show("vJoy Device is already owned by another feeder. Cannot continue", "Error"); return; case VjdStat.VJD_STAT_MISS: MessageBox.Show("vJoy Device is not installed or disabled. Cannot continue", "Error"); return; default: MessageBox.Show("vJoy Device general error. Cannot continue", "Error"); return; } ; // Make sure all needed axes and buttons are supported bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); if (!AxisX || !AxisY || !AxisRX || !AxisRZ || nButtons < 28 || ContPovNumber < 3) { MessageBox.Show("vJoy Device is not configured correctly. Must have X,Y,Rx,Ry analog axis, 28 buttons and 3 Analog POVs. Cannot continue\n", "Error"); return; } if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { MessageBox.Show("Failed to acquire vJoy device number", "Error"); return; } long maxval = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); axisScale = (double)maxval / 65536.0; mainForm.LblVjoyStat.Text = "Found. Ver: " + joystick.GetvJoySerialNumberString(); vjoyEnabled = true; }
public VJoyGlobalHolder(uint index) { Index = index; Global = new VJoyGlobal(this); setPressedStrategy = new SetPressedStrategy(b => SetButton(b, true), b => SetButton(b, false)); joystick = new vJoy(); if (index < 1 || index > 16) { throw new ArgumentException(string.Format("Illegal joystick device id: {0}", index)); } if (!joystick.vJoyEnabled()) { throw new Exception("vJoy driver not enabled: Failed Getting vJoy attributes"); } uint apiVersion = 0; uint driverVersion = 0; bool match = joystick.DriverMatch(ref apiVersion, ref driverVersion); if (!match) { Console.WriteLine("vJoy version of Driver ({0:X}) does NOT match DLL Version ({1:X})", driverVersion, apiVersion); } Version = new VjoyVersionGlobal(apiVersion, driverVersion); var status = joystick.GetVJDStatus(index); string error = null; switch (status) { case VjdStat.VJD_STAT_BUSY: error = "vJoy Device {0} is already owned by another feeder"; break; case VjdStat.VJD_STAT_MISS: error = "vJoy Device {0} is not installed or disabled"; break; case VjdStat.VJD_STAT_UNKN: error = ("vJoy Device {0} general error"); break; } if (error == null && !joystick.AcquireVJD(index)) { error = "Failed to acquire vJoy device number {0}"; } if (error != null) { throw new Exception(string.Format(error, index)); } long max = 0; joystick.GetVJDAxisMax(index, HID_USAGES.HID_USAGE_X, ref max); AxisMax = (int)max / 2 - 1; enabledAxis = new Dictionary <HID_USAGES, bool>(); foreach (HID_USAGES axis in Enum.GetValues(typeof(HID_USAGES))) { enabledAxis[axis] = joystick.GetVJDAxisExist(index, axis); } maxButtons = joystick.GetVJDButtonNumber(index); maxDirPov = joystick.GetVJDDiscPovNumber(index); maxContinuousPov = joystick.GetVJDContPovNumber(index); currentAxisValue = new Dictionary <HID_USAGES, int>(); joystick.ResetVJD(index); }
} // Main public static IEnumerator TestCoroutine() { int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); int X, Y, Z, ZR, XR; uint count = 0; long maxval = 0; X = 20; Y = 30; Z = 40; XR = 60; ZR = 80; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); bool res; // Reset this device to default values joystick.ResetVJD(id); // Feed the device in endless loop Debug.Log("start"); while (true) { // Set position of 4 axes res = joystick.SetAxis(X, id, HID_USAGES.HID_USAGE_X); res = joystick.SetAxis(Y, id, HID_USAGES.HID_USAGE_Y); res = joystick.SetAxis(Z, id, HID_USAGES.HID_USAGE_Z); res = joystick.SetAxis(XR, id, HID_USAGES.HID_USAGE_RX); res = joystick.SetAxis(ZR, id, HID_USAGES.HID_USAGE_RZ); // Press/Release Buttons res = joystick.SetBtn(true, id, count / 50); res = joystick.SetBtn(false, id, 1 + count / 50); // If Continuous POV hat switches installed - make them go round // For high values - put the switches in neutral state if (ContPovNumber > 0) { if ((count * 70) < 30000) { res = joystick.SetContPov(((int)count * 70), id, 1); res = joystick.SetContPov(((int)count * 70) + 2000, id, 2); res = joystick.SetContPov(((int)count * 70) + 4000, id, 3); res = joystick.SetContPov(((int)count * 70) + 6000, id, 4); } else { res = joystick.SetContPov(-1, id, 1); res = joystick.SetContPov(-1, id, 2); res = joystick.SetContPov(-1, id, 3); res = joystick.SetContPov(-1, id, 4); }; } ; // If Discrete POV hat switches installed - make them go round // From time to time - put the switches in neutral state if (DiscPovNumber > 0) { if (count < 550) { joystick.SetDiscPov((((int)count / 20) + 0) % 4, id, 1); joystick.SetDiscPov((((int)count / 20) + 1) % 4, id, 2); joystick.SetDiscPov((((int)count / 20) + 2) % 4, id, 3); joystick.SetDiscPov((((int)count / 20) + 3) % 4, id, 4); } else { joystick.SetDiscPov(-1, id, 1); joystick.SetDiscPov(-1, id, 2); joystick.SetDiscPov(-1, id, 3); joystick.SetDiscPov(-1, id, 4); }; } ; System.Threading.Thread.Sleep(20); X += 150; if (X > maxval) { X = 0; } Y += 250; if (Y > maxval) { Y = 0; } Z += 350; if (Z > maxval) { Z = 0; } XR += 220; if (XR > maxval) { XR = 0; } ZR += 200; if (ZR > maxval) { ZR = 0; } count++; if (count > 640) { count = 0; } yield return(new WaitForFixedUpdate()); } // While (Robust) }
/// <summary> /// Tries to connect to the current instance of JoyControl which manages a specific virtual joystick /// </summary> /// <returns>Struct containing information about engaged joystick or (in case of error) /// information describing eventual problems with request</returns> public JoyCapabilities TryConnect() { if (IsBusy) { throw new Exception("Cannot connect to a joystick already connected."); } /* Creating a new instance every time when we start a new connection * because we have to refresh the access token to preserve the uniqueness * among all connection attempts */ Capabilities = new JoyCapabilities(); /* Checking if the vJoy driver is enabled */ if (!_joystick.vJoyEnabled()) { Capabilities.ErrorInfo = "vJoy driver not enabled."; return(Capabilities); } /* For information purposes only */ Capabilities.JoyInfo = String.Format("Vendor: {0}, Product :{1}, Version Number:{2}.", _joystick.GetvJoyManufacturerString(), _joystick.GetvJoyProductString(), _joystick.GetvJoySerialNumberString()); /* Checking eventual problems with occupied or not installed joystick */ var status = _joystick.GetVJDStatus(_joyId); switch (status) { case VjdStat.VJD_STAT_OWN: case VjdStat.VJD_STAT_FREE: break; case VjdStat.VJD_STAT_BUSY: Capabilities.ErrorInfo = String.Format("vJoy Device {0} is already owned by another feeder. Cannot continue.", _joyId); return(Capabilities); case VjdStat.VJD_STAT_MISS: Capabilities.ErrorInfo = String.Format("vJoy Device {0} is not installed or disabled. Cannot continue.", _joyId); return(Capabilities); default: Capabilities.ErrorInfo = String.Format("vJoy Device {0} general error. Cannot continue.", _joyId); return(Capabilities); } /* ##### Remark ##### * Generally a situation that in this moment the joystick is in state VJD_STAT_OWN shouldn't be possible * and we can consider to throw an exception when the situation occurs. */ /* Engaging joystick with specified id with the current instance of JoyControl */ if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_joyId)))) { Capabilities.ErrorInfo = String.Format("Failed to acquire vJoy device number {0}.", _joyId); return(Capabilities); } IsBusy = true; _joystick.ResetVJD(_joyId); Capabilities.JoyId = _joyId; Capabilities.AxisXExists = _joystick.GetVJDAxisExist(_joyId, HID_USAGES.HID_USAGE_X); Capabilities.AxisXExists = _joystick.GetVJDAxisExist(_joyId, HID_USAGES.HID_USAGE_Y); Capabilities.ButtonsCount = _joystick.GetVJDButtonNumber(_joyId); long max = 0; _joystick.GetVJDAxisMax(_joyId, HID_USAGES.HID_USAGE_X, ref max); Capabilities.AxisXMax = max; _joystick.GetVJDAxisMax(_joyId, HID_USAGES.HID_USAGE_X, ref max); Capabilities.AxisYMax = max; return(Capabilities); }
/** * Code is just reference from vJoy. */ public void setupVjoy() { // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); // Device ID can only be in the range 1-16 /* * if (args.Length > 0 && !String.IsNullOrEmpty(args[0])) * id = Convert.ToUInt32(args[0]); * if (id <= 0 || id > 16) * { * Console.WriteLine("Illegal device ID {0}\nExit!", id); * return; * } */ // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { writeMessage(String.Format("vJoy driver not enabled: Failed Getting vJoy attributes.")); return; } else { writeMessage(String.Format("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString())); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: writeMessage(String.Format("vJoy Device {0} is already owned by this feeder\n", id)); break; case VjdStat.VJD_STAT_FREE: writeMessage(String.Format("vJoy Device {0} is free\n", id)); break; case VjdStat.VJD_STAT_BUSY: writeMessage(String.Format("vJoy Device {0} is already owned by another feeder\nCannot continue", id)); return; case VjdStat.VJD_STAT_MISS: writeMessage(String.Format("vJoy Device {0} is not installed or disabled\nCannot continue", id)); return; default: writeMessage(String.Format("vJoy Device {0} general error\nCannot continue", id)); return; } ; // Check which axes are supported bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device nButtons = joystick.GetVJDButtonNumber(id); ContPovNumber = joystick.GetVJDContPovNumber(id); DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results /* * writeMessage(String.Format("vJoy Device {0} capabilities:", id)); * writeMessage(String.Format("Numner of buttons\t\t{0}", nButtons)); * writeMessage(String.Format("Numner of Continuous POVs\t{0}", ContPovNumber)); * writeMessage(String.Format("Numner of Descrete POVs\t\t{0}", DiscPovNumber)); * writeMessage(String.Format("Axis X\t\t{0}", AxisX ? "Yes" : "No")); * writeMessage(String.Format("Axis Y\t\t{0}", AxisX ? "Yes" : "No")); * writeMessage(String.Format("Axis Z\t\t{0}", AxisX ? "Yes" : "No")); * writeMessage(String.Format("Axis Rx\t\t{0}", AxisRX ? "Yes" : "No")); * writeMessage(String.Format("Axis Rz\t\t{0}", AxisRZ ? "Yes" : "No")); */ // Test if DLL matches the driver UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer); } else { Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", id); } maxval = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); joystick.ResetAll(); }
static void Main(string[] args) { // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); // Device ID can only be in the range 1-16 if (args.Length > 0 && !String.IsNullOrEmpty(args[0])) { id = Convert.ToUInt32(args[0]); } if (id <= 0 || id > 16) { Console.WriteLine("Illegal device ID {0}\nExit!", id); return; } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return; } else { Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString()); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free\n", id); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id); return; case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id); return; default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id); return; } ; // Check which axes are supported bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results Console.WriteLine("\nvJoy Device {0} capabilities:\n", id); Console.WriteLine("Numner of buttons\t\t{0}\n", nButtons); Console.WriteLine("Numner of Continuous POVs\t{0}\n", ContPovNumber); Console.WriteLine("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber); Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No"); Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No"); // Test if DLL matches the driver UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer); } else { Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", id); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(2)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", 2); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", 2); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(3)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", 3); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", 3); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(4)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", 4); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", 4); } int X, Y, Z, ZR, XR; uint count = 0; long maxval = 0; X = 20; Y = 30; Z = 40; XR = 60; ZR = 80; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); #if LMAONEITHER bool res; // Reset this device to default values joystick.ResetVJD(id); // Connecting to socket.io server (make sure the server is up first!) var socket = IO.Socket("http://localhost:14178"); socket.On(Socket.EVENT_CONNECT, () => { socket.Emit("clientconnect", "iamclient"); Console.WriteLine("Thanks for using LocalLink! This is a controller log; feel free to minimize it, but DO NOT CLOSE IT unless you're finished using our program."); }); socket.On("buttondown", (data) => { JObject a = (JObject)data; joystick.SetBtn(true, Convert.ToUInt32((string)a["controllerid"]), Convert.ToUInt32((string)a["buttonid"])); Console.WriteLine("\ngot button " + (string)a["buttonid"] + " down on controller " + (string)a["controllerid"]); }); socket.On("buttonup", (data) => { JObject a = (JObject)data; joystick.SetBtn(false, Convert.ToUInt32((string)a["controllerid"]), Convert.ToUInt32((string)a["buttonid"])); Console.WriteLine("\ngot button " + (string)a["buttonid"] + " up on controller " + (string)a["controllerid"]); }); socket.On("setaxis", (data) => { JObject a = (JObject)data; switch (a["axis"].ToString().ToLower()) { case "x": joystick.SetAxis((int)a["value"], Convert.ToUInt32((string)a["controllerid"]), HID_USAGES.HID_USAGE_X); Console.WriteLine("got x " + (int)a["value"]); break; case "y": joystick.SetAxis((int)a["value"], Convert.ToUInt32((string)a["controllerid"]), HID_USAGES.HID_USAGE_Y); break; case "z": joystick.SetAxis((int)a["value"], Convert.ToUInt32((string)a["controllerid"]), HID_USAGES.HID_USAGE_Z); break; case "rx": joystick.SetAxis((int)a["value"], Convert.ToUInt32((string)a["controllerid"]), HID_USAGES.HID_USAGE_RX); break; case "ry": joystick.SetAxis((int)a["value"], Convert.ToUInt32((string)a["controllerid"]), HID_USAGES.HID_USAGE_RY); break; case "rz": joystick.SetAxis((int)a["value"], Convert.ToUInt32((string)a["controllerid"]), HID_USAGES.HID_USAGE_RZ); break; } }); Console.ReadLine(); #endif // LMAONEITHER #if ROBUST bool res; // Reset this device to default values joystick.ResetVJD(id); // Feed the device in endless loop while (true) { // Set position of 4 axes res = joystick.SetAxis(X, id, HID_USAGES.HID_USAGE_X); res = joystick.SetAxis(Y, id, HID_USAGES.HID_USAGE_Y); res = joystick.SetAxis(Z, id, HID_USAGES.HID_USAGE_Z); res = joystick.SetAxis(XR, id, HID_USAGES.HID_USAGE_RX); res = joystick.SetAxis(ZR, id, HID_USAGES.HID_USAGE_RZ); // Press/Release Buttons res = joystick.SetBtn(true, id, count / 50); res = joystick.SetBtn(false, id, 1 + count / 50); // If Continuous POV hat switches installed - make them go round // For high values - put the switches in neutral state if (ContPovNumber > 0) { if ((count * 70) < 30000) { res = joystick.SetContPov(((int)count * 70), id, 1); res = joystick.SetContPov(((int)count * 70) + 2000, id, 2); res = joystick.SetContPov(((int)count * 70) + 4000, id, 3); res = joystick.SetContPov(((int)count * 70) + 6000, id, 4); } else { res = joystick.SetContPov(-1, id, 1); res = joystick.SetContPov(-1, id, 2); res = joystick.SetContPov(-1, id, 3); res = joystick.SetContPov(-1, id, 4); }; } ; // If Discrete POV hat switches installed - make them go round // From time to time - put the switches in neutral state if (DiscPovNumber > 0) { if (count < 550) { joystick.SetDiscPov((((int)count / 20) + 0) % 4, id, 1); joystick.SetDiscPov((((int)count / 20) + 1) % 4, id, 2); joystick.SetDiscPov((((int)count / 20) + 2) % 4, id, 3); joystick.SetDiscPov((((int)count / 20) + 3) % 4, id, 4); } else { joystick.SetDiscPov(-1, id, 1); joystick.SetDiscPov(-1, id, 2); joystick.SetDiscPov(-1, id, 3); joystick.SetDiscPov(-1, id, 4); }; } ; System.Threading.Thread.Sleep(20); X += 150; if (X > maxval) { X = 0; } Y += 250; if (Y > maxval) { Y = 0; } Z += 350; if (Z > maxval) { Z = 0; } XR += 220; if (XR > maxval) { XR = 0; } ZR += 200; if (ZR > maxval) { ZR = 0; } count++; if (count > 640) { count = 0; } } // While (Robust) #endif // ROBUST #if EFFICIENT byte[] pov = new byte[4]; while (true) { iReport.bDevice = (byte)id; iReport.AxisX = X; iReport.AxisY = Y; iReport.AxisZ = Z; iReport.AxisZRot = ZR; iReport.AxisXRot = XR; // Set buttons one by one iReport.Buttons = (uint)(0x1 << (int)(count / 20)); if (ContPovNumber > 0) { // Make Continuous POV Hat spin iReport.bHats = (count * 70); iReport.bHatsEx1 = (count * 70) + 3000; iReport.bHatsEx2 = (count * 70) + 5000; iReport.bHatsEx3 = 15000 - (count * 70); if ((count * 70) > 36000) { iReport.bHats = 0xFFFFFFFF; // Neutral state iReport.bHatsEx1 = 0xFFFFFFFF; // Neutral state iReport.bHatsEx2 = 0xFFFFFFFF; // Neutral state iReport.bHatsEx3 = 0xFFFFFFFF; // Neutral state } ; } else { // Make 5-position POV Hat spin pov[0] = (byte)(((count / 20) + 0) % 4); pov[1] = (byte)(((count / 20) + 1) % 4); pov[2] = (byte)(((count / 20) + 2) % 4); pov[3] = (byte)(((count / 20) + 3) % 4); iReport.bHats = (uint)(pov[3] << 12) | (uint)(pov[2] << 8) | (uint)(pov[1] << 4) | (uint)pov[0]; if ((count) > 550) { iReport.bHats = 0xFFFFFFFF; // Neutral state } }; /*** Feed the driver with the position packet - is fails then wait for input then try to re-acquire device ***/ if (!joystick.UpdateVJD(id, ref iReport)) { Console.WriteLine("Feeding vJoy device number {0} failed - try to enable device then press enter\n", id); Console.ReadKey(true); joystick.AcquireVJD(id); } System.Threading.Thread.Sleep(20); count++; if (count > 640) { count = 0; } X += 150; if (X > maxval) { X = 0; } Y += 250; if (Y > maxval) { Y = 0; } Z += 350; if (Z > maxval) { Z = 0; } XR += 220; if (XR > maxval) { XR = 0; } ZR += 200; if (ZR > maxval) { ZR = 0; } } ; // While #endif // EFFICIENT } // Main
/// <summary> /// vJoyの初期化 /// </summary> public void Initialize() { // vJoyドライバーのテスト // 失敗した場合、falseを返す bool result = joystick.vJoyEnabled(); if (result == false) { throw new DeviceControlException(Properties.Resources.VJOY_ENABLE); } // vJoy仮想デバイスのテスト VjdStat status = joystick.GetVJDStatus(rID); switch (status) { case VjdStat.VJD_STAT_BUSY: // 〃 throw new DeviceControlException(Properties.Resources.VJOY_STAT_OWN); case VjdStat.VJD_STAT_MISS: // インストールされていない or 無効な状態 throw new DeviceControlException(Properties.Resources.VJOY_ENABLE); case VjdStat.VJD_STAT_OWN: return; case VjdStat.VJD_STAT_FREE: // 利用可能 break; } // vJoy仮想デバイスの設定値確認 // 今回、仕様としては、 // 12ボタン // +字キー // アナログスティック 2本 // としています // ※将来的には自動的に設定するよう変更 // ボタン数のチェック Int32 nBtn = joystick.GetVJDButtonNumber(rID); if (nBtn != 12) { throw new DeviceControlException(Properties.Resources.VJOY_BUTTON_NUMBER_FATAL); } // +字キーの有無チェック /* Returns the number of discrete-type POV hats in the specified device Discrete-type POV Hat values may be North, East, South, West or neutral Valid values are 0 to 4 (from version 2.0.1)*/ Int32 nDPov = joystick.GetVJDDiscPovNumber(rID); if (nDPov != 1) { throw new DeviceControlException(Properties.Resources.VJOY_POV_FATAL); } Int32 nCPov = joystick.GetVJDContPovNumber(rID); if (nCPov != 0) { throw new DeviceControlException(Properties.Resources.VJOY_POV_FATAL); } // アナログスティックのチェック // 全ての機能の有無はチェックせず必要条件のみ確認 // 左アナログスティック←→ result = joystick.GetVJDAxisExist(rID, HID_USAGES.HID_USAGE_X); if (result == false) { throw new DeviceControlException(Properties.Resources.VJOY_STICK_LEFT_FATAL); } // 左アナログスティック↑↓ result = joystick.GetVJDAxisExist(rID, HID_USAGES.HID_USAGE_Y); if (result == false) { throw new DeviceControlException(Properties.Resources.VJOY_STICK_LEFT_FATAL); } // 右アナログスティック←→ result = joystick.GetVJDAxisExist(rID, HID_USAGES.HID_USAGE_Z); if (result == false) { throw new DeviceControlException(Properties.Resources.VJOY_STICK_RIGHT_FATAL); } // 右アナログスティック↑↓ result = joystick.GetVJDAxisExist(rID, HID_USAGES.HID_USAGE_RZ); if (result == false) { throw new DeviceControlException(Properties.Resources.VJOY_STICK_RIGHT_FATAL); } joystick.GetVJDAxisMax(rID, HID_USAGES.HID_USAGE_X, ref m_nAxisMax); joystick.GetVJDAxisMin(rID, HID_USAGES.HID_USAGE_X, ref m_nAxisMin); // 接続 joystick.AcquireVJD(rID); joystick.ResetVJD(rID); }
static void Main(string[] args) { // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); // Device ID can only be in the range 1-16 //if (args.Length>0 && !String.IsNullOrEmpty(args[0])) // id = Convert.ToUInt32(args[0]); for (int i = 0; i < args.Length; i++) { if (args[i] != null && args[i] != "") { switch (args[i][0]) { case 'i': if (!UInt32.TryParse(args[i].Substring(1, args[i].Length - 1), out id)) { id = 1; } break; case 's': try { portname = args[i].Substring(1, args[i].Length - 1); } catch (Exception ex) { portname = "COM1"; } break; default: break; } } } Console.WriteLine("Command line arguments parsed."); //Console.ReadLine(); if (id <= 0 || id > 16) { Console.WriteLine("Illegal device ID {0}\nExit!", id); Console.ReadLine(); return; } string[] ports = System.IO.Ports.SerialPort.GetPortNames(); bool portfound = false; for (int i = 0; i < ports.Length; i++) { Console.WriteLine(ports[i]); if (portname == ports[i]) { portfound = true; } } if (!portfound) { Console.WriteLine("Port {0} not found\nExit!", id); Console.ReadLine(); } Console.WriteLine("Device ID and port name checked."); //Console.ReadLine(); // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); Console.ReadLine(); return; } else { Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString()); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free\n", id); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id); Console.ReadLine(); return; case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id); Console.ReadLine(); return; default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id); Console.ReadLine(); return; } ; // Check which axes are supported bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results Console.WriteLine("\nvJoy Device {0} capabilities:\n", id); Console.WriteLine("Numner of buttons\t\t{0}\n", nButtons); Console.WriteLine("Numner of Continuous POVs\t{0}\n", ContPovNumber); Console.WriteLine("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber); Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No"); Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No"); // Test if DLL matches the driver UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer); } else { Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id); Console.ReadLine(); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", id); } //Console.WriteLine("\npress enter to stat feeding"); //Console.ReadKey(true); Console.WriteLine("Feeding controller inputs..."); //int X, Y, Z, ZR, XR; uint count = 0; long maxval = 0; //X = 20; //Y = 30; //Z = 40; //XR = 60; //ZR = 80; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); bool res; // Reset this device to default values joystick.ResetVJD(id); using (Process p = Process.GetCurrentProcess()) { try { p.PriorityClass = ProcessPriorityClass.RealTime; } catch (Exception ex1) { Console.WriteLine("Failed to set realtime priority."); try { p.PriorityClass = ProcessPriorityClass.High; } catch (Exception ex2) { Console.WriteLine("Failed to set high priority. Running at normal priority."); } } p.ProcessorAffinity = (IntPtr)(1 << (Environment.ProcessorCount - 1)); } byte[] oldinputs = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; byte[] cosinputs = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; using (System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort(portname, 115200, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One)) { port.WriteTimeout = 1000; port.ReadTimeout = 1000; port.Open(); // Feed the device in endless loop while (true) { byte[] inputs = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; try { byte[] test = new byte[1]; do { port.Read(test, 0, 1); } while (test[0] != 0xFF); for (int i = 0; i < 16; i++) { int inbyte; do { inbyte = port.ReadByte(); }while (inbyte < 0); inputs[i] = (byte)inbyte; } } catch (Exception ex) { Console.WriteLine("Exception reading joystick port: " + ex.Message); } //16 byte packet - supports 8 SNES-style controllers simultaneously //2 byte - player 1 //2 byte - player 2 //2 byte - player 3 //2 byte - player 4 //2 byte - player 5 //2 byte - player 6 //2 byte - player 7 //2 byte - player 8 for (int i = 0; i < inputs.Length; i++) { cosinputs[i] = (byte)(inputs[i] ^ oldinputs[i]); for (int j = 0; j < 8; j++) { //change: try to only send new status on change-of-state to reduce input events if ((cosinputs[i] & (1 << j)) != 0) { res = joystick.SetBtn((inputs[i] & (1 << j)) != 0, id, (uint)(((i * 8) + j) + 1)); } } } //copy current over old oldinputs = inputs; } // While (Robust) } } // Main
public bool activateVJoy() { VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: context.logmMssage("vJoy Device " + id + " Connected Successfully"); break; case VjdStat.VJD_STAT_FREE: context.logmMssage("vJoy Device " + id + " Connected Successfully"); break; case VjdStat.VJD_STAT_BUSY: context.logmMssage("vJoy Device " + id + " is already owned by another feeder\nCannot continue\n"); return(false); case VjdStat.VJD_STAT_MISS: context.logmMssage("vJoy Device is not installed or disabled\nCannot continue\n"); return(false); default: context.logmMssage("vJoy Device general error\nCannot continue\n"); return(false); } ; bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device nButtons = joystick.GetVJDButtonNumber(id); ContPovNumber = joystick.GetVJDContPovNumber(id); DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results Console.WriteLine("\nvJoy Device {0} capabilities:\n", id); Console.WriteLine("Numner of buttons\t\t{0}\n", nButtons); Console.WriteLine("Numner of Continuous POVs\t{0}\n", ContPovNumber); Console.WriteLine("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber); Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No"); Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No"); UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer); } else { Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { context.logmMssage("Failed to acquire vJoy device number " + id); return(false); } else { context.logmMssage("Acquired: vJoy device number " + id); } joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref joyStickMaxval); Console.WriteLine("max val is: " + joyStickMaxval); iReport.bDevice = (byte)id; joystick.ResetVJD(id); OperateJoyStick(0, 0); operatePOV(0xFFFFFFFF); joystick.UpdateVJD(id, ref iReport); return(true); }
public static void Initialize(uint id) //(string[] args) { // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); string buffer; // Device ID can only be in the range 1-16 if (id < 1 || id > 16) { buffer = string.Format("Illegal device ID {0}\nExit!", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); return; } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { BalanceWalker.FormMain.consoleBoxWriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return; } else { buffer = string.Format("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString()); //BalanceWalker.FormMain.consoleBoxWriteLine($"Vendor: {joystick.GetvJoyManufacturerString()}\nProduct :{joystick.GetvJoyProductString()}\nVersion Number:{joystick.GetvJoySerialNumberString()}\n"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: buffer = string.Format("vJoy Device {0} is already owned by this feeder\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); break; case VjdStat.VJD_STAT_FREE: buffer = string.Format("vJoy Device {0} is free\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); break; case VjdStat.VJD_STAT_BUSY: buffer = string.Format("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); return; case VjdStat.VJD_STAT_MISS: buffer = string.Format("vJoy Device {0} is not installed or disabled. \nCannot continue\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); return; default: buffer = string.Format("vJoy Device {0} general error\nCannot continue\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); return; } ; // Check which axes are supported bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); bool AxisRY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RY); // Get the number of buttons and POV Hat switches supported by this vJoy device int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results buffer = string.Format("\nvJoy Device {0} capabilities:\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Number of buttons\t\t{0}\n", nButtons); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Number of Continuous POVs\t{0}\n", ContPovNumber); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Number of Descrete POVs\t\t{0}\n", DiscPovNumber); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Axis X\t\t{0}\n", AxisX ? "Yes" : "No"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Axis Y\t\t{0}\n", AxisY ? "Yes" : "No"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Axis Z\t\t{0}\n", AxisZ ? "Yes" : "No"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Axis Ry\t\t{0}\n", AxisRY ? "Yes" : "No"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); buffer = string.Format("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); if (!(AxisX && AxisY && AxisZ && AxisRX && AxisRZ && AxisRY)) { buffer = string.Format("Please enable Axes X,Y,Z,RX,RY,RZ in vJoyConf for device number", id, " in order to use all functions", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); } if (nButtons < 1) { buffer = string.Format("Please enable at least 1 button in vJoyConf for device ", id, " in order to use the only button on the wii balance board"); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); } // Test if DLL matches the driver UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { buffer = string.Format("Version of Driver Matches DLL Version ({0:X})\n", DllVer); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); } else { buffer = string.Format("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { buffer = string.Format("Failed to acquire vJoy device number {0}.\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); return; } else { buffer = string.Format("Acquired: vJoy device number {0}.\n", id); BalanceWalker.FormMain.consoleBoxWriteLine(buffer); } int X, Y, Z, XR, ZR; uint count = 0; long maxval = 0; // maxval is -32767 +32767 X = 20; Y = 30; Z = 40; XR = 60; ZR = 80; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); #if ROBUST bool res; // Reset this device to default values joystick.ResetVJD(id); // set this to true to test if the vJoy driver is working. This will feed vjoy with an endless loop of joystick commands. while (false) { // Set position of 4 axes res = joystick.SetAxis(X, id, HID_USAGES.HID_USAGE_X); res = joystick.SetAxis(Y, id, HID_USAGES.HID_USAGE_Y); res = joystick.SetAxis(Z, id, HID_USAGES.HID_USAGE_Z); res = joystick.SetAxis(XR, id, HID_USAGES.HID_USAGE_RX); res = joystick.SetAxis(ZR, id, HID_USAGES.HID_USAGE_RZ); // Press/Release Buttons res = joystick.SetBtn(true, id, count / 50); res = joystick.SetBtn(false, id, 1 + count / 50); // If Continuous POV hat switches installed - make them go round // For high values - put the switches in neutral state if (ContPovNumber > 0) { if ((count * 70) < 30000) { res = joystick.SetContPov(((int)count * 70), id, 1); res = joystick.SetContPov(((int)count * 70) + 2000, id, 2); res = joystick.SetContPov(((int)count * 70) + 4000, id, 3); res = joystick.SetContPov(((int)count * 70) + 6000, id, 4); } else { res = joystick.SetContPov(-1, id, 1); res = joystick.SetContPov(-1, id, 2); res = joystick.SetContPov(-1, id, 3); res = joystick.SetContPov(-1, id, 4); }; } ; // If Discrete POV hat switches installed - make them go round // From time to time - put the switches in neutral state if (DiscPovNumber > 0) { if (count < 550) { joystick.SetDiscPov((((int)count / 20) + 0) % 4, id, 1); joystick.SetDiscPov((((int)count / 20) + 1) % 4, id, 2); joystick.SetDiscPov((((int)count / 20) + 2) % 4, id, 3); joystick.SetDiscPov((((int)count / 20) + 3) % 4, id, 4); } else { joystick.SetDiscPov(-1, id, 1); joystick.SetDiscPov(-1, id, 2); joystick.SetDiscPov(-1, id, 3); joystick.SetDiscPov(-1, id, 4); }; } ; System.Threading.Thread.Sleep(20); X += 150; if (X > maxval) { X = 0; } Y += 250; if (Y > maxval) { Y = 0; } Z += 350; if (Z > maxval) { Z = 0; } XR += 220; if (XR > maxval) { XR = 0; } ZR += 200; if (ZR > maxval) { ZR = 0; } count++; if (count > 640) { count = 0; } } // While (Robust) #endif // ROBUST #if EFFICIENT // todo: unused, from the original vjoy feeder demo code. byte[] pov = new byte[4]; while (true) { iReport.bDevice = (byte)id; iReport.AxisX = X; iReport.AxisY = Y; iReport.AxisZ = Z; iReport.AxisZRot = ZR; iReport.AxisXRot = XR; // Set buttons one by one iReport.Buttons = (uint)(0x1 << (int)(count / 20)); if (ContPovNumber > 0) { // Make Continuous POV Hat spin iReport.bHats = (count * 70); iReport.bHatsEx1 = (count * 70) + 3000; iReport.bHatsEx2 = (count * 70) + 5000; iReport.bHatsEx3 = 15000 - (count * 70); if ((count * 70) > 36000) { iReport.bHats = 0xFFFFFFFF; // Neutral state iReport.bHatsEx1 = 0xFFFFFFFF; // Neutral state iReport.bHatsEx2 = 0xFFFFFFFF; // Neutral state iReport.bHatsEx3 = 0xFFFFFFFF; // Neutral state } ; } else { // Make 5-position POV Hat spin pov[0] = (byte)(((count / 20) + 0) % 4); pov[1] = (byte)(((count / 20) + 1) % 4); pov[2] = (byte)(((count / 20) + 2) % 4); pov[3] = (byte)(((count / 20) + 3) % 4); iReport.bHats = (uint)(pov[3] << 12) | (uint)(pov[2] << 8) | (uint)(pov[1] << 4) | (uint)pov[0]; if ((count) > 550) { iReport.bHats = 0xFFFFFFFF; // Neutral state } }; /*** Feed the driver with the position packet - is fails then wait for input then try to re-acquire device ***/ if (!joystick.UpdateVJD(id, ref iReport)) { Console.WriteLine("Feeding vJoy device number {0} failed - try to enable device then press enter\n", id); Console.ReadKey(true); joystick.AcquireVJD(id); } System.Threading.Thread.Sleep(20); count++; if (count > 640) { count = 0; } X += 150; if (X > maxval) { X = 0; } Y += 250; if (Y > maxval) { Y = 0; } Z += 350; if (Z > maxval) { Z = 0; } XR += 220; if (XR > maxval) { XR = 0; } ZR += 200; if (ZR > maxval) { ZR = 0; } } ; // While #endif // EFFICIENT }
public Form1() { InitializeComponent(); // ******************************************* **** ********************************************* // **************************************** start_Vjoy ****************************************** // ******************************************* **** ********************************************* // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return; } else { Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString()); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free\n", id); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id); return; case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id); return; default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id); return; } ; // Check which axes are supported bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RY); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results Console.WriteLine("\nvJoy Device {0} capabilities:\n", id); Console.WriteLine("Number of buttons\t\t{0}\n", nButtons); Console.WriteLine("Number of Continuous POVs\t{0}\n", ContPovNumber); Console.WriteLine("Number of Descrete POVs\t\t{0}\n", DiscPovNumber); Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Y\t\t{0}\n", AxisY ? "Yes" : "No"); Console.WriteLine("Axis Z\t\t{0}\n", AxisZ ? "Yes" : "No"); Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No"); Console.WriteLine("Axis Rx\t\t{0}\n", AxisRY ? "Yes" : "No"); Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No"); // Test if DLL matches the driver UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer); } else { Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", id); } joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxvalue); Console.WriteLine("Max value X: {0}.\n", maxvalue); joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_Y, ref maxvalue); Console.WriteLine("Max value Y: {0}.\n", maxvalue); joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_RX, ref maxvalue); Console.WriteLine("Max value RX: {0}.\n", maxvalue); joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_RY, ref maxvalue); Console.WriteLine("Max value RY: {0}.\n", maxvalue); joystick.GetVJDAxisMin(id, HID_USAGES.HID_USAGE_X, ref minvalue); Console.WriteLine("Min value X: {0}.\n", minvalue); joystick.GetVJDAxisMin(id, HID_USAGES.HID_USAGE_Y, ref minvalue); Console.WriteLine("Min value Y: {0}.\n", minvalue); joystick.GetVJDAxisMin(id, HID_USAGES.HID_USAGE_RX, ref minvalue); Console.WriteLine("Min value RX: {0}.\n", minvalue); joystick.GetVJDAxisMin(id, HID_USAGES.HID_USAGE_RY, ref minvalue); Console.WriteLine("Min value RY: {0}.\n", minvalue); this.minValJOY.Text = minvalue.ToString(); this.maxValJOY.Text = maxvalue.ToString(); // Reset this device to default values joystick.ResetVJD(id); yawProg.Minimum = (int)minvalue; yawProg.Maximum = (int)maxvalue; rollProg.Minimum = (int)minvalue; rollProg.Maximum = (int)maxvalue; pitchProg.Minimum = (int)minvalue; pitchProg.Maximum = (int)maxvalue; heightProg.Minimum = (int)minvalue; heightProg.Maximum = (int)maxvalue; rollChart.ChartAreas[0].AxisY.Maximum = maxvalue; rollChart.ChartAreas[0].AxisY.Minimum = minvalue; pitchChart.ChartAreas[0].AxisY.Maximum = maxvalue; pitchChart.ChartAreas[0].AxisY.Minimum = minvalue; heightChart.ChartAreas[0].AxisY.Maximum = maxvalue; heightChart.ChartAreas[0].AxisY.Minimum = minvalue; yawChart.ChartAreas[0].AxisY.Maximum = maxvalue; yawChart.ChartAreas[0].AxisY.Minimum = minvalue; myCircularBuff = new CircularBuffer <HandValue>(2000); myLog = new Logger(); t = new Thread(joyThread); t.Start(); tS = new Thread(serialThread); tS.Start(); // ******************************************* **** ********************************************* // ***************************************** end_Vjoy ******************************************* // ******************************************* **** ********************************************* controller.EventContext = WindowsFormsSynchronizationContext.Current; controller.FrameReady += newFrameHandler; controller.ImageReady += onImageReady; controller.ImageRequestFailed += onImageRequestFailed; //set greyscale palette for image Bitmap object ColorPalette grayscale = bitmap.Palette; for (int i = 0; i < 256; i++) { grayscale.Entries[i] = Color.FromArgb((int)255, i, i, i); } bitmap.Palette = grayscale; }
static void Main(string[] args) { SerialPort _port; float[] Thetas; joystick = new vJoy(); Thetas = new float[3]; Thetas[0] = 0; Thetas[1] = 0; Thetas[2] = 0; VJoyActivation(); Console.WriteLine("insert COM port name: "); string COMportName = Console.ReadLine(); Console.WriteLine("\ninsert baud rate: "); int baudRate = Int32.Parse(Console.ReadLine()); _port = new SerialPort(); _port.PortName = COMportName; _port.BaudRate = baudRate; _port.Parity = Parity.None; _port.DataBits = 8; _port.StopBits = StopBits.One; _port.ReadTimeout = 500; _port.WriteTimeout = 500; _port.Open(); long maxval = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); while (true) { try { string a = _port.ReadLine(); string[] substrings = a.Split('|'); if (substrings.Length == 3) { Thetas[0] = clamp(float.Parse(substrings[0]), -50, 50); Thetas[1] = clamp(float.Parse(substrings[1]), -50, 50); Thetas[2] = float.Parse(substrings[2]); Console.WriteLine("ThetaX={0} ThetaY={1} ThetaZ={2}", Thetas[0], Thetas[1], Thetas[2]); } } catch { } //normalizing xrot and mapping to full range ans letting x maxRot=50deg joystick.SetAxis(Convert.ToInt32(((Thetas[0] / 100) + 0.5) * maxval), id, HID_USAGES.HID_USAGE_X); joystick.SetAxis(Convert.ToInt32(((Thetas[1] / 100) + 0.5) * maxval), id, HID_USAGES.HID_USAGE_Y); //threshold of btn=20 deg (btn1=R1 btn2=L1) if (Thetas[2] > 20) { joystick.SetBtn(true, id, 1); joystick.SetBtn(false, id, 2); } else if (Thetas[2] < -20) { joystick.SetBtn(true, id, 2); joystick.SetBtn(false, id, 1); } else { joystick.SetBtn(false, id, 1); joystick.SetBtn(false, id, 2); } Thread.Sleep(20); } }
static void Main(string[] args) { // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); // Device ID can only be in the range 1-16 if (args.Length > 0 && !String.IsNullOrEmpty(args[0])) { id = Convert.ToUInt32(args[0]); } if (id <= 0 || id > 16) { Console.WriteLine("Illegal device ID {0}\nExit!", id); return; } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return; } else { Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString()); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free\n", id); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id); return; case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id); return; default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id); return; } ; // Check which axes are supported bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results Console.WriteLine("\nvJoy Device {0} capabilities:\n", id); Console.WriteLine("Numner of buttons\t\t{0}\n", nButtons); Console.WriteLine("Numner of Continuous POVs\t{0}\n", ContPovNumber); Console.WriteLine("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber); Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No"); Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No"); // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", id); } Console.WriteLine("\npress enter to stat feeding"); Console.ReadKey(true); int X, Y, Z, ZR, XR; uint count = 0; long maxval = 0; X = 20; Y = 30; Z = 40; XR = 60; ZR = 80; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); #if ROBUST bool res; // Reset this device to default values joystick.ResetVJD(id); // Feed the device in endless loop while (true) { // Set position of 4 axes res = joystick.SetAxis(X, id, HID_USAGES.HID_USAGE_X); res = joystick.SetAxis(Y, id, HID_USAGES.HID_USAGE_Y); res = joystick.SetAxis(Z, id, HID_USAGES.HID_USAGE_Z); res = joystick.SetAxis(XR, id, HID_USAGES.HID_USAGE_RX); res = joystick.SetAxis(ZR, id, HID_USAGES.HID_USAGE_RZ); // Press/Release Buttons res = joystick.SetBtn(true, id, count / 50); res = joystick.SetBtn(false, id, 1 + count / 50); // If Continuous POV hat switches installed - make them go round // For high values - put the switches in neutral state if (ContPovNumber > 0) { if ((count * 70) < 30000) { res = joystick.SetContPov(((int)count * 70), id, 1); res = joystick.SetContPov(((int)count * 70) + 2000, id, 2); res = joystick.SetContPov(((int)count * 70) + 4000, id, 3); res = joystick.SetContPov(((int)count * 70) + 6000, id, 4); } else { res = joystick.SetContPov(-1, id, 1); res = joystick.SetContPov(-1, id, 2); res = joystick.SetContPov(-1, id, 3); res = joystick.SetContPov(-1, id, 4); }; } ; // If Discrete POV hat switches installed - make them go round // From time to time - put the switches in neutral state if (DiscPovNumber > 0) { if (count < 550) { joystick.SetDiscPov((((int)count / 20) + 0) % 4, id, 1); joystick.SetDiscPov((((int)count / 20) + 1) % 4, id, 2); joystick.SetDiscPov((((int)count / 20) + 2) % 4, id, 3); joystick.SetDiscPov((((int)count / 20) + 3) % 4, id, 4); } else { joystick.SetDiscPov(-1, id, 1); joystick.SetDiscPov(-1, id, 2); joystick.SetDiscPov(-1, id, 3); joystick.SetDiscPov(-1, id, 4); }; } ; System.Threading.Thread.Sleep(20); X += 150; if (X > maxval) { X = 0; } Y += 250; if (Y > maxval) { Y = 0; } Z += 350; if (Z > maxval) { Z = 0; } XR += 220; if (XR > maxval) { XR = 0; } ZR += 200; if (ZR > maxval) { ZR = 0; } count++; if (count > 640) { count = 0; } } // While (Robust) #endif // ROBUST #if EFFICIENT byte[] pov = new byte[4]; while (true) { iReport.bDevice = (byte)id; iReport.AxisX = X; iReport.AxisY = Y; iReport.AxisZ = Z; iReport.AxisZRot = ZR; iReport.AxisXRot = XR; // Set buttons one by one iReport.Buttons = (uint)(0x1 << (int)(count / 20)); if (ContPovNumber > 0) { // Make Continuous POV Hat spin iReport.bHats = (count * 70); iReport.bHatsEx1 = (count * 70) + 3000; iReport.bHatsEx2 = (count * 70) + 5000; iReport.bHatsEx3 = 15000 - (count * 70); if ((count * 70) > 36000) { iReport.bHats = 0xFFFFFFFF; // Neutral state iReport.bHatsEx1 = 0xFFFFFFFF; // Neutral state iReport.bHatsEx2 = 0xFFFFFFFF; // Neutral state iReport.bHatsEx3 = 0xFFFFFFFF; // Neutral state } ; } else { // Make 5-position POV Hat spin pov[0] = (byte)(((count / 20) + 0) % 4); pov[1] = (byte)(((count / 20) + 1) % 4); pov[2] = (byte)(((count / 20) + 2) % 4); pov[3] = (byte)(((count / 20) + 3) % 4); iReport.bHats = (uint)(pov[3] << 12) | (uint)(pov[2] << 8) | (uint)(pov[1] << 4) | (uint)pov[0]; if ((count) > 550) { iReport.bHats = 0xFFFFFFFF; // Neutral state } }; /*** Feed the driver with the position packet - is fails then wait for input then try to re-acquire device ***/ if (!joystick.UpdateVJD(id, ref iReport)) { Console.WriteLine("Feeding vJoy device number {0} failed - try to enable device then press enter\n", id); Console.ReadKey(true); joystick.AcquireVJD(id); } System.Threading.Thread.Sleep(20); count++; if (count > 640) { count = 0; } X += 150; if (X > maxval) { X = 0; } Y += 250; if (Y > maxval) { Y = 0; } Z += 350; if (Z > maxval) { Z = 0; } XR += 220; if (XR > maxval) { XR = 0; } ZR += 200; if (ZR > maxval) { ZR = 0; } } ; // While #endif // EFFICIENT } // Main
static void Main(string[] args) { Console.WriteLine("Setting up virtual device..."); joystick = new vJoy(); // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free\n", id); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id); return; joystick.ResetVJD(id); case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id); return; default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id); return; } if (!(joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X) && joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y) && joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX) && joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RY) && joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z) && joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ) && joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_SL0) && joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_SL1) )) { Console.WriteLine("VJoy Device " + id + " does not support enough axes for SkyController. Make sure device has at least 8 axes"); return; } // Test if DLL matches the driver UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer); } else { Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", id); } deviceState = new SCState(); Console.WriteLine("Starting net receiver..."); UdpClient listener = new UdpClient(8899); IPEndPoint ep = null; byte[] data = new byte[128]; listener.JoinMulticastGroup(IPAddress.Parse("230.0.0.1")); Console.WriteLine("Waiting for data on 230.0.0.1:8899..."); data = listener.Receive(ref ep); Console.WriteLine("Receiving from " + ep.Address.ToString() + ":" + ep.Port.ToString() + "..."); joystick.ResetVJD(id); int CursorRow = Console.CursorTop; uint pId = 0; long axisMax = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref axisMax); while (true) { //System.Threading.Thread.Sleep(10); data = listener.Receive(ref ep); pId = BitConverter.ToUInt32(data, 0); deviceState.Deserialize(data, 4); Console.CursorLeft = 0; Console.CursorTop = CursorRow; Console.WriteLine("Received " + data.Length + " bytes. Packet ID: " + pId); //Console.WriteLine("Yaw: " + deviceState._axis0.ToString("0.00")); //Console.WriteLine("Gaz: " + deviceState._axis1.ToString("0.00")); //Console.WriteLine("Roll: " + deviceState._axis13.ToString("0.00")); //Console.WriteLine("Pitch: " + deviceState._axis2.ToString("0.00")); //Console.WriteLine("LThumb X: " + deviceState._axis14.ToString("0.00")); //Console.WriteLine("LThumb Y: " + deviceState._axis15.ToString("0.00")); //Console.WriteLine("RThumb X: " + deviceState._axis8.ToString("0.00")); //Console.WriteLine("RThumb Y: " + deviceState._axis9.ToString("0.00")); Console.WriteLine("Battery: " + (deviceState._axis10 * 100f).ToString("0.00") + "%"); //joystick.SetAxis((int)(deviceState._axis0 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_X); //joystick.SetAxis((int)(-deviceState._axis1 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_Y); //joystick.SetAxis((int)(deviceState._axis13 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_RX); //joystick.SetAxis((int)(deviceState._axis2 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_RY); //joystick.SetAxis((int)(deviceState._axis3 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_Z); //joystick.SetAxis((int)(deviceState._axis14 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_RZ); //joystick.SetAxis((int)(deviceState._axis8 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_SL0); //joystick.SetAxis((int)(deviceState._axis9 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_SL1); joystick.SetAxis((int)(deviceState._axis13 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_X); joystick.SetAxis((int)(-deviceState._axis2 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_Y); joystick.SetAxis((int)(-deviceState._axis1 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_Z); joystick.SetAxis((int)(deviceState._axis0 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_RX); joystick.SetAxis((int)(deviceState._axis8 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_RY); joystick.SetAxis((int)(deviceState._axis9 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_RZ); joystick.SetAxis((int)(deviceState._axis3 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_SL0); joystick.SetAxis((int)(deviceState._axis14 * _axisRange + _axisRange), id, HID_USAGES.HID_USAGE_SL1); } }
public void Feed(PhoneData data) { // Get the number of buttons and POV Hat switchessupported by this vJoy device int nButtons = _joystick.GetVJDButtonNumber(_id); int contPovNumber = _joystick.GetVJDContPovNumber(_id); int discPovNumber = _joystick.GetVJDDiscPovNumber(_id); long maxval = 0; _joystick.GetVJDAxisMax(_id, HID_USAGES.HID_USAGE_X, ref maxval); _axisX = data.AxisX; if (_axisX > maxval) { _axisX = (int)maxval; } if (_axisX < 0) { _axisX = 0; } _axisY = data.AxisY; if (_axisY > maxval) { _axisY = (int)maxval; } if (_axisY < 0) { _axisY = 0; } _axisZ = data.AxisZ; if (_axisZ > maxval) { _axisZ = (int)maxval; } if (_axisZ < 0) { _axisZ = 0; } uint count = 0; byte[] pov = new byte[4]; _joystickState.bDevice = (byte)_id; _joystickState.AxisX = _axisX; _joystickState.AxisY = _axisY; _joystickState.AxisZ = _axisZ; var btn1 = data.Button1 == 0 ? 0 : 1; var btn2 = data.Button2 == 0 ? 0 : 2; var btn3 = data.Button3 == 0 ? 0 : 4; var btn4 = data.Button4 == 0 ? 0 : 8; _joystickState.Buttons = (uint)(btn1 | btn2 | btn3 | btn4); if (contPovNumber > 0) { _joystickState.bHats = 0xFFFFFFFF; // Neutral state _joystickState.bHatsEx1 = 0xFFFFFFFF; // Neutral state _joystickState.bHatsEx2 = 0xFFFFFFFF; // Neutral state _joystickState.bHatsEx3 = 0xFFFFFFFF; // Neutral state } else { _joystickState.bHats = 0xFFFFFFFF; // Neutral state }; /*** Feed the driver with the position packet - is fails then wait for input then try to re-acquire device ***/ if (!_joystick.UpdateVJD(_id, ref _joystickState)) { Console.WriteLine("Feeding vJoy device number {0} failed - try to enable device then press enter\n", _id); Console.ReadKey(true); _joystick.AcquireVJD(_id); } System.Threading.Thread.Sleep(20); count++; if (count > 640) { count = 0; } }
/// <summary> /// Acquire a vJoy device ID /// </summary> /// <param name="id"></param> /// <returns></returns> public int Acquire(uint id) { // Device ID can only be in the range 1-16 vJoyDevID = id; Report.bDevice = (byte)vJoyDevID; if (vJoyDevID <= 0 || vJoyDevID > 16) { LogFormat(LogLevels.ERROR, "Illegal device ID {0}\nExit!", vJoyDevID); return(-1); } // Get the state of the requested device VjdStat status = Joystick.GetVJDStatus(vJoyDevID); switch (status) { case VjdStat.VJD_STAT_OWN: LogFormat(LogLevels.DEBUG, "vJoy Device {0} is already owned by this feeder", vJoyDevID); break; case VjdStat.VJD_STAT_FREE: LogFormat(LogLevels.DEBUG, "vJoy Device {0} is free", vJoyDevID); break; case VjdStat.VJD_STAT_BUSY: LogFormat(LogLevels.ERROR, "vJoy Device {0} is already owned by another feeder\nCannot continue", vJoyDevID); return(-3); case VjdStat.VJD_STAT_MISS: LogFormat(LogLevels.ERROR, "vJoy Device {0} is not installed or disabled\nCannot continue", vJoyDevID); return(-4); default: LogFormat(LogLevels.ERROR, "vJoy Device {0} general error\nCannot continue", vJoyDevID); return(-1); } ; // Get the number of buttons and POV Hat switchessupported by this vJoy device this.NbButtons = Joystick.GetVJDButtonNumber(vJoyDevID); int ContPovNumber = Joystick.GetVJDContPovNumber(vJoyDevID); int DiscPovNumber = Joystick.GetVJDDiscPovNumber(vJoyDevID); // Print results LogFormat(LogLevels.DEBUG, "vJoy Device {0} capabilities:", vJoyDevID); LogFormat(LogLevels.DEBUG, "Numner of buttons\t\t{0}", this.NbButtons); LogFormat(LogLevels.DEBUG, "Numner of Continuous POVs\t{0}", ContPovNumber); LogFormat(LogLevels.DEBUG, "Numner of Descrete POVs\t\t{0}", DiscPovNumber); // Check which axes are supported. Follow enum HID_USAGES ConfiguredvJoyAxes.Clear(); int i = 0; foreach (HID_USAGES toBeTested in Enum.GetValues(typeof(HID_USAGES))) { // Skip POV if (toBeTested == HID_USAGES.HID_USAGE_POV) { continue; } var present = Joystick.GetVJDAxisExist(vJoyDevID, toBeTested); LogFormat(LogLevels.DEBUG, "Axis " + HIDAxesInfo[i].Name + " \t\t{0}", present ? "Yes" : "No"); if (present) { HIDAxesInfo[i].IsPresent = present; // Retrieve min/max from vJoy if (!Joystick.GetVJDAxisMin(vJoyDevID, toBeTested, ref HIDAxesInfo[i].MinValue)) { Log("Failed getting min value!"); } if (!Joystick.GetVJDAxisMax(vJoyDevID, toBeTested, ref HIDAxesInfo[i].MaxValue)) { Log("Failed getting min value!"); } Log(" Min= " + HIDAxesInfo[i].MinValue + " Max=" + HIDAxesInfo[i].MaxValue); // Add to indexed list of configured axes ConfiguredvJoyAxes.Add(HIDAxesInfo[i]); } i++; } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!Joystick.AcquireVJD(vJoyDevID)))) { LogFormat(LogLevels.ERROR, "Failed to acquire vJoy device number {0}.", vJoyDevID); return(-1); } else { LogFormat(LogLevels.DEBUG, "Acquired: vJoy device number {0}.", vJoyDevID); } return((int)status); }