#include "ps2.h"
#include "pic.h"
-#include "keyboard.h"
-#include "mouse.h"
-
/* PRIVATE VARIABLES **********************************************************/
#define BUFFER_SIZE 32
UINT QueueStart;
UINT QueueEnd;
HANDLE QueueMutex;
+
+ LPVOID Param;
+ PS2_DEVICE_CMDPROC DeviceCommand;
} PS2_PORT, *PPS2_PORT;
/*
/* PRIVATE FUNCTIONS **********************************************************/
+static VOID PS2SendCommand(PPS2_PORT Port, BYTE Command)
+{
+ if (!Port->IsEnabled) return;
+
+ /* Call the device command */
+ if (Port->DeviceCommand) Port->DeviceCommand(Port->Param, Command);
+}
+
static BYTE WINAPI PS2ReadPort(ULONG Port)
{
if (Port == PS2_CONTROL_PORT)
*/
case 0xD4:
{
- if (Ports[1].IsEnabled)
- // Ports[1].Function
- MouseCommand(Data);
-
+ PS2SendCommand(&Ports[1], Data);
break;
}
}
return;
}
- // TODO: Implement PS/2 device commands
- if (Ports[0].IsEnabled)
- // Ports[0].Function
- KeyboardCommand(Data);
+ /* By default, send a command to the first PS/2 port */
+ PS2SendCommand(&Ports[0], Data);
}
}
/* PUBLIC FUNCTIONS ***********************************************************/
+VOID PS2SetDeviceCmdProc(BYTE PS2Port, LPVOID Param, PS2_DEVICE_CMDPROC DeviceCommand)
+{
+ if (PS2Port >= PS2_PORTS) return;
+
+ Ports[PS2Port].Param = Param;
+ Ports[PS2Port].DeviceCommand = DeviceCommand;
+}
+
// PS2SendToPort
BOOLEAN PS2QueuePush(BYTE PS2Port, BYTE Data)
{