示例#1
0
        /// <summary>
        /// Get all our usages, those are typically the buttons currently pushed on a gamepad.
        /// For a remote control it's usually just the one button that was pushed.
        /// </summary>
        private void GetUsages(byte[] aInputReport)
        {
            //Do proper parsing of our HID report
            //First query our usage count
            uint usageCount = 0;

            Win32.USAGE_AND_PAGE[] usages = null;
            Win32.HidStatus        status = Win32.Function.HidP_GetUsagesEx(Win32.HIDP_REPORT_TYPE.HidP_Input, 0, usages, ref usageCount, Device.PreParsedData, aInputReport, (uint)aInputReport.Length);
            if (status == Win32.HidStatus.HIDP_STATUS_BUFFER_TOO_SMALL)
            {
                //Allocate a large enough buffer
                usages = new Win32.USAGE_AND_PAGE[usageCount];
                //...and fetch our usages
                status = Win32.Function.HidP_GetUsagesEx(Win32.HIDP_REPORT_TYPE.HidP_Input, 0, usages, ref usageCount, Device.PreParsedData, aInputReport, (uint)aInputReport.Length);
                if (status != Win32.HidStatus.HIDP_STATUS_SUCCESS)
                {
                    Debug.WriteLine("Second pass could not parse HID data: " + status.ToString());
                }
            }
            else if (status != Win32.HidStatus.HIDP_STATUS_SUCCESS)
            {
                Debug.WriteLine("First pass could not parse HID data: " + status.ToString());
            }

            Debug.WriteLine("Usage count: " + usageCount.ToString());

            //Copy usages into this event
            if (usages != null)
            {
                foreach (USAGE_AND_PAGE up in usages)
                {
                    //Debug.WriteLine("UsagePage: 0x" + usages[0].UsagePage.ToString("X4"));
                    //Debug.WriteLine("Usage: 0x" + usages[0].Usage.ToString("X4"));
                    //Add this usage to our list
                    Usages.Add(up.Usage);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Typically fetches values of a joystick/gamepad axis and dpad directions.
        /// </summary>
        /// <param name="aInputReport"></param>
        private void GetUsageValues(byte[] aInputReport)
        {
            if (Device.InputValueCapabilities == null)
            {
                return;
            }

            foreach (HIDP_VALUE_CAPS caps in Device.InputValueCapabilities)
            {
                if (caps.IsRange)
                {
                    //What should we do with those guys?
                    continue;
                }

                //Now fetch and add our usage value
                uint            usageValue = 0;
                Win32.HidStatus status     = Win32.Function.HidP_GetUsageValue(Win32.HIDP_REPORT_TYPE.HidP_Input, caps.UsagePage, caps.LinkCollection, caps.NotRange.Usage, ref usageValue, Device.PreParsedData, aInputReport, (uint)aInputReport.Length);
                if (status == Win32.HidStatus.HIDP_STATUS_SUCCESS)
                {
                    UsageValues[caps] = usageValue;
                }
            }
        }