Author: tkreuzer
Date: Wed Nov 20 21:57:51 2013
New Revision: 61060

URL: http://svn.reactos.org/svn/reactos?rev=61060&view=rev
Log:
[I8042PRT]
Hackplement support for IOCTL_KEYBOARD_QUERY_ATTRIBUTES

Modified:
    trunk/reactos/drivers/input/i8042prt/keyboard.c

Modified: trunk/reactos/drivers/input/i8042prt/keyboard.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/input/i8042prt/keyboard.c?rev=61060&r1=61059&r2=61060&view=diff
==============================================================================
--- trunk/reactos/drivers/input/i8042prt/keyboard.c     [iso-8859-1] (original)
+++ trunk/reactos/drivers/input/i8042prt/keyboard.c     [iso-8859-1] Wed Nov 20 
21:57:51 2013
@@ -468,6 +468,34 @@
        return Status;
 }
 
+VOID
+NTAPI
+i8042InitializeKeyboardAttributes(
+    PI8042_KEYBOARD_EXTENSION DeviceExtension)
+{
+    PPORT_DEVICE_EXTENSION PortDeviceExtension;
+    PI8042_SETTINGS Settings;
+    PKEYBOARD_ATTRIBUTES KeyboardAttributes;
+
+    PortDeviceExtension = DeviceExtension->Common.PortDeviceExtension;
+    Settings = &PortDeviceExtension->Settings;
+
+    KeyboardAttributes = &DeviceExtension->KeyboardAttributes;
+
+    KeyboardAttributes->KeyboardIdentifier.Type = 
(UCHAR)Settings->OverrideKeyboardType;
+    KeyboardAttributes->KeyboardIdentifier.Subtype = 
(UCHAR)Settings->OverrideKeyboardSubtype;
+    KeyboardAttributes->NumberOfFunctionKeys = 4;
+    KeyboardAttributes->NumberOfIndicators = 3;
+    KeyboardAttributes->NumberOfKeysTotal = 101;
+    KeyboardAttributes->InputDataQueueLength = Settings->KeyboardDataQueueSize;
+    KeyboardAttributes->KeyRepeatMinimum.UnitId = 0;
+    KeyboardAttributes->KeyRepeatMinimum.Rate = (USHORT)Settings->SampleRate;
+    KeyboardAttributes->KeyRepeatMinimum.Delay = 0;
+    KeyboardAttributes->KeyRepeatMinimum.UnitId = 0;
+    KeyboardAttributes->KeyRepeatMinimum.Rate = (USHORT)Settings->SampleRate;
+    KeyboardAttributes->KeyRepeatMinimum.Delay = 0;
+}
+
 /*
  * Runs the keyboard IOCTL_INTERNAL dispatch.
  */
@@ -557,6 +585,8 @@
                        }
                        
DeviceExtension->Common.PortDeviceExtension->KeyboardExtension = 
DeviceExtension;
                        DeviceExtension->Common.PortDeviceExtension->Flags |= 
KEYBOARD_CONNECTED;
+
+            i8042InitializeKeyboardAttributes(DeviceExtension);
 
                        IoMarkIrpPending(Irp);
                        /* FIXME: DeviceExtension->KeyboardHook.IsrWritePort = 
; */
@@ -601,8 +631,8 @@
                }
                case IOCTL_KEYBOARD_QUERY_ATTRIBUTES:
                {
-                       DPRINT1("IOCTL_KEYBOARD_QUERY_ATTRIBUTES not 
implemented\n");
-#if 0
+                   PKEYBOARD_ATTRIBUTES KeyboardAttributes;
+
             /* FIXME: KeyboardAttributes are not initialized anywhere */
                        TRACE_(I8042PRT, "IRP_MJ_INTERNAL_DEVICE_CONTROL / 
IOCTL_KEYBOARD_QUERY_ATTRIBUTES\n");
                        if 
(Stack->Parameters.DeviceIoControl.OutputBufferLength < 
sizeof(KEYBOARD_ATTRIBUTES))
@@ -611,11 +641,13 @@
                                break;
                        }
 
-                       *(PKEYBOARD_ATTRIBUTES) Irp->AssociatedIrp.SystemBuffer 
= DeviceExtension->KeyboardAttributes;
+            KeyboardAttributes = Irp->AssociatedIrp.SystemBuffer;
+            *KeyboardAttributes = DeviceExtension->KeyboardAttributes;
+
                        Irp->IoStatus.Information = sizeof(KEYBOARD_ATTRIBUTES);
                        Status = STATUS_SUCCESS;
                        break;
-#endif
+
                        Status = STATUS_NOT_IMPLEMENTED;
                        break;
                }
@@ -812,7 +844,7 @@
                else if (DeviceExtension->TabPressed)
                {
                        DeviceExtension->TabPressed = FALSE;
-            
+
             /* Check which action to do */
             if (InputData->MakeCode == 0x25)
             {
@@ -826,7 +858,7 @@
             }
             else
             {
-                           /* Send request to the kernel debugger. 
+                           /* Send request to the kernel debugger.
                             * Unknown requests will be ignored. */
                            KdSystemDebugControl(' soR',
                                                 
(PVOID)(ULONG_PTR)InputData->MakeCode,


Reply via email to