5411055493d0e589405392850c32906af772d050
[reactos.git] / reactos / drivers / usb / cromwell / sys / usbkey.c
1 #include "../usb_wrapper.h"
2
3 #define keyboarddebug 1
4
5 #if keyboarddebug
6 //extern int printk(const char *szFormat, ...);
7 int ycoffset = 0;
8 #endif
9
10 unsigned int current_keyboard_key;
11
12 struct usb_kbd_info {
13 struct urb *urb;
14 unsigned char kbd_pkt[8];
15 unsigned char old[8];
16
17 /*
18 struct input_dev dev;
19 struct usb_device *usbdev;
20 struct urb irq, led;
21 struct usb_ctrlrequest dr;
22 unsigned char leds, newleds;
23 char name[128];
24 int open;
25 */
26 };
27
28 static void usb_kbd_irq(struct urb *urb, struct pt_regs *regs)
29 {
30 struct usb_kbd_info *kbd = urb->context;
31 //int i;
32
33 if (urb->status) return;
34
35 memcpy(kbd->kbd_pkt, urb->transfer_buffer, 8);
36
37 current_keyboard_key = kbd->kbd_pkt[2];
38
39
40 #if keyboarddebug
41 //ycoffset += 15;
42 //ycoffset = ycoffset % 600;
43 //VIDEO_CURSOR_POSX=20;
44 //VIDEO_CURSOR_POSY=ycoffset;
45 printk(" -%02x %02x %02x %02x %02x %02x\n",kbd->kbd_pkt[0],kbd->kbd_pkt[1],kbd->kbd_pkt[2],kbd->kbd_pkt[3],kbd->kbd_pkt[4],kbd->kbd_pkt[5]);
46 #endif
47
48 usb_submit_urb(urb,GFP_ATOMIC);
49
50 }
51
52 static int usb_kbd_probe(struct usb_interface *intf, const struct usb_device_id *id)
53 {
54 struct urb *urb;
55 struct usb_device *udev = interface_to_usbdev (intf);
56 struct usb_endpoint_descriptor *ep_irq_in;
57 //struct usb_endpoint_descriptor *ep_irq_out;
58 struct usb_kbd_info *usbk;
59
60 //int i, pipe, maxp;
61 //char *buf;
62
63 usbk=(struct usb_kbd_info *)kmalloc(sizeof(struct usb_kbd_info),0);
64 if (!usbk) return -1;
65
66 urb=usb_alloc_urb(0,0);
67 if (!urb) return -1;
68
69 usbk->urb=urb;
70
71 ep_irq_in = &intf->altsetting[0].endpoint[0].desc;
72 usb_fill_int_urb(urb, udev,
73 usb_rcvintpipe(udev, ep_irq_in->bEndpointAddress),
74 usbk->kbd_pkt, 8, usb_kbd_irq,
75 usbk, 8);
76
77 usb_submit_urb(urb,GFP_ATOMIC);
78 usb_set_intfdata(intf,usbk);
79 #if keyboarddebug
80 printk("USB Keyboard Connected\n");
81 #endif
82
83 return 0;
84 }
85
86
87 static void usb_kbd_disconnect(struct usb_interface *intf)
88 {
89 struct usb_kbd_info *usbk = usb_get_intfdata (intf);
90 usbprintk("Keyboard disconnected\n ");
91 usb_unlink_urb(usbk->urb);
92 usb_free_urb(usbk->urb);
93 kfree(usbk);
94 }
95
96 static struct usb_device_id usb_kbd_id_table [] = {
97 { USB_INTERFACE_INFO(3, 1, 1) },
98 { } /* Terminating entry */
99 };
100
101
102 static struct usb_driver usb_kbd_driver = {
103 .owner = THIS_MODULE,
104 .name = "keyboard",
105 .probe = usb_kbd_probe,
106 .disconnect = usb_kbd_disconnect,
107 .id_table = usb_kbd_id_table,
108 };
109
110 void UsbKeyBoardInit(void)
111 {
112 //current_remote_key=0;
113 //sbprintk("Keyboard probe %p ",xremote_probe);
114 if (usb_register(&usb_kbd_driver) < 0) {
115 #if keyboarddebug
116 printk("Unable to register Keyboard driver");
117 #endif
118 return;
119 }
120 }
121
122 void UsbKeyBoardRemove(void) {
123 usb_deregister(&usb_kbd_driver);
124 }