# HG changeset patch
# User sl
# Date 1417817893 -3600
# Node ID 24ac84ab96204261e75ee68a2432b64f95ef6d4e
# Parent  8f7e35c3bfd162b9bd9f93a637c831ba6d535cec
Consolidating our HID input report parsing.

diff -r 8f7e35c3bfd1 -r 24ac84ab9620 HumanInterfaceDevice.cs
--- a/HumanInterfaceDevice.cs	Fri Dec 05 22:50:39 2014 +0100
+++ b/HumanInterfaceDevice.cs	Fri Dec 05 23:18:13 2014 +0100
@@ -247,16 +247,6 @@
         public enum ConsumerControl: ushort
         {
             /// <summary>
-            /// Alternative code for properties.
-            /// Also supported by Windows Media Center.
-            /// </summary>
-            MceProperties = 0x000A,
-            /// <summary>
-            /// Alternative code for program guide.
-            /// Also supported by Windows Media Center.
-            /// </summary>
-            MceProgramGuide = 0x0012,
-            /// <summary>
             /// Sent by MCE remotes.
             /// </summary>
             MediaSelectProgramGuide = 0x008D,
diff -r 8f7e35c3bfd1 -r 24ac84ab9620 RemoteControlDevice.cs
--- a/RemoteControlDevice.cs	Fri Dec 05 22:50:39 2014 +0100
+++ b/RemoteControlDevice.cs	Fri Dec 05 23:18:13 2014 +0100
@@ -331,7 +331,7 @@
                 if (this.ButtonPressed != null)
                 {
                     RemoteControlButton button=RemoteControlButton.Unknown;
-                    if (aUsage == (ushort)ConsumerControl.AppCtrlProperties || aUsage == (ushort)ConsumerControl.MceProperties)
+                    if (aUsage == (ushort)ConsumerControl.AppCtrlProperties)
                     {
                         button = RemoteControlButton.MoreInfo;
                     }
@@ -339,7 +339,7 @@
                     {
                         button = RemoteControlButton.Print;
                     }
-                    else if (aUsage == (ushort)ConsumerControl.MediaSelectProgramGuide || aUsage == (ushort)ConsumerControl.MceProgramGuide)
+                    else if (aUsage == (ushort)ConsumerControl.MediaSelectProgramGuide)
                     {
                         button = RemoteControlButton.Guide;
                     }
@@ -456,7 +456,9 @@
                     //Allocate a buffer for one HID input
                     byte[] hidInputReport = new byte[rawInput.hid.dwSizeHid];
 
-                    //For each HID input in our raw input
+                    Debug.WriteLine("Raw input contains " + rawInput.hid.dwCount + " HID input report(s)");
+
+                    //For each HID input report in our raw input
                     for (int i = 0; i < rawInput.hid.dwCount; i++)
                     {
                         //Compute the address from which to copy our HID input
@@ -471,52 +473,29 @@
                         //Copy HID input into our buffer
                         Marshal.Copy(new IntPtr(hidInputOffset), hidInputReport, 0, (int)rawInput.hid.dwSizeHid);
 
-                        //Print HID raw input in our debug output
-                        string hidDump = "HID " + rawInput.hid.dwCount + "/" + rawInput.hid.dwSizeHid + ":";
+                        //Print HID input report in our debug output
+                        string hidDump = "HID input report: ";
                         foreach (byte b in hidInputReport)
                         {
                             hidDump += b.ToString("X2");
                         }
                         Debug.WriteLine(hidDump);
                         
-                        ushort usage = 0;
-                        //hidInput[0] //Not sure what's the meaning of the code at offset 0
-                        if (hidInputReport.Length == 2)
-                        {
-                            //Single byte code
-                            usage = hidInputReport[1]; //Get button code
-                        }
-                        else if (hidInputReport.Length > 2) //Defensive
-                        {
-                            //Assuming double bytes code
-                            usage = (ushort)((hidInputReport[2] << 8) + hidInputReport[1]);
-                        }
-
-                        Debug.WriteLine("Usage: 0x" + usage.ToString("X4"));
-
                         //Proper parsing now
-                        //byte[] report = new byte[input.data.hid.dwSizeHid];
-                        //Marshal.Copy(IntPtr.Add(rawInput, HID_INPUT_DATA_OFFSET), report, 0, report.Length);
-                        uint usageCount = rawInput.hid.dwCount;
+                        uint usageCount = 1; //Assuming a single usage per input report. Is that correct?
                         Win32.USAGE_AND_PAGE[] usages = new Win32.USAGE_AND_PAGE[usageCount];
                         Win32.HidStatus status = Win32.Function.HidP_GetUsagesEx(Win32.HIDP_REPORT_TYPE.HidP_Input, 0, usages, ref usageCount, preParsedData, hidInputReport, (uint)hidInputReport.Length);
                         if (status != Win32.HidStatus.HIDP_STATUS_SUCCESS)
                         {
                             Debug.WriteLine("Could not parse HID data!");
-                            //this.LogError("Twinhan HID remote: failed to get raw input HID usages, device = {0}, status = {1}", device.Name, status);
-                            //Dump.DumpBinary(rawInput, (int)input.header.dwSize);
-                            //return false;
                         }
                         else
                         {
                             Debug.WriteLine("UsagePage: 0x" + usages[0].UsagePage.ToString("X4"));
                             Debug.WriteLine("Usage: 0x" + usages[0].Usage.ToString("X4"));
+                            //Call on our Usage Page handler
+                            usagePageHandler(usages[0].Usage);
                         }
-
-
-
-                        //Call on our Usage Page handler
-                        usagePageHandler(usage);
                     }
 
                 }