#define KEYREPEATWAITMS 500
#define KEYREPEATMS 33
+// Format of USB keyboard event data
+struct keyevent {
+ u8 modifiers;
+ u8 reserved;
+ u8 keys[6];
+};
+
+#define MAX_KBD_EVENT 10
+
static int
usb_kbd_setup(struct usbdevice_s *usbdev
, struct usb_endpoint_descriptor *epdesc)
// XXX - this enables the first found keyboard (could be random)
return -1;
- if (epdesc->wMaxPacketSize != 8)
+ if (epdesc->wMaxPacketSize < sizeof(struct keyevent)
+ || epdesc->wMaxPacketSize > MAX_KBD_EVENT) {
+ dprintf(1, "USB keyboard wMaxPacketSize=%d; aborting\n"
+ , epdesc->wMaxPacketSize);
return -1;
+ }
// Enable "boot" protocol.
int ret = set_protocol(usbdev->defpipe, 0);
return 0;
}
+// Format of USB mouse event data
+struct mouseevent {
+ u8 buttons;
+ u8 x, y;
+};
+
+#define MAX_MOUSE_EVENT 8
+
static int
usb_mouse_setup(struct usbdevice_s *usbdev
, struct usb_endpoint_descriptor *epdesc)
// XXX - this enables the first found mouse (could be random)
return -1;
- if (epdesc->wMaxPacketSize < 3 || epdesc->wMaxPacketSize > 8)
+ if (epdesc->wMaxPacketSize < sizeof(struct mouseevent)
+ || epdesc->wMaxPacketSize > MAX_MOUSE_EVENT) {
+ dprintf(1, "USB mouse wMaxPacketSize=%d; aborting\n"
+ , epdesc->wMaxPacketSize);
return -1;
+ }
// Enable "boot" protocol.
int ret = set_protocol(usbdev->defpipe, 0);
#define RELEASEBIT 0x80
-// Format of USB keyboard event data
-struct keyevent {
- u8 modifiers;
- u8 reserved;
- u8 keys[6];
-};
-
// Translate data from KeyToScanCode[] to calls to process_key().
static void
prockeys(u16 scancode, u8 key_release, u8 mods)
return;
for (;;) {
- struct keyevent data;
- int ret = usb_poll_intr(pipe, &data);
+ u8 data[MAX_KBD_EVENT];
+ int ret = usb_poll_intr(pipe, data);
if (ret)
break;
- handle_key(&data);
+ handle_key((void*)data);
}
}
* Mouse events
****************************************************************/
-// Format of USB mouse event data
-struct mouseevent {
- u8 buttons;
- u8 x, y;
- u8 reserved[5];
-};
-
// Process USB mouse data.
static void
handle_mouse(struct mouseevent *data)
return;
for (;;) {
- struct mouseevent data;
- int ret = usb_poll_intr(pipe, &data);
+ u8 data[MAX_MOUSE_EVENT];
+ int ret = usb_poll_intr(pipe, data);
if (ret)
break;
- handle_mouse(&data);
+ handle_mouse((void*)data);
}
}