private void UpdateButtons(Configuration config = null) { if (cmbTarget.SelectedIndex < 0) { cmbTarget.SelectedIndex = 0; } int deviceId = ((TargetDeviceItem)cmbTarget.SelectedItem).Value; int buttons = vjoy.GetVJDButtonNumber((uint)deviceId); if (config != null) { foreach (string flag in selectedButtons.Keys.ToArray()) { selectedButtons[flag] = config[flag]; } } else { foreach (string flag in selectedButtons.Keys.ToArray()) { selectedButtons[flag] = gridItems.Where(i => i.Key.Equals(flag)).First().Selection; } } buttonItems.Clear(); for (int i = 0; i <= buttons; i++) { buttonItems.Add(new ButtonItem(i)); } var buttonSelectionColumn1 = (DataGridViewComboBoxColumn)this.gridButtons1.Columns["gridButtons1Selection"]; buttonSelectionColumn1.DisplayMember = "Text"; buttonSelectionColumn1.ValueMember = "Value"; buttonSelectionColumn1.DataSource = buttonItems; var buttonSelectionColumn2 = (DataGridViewComboBoxColumn)this.gridButtons2.Columns["gridButtons2Selection"]; buttonSelectionColumn2.DisplayMember = "Text"; buttonSelectionColumn2.ValueMember = "Value"; buttonSelectionColumn2.DataSource = buttonItems; foreach (string flag in selectedButtons.Keys.ToArray()) { if (selectedButtons[flag] > buttons) { selectedButtons[flag] = 0; } gridItems.Where(i => i.Key.Equals(flag)).First().Selection = selectedButtons[flag]; } }
// User-defined Removal/Arival callback Function // When registered, label2 was passed as user-data private void Removal(bool removal, bool first, object userData) { string prt; Label l = userData as Label; int nBtn = joystick.GetVJDButtonNumber(id); int nDPov = joystick.GetVJDDiscPovNumber(id); int nCPov = joystick.GetVJDContPovNumber(id); bool X_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool Y_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool Z_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool RX_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); // Final values after the last arival if (!removal && !first) { prt = String.Format("Device[{0}]: Buttons={1}; DiscPOVs:{2}; ContPOVs:{3}", id, nBtn, nDPov, nCPov); label2.Text = prt; } // Temporary message during intermediate states else { prt = String.Format("Device[{0}]: Wait ...", id); label2.Text = prt; } }
public vJoystick(vJoy joy, uint jID) { m_joy = joy; Index = jID; m_nButtons = m_joy.GetVJDButtonNumber(Index); m_nPov = m_joy.GetVJDDiscPovNumber(Index); m_prodS = m_joy.GetvJoyProductString( ); m_hasX = GetState(HID_USAGES.HID_USAGE_X); m_hasY = GetState(HID_USAGES.HID_USAGE_Y); m_hasZ = GetState(HID_USAGES.HID_USAGE_Z); m_hasRX = GetState(HID_USAGES.HID_USAGE_RX); m_hasRY = GetState(HID_USAGES.HID_USAGE_RY); m_hasRZ = GetState(HID_USAGES.HID_USAGE_RZ); m_hasSL1 = GetState(HID_USAGES.HID_USAGE_SL0); m_hasSL2 = GetState(HID_USAGES.HID_USAGE_SL1); for (int i = 1; i <= m_nPov; i++) { m_hasPov[i] = GetState(HID_USAGES.HID_USAGE_POV, i); } for (int i = 1; i <= m_nButtons; i++) { m_hasBtn[i] = GetState(HID_USAGES.HID_USAGE_WHL, i); // Use WHL as button qualifier... } }
/** * Checks to make sure the vJoy device has all the required configuration * @note Make sure to update this when adding code that adds buttons, axis, haptics, etc */ private bool IsDeviceValid(uint did) { var buttonN = vjoy.GetVJDButtonNumber(did); var hatN = vjoy.GetVJDDiscPovNumber(did); if (buttonN < 8) { Debug.LogWarning($"vJoy device has {buttonN} buttons, at least 8 are required"); return(false); } if (hatN < 4) { Debug.LogWarning($"vJoy device has {hatN} directional pov hat switches, " + "4 configured as directional are required"); return(false); } var xAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_X); var yAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_Y); var rzAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_RZ); if (!xAxis || !yAxis || !rzAxis) { Debug.LogWarning("vJoy device is missing one of the X/Y/Rz axis needed for the joystick " + $"[X:{xAxis}, Y: {yAxis}, Rz:{rzAxis}]"); return(false); } var zAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_Z); if (!zAxis) { Debug.LogWarning("vJoy device is missing the Z axis needed for the throttle"); return(false); } var rxAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_RX); var ryAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_RY); var sliderAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_SL0); if (!rxAxis || !ryAxis || !sliderAxis) { Debug.LogWarning("vJoy device is missing one of the Rx/Ry/Slider axis needed " + $"for the thruster axis [Rx:{rxAxis}, Ry: {ryAxis}, Slider:{sliderAxis}]"); return(false); } var dialAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_SL1); if (dialAxis) { return(true); } Debug.LogWarning("vJoy device is missing the Dial/Slider2 axis needed for the map zoom axis"); return(false); }
private void Initialize_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()) { MessageBox.Show("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); Program._shouldExit = true; System.Environment.Exit(0); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: break; case VjdStat.VJD_STAT_FREE: break; case VjdStat.VJD_STAT_BUSY: MessageBox.Show("vJoy Device is already owned by another feeder\nInput feeding will not occur."); //System.Environment.Exit(0); return; case VjdStat.VJD_STAT_MISS: MessageBox.Show("vJoy Device is not installed or disabled\nInput feeding will not occur."); //System.Environment.Exit(0); return; default: MessageBox.Show("vJoy Device general error\nInput feeding will not occur."); //System.Environment.Exit(0); return; } ; // 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); // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { MessageBox.Show("Failed to acquire vJoy device number"); Program._shouldExit = true; System.Environment.Exit(0); } joystick.ResetVJD(id); }
public void check2() //check if virual joystick have write driver installed and compatible with versions of vjoy { UInt32 DllVer = 0, DrvVer = 0; bool match = joystick1.DriverMatch(ref DllVer, ref DrvVer); if (match) { Debug.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer); } else { Debug.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer); } VjdStat status = joystick1.GetVJDStatus(joyid); switch (status) { case VjdStat.VJD_STAT_OWN: Debug.WriteLine("vJoy Device {0} is already owned by this feeder\n", joyid); break; case VjdStat.VJD_STAT_FREE: Debug.WriteLine("vJoy Device {0} is free\n", joyid); break; case VjdStat.VJD_STAT_BUSY: Debug.WriteLine( "vJoy Device {0} is already owned by another feeder\nCannot continue\n", joyid); return; case VjdStat.VJD_STAT_MISS: Debug.WriteLine( "vJoy Device {0} is not installed or disabled\nCannot continue\n", joyid); return; default: Debug.WriteLine("vJoy Device {0} general error\nCannot continue\n", joyid); return; } ; int nBtn = joystick1.GetVJDButtonNumber(joyid); int nDPov = joystick1.GetVJDDiscPovNumber(joyid); int nCPov = joystick1.GetVJDContPovNumber(joyid); bool X_Exist = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_X); bool Y_Exist = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_Y); bool Z_Exist = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_Z); bool RX_Exist = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_RX); prt = String.Format("Device[{0}]: Buttons={1}; DiscPOVs:{2}; ContPOVs:{3}", joyid, nBtn, nDPov, nCPov); Debug.WriteLine(prt); }
/** * Checks to make sure the vJoy device has all the required configuration * @note Make sure to update this when adding code that adds buttons, axis, haptics, etc */ private bool IsDeviceValid(uint deviceId) { var buttonN = vjoy.GetVJDButtonNumber(deviceId); var hatN = vjoy.GetVJDDiscPovNumber(deviceId); if (buttonN < 8) { Debug.LogWarningFormat("vJoy device has {0} buttons, at least 8 are required", buttonN); return(false); } if (hatN < 4) { Debug.LogWarningFormat("vJoy device has {0} directional pov hat switches, 4 configured as directional are required", hatN); return(false); } var xAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_X); var yAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_Y); var rzAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_RZ); if (!xAxis || !yAxis || !rzAxis) { Debug.LogWarningFormat("vJoy device is missing one of the X/Y/Rz axis needed for the joystick [X:{0}, Y: {1}, Rz:{2}]", xAxis, yAxis, rzAxis); return(false); } var zAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_Z); if (!zAxis) { Debug.LogWarning("vJoy device is missing the Z axis needed for the throttle"); return(false); } var rxAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_RX); var ryAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_RY); var sliderAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_SL0); if (!rxAxis || !ryAxis || !sliderAxis) { Debug.LogWarningFormat("vJoy device is missing one of the Rx/Ry/Slider axis needed for the thruster axis [Rx:{0}, Ry: {1}, Slider:{2}]", rxAxis, ryAxis, sliderAxis); return(false); } var dialAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_SL1); if (!dialAxis) { Debug.LogWarning("vJoy device is missing the Dial/Slider2 axis needed for the map zoom axis"); return(false); } return(true); }
public static bool checkJoystick(ref vJoy joystick, uint id) { bool checker = false; if (joystick.vJoyEnabled()) { VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: JoystickLog(null, new Logging.LogEventArgs($"Port {id} is already owned by this feeder (OK).")); checker = true; break; case VjdStat.VJD_STAT_FREE: JoystickLog(null, new Logging.LogEventArgs($"Port {id} is detected (OK).")); checker = true; break; case VjdStat.VJD_STAT_BUSY: JoystickLog(null, new Logging.LogEventArgs( $"Port {id} is already owned by another feeder, cannot continue.")); checker = false; return(checker); case VjdStat.VJD_STAT_MISS: JoystickLog(null, new Logging.LogEventArgs($"Port {id} is not detected.")); checker = false; return(checker); default: JoystickLog(null, new Logging.LogEventArgs($"Port {id} general error, cannot continue.")); checker = false; return(checker); } //fix missing buttons, if the count is off. if (joystick.GetVJDButtonNumber(id) != 12) { SystemHelper.CreateJoystick(id); } } return(checker); }
void Start() { joystick = new vJoy(); iReport = new vJoy.JoystickState(); if (joystick.vJoyEnabled()) { VjdStat status = joystick.GetVJDStatus(1); bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); joystick.AcquireVJD(id); joystick.ResetVJD(id); } fpsMonitor = GetComponent <FpsMonitor> (); displayFacePointsToggle.isOn = displayFacePoints; displayAxesToggle.isOn = displayAxes; displayHeadToggle.isOn = displayHead; displayEffectsToggle.isOn = displayEffects; enableLowPassFilterToggle.isOn = enableLowPassFilter; webCamTextureToMatHelper = gameObject.GetComponent <WebCamTextureToMatHelper> (); dlibShapePredictorFileName = DlibFaceLandmarkDetectorExample.dlibShapePredictorFileName; #if UNITY_WEBGL && !UNITY_EDITOR getFilePath_Coroutine = DlibFaceLandmarkDetector.UnityUtils.Utils.getFilePathAsync(dlibShapePredictorFileName, (result) => { getFilePath_Coroutine = null; dlibShapePredictorFilePath = result; Run(); }); StartCoroutine(getFilePath_Coroutine); #else dlibShapePredictorFilePath = DlibFaceLandmarkDetector.UnityUtils.Utils.getFilePath(dlibShapePredictorFileName); Run(); #endif }
/** * 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(); }
/// <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); }
public void initializeJoystick() { if (joystick == null) { joystick = new vJoy(); } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { NotifyStatusMessage("vJoy driver not enabled: Failed Getting vJoy attributes."); return; } else { NotifyStatusMessage(String.Format("Vendor: {0} Product :{1} Version Number:{2}", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString())); } // Get the state of the requested device VjdStat status = joystick.GetVJDStatus(jID); switch (status) { case VjdStat.VJD_STAT_OWN: NotifyStatusMessage(String.Format("vJoy Device {0} is already owned by this feeder", jID)); break; case VjdStat.VJD_STAT_FREE: NotifyStatusMessage(String.Format("vJoy Device {0} is free", jID)); break; case VjdStat.VJD_STAT_BUSY: NotifyStatusMessage(String.Format("vJoy Device {0} is already owned by another feeder. Cannot continue", jID)); return; case VjdStat.VJD_STAT_MISS: NotifyStatusMessage(String.Format("vJoy Device {0} is not installed or disabled. Cannot continue", jID)); return; default: NotifyStatusMessage(String.Format("vJoy Device {0} general error. Cannot continue", jID)); return; } ; // Check which axes are supported bool AxisX = joystick.GetVJDAxisExist(jID, HID_USAGES.HID_USAGE_X); bool AxisY = joystick.GetVJDAxisExist(jID, HID_USAGES.HID_USAGE_Y); bool AxisZ = joystick.GetVJDAxisExist(jID, HID_USAGES.HID_USAGE_Z); bool AxisRX = joystick.GetVJDAxisExist(jID, HID_USAGES.HID_USAGE_RX); bool AxisRZ = joystick.GetVJDAxisExist(jID, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device int nButtons = joystick.GetVJDButtonNumber(jID); int ContPovNumber = joystick.GetVJDContPovNumber(jID); int DiscPovNumber = joystick.GetVJDDiscPovNumber(jID); // Print results NotifyStatusMessage(String.Format("vJoy Device {0} capabilities:", jID)); NotifyStatusMessage(String.Format("Numner of buttons\t{0}", nButtons)); NotifyStatusMessage(String.Format("Numner of Continuous POVs\t{0}", ContPovNumber)); NotifyStatusMessage(String.Format("Numner of Descrete POVs\t{0}", DiscPovNumber)); NotifyStatusMessage(String.Format("Axis X\t\t{0}", AxisX ? "Yes" : "No")); NotifyStatusMessage(String.Format("Axis Y\t\t{0}", AxisX ? "Yes" : "No")); NotifyStatusMessage(String.Format("Axis Z\t\t{0}", AxisX ? "Yes" : "No")); NotifyStatusMessage(String.Format("Axis Rx\t\t{0}", AxisRX ? "Yes" : "No")); NotifyStatusMessage(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) { NotifyStatusMessage(String.Format("Version of Driver Matches DLL Version ({0:X})", DllVer)); } else { NotifyStatusMessage(String.Format("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})", DrvVer, DllVer)); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || (status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(jID))) { NotifyStatusMessage(String.Format("Failed to acquire vJoy device number {0}.", jID)); return; } else { NotifyStatusMessage(String.Format("Acquired: vJoy device number {0}.", jID)); } }
public TesterForm() { InitializeComponent(); joystick = new vJoy(); position = new vJoy.JoystickState(); ///// General driver data short iVer = joystick.GetvJoyVersion(); bool enabled = joystick.vJoyEnabled(); string Prd = joystick.GetvJoyProductString(); string Mnf = joystick.GetvJoyManufacturerString(); string Srl = joystick.GetvJoySerialNumberString(); string prt = String.Format("Product: {0}; Version {1:X}; Manuf: {2}; Serial:{3}", Prd, iVer, Mnf, Srl); label1.Text = prt; Enbld.Checked = enabled; ///// vJoy Device properties int nBtn = joystick.GetVJDButtonNumber(id); int nDPov = joystick.GetVJDDiscPovNumber(id); int nCPov = joystick.GetVJDContPovNumber(id); bool X_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); bool Y_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); bool Z_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool RX_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); prt = String.Format("Device[{0}]: Buttons={1}; DiscPOVs:{2}; ContPOVs:{3}", id, nBtn, nDPov, nCPov); label2.Text = prt; UInt32 DllVer = 0, DrvVer = 0; bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { prt = String.Format("Version of Driver Matches DLL Version {0:X}", DllVer); } else { prt = String.Format("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})", DrvVer, DllVer); } label7.Text = prt; long max = 10, min = 10; bool ok; ok = joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref max); ok = joystick.GetVJDAxisMin(id, HID_USAGES.HID_USAGE_X, ref min); ///// Write access to vJoy Device - Basic VjdStat status; status = joystick.GetVJDStatus(id); bool acq = joystick.AcquireVJD(id); status = joystick.GetVJDStatus(id); position.AxisX = 1000; position.AxisY = 5000; position.AxisZ = 10000; position.AxisXRot = 20000; position.Buttons = 0xA5A5A5A5; position.ButtonsEx1 = 0; bool upd = joystick.UpdateVJD(id, ref position); status = joystick.GetVJDStatus(id); //// Reset functions joystick.ResetButtons(id); // Register callback function // Function to register: Removal() // User data to pass: label2 joystick.RegisterRemovalCB(Removal, label2); }
public void SetUpJoystick() { joystick = new vJoy(); iReport = new vJoy.JoystickState(); 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; } ; int nButtons = joystick.GetVJDButtonNumber(id); // 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.ResetVJD(id); }
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); }
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
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) { // 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
public int MaxButtons() { return(_joystick.GetVJDButtonNumber(_deviceId)); }
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); } } }
/// <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); }
public static bool VjoyStart() { //string[] args = Environment.GetCommandLineArgs(); //Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); joystick.ResetVJD(id); // 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) { Debug.Log(string.Format("Illegal device ID {0}\nExit!", id)); return(false); } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { Debug.Log(string.Format("vJoy driver not enabled: Failed Getting vJoy attributes.\n")); return(false); } else { Debug.Log(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: Debug.Log(string.Format("vJoy Device {0} is already owned by this feeder\n", id)); break; case VjdStat.VJD_STAT_FREE: Debug.Log(string.Format("vJoy Device {0} is free\n", id)); break; case VjdStat.VJD_STAT_BUSY: Debug.Log(string.Format("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id)); return(false); case VjdStat.VJD_STAT_MISS: Debug.Log(string.Format("vJoy Device {0} is not installed or disabled\nCannot continue\n", id)); return(false); default: Debug.Log(string.Format("vJoy Device {0} general error\nCannot continue\n", id)); return(false); } ; // 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 Debug.Log(string.Format("\nvJoy Device {0} capabilities:\n", id)); Debug.Log(string.Format("Numner of buttons\t\t{0}\n", nButtons)); Debug.Log(string.Format("Numner of Continuous POVs\t{0}\n", ContPovNumber)); Debug.Log(string.Format("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber)); Debug.Log(string.Format("Axis X\t\t{0}\n", AxisX ? "Yes" : "No")); Debug.Log(string.Format("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No")); Debug.Log(string.Format("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No")); Debug.Log(string.Format("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No")); Debug.Log(string.Format("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) { Debug.Log(string.Format("Version of Driver Matches DLL Version ({0:X})\n", DllVer)); } else { Debug.Log(string.Format("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer)); } // Acquire the target bool stat = ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE))); bool acq = (!joystick.AcquireVJD(id)); if (stat && acq) { Debug.Log(string.Format("Failed to acquire vJoy device number {0}.\n", id)); return(false); } else { Debug.Log(string.Format("Acquired: vJoy device number {0}.\n", id)); } //Debug.Log(string.Format("\npress enter to stat feeding"); //Console.ReadKey(true); return(true); } // Main
public bool Start(bool[] parSelectedPads, PadSettings config, DeviceManagement devManLevel) { //Setup vJoy //Perform device enable/disable based on dll version //EnableVJoy needs to know which version of vJoy we are running joystick = new vJoy(); UInt32 DllVer = 0, DrvVer = 0; joystick.DriverMatch(ref DllVer, ref DrvVer); //MIN Version Check 1 vJoyVersion = DllVer; if (vJoyVersion < vJoyConstants.MIN_VER) { Trace.WriteLine("vJoy version less than required: Aborting\n"); Stop(parSelectedPads, devManLevel); return(false); } if ((devManLevel & DeviceManagement.vJoy_Config) == DeviceManagement.vJoy_Config) { EnableVJoy(false); SetupVjoy(parSelectedPads, config); vJoyInstall.RefreshvJoy(); //do it like vJConfig does (needed in 2.1.6) EnableVJoy(true); } else if ((devManLevel & DeviceManagement.vJoy_Device) == DeviceManagement.vJoy_Device) { EnableVJoy(true); } if (!joystick.vJoyEnabled()) { Trace.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return(false); } else { Trace.WriteLine(string.Format("Vendor : {0}\nProduct: {1}\nVersion: {2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString())); // Test if DLL matches the driver bool match = joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { Trace.WriteLine(string.Format("Version of Driver Matches DLL Version ({0:X})", DllVer)); Trace.WriteLine(string.Format("Version of vJoyInterfaceWrap.dll is ({0})", typeof(vJoy).Assembly.GetName().Version)); Trace.WriteLine(string.Format("Version of ScpControl.dll is ({0})\n", typeof(ScpControl.ScpProxy).Assembly.GetName().Version)); } else { Trace.WriteLine(string.Format("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer)); Stop(parSelectedPads, devManLevel); return(false); } //MinVersion Check vJoyVersion = DrvVer; if (vJoyVersion < vJoyConstants.MIN_VER) { Trace.WriteLine("vJoy version less than required: Aborting\n"); Stop(parSelectedPads, devManLevel); return(false); } } for (uint dsID = 1; dsID <= SCPConstants.MAX_XINPUT_DEVICES; dsID++) { if (parSelectedPads[dsID - 1]) { uint id = GetvjFromDS(dsID); // Acquire the target VjdStat status = joystick.GetVJDStatus(id); if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { Trace.WriteLine(string.Format("Failed to acquire vJoy device number {0}.", id)); Stop(parSelectedPads, devManLevel); return(false); } else { Trace.WriteLine(string.Format("Acquired vJoy device number {0}.", id)); } Trace.WriteLine(string.Format("Buttons : {0}.", joystick.GetVJDButtonNumber(id))); Trace.WriteLine(string.Format("DiscPov : {0}.", joystick.GetVJDDiscPovNumber(id))); Trace.WriteLine(string.Format("ContPov : {0}.", joystick.GetVJDContPovNumber(id))); //FFB if (config.ffb) { vibrationCore = new vJoyVibrate(joystick); vibrationCore.FfbInterface(dsID); vibrationCore.VibrationCommand += VibEventProxy; } // Reset this device to default values joystick.ResetVJD(id); //Set Axis to mid value joyReport[dsID - 1].AxisX = vJoyConstants.HALF_AXIS_VALUE; joyReport[dsID - 1].AxisY = vJoyConstants.HALF_AXIS_VALUE; joyReport[dsID - 1].AxisZ = vJoyConstants.HALF_AXIS_VALUE; joyReport[dsID - 1].AxisXRot = vJoyConstants.HALF_AXIS_VALUE; joyReport[dsID - 1].AxisYRot = vJoyConstants.HALF_AXIS_VALUE; joyReport[dsID - 1].AxisZRot = vJoyConstants.HALF_AXIS_VALUE; joyReport[dsID - 1].Slider = vJoyConstants.HALF_AXIS_VALUE; joyReport[dsID - 1].Dial = vJoyConstants.HALF_AXIS_VALUE; } } return(true); }
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; }
/// <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); }
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 void StartInjector() { // Create one joystick object and a position structure. var joystick = new vJoy(); var joystick2 = new vJoy(); uint id = 1; uint id2 = 2; 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() || !joystick2.vJoyEnabled()) { Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return; } Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString()); Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick2.GetvJoyManufacturerString(), joystick2.GetvJoyProductString(), joystick2.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; } ; // Get the state of the requested device var status2 = joystick2.GetVJDStatus(id2); switch (status2) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id2); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free\n", id2); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id2); return; case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id2); return; default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id2); 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); // Check which axes are supported bool AxisX2 = joystick2.GetVJDAxisExist(id2, HID_USAGES.HID_USAGE_X); bool AxisY2 = joystick2.GetVJDAxisExist(id2, HID_USAGES.HID_USAGE_Y); bool AxisZ2 = joystick2.GetVJDAxisExist(id2, HID_USAGES.HID_USAGE_Z); bool AxisRX2 = joystick2.GetVJDAxisExist(id2, HID_USAGES.HID_USAGE_RX); bool AxisRZ2 = joystick2.GetVJDAxisExist(id2, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device int nButtons = joystick.GetVJDButtonNumber(id); int nButtons2 = joystick2.GetVJDButtonNumber(id2); // 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); } bool match2 = joystick2.DriverMatch(ref DllVer, ref DrvVer); if (match2) { 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; } // Acquire the target if ((status2 == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && !joystick2.AcquireVJD(id2))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id2); return; } Console.WriteLine("Acquired: vJoy device number {0}.\n", id2); long maxval = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); joystick2.GetVJDAxisMax(id2, HID_USAGES.HID_USAGE_X, ref maxval); // Reset this device to default values joystick.ResetVJD(id); joystick2.ResetVJD(id2); // Feed the device in endless loop joystick2.SetBtn(false, 2, 10); while (!KillMe) { if (Digitals != null && Digitals.Length != 0) { for (int i = 0; i < Digitals.Length; i++) { //if(i >= Digitals.Length / 2) //{ // joystick2.SetBtn(Digitals[i], id + 1, (uint)(i - (Digitals.Length / 2))); //} //else //{ if (Digitals[i]) { // Start SetButton(joystick, joystick2, true, i); } else { SetButton(joystick, joystick2, false, i); } //} } //for (var i = 0; i < Digitals.Length; i++) //{ // joystick.SetBtn(Digitals[i], id, (uint) i); //} } //if (AnalogChannels != null && AnalogChannels.Length != 0) //{ // int ptr = 48; // for (int i = 0; i < AnalogChannels.Length; i++) // { // if (i == 1) // { // joystick.SetAxis(CalculateDiFromJvs((byte)AnalogChannels[i], _gasMinimum, _gasMaximum), id, (HID_USAGES)ptr); // } // else if (i == 2) // { // joystick.SetAxis(CalculateDiFromJvs((byte)AnalogChannels[i], _brakeMinimum, _brakeMaximum), id, (HID_USAGES)ptr); // } // else if (i == 0) // { // joystick.SetAxis(CalculateDiFromJvs((byte)AnalogChannels[i], _wheelMinimum, _wheelMaximum), id, (HID_USAGES)ptr); // } // ptr++; // } //} Thread.Sleep(10); } }
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; } }
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