Example #1
0
        /// <summary>
        /// Get all Hid devices currently connected to the PC.
        /// </summary>
        /// <returns>
        /// The Enumerable of Hid Devices.
        /// </returns>
        internal static IEnumerable <HidInformation> GetHidObjects()
        {
            var response = new List <HidInformation>();

            // Iterate through all items found and connect to the first one that we
            // Gain a valid windowHandle from.
            foreach (var hidItem in GetHidPaths())
            {
                bool isReadOnly = false;

                var deviceHandle = OpenDevice(hidItem, ref isReadOnly);

                // We don't have a Valid Device.
                if (deviceHandle.IsInvalid)
                {
                    deviceHandle.Dispose();
                    continue;
                }

                var deviceInformation = new HidInformation {
                    DevicePath = hidItem, IsReadOnly = isReadOnly
                };

                IntPtr parsedData;

                if (!HidD_GetPreparsedData(deviceHandle, out parsedData))
                {
                    HidD_FreePreparsedData(ref parsedData);
                    continue;
                }

                try
                {
                    HidAttributes temp;
                    HidD_GetAttributes(deviceHandle, out temp);

                    deviceInformation.HidAttributes = temp;

                    HidCaps caps;
                    HidP_GetCaps(parsedData, out caps);

                    deviceInformation.Capabilities = caps;

                    ReadDeviceCapabilities(caps, parsedData, ref deviceInformation);

                    response.Add(deviceInformation);
                }
                catch
                {
                    Console.WriteLine(new Win32Exception(Marshal.GetLastWin32Error()).Message);
                }
                finally
                {
                    HidD_FreePreparsedData(ref parsedData);
                    deviceHandle.Dispose();
                }
            }

            return(response);
        }
Example #2
0
        /// <summary>
        /// The read capabilities.
        /// </summary>
        /// <param name="caps">
        /// The caps.
        /// </param>
        /// <param name="pointer">
        /// The pointer.
        /// </param>
        /// <param name="hidInformation">
        /// The Device Information.
        /// </param>
        internal static void ReadDeviceCapabilities(HidCaps caps, IntPtr pointer, ref HidInformation hidInformation)
        {
            if (caps.NumberOutputValueCaps > 0)
            {
                hidInformation.OutputValues.ValueCaps = new HidValueCaps[caps.NumberOutputValueCaps];
                HidP_GetValueCaps(
                    HidReportType.Output,
                    hidInformation.OutputValues.ValueCaps,
                    ref caps.NumberOutputValueCaps,
                    pointer);
            }

            if (caps.NumberOutputButtonCaps > 0)
            {
                hidInformation.OutputValues.ValueButtons = new HidButtonCaps[caps.NumberOutputButtonCaps];
                HidP_GetButtonCaps(
                    HidReportType.Output,
                    hidInformation.OutputValues.ValueButtons,
                    ref caps.NumberOutputButtonCaps,
                    pointer);
            }

            if (caps.NumberInputValueCaps > 0)
            {
                hidInformation.InputValues.ValueCaps = new HidValueCaps[caps.NumberInputValueCaps];
                HidP_GetValueCaps(
                    HidReportType.Input,
                    hidInformation.InputValues.ValueCaps,
                    ref caps.NumberInputValueCaps,
                    pointer);
            }

            if (caps.NumberInputButtonCaps > 0)
            {
                hidInformation.InputValues.ValueButtons = new HidButtonCaps[caps.NumberInputButtonCaps];
                HidP_GetButtonCaps(
                    HidReportType.Input,
                    hidInformation.InputValues.ValueButtons,
                    ref caps.NumberInputButtonCaps,
                    pointer);
            }

            if (caps.NumberFeatureValueCaps > 0)
            {
                hidInformation.FeatureValues.ValueCaps = new HidValueCaps[caps.NumberFeatureValueCaps];
                HidP_GetValueCaps(
                    HidReportType.Feature,
                    hidInformation.FeatureValues.ValueCaps,
                    ref caps.NumberFeatureValueCaps,
                    pointer);
            }

            if (caps.NumberFeatureButtonCaps <= 0)
            {
                return;
            }

            hidInformation.FeatureValues.ValueButtons = new HidButtonCaps[caps.NumberFeatureButtonCaps];
            HidP_GetButtonCaps(
                HidReportType.Feature,
                hidInformation.FeatureValues.ValueButtons,
                ref caps.NumberFeatureButtonCaps,
                pointer);
        }