public void Connect()
        {
            if (!this.Connected)
            {
                // ensure device is available
                VjdStat status = this.joystick.GetVJDStatus(this.ID);
                switch (status)
                {
                case VjdStat.VJD_STAT_OWN:
                    logger.Warn("vJoy Device {0} is already owned by this feeder", this.ID);
                    break;

                case VjdStat.VJD_STAT_FREE:
                    logger.Info("vJoy Device {0} is free", this.ID);
                    break;

                case VjdStat.VJD_STAT_BUSY:
                    logger.Fatal("vJoy Device {0} is already owned by another feeder\nCannot continue", this.ID);
                    return;

                case VjdStat.VJD_STAT_MISS:
                    logger.Fatal("vJoy Device {0} is not installed or disabled\nCannot continue", this.ID);
                    return;

                default:
                    logger.Fatal("vJoy Device {0} general error\nCannot continue", this.ID);
                    return;
                }
                ;

                this.loadCapabilities();

                // now aquire the vJoy device
                if ((status == VjdStat.VJD_STAT_OWN) || ((status == VjdStat.VJD_STAT_FREE) && (!joystick.AcquireVJD(this.ID))))
                {
                    logger.Fatal("Failed to acquire vJoy device number {0}.", this.ID);
                    return;
                }
                else
                {
                    logger.Info("Acquired: vJoy device number {0}.", this.ID);
                }

                if (this.SupportedFFBEffects.Count > 0)
                {
                    VirtualFFBPacketHandler.AddFFBHandler(this.ID, this.FFBDataReceivedHandler);
                    // this.ffbPacketHandler = new VirtualFFBPacketHandler(this.joystick, this);
                    // this.joystick.FfbRegisterGenCB(this.OnVirtualFFBDataReceived, null);
                }

                this.joystick.ResetVJD(this.ID);

                this.Connected = true;
            }
        }
 public void Disconnect()
 {
     if (this.Connected)
     {
         if (this.SupportedFFBEffects.Count > 0)
         {
             VirtualFFBPacketHandler.RemoveFFBHandler(this.ID);
             //this.joystick.FfbRegisterGenCB(null, null);
             //this.ffbPacketHandler = new VirtualFFBPacketHandler(this.joystick);
         }
         this.joystick.ResetVJD(this.ID);
         Thread.Sleep(1000);
         this.joystick.RelinquishVJD(this.ID);
         logger.Info("Dropped: vJoy device number {0}.", this.ID);
         this.Connected = false;
     }
 }