public void Connect(string deviceId) { if (!UInt32.TryParse(deviceId, out _deviceId)) { throw new PTGenericException($"Error parsing device ID '{deviceId}'. Must be a number."); } if (_deviceId < 1 || _deviceId > 16) { throw new PTGenericException($"Illegal device ID '{deviceId}'. Must be between 1 and 16, inclusive."); } // Initialize the joystick and position structure. _joystick = new vJoy(); // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!_joystick.vJoyEnabled()) { throw new PTGenericException("vJoy driver not enabled: Failed Getting vJoy attributes."); } else { _logger.Debug($"Vendor: {_joystick.GetvJoyManufacturerString()}"); _logger.Debug($"Product: {_joystick.GetvJoyProductString()}"); _logger.Debug($"Version: {_joystick.GetvJoySerialNumberString()}"); } // Test if DLL matches the driver uint dllVer = 0, drvVer = 0; bool isDriverMatch = _joystick.DriverMatch(ref dllVer, ref drvVer); if (isDriverMatch) { _logger.Debug($"Version of Driver Matches DLL Version ({dllVer})"); } else { _logger.Warn($"Version of Driver ({drvVer}) does NOT match DLL Version ({dllVer})"); } // Get the state of the requested device var status = _joystick.GetVJDStatus(_deviceId); switch (status) { case VjdStat.VJD_STAT_OWN: _logger.Debug($"vJoy Device '{_deviceId}' is already owned by this feeder."); break; case VjdStat.VJD_STAT_FREE: _logger.Debug($"vJoy Device '{_deviceId}' is free\n"); break; case VjdStat.VJD_STAT_BUSY: throw new PTGenericException($"vJoy Device '{_deviceId}' is already owned by another feeder. Cannot connect."); case VjdStat.VJD_STAT_MISS: throw new PTGenericException($"vJoy Device '{_deviceId}' is not installed or disabled. Cannot connect."); default: throw new PTGenericException($"vJoy Device '{_deviceId}' general error. Cannot connect."); } ; // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_deviceId)))) { throw new PTGenericException($"Failed to acquire vJoy device number '{_deviceId}'."); } else { _logger.Info($"Acquired: vJoy device number '{_deviceId}'."); } _axisX = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_X); _axisY = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_Y); _axisZ = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_Z); _axisRX = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_RX); _axisRY = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_RY); _axisRZ = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_RZ); // Get the number of buttons and POV Hat switchessupported by this vJoy device _nButtons = _joystick.GetVJDButtonNumber(_deviceId); _contPovNumber = _joystick.GetVJDContPovNumber(_deviceId); _discPovNumber = _joystick.GetVJDDiscPovNumber(_deviceId); _joystick.GetVJDAxisMin(_deviceId, HID_USAGES.HID_USAGE_X, ref _axisMinX); _joystick.GetVJDAxisMax(_deviceId, HID_USAGES.HID_USAGE_X, ref _axisMaxX); _joystick.GetVJDAxisMin(_deviceId, HID_USAGES.HID_USAGE_Y, ref _axisMinY); _joystick.GetVJDAxisMax(_deviceId, HID_USAGES.HID_USAGE_Y, ref _axisMaxY); _joystick.GetVJDAxisMin(_deviceId, HID_USAGES.HID_USAGE_Z, ref _axisMinZ); _joystick.GetVJDAxisMax(_deviceId, HID_USAGES.HID_USAGE_Z, ref _axisMaxZ); _joystick.GetVJDAxisMin(_deviceId, HID_USAGES.HID_USAGE_RX, ref _axisMinRX); _joystick.GetVJDAxisMax(_deviceId, HID_USAGES.HID_USAGE_RX, ref _axisMaxRX); _joystick.GetVJDAxisMin(_deviceId, HID_USAGES.HID_USAGE_RY, ref _axisMinRY); _joystick.GetVJDAxisMax(_deviceId, HID_USAGES.HID_USAGE_RY, ref _axisMaxRY); _joystick.GetVJDAxisMin(_deviceId, HID_USAGES.HID_USAGE_RZ, ref _axisMinRZ); _joystick.GetVJDAxisMax(_deviceId, HID_USAGES.HID_USAGE_RZ, ref _axisMaxRZ); PrintDeviceSupport(); }
/// <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); }
/// <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 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 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 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 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); }
static void Main(string[] args) { // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); Verbose = args.Any(l => l.ToLower().Equals("v")); SerialStates.CenterInsensibility = args.Any(l => l.ToLower().Equals("i")); // Device ID can only be in the range 1-16 if (args.Length > 1 && !String.IsNullOrEmpty(args[0]) && !String.IsNullOrEmpty(args[1])) { id = Convert.ToUInt32(args[0]); serialLink = new SerialLink(Convert.ToInt32(args[1])); } else { Console.WriteLine($"Input parameter vJoy id and com port!"); return; } 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 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("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", 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 Ry\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 SerialStates.AxeMaxVal); serialLink.OpenPortAndRead(); }
public MouseToJoystickHandler(M2JConfig cfgObj) { this._id = cfgObj.VjoyDevId; this._invertX = cfgObj.InvertX ? -1 : 1; this._invertY = cfgObj.InvertY ? -1 : 1; this._senseX = cfgObj.SenseX == 0 ? 0.1 : cfgObj.SenseX; this._senseY = cfgObj.SenseY == 0 ? 0.1 : cfgObj.SenseY; this._autoCenter = cfgObj.AutoCenter; this._autoSize = cfgObj.AutoSize; this._manualWidth = cfgObj.ManualWidth; this._manualHeight = cfgObj.ManualHeight; this._leftJoy = cfgObj.LeftJoy; _joystick = new vJoy(); // Make sure driver is enabled if (!_joystick.vJoyEnabled()) { throw new InvalidOperationException("vJoy driver not enabled: Failed Getting vJoy attributes"); } // Make sure we can get the joystick VjdStat status = _joystick.GetVJDStatus(_id); switch (status) { case VjdStat.VJD_STAT_OWN: case VjdStat.VJD_STAT_FREE: break; case VjdStat.VJD_STAT_BUSY: throw new InvalidOperationException("vJoy device is already owned by another feeder"); case VjdStat.VJD_STAT_MISS: throw new InvalidOperationException("vJoy device is not installed or is disabled"); default: throw new Exception("vJoy device general error"); } ; if (!this._joystick.AcquireVJD(this._id)) { throw new Exception("Failed to acquire vJoy device"); } if (!this._joystick.ResetVJD(this._id)) { throw new Exception("Failed to reset vJoy device"); } if (_leftJoy) { if (!this._joystick.GetVJDAxisMax(this._id, HID_USAGES.HID_USAGE_X, ref this._axisMax)) { throw new Exception("Failed to get vJoy axis max"); } if (!this._joystick.GetVJDAxisMin(this._id, HID_USAGES.HID_USAGE_X, ref this._axisMin)) { throw new Exception("Failed to get vJoy axis min"); } } else { if (!this._joystick.GetVJDAxisMax(this._id, HID_USAGES.HID_USAGE_RX, ref this._axisMax)) { throw new Exception("Failed to get vJoy axis max"); } if (!this._joystick.GetVJDAxisMin(this._id, HID_USAGES.HID_USAGE_RX, ref this._axisMin)) { throw new Exception("Failed to get vJoy axis min"); } } this._axisMid = _axisMax - (_axisMax - _axisMin) / 2; // Register for mouse and keyboard events _eventHooker = Hook.GlobalEvents(); _eventHooker.MouseMove += HandleMouseMove; _eventHooker.MouseDown += HandleMouseDown; _eventHooker.MouseUp += HandleMouseUp; }
private void init(uint id) { this.id = id; joystick = new vJoy(); iReport = new vJoy.JoystickState(); // Device ID can only be in the range 1-16 if (id <= 0 || id > 16) { err(String.Format("Illegal device ID {0} (1-16)", id)); } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { err("vJoy driver not enabled: Failed Getting vJoy attributes."); } else { Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString()); } VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is already owned by this feeder.", id); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free.", id); break; case VjdStat.VJD_STAT_BUSY: err(String.Format("vJoy Device {0} is already owned by another feeder.", id)); return; case VjdStat.VJD_STAT_MISS: err(String.Format("vJoy Device {0} is not installed or disabled.", id)); return; default: err(String.Format("vJoy Device {0} general error.", 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:", id); * Console.WriteLine("Numner of buttons\t\t{0}", nButtons); * Console.WriteLine("Numner of Continuous POVs\t{0}", ContPovNumber); * Console.WriteLine("Numner of Descrete POVs\t\t{0}", DiscPovNumber); * Console.WriteLine("Axis X\t\t{0}", AxisX ? "Yes" : "No"); * Console.WriteLine("Axis Y\t\t{0}", AxisX ? "Yes" : "No"); * Console.WriteLine("Axis Z\t\t{0}", AxisX ? "Yes" : "No"); * Console.WriteLine("Axis Rx\t\t{0}", AxisRX ? "Yes" : "No"); * Console.WriteLine("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})", DllVer); } else { Console.WriteLine("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(id)))) { err(String.Format("Failed to acquire vJoy device number {0}.", id)); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.", id); } initAxes(); }
public MouseToJoystickHandler(uint vjoyDevId, bool invertX, bool invertY, bool autoCenter, bool autoSize, int manualWidth, int manualHeight) { this.id = vjoyDevId; this.invertX = invertX ? -1 : 1; this.invertY = invertY ? -1 : 1; this.autoCenter = autoCenter; this.autoSize = autoSize; this.manualWidth = manualWidth; this.manualHeight = manualHeight; joystick = new vJoy(); // Make sure driver is enabled if (!joystick.vJoyEnabled()) { throw new InvalidOperationException("vJoy driver not enabled: Failed Getting vJoy attributes"); } // Make sure we can get the joystick VjdStat status = joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: case VjdStat.VJD_STAT_FREE: break; case VjdStat.VJD_STAT_BUSY: throw new InvalidOperationException("vJoy device is already owned by another feeder"); case VjdStat.VJD_STAT_MISS: throw new InvalidOperationException("vJoy device is not installed or is disabled"); default: throw new Exception("vJoy device general error"); } ; if (!this.joystick.AcquireVJD(this.id)) { throw new Exception("Failed to acquire vJoy device"); } if (!this.joystick.ResetVJD(this.id)) { throw new Exception("Failed to reset vJoy device"); } if (!this.joystick.GetVJDAxisMax(this.id, HID_USAGES.HID_USAGE_X, ref this.AXIS_MAX)) { throw new Exception("Failed to get vJoy axis max"); } if (!this.joystick.GetVJDAxisMin(this.id, HID_USAGES.HID_USAGE_X, ref this.AXIS_MIN)) { throw new Exception("Failed to get vJoy axis min"); } this.AXIS_MID = AXIS_MAX - (AXIS_MAX - AXIS_MIN) / 2; // Register for mouse events mouseEventHooker = Hook.GlobalEvents(); mouseEventHooker.MouseMove += HandleMouseMove; mouseEventHooker.MouseDown += HandleMouseDown; mouseEventHooker.MouseUp += HandleMouseUp; }
static public int InitializeFeeder(/*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(-1); } // 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(-1); } 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; return(-1); case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id); //return; return(-1); default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id); //return; return(-1); } ; // 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; return(-1); } else { Console.WriteLine("Acquired: vJoy device number {0}.\n", id); stat = "On!"; } joystick.ResetVJD(id); return(0); }
public void Init(string[] args) { // Create one joystick object and a position structure. joystick = new vJoy(); iReport = new vJoy.JoystickState(); Console.WriteLine("App started\n"); // 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) try { 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()); } } catch (Exception e) { Console.WriteLine(e.ToString() + "\n====================================\n程序出现错误,即将退出"); Console.ReadKey(); return; } // 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", id); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine("vJoy Device {0} is free", id); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue", id); return; case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue", id); return; default: Console.WriteLine("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 int nButtons = joystick.GetVJDButtonNumber(id); int ContPovNumber = joystick.GetVJDContPovNumber(id); int DiscPovNumber = joystick.GetVJDDiscPovNumber(id); // Print results Console.WriteLine("\nvJoy Device {0} capabilities:", id); Console.WriteLine("Numner of buttons\t\t{0}", nButtons); Console.WriteLine("Numner of Continuous POVs\t{0}", ContPovNumber); Console.WriteLine("Numner of Descrete POVs\t\t{0}", DiscPovNumber); Console.WriteLine("Axis X\t\t{0}", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Y\t\t{0}", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Z\t\t{0}", AxisX ? "Yes" : "No"); Console.WriteLine("Axis Rx\t\t{0}", AxisRX ? "Yes" : "No"); Console.WriteLine("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})", DllVer); } else { Console.WriteLine("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(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.", id); return; } else { Console.WriteLine("Acquired: vJoy device number {0}.", id); } Console.WriteLine("虚拟手柄成功加载\n========================================"); 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); joystick.SetAxis(16384, id, HID_USAGES.HID_USAGE_Z); /*#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 */ }
public void TestVjoy() { // Create one joystick object and a position structure. // Device ID can only be in the range 1-16 if (_id <= 0 || _id > 16) { _logger.WriteLog($"Illegal device ID {_id}\nExit!"); return; } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!_joystick.vJoyEnabled()) { _logger.WriteLog($"vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return; } else { _logger.WriteLog($"Vendor: {_joystick.GetvJoyManufacturerString()}\nProduct :{_joystick.GetvJoyProductString()}\nVersion Number:{_joystick.GetvJoySerialNumberString()}\n"); } // Get the state of the requested device VjdStat status = _joystick.GetVJDStatus(_id); switch (status) { case VjdStat.VJD_STAT_OWN: _logger.WriteLog($"vJoy Device {_id} is already owned by this feeder"); break; case VjdStat.VJD_STAT_FREE: _logger.WriteLog($"vJoy Device {_id} is free"); break; case VjdStat.VJD_STAT_BUSY: _logger.WriteLog($"vJoy Device {_id} is already owned by another feeder\nCannot continue"); return; case VjdStat.VJD_STAT_MISS: _logger.WriteLog($"vJoy Device {_id} is not installed or disabled\nCannot continue"); return; default: _logger.WriteLog($"vJoy Device {_id} general error\nCannot continue"); 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 switchessupported by this vJoy device int nButtons = _joystick.GetVJDButtonNumber(_id); int ContPovNumber = _joystick.GetVJDContPovNumber(_id); int DiscPovNumber = _joystick.GetVJDDiscPovNumber(_id); // Print results _logger.WriteLog($"\nvJoy Device {_id} capabilities:"); _logger.WriteLog($"Numner of buttons\t\t{nButtons}"); _logger.WriteLog($"Numner of Continuous POVs\t{ContPovNumber}"); _logger.WriteLog($"Numner of Descrete POVs\t\t{DiscPovNumber}"); _logger.WriteLog($"Axis X\t\t{AxisX.ToString()}"); _logger.WriteLog($"Axis Y\t\t{AxisY.ToString()}"); _logger.WriteLog($"Axis Z\t\t{AxisZ.ToString()}"); _logger.WriteLog($"Axis Rx\t\t{AxisRX.ToString()}"); _logger.WriteLog($"Axis Ry\t\t{AxisRY.ToString()}"); _logger.WriteLog($"Axis Rz\t\t{AxisRZ.ToString()}"); // Test if DLL matches the driver UInt32 DllVer = 0, DrvVer = 0; bool match = _joystick.DriverMatch(ref DllVer, ref DrvVer); if (match) { _logger.WriteLog($"Version of Driver Matches DLL Version ({DllVer:X})"); } else { _logger.WriteLog($"Version of Driver ({DrvVer:X}) does NOT match DLL Version ({DllVer:X})"); } // Acquire the target if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_id)))) { _logger.WriteLog($"Failed to acquire vJoy device number {_id}"); return; } else { _logger.WriteLog($"Acquired: vJoy device number {_id}"); } _logger.WriteLog($"\npress enter to stat feeding"); }
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; }
private bool InitializeVJoy() { const int id = 1; // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!_joystick.vJoyEnabled()) { Console.WriteLine("vJoy driver not enabled; failed getting vJoy attributes."); return(false); } // Get the state of the requested device var status = _joystick.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine($"vJoy device {id} is already owned by this feeder."); break; case VjdStat.VJD_STAT_FREE: Console.WriteLine($"vJoy device {id} is free."); break; case VjdStat.VJD_STAT_BUSY: Console.WriteLine($"vJoy device {id} is already owned by another feeder. Failed acquiring device."); return(false); case VjdStat.VJD_STAT_MISS: Console.WriteLine($"vJoy device {id} is not installed or disabled. Failed acquiring device."); return(false); default: Console.WriteLine($"vJoy device {id} general error. Failed acquiring device."); return(false); } ; // Test if DLL matches the driver uint dllVer = 0; uint drvVer = 0; bool match = _joystick.DriverMatch(ref dllVer, ref drvVer); if (!match) { Console.WriteLine($"Version of vJoy driver ({drvVer:X}) does not match DLL version ({dllVer:X})"); return(false); } // 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 {id}."); return(false); } _isAcquired = true; Console.WriteLine($"Successfully acquired vJoy device number {id}."); 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 AxisZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); int nButtons = joystick.GetVJDButtonNumber(id); if (!AxisX || !AxisY || !AxisZ || !AxisRZ || nButtons < 8) { MessageBox.Show("vJoy Device is not configured correctly. Must have X, Y, Z, Rz analog axis and 8 buttons. 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 VjdStat GetVJDStatus(uint deviceID) { return(joystick.GetVJDStatus(deviceID)); }
void OnEnable() { vjoy = new vJoy(); if (!vjoy.vJoyEnabled()) { SetStatus(VJoyStatus.NotInstalled); enabled = false; return; } uint DllVer = 0, DrvVer = 0; bool match = vjoy.DriverMatch(ref DllVer, ref DrvVer); if (match) { Debug.LogFormat("vJoy Driver Version Matches vJoy DLL Version ({0:X})", DllVer); } else { Debug.LogErrorFormat("vJoy Driver Version ({0:X}) does NOT match vJoy DLL Version ({1:X})", DrvVer, DllVer); SetStatus(VJoyStatus.VersionMismatch); enabled = false; return; } VjdStat deviceStatus = vjoy.GetVJDStatus(deviceId); switch (deviceStatus) { case VjdStat.VJD_STAT_FREE: case VjdStat.VJD_STAT_OWN: // We can continue if the device is free or we own it break; case VjdStat.VJD_STAT_MISS: Debug.LogWarningFormat("vJoy Device {0} is not installed or is disabled", deviceId); SetStatus(VJoyStatus.DeviceUnavailable); enabled = false; return; case VjdStat.VJD_STAT_BUSY: Debug.LogWarningFormat("vJoy Device {0} is owned by another application", deviceId); SetStatus(VJoyStatus.DeviceOwned); enabled = false; return; default: Debug.LogError("Unknown vJoy device status error"); SetStatus(VJoyStatus.DeviceError); enabled = false; return; } if (!IsDeviceValid(deviceId)) { Debug.LogError("vJoy device is not configured correctly"); SetStatus(VJoyStatus.DeviceMisconfigured); enabled = false; return; } if (deviceStatus == VjdStat.VJD_STAT_FREE) { if (vjoy.AcquireVJD(deviceId)) { Debug.LogFormat("Aquired vJoy device {0}", deviceId); } else { Debug.LogErrorFormat("Unable to aquire vJoy device {0}", deviceId); SetStatus(VJoyStatus.DeviceNotAquired); enabled = false; return; } } else if (deviceStatus == VjdStat.VJD_STAT_OWN) { Debug.LogFormat("vJoy device {0} already aquired", deviceId); } SetStatus(VJoyStatus.Ready); }
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); } } }
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 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); } }
/// <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 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); }
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 Init(MainForm parent) { mainForm = parent; mainForm.SetDeviceNames(deviceNames); ClearDevices(); // Create one joystick object and a position structure. joystick = new vJoy(); vjoyEnabled = false; // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!joystick.vJoyEnabled()) { mainForm.ReportError("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return; } input = new DirectInput(); iReport = new vJoy.JoystickState(); // 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: mainForm.ReportError("vJoy Device is already owned by another feeder. Cannot continue"); return; case VjdStat.VJD_STAT_MISS: mainForm.ReportError("vJoy Device is not installed or disabled. Cannot continue"); return; default: mainForm.ReportError("vJoy Device general error. Cannot continue"); return; } ; if (!ValidateVJoyConfiguration()) { return; } if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id)))) { mainForm.ReportError("Failed to acquire vJoy device number"); return; } long maxval = 0; joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval); axisScale = (double)maxval / 65536.0; mainForm.ReportVJoyVersion(joystick.GetvJoySerialNumberString()); vjoyEnabled = true; }
/** * 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
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
//checks private static bool valid_controller_info(vJoy controller, uint id, ref INFO_STRUCT info) { if (id <= 0 || id > 16) { Console.WriteLine("Bad device ID {0}\nExit!", id); return(false); } // Get the driver attributes (Vendor ID, Product ID, Version Number) if (!controller.vJoyEnabled()) { Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n"); return(false); } else { Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", controller.GetvJoyManufacturerString(), controller.GetvJoyProductString(), controller.GetvJoySerialNumberString()); } // Get the state of the requested device VjdStat status = controller.GetVJDStatus(id); switch (status) { case VjdStat.VJD_STAT_OWN: Console.WriteLine("vJoy Device {0} is being used\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 being used \nCannot continue\n", id); return(false); case VjdStat.VJD_STAT_MISS: Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id); return(false); default: Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id); return(false); } ; info.axis_X = controller.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X); info.axis_Y = controller.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y); info.axis_Z = controller.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z); info.axis_RX = controller.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX); info.axis_RY = controller.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RY); info.axis_RZ = controller.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ); info.n_buttons = controller.GetVJDButtonNumber(id); info.n_POV = (byte)controller.GetVJDContPovNumber(id); info.n_DPOV = (byte)controller.GetVJDDiscPovNumber(id); if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!controller.AcquireVJD(id)))) { Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id); return(false); } return(true); }