コード例 #1
0
 /// <summary>
 /// Registers the base callback if not yet registered.
 /// </summary>
 public void RegisterBaseCallback(vJoy joystick, AFFBManager ffb)
 {
     FFBManager = ffb;
     Joystick   = joystick;
     if (!isRegistered)
     {
         wrapper = FfbFunction1; //needed to keep a reference!
         Joystick.FfbRegisterGenCB(wrapper, IntPtr.Zero);
         isRegistered = true;
     }
 }
コード例 #2
0
ファイル: vJoyWrapper.cs プロジェクト: chuoique/VjoyWrapper
        public vJoyFunctions(vJoy jostick)
        {
            _logger = new Logger();

            _joystick = jostick;
            IReportDescriptorProperties reportDescriptorProperties = new vJoyReportDescriptorProperties();

            _ffbHandler = new vJoyFfbHandler(_joystick, reportDescriptorProperties, _logger);
            _joystick.FfbRegisterGenCB(OnFfbArrival, _id);

            zeroJoystickState = GetZeroJoystickInput();
        }
コード例 #3
0
ファイル: vJoyWrapper.cs プロジェクト: chuoique/VjoyWrapper
        public vJoyFunctions(vJoy jostick, int id, ILogger customLogger)
        {
            _id     = (uint)id;
            _logger = customLogger != null ? customLogger : new Logger();

            _joystick = jostick;
            IReportDescriptorProperties reportDescriptorProperties = new vJoyReportDescriptorProperties();

            _ffbHandler = new vJoyFfbHandler(_joystick, reportDescriptorProperties, _logger);
            _joystick.FfbRegisterGenCB(OnFfbArrival, _id);

            zeroJoystickState = GetZeroJoystickInput();
        }
コード例 #4
0
        public void RegisterBaseCallback(vJoy joystick, uint id)
        {
            this.Joystick = joystick;
            this.Id       = id;
            // Read PID block
            this.Joystick.FfbReadPID(this.Id, ref this.PIDBlock);

            if (!isRegistered)
            {
                this.wrapper = this.FfbFunction1; //needed to keep a reference!
                joystick.FfbRegisterGenCB(this.wrapper, IntPtr.Zero);
                this.isRegistered = true;
            }
        }
コード例 #5
0
        public FfbInterface(TesterForm dialog)
        {
            dlg      = dialog;
            joystick = dialog.joystick;
            // FFB
#pragma warning disable 0618
            if (!joystick.FfbStart(id))
            {
                throw new Exception(String.Format("Failed to start Forcefeedback on device {0}", id));
            }
#pragma warning restore 0618

            // Convert Form to pointer and pass it as user data to the callback function
            GCHandle h         = GCHandle.Alloc(dialog);
            IntPtr   parameter = (IntPtr)h;
            // joystick.FfbRegisterGenCB(OnEffect, parameter);
            joystick.FfbRegisterGenCB(OnEffectObj, dialog);
        }
コード例 #6
0
        public void FfbInterface(uint id)
        {
            // Start FFB Mechanism
            //if (!joystick.FfbStart(id))
            //    throw new Exception(String.Format("Cannot start Forcefeedback on device {0}", id));
            if (RefCounter == 0)
            {
                // Register the callback function & pass the dialog box object
                OnEffectObj = new vJoy.FfbCbFunc(func_OnEffectObj);
                joystick.FfbRegisterGenCB(OnEffectObj, joystick);

                HaltVibThread = false;
                eTh           = new System.Threading.Thread(EffectThread);
                eTh.Start();
            }
            RefCounter += 1;
            devices[id - 1].DeviceActive = FFBDevice.DeviceState.Active;
        }
コード例 #7
0
        public static bool InitJoy(IFfbListener listener)
        {
            joyStick    = new vJoy();
            ffbListener = listener;
            VjdStat status = joyStick.GetVJDStatus(joyId);

            if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joyStick.AcquireVJD(joyId))))
            {
                Console.WriteLine("Failed to acquire vJoy device number {0}.\n", joyId);
                return(false);
            }
            else
            {
                Console.WriteLine("Acquired: vJoy device number {0}.\n", joyId);
                joyStick.ResetVJD(joyId);
                joyStick.FfbRegisterGenCB(OnFFBEvent, joyId);
                return(true);
            }
        }
コード例 #8
0
        public void Start()
        {
            //WUP-028
            //VENDORID 0x57E
            //PRODUCT ID 0x337

            var USBFinder = new UsbDeviceFinder(0x057E, 0x0337);

            GCNAdapter = UsbDevice.OpenUsbDevice(USBFinder);

            if (GCNAdapter != null)
            {
                int transferLength;

                reader = GCNAdapter.OpenEndpointReader(ReadEndpointID.Ep01);
                writer = GCNAdapter.OpenEndpointWriter(WriteEndpointID.Ep02);

                //prompt controller to start sending
                writer.Write(Convert.ToByte((char)19), 10, out transferLength);

                try
                {
                    if (gcn1Enabled && !JoystickHelper.checkJoystick(ref vjoy, 1))
                    {
                        SystemHelper.CreateJoystick(1);
                    }
                    if (gcn2Enabled && !JoystickHelper.checkJoystick(ref vjoy, 2))
                    {
                        SystemHelper.CreateJoystick(2);
                    }
                    if (gcn3Enabled && !JoystickHelper.checkJoystick(ref vjoy, 3))
                    {
                        SystemHelper.CreateJoystick(3);
                    }
                    if (gcn4Enabled && !JoystickHelper.checkJoystick(ref vjoy, 4))
                    {
                        SystemHelper.CreateJoystick(4);
                    }

                    if (gcn1Enabled && vjoy.AcquireVJD(1))
                    {
                        gcn1ok = true;
                    }
                    if (gcn2Enabled && vjoy.AcquireVJD(2))
                    {
                        gcn2ok = true;
                    }
                    if (gcn3Enabled && vjoy.AcquireVJD(3))
                    {
                        gcn3ok = true;
                    }
                    if (gcn4Enabled && vjoy.AcquireVJD(4))
                    {
                        gcn4ok = true;
                    }

                    vjoy.ResetAll();
                    vjoy.FfbRegisterGenCB(FfbRecieved, IntPtr.Zero);
                }
                catch (Exception ex)
                {
                    if (ex.Message.Contains("HRESULT: 0x8007000B"))
                    {
                        Log(null, new LogEventArgs("Error: vJoy driver mismatch. Did you install the wrong version (x86/x64)?"));
                        Driver.run = false;
                        return;
                    }
                }

                if (noEventMode)
                {
                    // PORT 1: bytes 02-09
                    // PORT 2: bytes 11-17
                    // PORT 3: bytes 20-27
                    // PORT 4: bytes 29-36l
                    byte[] ReadBuffer  = new byte[37]; // 32 (4 players x 8) bytes for input, 5 bytes for formatting
                    byte[] WriteBuffer = new byte[5];  // 1 for command, 4 for rumble state
                    WriteBuffer[0] = 0x11;
                    WriteBuffer[1] = 0;
                    Log(null, new LogEventArgs("Driver successfully started, entering input loop."));
                    run = true;
                    Stopwatch sw = Stopwatch.StartNew();
                    while (run)
                    {
                        var ec     = reader.Read(ReadBuffer, 10, out transferLength);
                        var input1 = GCNState.GetState(getFastInput1(ref ReadBuffer));
                        var input2 = GCNState.GetState(getFastInput2(ref ReadBuffer));
                        var input3 = GCNState.GetState(getFastInput3(ref ReadBuffer));
                        var input4 = GCNState.GetState(getFastInput4(ref ReadBuffer));

                        if (gcn1ok)
                        {
                            JoystickHelper.setJoystick(ref vjoy, input1, 1, gcn1DZ);
                        }
                        if (gcn2ok)
                        {
                            JoystickHelper.setJoystick(ref vjoy, input2, 2, gcn2DZ);
                        }
                        if (gcn3ok)
                        {
                            JoystickHelper.setJoystick(ref vjoy, input3, 3, gcn3DZ);
                        }
                        if (gcn4ok)
                        {
                            JoystickHelper.setJoystick(ref vjoy, input4, 4, gcn4DZ);
                        }

                        long elapsed = sw.ElapsedMilliseconds;
                        sw.Reset(); sw.Start();

                        if (Interlocked.Read(ref gcn1Ffb) > 0)
                        {
                            if (gcn1FfbInf == false)
                            {
                                Interlocked.Add(ref gcn1Ffb, -elapsed);
                            }
                            WriteBuffer[1] = (byte)(gcn1FfbActive ? 1 : 0);
                        }
                        else
                        {
                            WriteBuffer[1] = 0;
                        }
                        if (Interlocked.Read(ref gcn2Ffb) > 0)
                        {
                            if (gcn2FfbInf == false)
                            {
                                Interlocked.Add(ref gcn2Ffb, -elapsed);
                            }
                            WriteBuffer[2] = (byte)(gcn2FfbActive ? 1 : 0);
                        }
                        else
                        {
                            WriteBuffer[2] = 0;
                        }
                        if (Interlocked.Read(ref gcn3Ffb) > 0)
                        {
                            if (gcn3FfbInf == false)
                            {
                                Interlocked.Add(ref gcn3Ffb, -elapsed);
                            }
                            WriteBuffer[3] = (byte)(gcn3FfbActive ? 1 : 0);
                        }
                        else
                        {
                            WriteBuffer[3] = 0;
                        }
                        if (Interlocked.Read(ref gcn4Ffb) > 0)
                        {
                            if (gcn4FfbInf == false)
                            {
                                Interlocked.Add(ref gcn4Ffb, -elapsed);
                            }
                            WriteBuffer[4] = (byte)(gcn4FfbActive ? 1 : 0);
                        }
                        else
                        {
                            WriteBuffer[4] = 0;
                        }
                        writer.Write(WriteBuffer, 10, out transferLength);
                        System.Threading.Thread.Sleep(5);
                    }

                    WriteBuffer[1] = 0; WriteBuffer[2] = 0; WriteBuffer[3] = 0; WriteBuffer[4] = 0;
                    writer.Write(WriteBuffer, 10, out transferLength);

                    if (GCNAdapter != null)
                    {
                        if (GCNAdapter.IsOpen)
                        {
                            if (!ReferenceEquals(wholeGCNAdapter, null))
                            {
                                wholeGCNAdapter.ReleaseInterface(0);
                            }
                            GCNAdapter.Close();
                        }
                        GCNAdapter = null;
                        UsbDevice.Exit();
                        Log(null, new LogEventArgs("Closing driver thread..."));
                    }
                    Log(null, new LogEventArgs("Driver thread has been stopped."));
                }
                else
                {
                    Log(null, new LogEventArgs("Driver successfully started, entering input loop."));
                    //using  Interrupt request instead of looping behavior.
                    reader.DataReceivedEnabled = true;
                    reader.DataReceived       += reader_DataReceived;
                    reader.ReadBufferSize      = 37;
                    reader.ReadThreadPriority  = System.Threading.ThreadPriority.Highest;
                    run = true;
                }
            }
            else
            {
                Log(null, new LogEventArgs("GCN Adapter not detected."));
                Driver.run = false;
            }
        }
コード例 #9
0
 public static void Init()
 {
     joystick = ControllerCache.vc.joystick;
     joystick.FfbRegisterGenCB(FFBPacketCallback, null);
 }