[HIDUSB]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Wed, 5 Dec 2012 08:26:39 +0000 (08:26 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Wed, 5 Dec 2012 08:26:39 +0000 (08:26 +0000)
- Add check if interface descriptor was parsed
- Correct error message
- Set device idle after a configuration has been selected
- CORE-6574

svn path=/trunk/; revision=57805

reactos/drivers/hid/hidusb/hidusb.c

index 32a242f..3471447 100644 (file)
@@ -1168,6 +1168,13 @@ Hid_SelectConfiguration(
                                                               USB_DEVICE_CLASS_HUMAN_INTERFACE,
                                                              -1,
                                                              -1);
+    if (!InterfaceDescriptor)
+    {
+        //
+        // bogus configuration descriptor
+        //
+        return STATUS_INVALID_PARAMETER;
+    }
 
     //
     // sanity check
@@ -1472,7 +1479,7 @@ Hid_PnpStart(
         //
         // no interface class
         //
-        DPRINT1("[HIDUSB] HID Class found\n");
+        DPRINT1("[HIDUSB] HID Interface descriptor not found\n");
         return STATUS_UNSUCCESSFUL;
     }
 
@@ -1483,11 +1490,6 @@ Hid_PnpStart(
     ASSERT(InterfaceDescriptor->bDescriptorType == USB_INTERFACE_DESCRIPTOR_TYPE);
     ASSERT(InterfaceDescriptor->bLength == sizeof(USB_INTERFACE_DESCRIPTOR));
 
-    //
-    // now set the device idle
-    //
-    Hid_SetIdle(DeviceObject);
-
     //
     // move to next descriptor
     //
@@ -1512,10 +1514,15 @@ Hid_PnpStart(
         //
         // done
         //
-        DPRINT("[HIDUSB] SelectConfiguration %x\n", Status);
+        DPRINT1("[HIDUSB] SelectConfiguration %x\n", Status);
 
         if (NT_SUCCESS(Status))
         {
+            //
+            // now set the device idle
+            //
+            Hid_SetIdle(DeviceObject);
+
             //
             // get protocol
             //
@@ -1523,18 +1530,18 @@ Hid_PnpStart(
             return Status;
         }
     }
-
-    //
-    // FIXME parse hid descriptor
-    //
-    UNIMPLEMENTED
-    ASSERT(FALSE);
-
-    //
-    // get protocol
-    //
-    Hid_GetProtocol(DeviceObject);
-    return STATUS_SUCCESS;
+    else
+    {
+        //
+        // FIXME parse hid descriptor
+        // select configuration
+        // set idle
+        // and get protocol
+        //
+        UNIMPLEMENTED
+        ASSERT(FALSE);
+    }
+    return Status;
 }