Beispiel #1
0
        //コンストラクタ
        public HidDevice(HidDeviceInfo devInfo)
        {
            this.devInfo = devInfo;
            InitDevInfo();

            intrInCtrl = new InterruptInCtrl(devInfo.DevicePath, tCaps.InputReportByteLength);
        }
Beispiel #2
0
 //
 public HidDeviceInfo[] GetDeviceList(int vendorID, int productID)
 {
     HidDeviceInfo[] devInfoList;
     try { devInfoList = GetDeviceList(false, vendorID, productID); }
     catch { devInfoList = new HidDeviceInfo[0]; }
     hidDevInfoList = devInfoList;
     return(devInfoList);
 }
Beispiel #3
0
 //デバイスを検索し、基本情報を取得する
 public HidDeviceInfo[] GetDeviceList()
 {
     HidDeviceInfo[] devInfoList;
     try { devInfoList = GetDeviceList(true, 0, 0); }
     catch { devInfoList = new HidDeviceInfo[0]; }
     hidDevInfoList = devInfoList;
     return(devInfoList);
 }
Beispiel #4
0
        //
        private HidDeviceInfo[] GetDeviceList(bool isFindAll, int vendorID, int productID)
        {
            //デバイス情報セットを取得する
            Guid hidGuid = new Guid();

            HidD_GetHidGuid(ref hidGuid);
            IntPtr hDevInfoSet = SetupDiGetClassDevs(
                ref hidGuid, null, IntPtr.Zero, DIGCF.DIGCF_DEVICEINTERFACE | DIGCF.DIGCF_PRESENT);

            //各デバイス情報からデバイスのパス名を取得する
            SP_DEVICE_INTERFACE_DATA DeviceInterfaceData = new SP_DEVICE_INTERFACE_DATA();

            DeviceInterfaceData.cbSize = Marshal.SizeOf(DeviceInterfaceData);
            int MemberIndex = 0;
            StringCollection scDevicePath = new StringCollection();

            while (SetupDiEnumDeviceInterfaces(hDevInfoSet, IntPtr.Zero, ref hidGuid, MemberIndex++, ref DeviceInterfaceData))
            {
                string devicePath = GetDevicePath(hDevInfoSet, ref DeviceInterfaceData);
                if (string.IsNullOrEmpty(devicePath) || scDevicePath.Contains(devicePath))
                {
                    continue;
                }
                scDevicePath.Add(devicePath);
            }

            //デバイス情報セットを破棄する
            SetupDiDestroyDeviceInfoList(hDevInfoSet);

            //目的のデバイスを検索する
            HIDD_ATTRIBUTES HiddAttributes = new HIDD_ATTRIBUTES();

            HiddAttributes.Size = Marshal.SizeOf(HiddAttributes);
            ArrayList alHidDevInfos = new ArrayList();

            foreach (string devicePath in scDevicePath)
            {
                //問い合わせモードでデバイスをオープンする
                SafeFileHandle hHidDev = DeviceAccess.OpenQueryMode(devicePath);
                if (hHidDev.IsInvalid)
                {
                    continue;
                }

                //デバイスの属性を取得する
                if (HidD_GetAttributes(hHidDev, ref HiddAttributes))
                {
                    //目的のデバイスであれば追加情報を取得する
                    if (isFindAll ||
                        (HiddAttributes.VendorID == vendorID && HiddAttributes.ProductID == productID))
                    {
                        string devVenderName, devDeviceName, devSerialNumber;
                        GetAdditionalInfo(hHidDev, out devVenderName, out devDeviceName, out devSerialNumber);
                        HidDeviceInfo hidDevInfo = new HidDeviceInfo(devicePath, ref HiddAttributes, devVenderName, devDeviceName, devSerialNumber);
                        alHidDevInfos.Add(hidDevInfo);
                    }
                }

                //クローズ
                hHidDev.Close();
            }

            //取得したデバイス情報を配列に格納する(長さ0以上の配列となる)
            HidDeviceInfo[] hidDevInfos = new HidDeviceInfo[alHidDevInfos.Count];
            alHidDevInfos.CopyTo(hidDevInfos);

            return(hidDevInfos);
        }