public AxisCallibrationViewModel(AccelerometerGamePadDevice device, AxisViewModel axis)
        {
            m_nextCommand   = new RelayCommand(Next, CanNext);
            m_okCommand     = new RelayCommand(Ok, CanOk);
            m_cancelCommand = new RelayCommand(Cancel);

            m_device = device;
            m_axis   = axis;

            m_device.SelectAxis(m_axis.Type);

            m_timer           = new Timer(TimerUpdateTime);
            m_timer.AutoReset = true;
            m_timer.Elapsed  += m_timer_Elapsed;
            m_timer.Start();
        }
        private void CheckConnection(object e)
        {
            if (!AccelerometerGamePadDevice.IsDeviceConnected())
            {
                OnErrorOccurred();
                return;
            }

            m_device    = AccelerometerGamePadDevice.OpenDevice();
            IsConnected = true;

            try
            {
                SelectedProfile = m_profiles.FirstOrDefault(x => x.Id == m_device.GetSelectedProfile().Profile);
            }
            catch
            {
                OnErrorOccurred();
                return;
            }
        }
        public static AccelerometerGamePadDevice OpenDevice()
        {
            AccelerometerGamePadDevice result = null;

            //HidDevice device = HidDevices.Enumerate(MyVid, MyPid).FirstOrDefault();
            //if (device == null) throw new DeviceNotFoundException(string.Format("AccelerometerGamePad with VID=0x{0} PID=0x{1} not found", MyVid.ToString("X"), MyPid.ToString("X")));

            //result = new AccelerometerGamePadDevice { m_device = device };
            //result.m_ioHandle = OpenDeviceIo(result.m_device.DevicePath);
            IntPtr device = FindDevice();

            if (device == NativeMethods.InvalidHandleValue)
            {
                throw new DeviceNotFoundException("Error occurred while opening IO for AccelerometerGamePad");
            }
            result = new AccelerometerGamePadDevice()
            {
                m_ioHandle = device
            };

            return(result);
        }