示例#1
0
        public JoystickHelper()
        {
            keys     = new Keys();
            joystick = new vJoy();
            iReport  = new vJoy.JoystickState();
            long lAxisMax = 0;

            joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref lAxisMax);
            axisMax = (int)lAxisMax;

            string error = null;

            int nDevices = 0;

            for (uint i = 1; i <= 16; i++)
            {
                if ((error = vjoyhelper.setup(joystick, i)) != null)
                {
                    // Assume no more devices are set up correctly
                    break;
                }
                nDevices++;
            }
            for (int i = 1; i <= nDevices; i++)
            {
                availJoy.Add(i);
            }
            numberOfDevices = nDevices;
        }
        readonly long BUTTON_FILTER = 0; // Ignore new button presses less than this (ms)

        public AxisProcessor(int axisSensitivity, OutputAxis outputAxis)
        {
            Debug.WriteLine("Multiplier is {0}", axisSensitivity);
            _sensitivity    = axisSensitivity;
            _vJoyId         = outputAxis.VJoyDevice;
            _vJoyAxisNumber = outputAxis.VJoyItem;
            _joystick       = new vJoy();
            if (!_joystick.vJoyEnabled())
            {
                Debug.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n");
            }
            else
            {
                Debug.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", _joystick.GetvJoyManufacturerString(), _joystick.GetvJoyProductString(), _joystick.GetvJoySerialNumberString());
            }

            // Acquire the target (Not currently used really...)
            VjdStat status = _joystick.GetVJDStatus(_vJoyId);

            Debug.WriteLine("vJoy Status: " + status.ToString());
            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_vJoyId))))
            {
                Debug.WriteLine("Failed to acquire vJoy device number {0}.", _vJoyId);
            }

            _joystick.GetVJDAxisMax(_vJoyId, (HID_USAGES)_vJoyAxisNumber, ref _maxAxisValue);
            Debug.WriteLine("Max value of VJID {0} axis {1} is {2}", _vJoyId, (HID_USAGES)_vJoyAxisNumber, _maxAxisValue);
            Centre();
        }
        private void initAxis(HID_USAGES axis)
        {
            long maxval = 0;
            long minval = 0;

            joystick.GetVJDAxisMax(id, axis, ref maxval);
            joystick.GetVJDAxisMin(id, axis, ref minval);
            setAxis(axis, (int)(maxval - minval) / 2);
        }
示例#4
0
        public long GetMaxForAxis(HID_USAGES Axis)
        {
            long maxval = 0;

            if (bDeviceAcquired)
            {
                m_joystick.GetVJDAxisMax(m_vJoyID, Axis, ref maxval);
            }
            return(maxval);
        }
示例#5
0
文件: main.cs 项目: Seriy-A/SerialJoy
        private void Button1_Click(object sender, EventArgs e)
        {
            //System.Diagnostics.Debug.Print("breakpoint passed");
            System.Diagnostics.Debug.Print(": serial.IsOpen == " + serial.IsOpen.ToString());
            long minax = 0, maxax = 0;

            //joy.AcquireVJD((uint)joyIDSelector.Value);
            joy.GetVJDAxisMin((uint)joyIDSelector.Value, HID_USAGES.HID_USAGE_X, ref minax);
            joy.GetVJDAxisMax((uint)joyIDSelector.Value, HID_USAGES.HID_USAGE_X, ref maxax);
            //joy.RelinquishVJD((uint)joyIDSelector.Value);
            System.Diagnostics.Debug.Print("x axis min == " + minax + ", max == " + maxax);
        }
示例#6
0
    IEnumerator Simulation()
    {
        controller.SetPolicy(Controller.PolicyFlag.POLICY_BACKGROUND_FRAMES);
        controller.SetPolicyFlags(Controller.PolicyFlag.POLICY_BACKGROUND_FRAMES);
        controller.AddListener(listener);

        int ContPovNumber = joystick.GetVJDContPovNumber(id);
        int DiscPovNumber = joystick.GetVJDDiscPovNumber(id);

        //uint count = 0;
        long maxval = 0;

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

        AxisMax  = (int)maxval;
        AxisZero = AxisMax / 2;
        int AxisX  = AxisZero;
        int AxisY  = AxisZero;
        int AxisZ  = AxisZero;
        int AxisZR = AxisZero;
        int AxisXR = AxisZero;

        AxisReset();

        Vector3 OldPosition = Tool.transform.localPosition;

        while (true)
        {
            Vector3 pos = Tool.transform.localPosition;
            if (Mathf.Abs(OldPosition.sqrMagnitude - pos.sqrMagnitude) > 0.0001f)
            {
                AxisX = pos.x > 0 ? AxisPositive(pos.x, JoyConfig.Config.MaxPosition.x, JoyConfig.Config.Deadband.x) :
                        AxisNegative(pos.x, JoyConfig.Config.MinPosition.x, -JoyConfig.Config.Deadband.x);

                AxisZ = pos.y > 0 ? AxisPositive(pos.y, JoyConfig.Config.MaxPosition.y, JoyConfig.Config.Deadband.y) :
                        AxisNegative(pos.y, JoyConfig.Config.MinPosition.y, -JoyConfig.Config.Deadband.y);

                AxisY = pos.z > 0 ? AxisPositive(pos.z, JoyConfig.Config.MaxPosition.z, JoyConfig.Config.Deadband.z) :
                        AxisNegative(pos.z, JoyConfig.Config.MinPosition.z, -JoyConfig.Config.Deadband.z);

                joystick.SetAxis(AxisX, id, HID_USAGES.HID_USAGE_X);
                joystick.SetAxis(AxisY, id, HID_USAGES.HID_USAGE_Y);
                joystick.SetAxis(AxisZ, id, HID_USAGES.HID_USAGE_Z);

                OldPosition = Tool.transform.localPosition;
            }
            ScreenLog.JLog.LinkString("AxisX = " + (float)AxisX / AxisMax);
            ScreenLog.JLog.LinkString("AxisY = " + (float)AxisY / AxisMax);
            ScreenLog.JLog.LinkString("AxisZ = " + (float)AxisZ / AxisMax);
            yield return(new WaitForFixedUpdate());
        }
    }
示例#7
0
 private void ConnectToVirtualJoystick()
 {
     joystick = new vJoy();
     if (!joystick.vJoyEnabled())
         throw new Exception("Unable to connect to virtual joystick");
     VjdStat joystickStatus = joystick.GetVJDStatus(JoystickId);
     if (joystickStatus != VjdStat.VJD_STAT_FREE)
         throw new Exception("State of Joystick is not free");
     if (!joystick.AcquireVJD(JoystickId))
         throw new Exception("Unable to acquire joystick");
     joystick.GetVJDAxisMax(JoystickId, HID_USAGES.HID_USAGE_X, ref maxValue);
     joystick.ResetVJD(JoystickId);
     inputMultiplyer = maxValue / (maxDirectionVectorValue * 2d); // Max direction value
 }
        int ConvertAxisRatioToAxisInt(float axisRatio, HID_USAGES hid)
        {
            long min = 0, max = 0;
            var  gotMin = vjoy.GetVJDAxisMin(deviceId, HID_USAGES.HID_USAGE_X, ref min);
            var  gotMax = vjoy.GetVJDAxisMax(deviceId, HID_USAGES.HID_USAGE_X, ref max);

            if (!gotMin || !gotMax)
            {
                Debug.LogWarningFormat("Error getting min/max of HID axis {0}", hid.ToString());
                return(0);
            }

            // Get an absolute ratio where 0 is -Max, .5 is 0, and 1 is +Max
            float absRatio = axisRatio / 2f + .5f;
            long  range    = max - min;

            return((int)((long)(range * absRatio) + min));
        }
示例#9
0
        /// <summary>Scale value m from any reference scale to the HID axis scale.</summary>
        /// <param name="m">the value to scale</param>
        /// <param name="hid">the HID axis type</param>
        /// <param name="rMin">minimum value of reference scale</param>
        /// <param name="rMax">maximum value of reference scale</param>
        private int ScaleAxis(float m, HID_USAGES hid, float rMin, float rMax)
        {
            // target range
            long tMin = 0, tMax = 0;
            // todo: no reason to keep requesting the min max, make these constants
            var gotMin = vjoy.GetVJDAxisMin(deviceId, hid, ref tMin);
            var gotMax = vjoy.GetVJDAxisMax(deviceId, hid, ref tMax);

            if (!gotMin || !gotMax)
            {
                Debug.LogWarning($"Error getting min/max of HID axis {hid}");
                return(0);
            }

            // scale m to target scale
            var result = (m - rMin) / (rMax - rMin) * (tMax - tMin) + tMin;

            return((int)result);
        }
示例#10
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);
        }
        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);
        }
示例#12
0
        private void SetGamepadItem(byte[] values, int index, GamepadConfigurationItem config)
        {
            double value = values[index];

            if (config.Type == GamepadItemType.Axis)
            {
                long maxAxisValue = 0;
                var  targetAxis   = config.TargetUsage ?? HID_USAGES.HID_USAGE_X;
                _vJoy.GetVJDAxisMax(_gamepadId, targetAxis, ref maxAxisValue);
                value = NormalizeAxis((byte)value, config.ConvertAxis ?? false);

                if (config.InvertAxis ?? false)
                {
                    value = InvertNormalizedAxis(value);
                }

                _vJoy.SetAxis((int)(value * maxAxisValue), _gamepadId, targetAxis);
            }
            else if (config.Type == GamepadItemType.Button)
            {
                _vJoy.SetBtn(ConvertToButtonState((byte)value), _gamepadId, config.TargetButtonId ?? 0);
            }
        }
        public EncoderAxisProcessor(int encoderPPR, float revsInPerRevsOut, OutputAxis outputAxis)
        {
            _vJoyId         = outputAxis.VJoyDevice;
            _vJoyAxisNumber = outputAxis.VJoyItem;
            _joystick       = new vJoy();
            if (!_joystick.vJoyEnabled())
            {
                Debug.WriteLine("vJoy driver not enabled: Failed Getting vJoy attributes.\n");
            }
            else
            {
                Debug.WriteLine("Vendor: {0}\nProduct :{1}\nVersion Number:{2}\n", _joystick.GetvJoyManufacturerString(), _joystick.GetvJoyProductString(), _joystick.GetvJoySerialNumberString());
            }

            // Acquire the target (Not currently used really...)
            VjdStat status = _joystick.GetVJDStatus(_vJoyId);

            Debug.WriteLine("vJoy Status: " + status.ToString());
            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!_joystick.AcquireVJD(_vJoyId))))
            {
                Debug.WriteLine("Failed to acquire vJoy device number {0}.", _vJoyId);
            }

            _joystick.GetVJDAxisMax(_vJoyId, (HID_USAGES)_vJoyAxisNumber, ref _maxAxisValue);
            Debug.WriteLine("Max value of VJID {0} axis {1} is {2}", _vJoyId, (HID_USAGES)_vJoyAxisNumber, _maxAxisValue);
            Centre();

            // Calculate how much to move the output by for each input pulse
            Debug.WriteLine("Encoder PPR is {0} and Revs In per Out is {1}", encoderPPR, revsInPerRevsOut);
            float outputRevolutionSize = _maxAxisValue / revsInPerRevsOut;

            encoderPPR *= 4; // I think I can get 4x the resolution out of the encoder using the tranistions between pulses
            Debug.WriteLine("Modifying Encoder PPR to {0}", encoderPPR);
            _outputIncrement = (int)(outputRevolutionSize / encoderPPR);
            Debug.WriteLine("Output Increment calculated as {0}", _outputIncrement);
        }
示例#14
0
 private void FeederForm_Load(object sender, EventArgs e)
 {
     r             = new Random(DateTime.Now.Millisecond);
     DiscPovNumber = joystick.GetVJDDiscPovNumber(id);
     ContPovNumber = joystick.GetVJDContPovNumber(id);
     joystick.GetVJDAxisMax(id, HID_USAGES.HID_USAGE_X, ref maxval);
     // Reset this device to default values
     joystick.ResetVJD(id);
     X           = 20;
     Y           = 30;
     Z           = 40;
     XR          = 60;
     ZR          = 80;
     cPitch      = cRoll = cYaw = 0.5;
     desPitch    = desRoll = desYaw = 0.5;
     cThr        = 0;
     desThr      = 0;
     cConv       = 0;
     state       = ERAState.Disarmed;
     label2.Text = "НЕ ВЗВЕДЕНО";
     joystick.SetBtn(false, id, 1);
     pParam   = 2;
     waitTime = 1.5;
 }
示例#15
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;
        }
示例#16
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);
        }
示例#17
0
文件: Program.cs 项目: Tchiff/LeapJ
        } // Main

        public static IEnumerator TestCoroutine()
        {
            int ContPovNumber = joystick.GetVJDContPovNumber(id);
            int DiscPovNumber = joystick.GetVJDDiscPovNumber(id);

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

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

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

            bool res;

            // Reset this device to default values
            joystick.ResetVJD(id);
            // Feed the device in endless loop

            Debug.Log("start");

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

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

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

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

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

                if (count > 640)
                {
                    count = 0;
                }
                yield return(new WaitForFixedUpdate());
            } // While (Robust)
        }
示例#18
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);
        }
示例#19
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();
        }
示例#20
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
示例#21
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);
        }
示例#22
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
示例#23
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);
        }
示例#24
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
        }
示例#25
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;
        }
示例#26
0
        static void Main(string[] args)
        {
            SerialPort _port;

            float[] Thetas;
            joystick  = new vJoy();
            Thetas    = new float[3];
            Thetas[0] = 0;
            Thetas[1] = 0;
            Thetas[2] = 0;
            VJoyActivation();

            Console.WriteLine("insert COM port name: ");
            string COMportName = Console.ReadLine();

            Console.WriteLine("\ninsert baud rate: ");
            int baudRate = Int32.Parse(Console.ReadLine());

            _port              = new SerialPort();
            _port.PortName     = COMportName;
            _port.BaudRate     = baudRate;
            _port.Parity       = Parity.None;
            _port.DataBits     = 8;
            _port.StopBits     = StopBits.One;
            _port.ReadTimeout  = 500;
            _port.WriteTimeout = 500;
            _port.Open();

            long maxval = 0;

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


            while (true)
            {
                try
                {
                    string   a          = _port.ReadLine();
                    string[] substrings = a.Split('|');
                    if (substrings.Length == 3)
                    {
                        Thetas[0] = clamp(float.Parse(substrings[0]), -50, 50);
                        Thetas[1] = clamp(float.Parse(substrings[1]), -50, 50);
                        Thetas[2] = float.Parse(substrings[2]);
                        Console.WriteLine("ThetaX={0} ThetaY={1} ThetaZ={2}", Thetas[0], Thetas[1], Thetas[2]);
                    }
                }
                catch { }

                //normalizing xrot and mapping to full range ans letting x maxRot=50deg
                joystick.SetAxis(Convert.ToInt32(((Thetas[0] / 100) + 0.5) * maxval), id, HID_USAGES.HID_USAGE_X);
                joystick.SetAxis(Convert.ToInt32(((Thetas[1] / 100) + 0.5) * maxval), id, HID_USAGES.HID_USAGE_Y);


                //threshold of btn=20 deg  (btn1=R1 btn2=L1)
                if (Thetas[2] > 20)
                {
                    joystick.SetBtn(true, id, 1);
                    joystick.SetBtn(false, id, 2);
                }
                else if (Thetas[2] < -20)
                {
                    joystick.SetBtn(true, id, 2);
                    joystick.SetBtn(false, id, 1);
                }
                else
                {
                    joystick.SetBtn(false, id, 1);
                    joystick.SetBtn(false, id, 2);
                }

                Thread.Sleep(20);
            }
        }
        static void Main(string[] args)
        {
            // Create one joystick object and a position structure.
            joystick = new vJoy();
            iReport  = new vJoy.JoystickState();


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                X += 150; if (X > maxval)
                {
                    X = 0;
                }
                Y += 250; if (Y > maxval)
                {
                    Y = 0;
                }
                Z += 350; if (Z > maxval)
                {
                    Z = 0;
                }
                XR += 220; if (XR > maxval)
                {
                    XR = 0;
                }
                ZR += 200; if (ZR > maxval)
                {
                    ZR = 0;
                }
            }
            ; // While
#endif // EFFICIENT
        } // Main
示例#28
0
        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);
            }
        }
示例#29
0
        public void Feed(PhoneData data)
        {
            // Get the number of buttons and POV Hat switchessupported by this vJoy device
            int nButtons      = _joystick.GetVJDButtonNumber(_id);
            int contPovNumber = _joystick.GetVJDContPovNumber(_id);
            int discPovNumber = _joystick.GetVJDDiscPovNumber(_id);



            long maxval = 0;

            _joystick.GetVJDAxisMax(_id, HID_USAGES.HID_USAGE_X, ref maxval);

            _axisX = data.AxisX; if (_axisX > maxval)
            {
                _axisX = (int)maxval;
            }
            if (_axisX < 0)
            {
                _axisX = 0;
            }
            _axisY = data.AxisY; if (_axisY > maxval)
            {
                _axisY = (int)maxval;
            }
            if (_axisY < 0)
            {
                _axisY = 0;
            }
            _axisZ = data.AxisZ; if (_axisZ > maxval)
            {
                _axisZ = (int)maxval;
            }
            if (_axisZ < 0)
            {
                _axisZ = 0;
            }

            uint count = 0;

            byte[] pov = new byte[4];

            _joystickState.bDevice = (byte)_id;
            _joystickState.AxisX   = _axisX;
            _joystickState.AxisY   = _axisY;
            _joystickState.AxisZ   = _axisZ;

            var btn1 = data.Button1 == 0 ? 0 : 1;
            var btn2 = data.Button2 == 0 ? 0 : 2;
            var btn3 = data.Button3 == 0 ? 0 : 4;
            var btn4 = data.Button4 == 0 ? 0 : 8;

            _joystickState.Buttons = (uint)(btn1 | btn2 | btn3 | btn4);

            if (contPovNumber > 0)
            {
                _joystickState.bHats    = 0xFFFFFFFF;  // Neutral state
                _joystickState.bHatsEx1 = 0xFFFFFFFF;  // Neutral state
                _joystickState.bHatsEx2 = 0xFFFFFFFF;  // Neutral state
                _joystickState.bHatsEx3 = 0xFFFFFFFF;  // Neutral state
            }
            else
            {
                _joystickState.bHats = 0xFFFFFFFF;     // Neutral state
            };

            /*** Feed the driver with the position packet - is fails then wait for input then try to re-acquire device ***/

            if (!_joystick.UpdateVJD(_id, ref _joystickState))
            {
                Console.WriteLine("Feeding vJoy device number {0} failed - try to enable device then press enter\n", _id);
                Console.ReadKey(true);
                _joystick.AcquireVJD(_id);
            }

            System.Threading.Thread.Sleep(20);
            count++;

            if (count > 640)
            {
                count = 0;
            }
        }
示例#30
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);
        }