#include <acess.h>
#include <modules.h>
#include <fs_devfs.h>
-#include <tpl_drv_common.h>
-#include <tpl_drv_keyboard.h>
+#include <api_drv_common.h>
+#include <api_drv_keyboard.h>
#include "kb_kbdus.h"
// === CONSTANTS ===
// === PROTOTYPES ===
int KB_Install(char **Arguments);
-void KB_IRQHandler(int IRQNum);
-void KB_AddBuffer(char ch);
-Uint64 KB_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Dest);
+void KB_HandleScancode(Uint8 scancode);
void KB_UpdateLEDs(void);
int KB_IOCtl(tVFS_Node *Node, int Id, void *Data);
{
.NumACLs = 0,
.Size = 0,
- //.Read = KB_Read,
.IOCtl = KB_IOCtl
}
};
*/
int KB_Install(char **Arguments)
{
- Uint8 temp;
-
- // Attempt to get around a strange bug in Bochs/Qemu by toggling
- // the controller on and off
- temp = inb(0x61);
- outb(0x61, temp | 0x80);
- outb(0x61, temp & 0x7F);
- inb(0x60); // Clear keyboard buffer
-
- IRQ_AddHandler(1, KB_IRQHandler);
DevFS_AddDevice( &gKB_DevInfo );
//Log("KB_Install: Installed");
return MODULE_ERR_OK;
* \brief Called on a keyboard IRQ
* \param IRQNum IRQ number (unused)
*/
-void KB_IRQHandler(int IRQNum)
+void KB_HandleScancode(Uint8 scancode)
{
- Uint8 scancode;
Uint32 ch;
- // int keyNum;
- // Check port 0x64 to tell if this is from the aux port
- //if( inb(0x64) & 0x20 ) return;
-
- scancode = inb(0x60); // Read from the keyboard's data buffer
//Log_Debug("Keyboard", "scancode = %02x", scancode);
// Ignore ACKs
leds = (gbKB_CapsState ? 4 : 0);
- while( inb(0x64) & 2 ); // Wait for bit 2 to unset
- outb(0x60, 0xED); // Send update command
-
- while( inb(0x64) & 2 ); // Wait for bit 2 to unset
- outb(0x60, leds);
+ // TODO: Update LEDS
+ Log_Warning("Keyboard", "TODO: Update LEDs");
}
+static const char *csaIOCTL_NAMES[] = {DRV_IOCTLNAMES, DRV_KEYBAORD_IOCTLNAMES, NULL};
+
/**
* \fn int KB_IOCtl(tVFS_Node *Node, int Id, void *Data)
* \brief Calls an IOCtl Command
{
switch(Id)
{
- case DRV_IOCTL_TYPE: return DRV_TYPE_KEYBOARD;
- case DRV_IOCTL_IDENT: memcpy(Data, "KB\0\0", 4); return 1;
- case DRV_IOCTL_VERSION: return 0x100;
- case DRV_IOCTL_LOOKUP: return 0;
-
+ BASE_IOCTLS(DRV_TYPE_KEYBOARD, "KB", 0x100, csaIOCTL_NAMES);
+
// Sets the Keyboard Callback
case KB_IOCTL_SETCALLBACK:
// Sanity Check