コード例 #1
0
        // User-defined Removal/Arival callback Function
        // When registered, label2 was passed as user-data
        private void Removal(bool removal, bool first, object userData)
        {
            string prt;
            Label  l = userData as Label;

            int  nBtn     = joystick.GetVJDButtonNumber(id);
            int  nDPov    = joystick.GetVJDDiscPovNumber(id);
            int  nCPov    = joystick.GetVJDContPovNumber(id);
            bool X_Exist  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X);
            bool Y_Exist  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y);
            bool Z_Exist  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z);
            bool RX_Exist = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX);

            // Final values after the last arival
            if (!removal && !first)
            {
                prt         = String.Format("Device[{0}]: Buttons={1}; DiscPOVs:{2}; ContPOVs:{3}", id, nBtn, nDPov, nCPov);
                label2.Text = prt;
            }

            // Temporary message during intermediate states
            else
            {
                prt         = String.Format("Device[{0}]: Wait ...", id);
                label2.Text = prt;
            }
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: lalitsom/MultiKeys
        public void check2() //check if virual joystick have write driver installed and compatible with versions of vjoy
        {
            UInt32 DllVer = 0, DrvVer = 0;
            bool   match = joystick1.DriverMatch(ref DllVer, ref DrvVer);

            if (match)
            {
                Debug.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer);
            }
            else
            {
                Debug.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n",
                                DrvVer, DllVer);
            }

            VjdStat status = joystick1.GetVJDStatus(joyid);

            switch (status)
            {
            case VjdStat.VJD_STAT_OWN:
                Debug.WriteLine("vJoy Device {0} is already owned by this feeder\n", joyid);
                break;

            case VjdStat.VJD_STAT_FREE:
                Debug.WriteLine("vJoy Device {0} is free\n", joyid);
                break;

            case VjdStat.VJD_STAT_BUSY:
                Debug.WriteLine(
                    "vJoy Device {0} is already owned by another feeder\nCannot continue\n", joyid);
                return;

            case VjdStat.VJD_STAT_MISS:
                Debug.WriteLine(
                    "vJoy Device {0} is not installed or disabled\nCannot continue\n", joyid);
                return;

            default:
                Debug.WriteLine("vJoy Device {0} general error\nCannot continue\n", joyid);
                return;
            }
            ;

            int  nBtn     = joystick1.GetVJDButtonNumber(joyid);
            int  nDPov    = joystick1.GetVJDDiscPovNumber(joyid);
            int  nCPov    = joystick1.GetVJDContPovNumber(joyid);
            bool X_Exist  = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_X);
            bool Y_Exist  = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_Y);
            bool Z_Exist  = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_Z);
            bool RX_Exist = joystick1.GetVJDAxisExist(joyid, HID_USAGES.HID_USAGE_RX);

            prt = String.Format("Device[{0}]: Buttons={1}; DiscPOVs:{2}; ContPOVs:{3}",
                                joyid, nBtn, nDPov, nCPov);
            Debug.WriteLine(prt);
        }
コード例 #3
0
        /**
         * Checks to make sure the vJoy device has all the required configuration
         * @note Make sure to update this when adding code that adds buttons, axis, haptics, etc
         */
        private bool IsDeviceValid(uint did)
        {
            var buttonN = vjoy.GetVJDButtonNumber(did);
            var hatN    = vjoy.GetVJDDiscPovNumber(did);

            if (buttonN < 8)
            {
                Debug.LogWarning($"vJoy device has {buttonN} buttons, at least 8 are required");
                return(false);
            }

            if (hatN < 4)
            {
                Debug.LogWarning($"vJoy device has {hatN} directional pov hat switches, " +
                                 "4 configured as directional are required");
                return(false);
            }

            var xAxis  = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_X);
            var yAxis  = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_Y);
            var rzAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_RZ);

            if (!xAxis || !yAxis || !rzAxis)
            {
                Debug.LogWarning("vJoy device is missing one of the X/Y/Rz axis needed for the joystick " +
                                 $"[X:{xAxis}, Y: {yAxis}, Rz:{rzAxis}]");
                return(false);
            }

            var zAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_Z);

            if (!zAxis)
            {
                Debug.LogWarning("vJoy device is missing the Z axis needed for the throttle");
                return(false);
            }

            var rxAxis     = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_RX);
            var ryAxis     = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_RY);
            var sliderAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_SL0);

            if (!rxAxis || !ryAxis || !sliderAxis)
            {
                Debug.LogWarning("vJoy device is missing one of the Rx/Ry/Slider axis needed " +
                                 $"for the thruster axis [Rx:{rxAxis}, Ry: {ryAxis}, Slider:{sliderAxis}]");
                return(false);
            }

            var dialAxis = vjoy.GetVJDAxisExist(did, HID_USAGES.HID_USAGE_SL1);

            if (dialAxis)
            {
                return(true);
            }

            Debug.LogWarning("vJoy device is missing the Dial/Slider2 axis needed for the map zoom axis");
            return(false);
        }
コード例 #4
0
        private vJoy initVjoy(uint id)
        {
            var joystick = new vJoy();
            var iReport  = new vJoy.JoystickState();

            // Get the state of the requested device
            VjdStat status = joystick.GetVJDStatus(id);

            /*switch (status)
             * {
             *  case VjdStat.VJD_STAT_OWN:
             *      MessageBox.Show(string.Format("vJoy Device {0} is already owned by this feeder\n", id));
             *      break;
             *  case VjdStat.VJD_STAT_FREE:
             *      MessageBox.Show(string.Format("vJoy Device {0} is free\n", id));
             *      break;
             *  case VjdStat.VJD_STAT_BUSY:
             *      MessageBox.Show(string.Format("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id));
             *      return joystick;
             *  case VjdStat.VJD_STAT_MISS:
             *      MessageBox.Show(string.Format("vJoy Device {0} is not installed or disabled\nCannot continue\n", id));
             *      return joystick;
             *  default:
             *      MessageBox.Show(string.Format("vJoy Device {0} general error\nCannot continue\n", id));
             *      return joystick;
             * }*/
            bool AxisX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X);

            if (joystick.AcquireVJD(id) == false)
            {
                MessageBox.Show("Could not acquire vJoy " + id);
            }
            Console.WriteLine(AxisX);
            return(joystick);
        }
コード例 #5
0
ファイル: vJoyManager.cs プロジェクト: xuxiandi/XJoy
        public List <HID_USAGES> GetExistingAxes(uint Index)
        {
            List <HID_USAGES> availableAxes = new List <HID_USAGES>();

            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_X))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_X);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_Y))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_Y);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_Z))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_Z);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_RX))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_RX);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_RY))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_RY);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_RZ))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_RZ);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_SL0))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_SL0);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_SL1))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_SL1);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_WHL))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_WHL);
            }
            if (m_joystick.GetVJDAxisExist(Index, HID_USAGES.HID_USAGE_POV))
            {
                availableAxes.Add(HID_USAGES.HID_USAGE_POV);
            }

            return(availableAxes);
        }
コード例 #6
0
        /**
         * Checks to make sure the vJoy device has all the required configuration
         * @note Make sure to update this when adding code that adds buttons, axis, haptics, etc
         */
        private bool IsDeviceValid(uint deviceId)
        {
            var buttonN = vjoy.GetVJDButtonNumber(deviceId);
            var hatN    = vjoy.GetVJDDiscPovNumber(deviceId);

            if (buttonN < 8)
            {
                Debug.LogWarningFormat("vJoy device has {0} buttons, at least 8 are required", buttonN);
                return(false);
            }

            if (hatN < 4)
            {
                Debug.LogWarningFormat("vJoy device has {0} directional pov hat switches, 4 configured as directional are required", buttonN);
                return(false);
            }

            var xAxis  = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_X);
            var yAxis  = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_Y);
            var rzAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_RZ);

            if (!xAxis || !yAxis || !rzAxis)
            {
                Debug.LogWarningFormat("vJoy device is missing one of the X/Y/Rz axis needed for the joystick [X:{0}, Y: {1}, Rz:{2}]", xAxis, yAxis, rzAxis);
                return(false);
            }

            var zAxis = vjoy.GetVJDAxisExist(deviceId, HID_USAGES.HID_USAGE_Z);

            if (!zAxis)
            {
                Debug.LogWarning("vJoy device is missing the Z axis needed for the throttle");
                return(false);
            }

            return(true);
        }
コード例 #7
0
        public IEnumerable Axes()
        {
            var list    = new ObservableCollection <string>();
            int acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_X);

            if (acticve == 1)
            {
                list.Add("X");
            }
            acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_Y);
            if (acticve == 1)
            {
                list.Add("Y");
            }
            acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_Z);
            if (acticve == 1)
            {
                list.Add("Z");
            }
            acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_RX);
            if (acticve == 1)
            {
                list.Add("RX");
            }
            acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_RY);
            if (acticve == 1)
            {
                list.Add("RY");
            }
            acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_RZ);
            if (acticve == 1)
            {
                list.Add("RZ");
            }
            acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_SL0);
            if (acticve == 1)
            {
                list.Add("Slider 0");
            }
            acticve = _joystick.GetVJDAxisExist(_deviceId, HID_USAGES.HID_USAGE_SL1);
            if (acticve == 1)
            {
                list.Add("Slider 1");
            }
            return(list);
        }
コード例 #8
0
        public vJoyHelper(USBHelper usb)
        {
            _joystick = new vJoy();
            bool tmp = _joystick.vJoyEnabled();

            _jState = new vJoy.JoystickState();
            _joystick.AcquireVJD(1);
            _joystick.ResetVJD(1);
            _maxVal  = 0;
            _axisAry = new Dictionary <HID_USAGES, bool>();
            foreach (HID_USAGES hidUsage in Enum.GetValues(typeof(HID_USAGES)))
            {
                _axisAry.Add(hidUsage, _joystick.GetVJDAxisExist(1, hidUsage));
            }

            _joystick.GetVJDAxisMax(1, HID_USAGES.HID_USAGE_X, ref _maxVal);
            _usb        = usb;
            usb.Polled += new EventHandler(OnUSBPolled);
        }
コード例 #9
0
        void Start()
        {
            joystick = new vJoy();
            iReport  = new vJoy.JoystickState();

            if (joystick.vJoyEnabled())
            {
                VjdStat status        = joystick.GetVJDStatus(1);
                bool    AxisX         = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X);
                int     nButtons      = joystick.GetVJDButtonNumber(id);
                int     ContPovNumber = joystick.GetVJDContPovNumber(id);
                int     DiscPovNumber = joystick.GetVJDDiscPovNumber(id);
                joystick.AcquireVJD(id);
                joystick.ResetVJD(id);
            }

            fpsMonitor = GetComponent <FpsMonitor> ();

            displayFacePointsToggle.isOn   = displayFacePoints;
            displayAxesToggle.isOn         = displayAxes;
            displayHeadToggle.isOn         = displayHead;
            displayEffectsToggle.isOn      = displayEffects;
            enableLowPassFilterToggle.isOn = enableLowPassFilter;

            webCamTextureToMatHelper = gameObject.GetComponent <WebCamTextureToMatHelper> ();


            dlibShapePredictorFileName = DlibFaceLandmarkDetectorExample.dlibShapePredictorFileName;
            #if UNITY_WEBGL && !UNITY_EDITOR
            getFilePath_Coroutine = DlibFaceLandmarkDetector.UnityUtils.Utils.getFilePathAsync(dlibShapePredictorFileName, (result) => {
                getFilePath_Coroutine = null;

                dlibShapePredictorFilePath = result;
                Run();
            });
            StartCoroutine(getFilePath_Coroutine);
            #else
            dlibShapePredictorFilePath = DlibFaceLandmarkDetector.UnityUtils.Utils.getFilePath(dlibShapePredictorFileName);
            Run();
            #endif
        }
コード例 #10
0
        private xState[] m_hasBtn = new xState[1 + 128]; // [0] is not used

        private xState GetState(HID_USAGES usage, int pindex = 0)
        {
            var ret = new xState {
                usage = usage, current = 0
            };

            if (usage == HID_USAGES.HID_USAGE_POV)
            {
                ret.has     = (pindex > 0 && pindex <= m_nPov);
                ret.pindex  = pindex;
                ret.current = (int)POVType.Nil;
            }
            else if (usage == HID_USAGES.HID_USAGE_WHL) // button
            {
                ret.has     = (pindex > 0 && pindex <= m_nPov);
                ret.pindex  = pindex;
                ret.current = 0; // == false...
            }
            else
            {
                ret.has = m_joy.GetVJDAxisExist(Index, usage);
                if (ret.has)
                {
                    long val = 0;
                    if (m_joy.GetVJDAxisMin(Index, usage, ref val))
                    {
                        ret.min = (int)val;
                    }
                    if (m_joy.GetVJDAxisMax(Index, usage, ref val))
                    {
                        ret.max = (int)val;
                    }
                    ret.range = (double)(ret.max - ret.min) / xState.MAXOUT;
                }
            }

            return(ret);
        }
コード例 #11
0
        /// <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);
        }
コード例 #12
0
        /// <summary>
        /// Acquire a vJoy device ID
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public int Acquire(uint id)
        {
            // Device ID can only be in the range 1-16
            vJoyDevID      = id;
            Report.bDevice = (byte)vJoyDevID;
            if (vJoyDevID <= 0 || vJoyDevID > 16)
            {
                LogFormat(LogLevels.ERROR, "Illegal device ID {0}\nExit!", vJoyDevID);
                return(-1);
            }

            // Get the state of the requested device
            VjdStat status = Joystick.GetVJDStatus(vJoyDevID);

            switch (status)
            {
            case VjdStat.VJD_STAT_OWN:
                LogFormat(LogLevels.DEBUG, "vJoy Device {0} is already owned by this feeder", vJoyDevID);
                break;

            case VjdStat.VJD_STAT_FREE:
                LogFormat(LogLevels.DEBUG, "vJoy Device {0} is free", vJoyDevID);
                break;

            case VjdStat.VJD_STAT_BUSY:
                LogFormat(LogLevels.ERROR, "vJoy Device {0} is already owned by another feeder\nCannot continue", vJoyDevID);
                return(-3);

            case VjdStat.VJD_STAT_MISS:
                LogFormat(LogLevels.ERROR, "vJoy Device {0} is not installed or disabled\nCannot continue", vJoyDevID);
                return(-4);

            default:
                LogFormat(LogLevels.ERROR, "vJoy Device {0} general error\nCannot continue", vJoyDevID);
                return(-1);
            }
            ;


            // Get the number of buttons and POV Hat switchessupported by this vJoy device
            this.NbButtons = Joystick.GetVJDButtonNumber(vJoyDevID);
            int ContPovNumber = Joystick.GetVJDContPovNumber(vJoyDevID);
            int DiscPovNumber = Joystick.GetVJDDiscPovNumber(vJoyDevID);

            // Print results
            LogFormat(LogLevels.DEBUG, "vJoy Device {0} capabilities:", vJoyDevID);
            LogFormat(LogLevels.DEBUG, "Numner of buttons\t\t{0}", this.NbButtons);
            LogFormat(LogLevels.DEBUG, "Numner of Continuous POVs\t{0}", ContPovNumber);
            LogFormat(LogLevels.DEBUG, "Numner of Descrete POVs\t\t{0}", DiscPovNumber);

            // Check which axes are supported. Follow enum HID_USAGES
            ConfiguredvJoyAxes.Clear();
            int i = 0;

            foreach (HID_USAGES toBeTested in Enum.GetValues(typeof(HID_USAGES)))
            {
                // Skip POV
                if (toBeTested == HID_USAGES.HID_USAGE_POV)
                {
                    continue;
                }
                var present = Joystick.GetVJDAxisExist(vJoyDevID, toBeTested);
                LogFormat(LogLevels.DEBUG, "Axis " + HIDAxesInfo[i].Name + " \t\t{0}", present ? "Yes" : "No");
                if (present)
                {
                    HIDAxesInfo[i].IsPresent = present;
                    // Retrieve min/max from vJoy
                    if (!Joystick.GetVJDAxisMin(vJoyDevID, toBeTested, ref HIDAxesInfo[i].MinValue))
                    {
                        Log("Failed getting min value!");
                    }
                    if (!Joystick.GetVJDAxisMax(vJoyDevID, toBeTested, ref HIDAxesInfo[i].MaxValue))
                    {
                        Log("Failed getting min value!");
                    }
                    Log(" Min= " + HIDAxesInfo[i].MinValue + " Max=" + HIDAxesInfo[i].MaxValue);

                    // Add to indexed list of configured axes
                    ConfiguredvJoyAxes.Add(HIDAxesInfo[i]);
                }
                i++;
            }

            // Acquire the target
            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!Joystick.AcquireVJD(vJoyDevID))))
            {
                LogFormat(LogLevels.ERROR, "Failed to acquire vJoy device number {0}.", vJoyDevID);
                return(-1);
            }
            else
            {
                LogFormat(LogLevels.DEBUG, "Acquired: vJoy device number {0}.", vJoyDevID);
            }
            return((int)status);
        }
コード例 #13
0
        /**
         * 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();
        }
コード例 #14
0
ファイル: VJoyFeeder.cs プロジェクト: Romulus968/iDash
        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));
            }
        }
コード例 #15
0
ファイル: Program.cs プロジェクト: PsykomantaBrain/SCJoystick
        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);
            }
        }
コード例 #16
0
ファイル: vJoyFeeder.cs プロジェクト: teknogods/JVSClient
        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);
            }
        }
コード例 #17
0
        /// <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);
        }
コード例 #18
0
        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
        }
コード例 #19
0
        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);
        }
コード例 #20
0
        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();
        }
コード例 #21
0
        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;
        }
コード例 #22
0
        public void Init(MainForm parent)
        {
            mainForm = parent;
            ClearDevices();
            // Create one joystick object and a position structure.
            input       = new DirectInput();
            joystick    = new vJoy();
            iReport     = new vJoy.JoystickState();
            vjoyEnabled = false;


            // Get the driver attributes (Vendor ID, Product ID, Version Number)
            if (!joystick.vJoyEnabled())
            {
                MessageBox.Show("vJoy driver not enabled: Failed Getting vJoy attributes.\n", "Error");
                return;
            }

            // Get the state of the requested device
            VjdStat status = joystick.GetVJDStatus(id);

            switch (status)
            {
            case VjdStat.VJD_STAT_OWN:
            case VjdStat.VJD_STAT_FREE:
                break;

            case VjdStat.VJD_STAT_BUSY:
                MessageBox.Show("vJoy Device is already owned by another feeder. Cannot continue", "Error");
                return;

            case VjdStat.VJD_STAT_MISS:
                MessageBox.Show("vJoy Device is not installed or disabled. Cannot continue", "Error");
                return;

            default:
                MessageBox.Show("vJoy Device general error. Cannot continue", "Error");
                return;
            }
            ;

            // Make sure all needed axes and buttons are supported
            bool AxisX         = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X);
            bool AxisY         = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y);
            bool AxisRX        = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX);
            bool AxisRZ        = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ);
            int  nButtons      = joystick.GetVJDButtonNumber(id);
            int  ContPovNumber = joystick.GetVJDContPovNumber(id);

            if (!AxisX || !AxisY || !AxisRX || !AxisRZ || nButtons < 28 || ContPovNumber < 3)
            {
                MessageBox.Show("vJoy Device is not configured correctly. Must have X,Y,Rx,Ry analog axis, 28 buttons and 3 Analog POVs. Cannot continue\n", "Error");
                return;
            }

            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id))))
            {
                MessageBox.Show("Failed to acquire vJoy device number", "Error");
                return;
            }

            long maxval = 0;

            joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval);
            axisScale = (double)maxval / 65536.0;
            mainForm.LblVjoyStat.Text = "Found. Ver: " + joystick.GetvJoySerialNumberString();
            vjoyEnabled = true;
        }
コード例 #23
0
 public bool IsDeviceAxisEnabled(uint deviceID, int axis)
 {
     return(joystick.GetVJDAxisExist(deviceID, (HID_USAGES)axis));
 }
コード例 #24
0
        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);
        }
コード例 #25
0
ファイル: Program.cs プロジェクト: Tchiff/LeapJ
        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
コード例 #26
0
        static void Main(string[] args)
        {
            // Create one joystick object and a position structure.
            joystick = new vJoy();
            iReport  = new vJoy.JoystickState();


            // Device ID can only be in the range 1-16
            //if (args.Length>0 && !String.IsNullOrEmpty(args[0]))
            //    id = Convert.ToUInt32(args[0]);

            for (int i = 0; i < args.Length; i++)
            {
                if (args[i] != null && args[i] != "")
                {
                    switch (args[i][0])
                    {
                    case 'i':
                        if (!UInt32.TryParse(args[i].Substring(1, args[i].Length - 1), out id))
                        {
                            id = 1;
                        }
                        break;

                    case 's':
                        try
                        {
                            portname = args[i].Substring(1, args[i].Length - 1);
                        }
                        catch (Exception ex)
                        {
                            portname = "COM1";
                        }
                        break;

                    default:
                        break;
                    }
                }
            }

            Console.WriteLine("Command line arguments parsed.");
            //Console.ReadLine();

            if (id <= 0 || id > 16)
            {
                Console.WriteLine("Illegal device ID {0}\nExit!", id);
                Console.ReadLine();
                return;
            }

            string[] ports     = System.IO.Ports.SerialPort.GetPortNames();
            bool     portfound = false;

            for (int i = 0; i < ports.Length; i++)
            {
                Console.WriteLine(ports[i]);
                if (portname == ports[i])
                {
                    portfound = true;
                }
            }
            if (!portfound)
            {
                Console.WriteLine("Port {0} not found\nExit!", id);
                Console.ReadLine();
            }

            Console.WriteLine("Device ID and port name checked.");
            //Console.ReadLine();

            // Get the driver attributes (Vendor ID, Product ID, Version Number)
            if (!joystick.vJoyEnabled())
            {
                Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n");
                Console.ReadLine();
                return;
            }
            else
            {
                Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString());
            }

            // Get the state of the requested device
            VjdStat status = joystick.GetVJDStatus(id);

            switch (status)
            {
            case VjdStat.VJD_STAT_OWN:
                Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id);
                break;

            case VjdStat.VJD_STAT_FREE:
                Console.WriteLine("vJoy Device {0} is free\n", id);
                break;

            case VjdStat.VJD_STAT_BUSY:
                Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id);
                Console.ReadLine();
                return;

            case VjdStat.VJD_STAT_MISS:
                Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id);
                Console.ReadLine();
                return;

            default:
                Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id);
                Console.ReadLine();
                return;
            }
            ;

            // Check which axes are supported
            bool AxisX  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X);
            bool AxisY  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y);
            bool AxisZ  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z);
            bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX);
            bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ);
            // Get the number of buttons and POV Hat switchessupported by this vJoy device
            int nButtons      = joystick.GetVJDButtonNumber(id);
            int ContPovNumber = joystick.GetVJDContPovNumber(id);
            int DiscPovNumber = joystick.GetVJDDiscPovNumber(id);

            // Print results
            Console.WriteLine("\nvJoy Device {0} capabilities:\n", id);
            Console.WriteLine("Numner of buttons\t\t{0}\n", nButtons);
            Console.WriteLine("Numner of Continuous POVs\t{0}\n", ContPovNumber);
            Console.WriteLine("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber);
            Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No");
            Console.WriteLine("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No");
            Console.WriteLine("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No");
            Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No");
            Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No");

            // Test if DLL matches the driver
            UInt32 DllVer = 0, DrvVer = 0;
            bool   match = joystick.DriverMatch(ref DllVer, ref DrvVer);

            if (match)
            {
                Console.WriteLine("Version of Driver Matches DLL Version ({0:X})\n", DllVer);
            }
            else
            {
                Console.WriteLine("Version of Driver ({0:X}) does NOT match DLL Version ({1:X})\n", DrvVer, DllVer);
            }


            // Acquire the target
            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id))))
            {
                Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id);
                Console.ReadLine();
                return;
            }
            else
            {
                Console.WriteLine("Acquired: vJoy device number {0}.\n", id);
            }

            //Console.WriteLine("\npress enter to stat feeding");
            //Console.ReadKey(true);

            Console.WriteLine("Feeding controller inputs...");

            //int X, Y, Z, ZR, XR;
            uint count  = 0;
            long maxval = 0;

            //X = 20;
            //Y = 30;
            //Z = 40;
            //XR = 60;
            //ZR = 80;

            joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval);
            bool res;

            // Reset this device to default values
            joystick.ResetVJD(id);

            using (Process p = Process.GetCurrentProcess())
            {
                try
                {
                    p.PriorityClass = ProcessPriorityClass.RealTime;
                }
                catch (Exception ex1)
                {
                    Console.WriteLine("Failed to set realtime priority.");

                    try
                    {
                        p.PriorityClass = ProcessPriorityClass.High;
                    }
                    catch (Exception ex2)
                    {
                        Console.WriteLine("Failed to set high priority. Running at normal priority.");
                    }
                }

                p.ProcessorAffinity = (IntPtr)(1 << (Environment.ProcessorCount - 1));
            }

            byte[] oldinputs = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            byte[] cosinputs = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

            using (System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort(portname, 115200, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One))
            {
                port.WriteTimeout = 1000;
                port.ReadTimeout  = 1000;
                port.Open();

                // Feed the device in endless loop
                while (true)
                {
                    byte[] inputs = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

                    try
                    {
                        byte[] test = new byte[1];

                        do
                        {
                            port.Read(test, 0, 1);
                        } while (test[0] != 0xFF);

                        for (int i = 0; i < 16; i++)
                        {
                            int inbyte;

                            do
                            {
                                inbyte = port.ReadByte();
                            }while (inbyte < 0);

                            inputs[i] = (byte)inbyte;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Exception reading joystick port: " + ex.Message);
                    }

                    //16 byte packet - supports 8 SNES-style controllers simultaneously
                    //2 byte - player 1
                    //2 byte - player 2
                    //2 byte - player 3
                    //2 byte - player 4
                    //2 byte - player 5
                    //2 byte - player 6
                    //2 byte - player 7
                    //2 byte - player 8

                    for (int i = 0; i < inputs.Length; i++)
                    {
                        cosinputs[i] = (byte)(inputs[i] ^ oldinputs[i]);

                        for (int j = 0; j < 8; j++)
                        {
                            //change: try to only send new status on change-of-state to reduce input events
                            if ((cosinputs[i] & (1 << j)) != 0)
                            {
                                res = joystick.SetBtn((inputs[i] & (1 << j)) != 0, id, (uint)(((i * 8) + j) + 1));
                            }
                        }
                    }

                    //copy current over old
                    oldinputs = inputs;
                } // While (Robust)
            }
        }         // Main
コード例 #27
0
        public VJoyGlobalHolder(uint index)
        {
            Index              = index;
            Global             = new VJoyGlobal(this);
            setPressedStrategy = new SetPressedStrategy(b => SetButton(b, true), b => SetButton(b, false));

            joystick = new vJoy();
            if (index < 1 || index > 16)
            {
                throw new ArgumentException(string.Format("Illegal joystick device id: {0}", index));
            }

            if (!joystick.vJoyEnabled())
            {
                throw new Exception("vJoy driver not enabled: Failed Getting vJoy attributes");
            }

            uint apiVersion    = 0;
            uint driverVersion = 0;
            bool match         = joystick.DriverMatch(ref apiVersion, ref driverVersion);

            if (!match)
            {
                Console.WriteLine("vJoy version of Driver ({0:X}) does NOT match DLL Version ({1:X})", driverVersion, apiVersion);
            }

            Version = new VjoyVersionGlobal(apiVersion, driverVersion);

            var status = joystick.GetVJDStatus(index);


            string error = null;

            switch (status)
            {
            case VjdStat.VJD_STAT_BUSY:
                error = "vJoy Device {0} is already owned by another feeder";
                break;

            case VjdStat.VJD_STAT_MISS:
                error = "vJoy Device {0} is not installed or disabled";
                break;

            case VjdStat.VJD_STAT_UNKN:
                error = ("vJoy Device {0} general error");
                break;
            }

            if (error == null && !joystick.AcquireVJD(index))
            {
                error = "Failed to acquire vJoy device number {0}";
            }

            if (error != null)
            {
                throw new Exception(string.Format(error, index));
            }

            long max = 0;

            joystick.GetVJDAxisMax(index, HID_USAGES.HID_USAGE_X, ref max);
            AxisMax = (int)max / 2 - 1;

            enabledAxis = new Dictionary <HID_USAGES, bool>();
            foreach (HID_USAGES axis in Enum.GetValues(typeof(HID_USAGES)))
            {
                enabledAxis[axis] = joystick.GetVJDAxisExist(index, axis);
            }

            maxButtons       = joystick.GetVJDButtonNumber(index);
            maxDirPov        = joystick.GetVJDDiscPovNumber(index);
            maxContinuousPov = joystick.GetVJDContPovNumber(index);

            currentAxisValue = new Dictionary <HID_USAGES, int>();

            joystick.ResetVJD(index);
        }
コード例 #28
0
        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);
                }
            }
        }
コード例 #29
0
        static void Main(string[] args)
        {
            // Create one joystick object and a position structure.
            joystick = new vJoy();
            iReport  = new vJoy.JoystickState();


            // Device ID can only be in the range 1-16
            if (args.Length > 0 && !String.IsNullOrEmpty(args[0]))
            {
                id = Convert.ToUInt32(args[0]);
            }
            if (id <= 0 || id > 16)
            {
                Console.WriteLine("Illegal device ID {0}\nExit!", id);
                return;
            }

            // Get the driver attributes (Vendor ID, Product ID, Version Number)
            if (!joystick.vJoyEnabled())
            {
                Console.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n");
                return;
            }
            else
            {
                Console.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", joystick.GetvJoyManufacturerString(), joystick.GetvJoyProductString(), joystick.GetvJoySerialNumberString());
            }

            // Get the state of the requested device
            VjdStat status = joystick.GetVJDStatus(id);

            switch (status)
            {
            case VjdStat.VJD_STAT_OWN:
                Console.WriteLine("vJoy Device {0} is already owned by this feeder\n", id);
                break;

            case VjdStat.VJD_STAT_FREE:
                Console.WriteLine("vJoy Device {0} is free\n", id);
                break;

            case VjdStat.VJD_STAT_BUSY:
                Console.WriteLine("vJoy Device {0} is already owned by another feeder\nCannot continue\n", id);
                return;

            case VjdStat.VJD_STAT_MISS:
                Console.WriteLine("vJoy Device {0} is not installed or disabled\nCannot continue\n", id);
                return;

            default:
                Console.WriteLine("vJoy Device {0} general error\nCannot continue\n", id);
                return;
            }
            ;

            // Check which axes are supported
            bool AxisX  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_X);
            bool AxisY  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Y);
            bool AxisZ  = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_Z);
            bool AxisRX = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RX);
            bool AxisRZ = joystick.GetVJDAxisExist(id, HID_USAGES.HID_USAGE_RZ);
            // Get the number of buttons and POV Hat switchessupported by this vJoy device
            int nButtons      = joystick.GetVJDButtonNumber(id);
            int ContPovNumber = joystick.GetVJDContPovNumber(id);
            int DiscPovNumber = joystick.GetVJDDiscPovNumber(id);

            // Print results
            Console.WriteLine("\nvJoy Device {0} capabilities:\n", id);
            Console.WriteLine("Numner of buttons\t\t{0}\n", nButtons);
            Console.WriteLine("Numner of Continuous POVs\t{0}\n", ContPovNumber);
            Console.WriteLine("Numner of Descrete POVs\t\t{0}\n", DiscPovNumber);
            Console.WriteLine("Axis X\t\t{0}\n", AxisX ? "Yes" : "No");
            Console.WriteLine("Axis Y\t\t{0}\n", AxisX ? "Yes" : "No");
            Console.WriteLine("Axis Z\t\t{0}\n", AxisX ? "Yes" : "No");
            Console.WriteLine("Axis Rx\t\t{0}\n", AxisRX ? "Yes" : "No");
            Console.WriteLine("Axis Rz\t\t{0}\n", AxisRZ ? "Yes" : "No");

            // Acquire the target
            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(id))))
            {
                Console.WriteLine("Failed to acquire vJoy device number {0}.\n", id);
                return;
            }
            else
            {
                Console.WriteLine("Acquired: vJoy device number {0}.\n", id);
            }

            Console.WriteLine("\npress enter to stat feeding");
            Console.ReadKey(true);

            int  X, Y, Z, ZR, XR;
            uint count  = 0;
            long maxval = 0;

            X  = 20;
            Y  = 30;
            Z  = 40;
            XR = 60;
            ZR = 80;

            joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval);

#if ROBUST
            bool res;
            // Reset this device to default values
            joystick.ResetVJD(id);

            // Feed the device in endless loop
            while (true)
            {
                // Set position of 4 axes
                res = joystick.SetAxis(X, id, HID_USAGES.HID_USAGE_X);
                res = joystick.SetAxis(Y, id, HID_USAGES.HID_USAGE_Y);
                res = joystick.SetAxis(Z, id, HID_USAGES.HID_USAGE_Z);
                res = joystick.SetAxis(XR, id, HID_USAGES.HID_USAGE_RX);
                res = joystick.SetAxis(ZR, id, HID_USAGES.HID_USAGE_RZ);

                // Press/Release Buttons
                res = joystick.SetBtn(true, id, count / 50);
                res = joystick.SetBtn(false, id, 1 + count / 50);

                // If Continuous POV hat switches installed - make them go round
                // For high values - put the switches in neutral state
                if (ContPovNumber > 0)
                {
                    if ((count * 70) < 30000)
                    {
                        res = joystick.SetContPov(((int)count * 70), id, 1);
                        res = joystick.SetContPov(((int)count * 70) + 2000, id, 2);
                        res = joystick.SetContPov(((int)count * 70) + 4000, id, 3);
                        res = joystick.SetContPov(((int)count * 70) + 6000, id, 4);
                    }
                    else
                    {
                        res = joystick.SetContPov(-1, id, 1);
                        res = joystick.SetContPov(-1, id, 2);
                        res = joystick.SetContPov(-1, id, 3);
                        res = joystick.SetContPov(-1, id, 4);
                    };
                }
                ;

                // If Discrete POV hat switches installed - make them go round
                // From time to time - put the switches in neutral state
                if (DiscPovNumber > 0)
                {
                    if (count < 550)
                    {
                        joystick.SetDiscPov((((int)count / 20) + 0) % 4, id, 1);
                        joystick.SetDiscPov((((int)count / 20) + 1) % 4, id, 2);
                        joystick.SetDiscPov((((int)count / 20) + 2) % 4, id, 3);
                        joystick.SetDiscPov((((int)count / 20) + 3) % 4, id, 4);
                    }
                    else
                    {
                        joystick.SetDiscPov(-1, id, 1);
                        joystick.SetDiscPov(-1, id, 2);
                        joystick.SetDiscPov(-1, id, 3);
                        joystick.SetDiscPov(-1, id, 4);
                    };
                }
                ;

                System.Threading.Thread.Sleep(20);
                X += 150; if (X > maxval)
                {
                    X = 0;
                }
                Y += 250; if (Y > maxval)
                {
                    Y = 0;
                }
                Z += 350; if (Z > maxval)
                {
                    Z = 0;
                }
                XR += 220; if (XR > maxval)
                {
                    XR = 0;
                }
                ZR += 200; if (ZR > maxval)
                {
                    ZR = 0;
                }
                count++;

                if (count > 640)
                {
                    count = 0;
                }
            } // While (Robust)
#endif // ROBUST
#if EFFICIENT
            byte[] pov = new byte[4];

            while (true)
            {
                iReport.bDevice  = (byte)id;
                iReport.AxisX    = X;
                iReport.AxisY    = Y;
                iReport.AxisZ    = Z;
                iReport.AxisZRot = ZR;
                iReport.AxisXRot = XR;

                // Set buttons one by one
                iReport.Buttons = (uint)(0x1 << (int)(count / 20));

                if (ContPovNumber > 0)
                {
                    // Make Continuous POV Hat spin
                    iReport.bHats    = (count * 70);
                    iReport.bHatsEx1 = (count * 70) + 3000;
                    iReport.bHatsEx2 = (count * 70) + 5000;
                    iReport.bHatsEx3 = 15000 - (count * 70);
                    if ((count * 70) > 36000)
                    {
                        iReport.bHats    = 0xFFFFFFFF; // Neutral state
                        iReport.bHatsEx1 = 0xFFFFFFFF; // Neutral state
                        iReport.bHatsEx2 = 0xFFFFFFFF; // Neutral state
                        iReport.bHatsEx3 = 0xFFFFFFFF; // Neutral state
                    }
                    ;
                }
                else
                {
                    // Make 5-position POV Hat spin

                    pov[0] = (byte)(((count / 20) + 0) % 4);
                    pov[1] = (byte)(((count / 20) + 1) % 4);
                    pov[2] = (byte)(((count / 20) + 2) % 4);
                    pov[3] = (byte)(((count / 20) + 3) % 4);

                    iReport.bHats = (uint)(pov[3] << 12) | (uint)(pov[2] << 8) | (uint)(pov[1] << 4) | (uint)pov[0];
                    if ((count) > 550)
                    {
                        iReport.bHats = 0xFFFFFFFF;         // Neutral state
                    }
                };

                /*** Feed the driver with the position packet - is fails then wait for input then try to re-acquire device ***/
                if (!joystick.UpdateVJD(id, ref iReport))
                {
                    Console.WriteLine("Feeding vJoy device number {0} failed - try to enable device then press enter\n", id);
                    Console.ReadKey(true);
                    joystick.AcquireVJD(id);
                }

                System.Threading.Thread.Sleep(20);
                count++;
                if (count > 640)
                {
                    count = 0;
                }

                X += 150; if (X > maxval)
                {
                    X = 0;
                }
                Y += 250; if (Y > maxval)
                {
                    Y = 0;
                }
                Z += 350; if (Z > maxval)
                {
                    Z = 0;
                }
                XR += 220; if (XR > maxval)
                {
                    XR = 0;
                }
                ZR += 200; if (ZR > maxval)
                {
                    ZR = 0;
                }
            }
            ; // While
#endif // EFFICIENT
        } // Main
コード例 #30
0
        static void Main(string[] args)
        {
            // Create one joystick object and a position structure.
            joystick = new vJoy();
            iReport  = new vJoy.JoystickState();


            // Device ID can only be in the range 1-16
            if (args.Length > 0 && !String.IsNullOrEmpty(args[0]))
            {
                id = Convert.ToUInt32(args[0]);
            }
            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