Changeset 960bee9 in mainline for uspace/drv/usbhid/kbddev.c
- Timestamp:
- 2011-03-07T16:51:59Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 97ff14d
- Parents:
- a6add7a (diff), d4beec3 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/kbddev.c
ra6add7a r960bee9 38 38 #include <str_error.h> 39 39 #include <fibril.h> 40 #include <stdio.h> 40 41 41 42 #include <io/keycode.h> … … 62 63 static const size_t BOOTP_BUFFER_SIZE = 8; 63 64 static const size_t BOOTP_BUFFER_OUT_SIZE = 1; 65 static const uint8_t BOOTP_ERROR_ROLLOVER = 1; 66 static const uint8_t IDLE_RATE = 0; 64 67 65 68 /** Keyboard polling endpoint description for boot protocol class. */ … … 149 152 uint8_t buffer[BOOTP_BUFFER_OUT_SIZE]; 150 153 int rc= 0; 151 unsigned i;152 154 153 155 memset(buffer, 0, BOOTP_BUFFER_OUT_SIZE); … … 177 179 } 178 180 179 // TODO: REFACTOR!!! 180 181 usb_log_debug("Output report buffer: "); 182 for (i = 0; i < BOOTP_BUFFER_OUT_SIZE; ++i) { 183 usb_log_debug("0x%x ", buffer[i]); 184 } 185 usb_log_debug("\n"); 186 187 uint16_t value = 0; 188 value |= (USB_HID_REPORT_TYPE_OUTPUT << 8); 189 181 usb_log_debug("Output report buffer: %s\n", 182 usb_debug_str_buffer(buffer, BOOTP_BUFFER_OUT_SIZE, 0)); 183 190 184 assert(kbd_dev->hid_dev != NULL); 191 185 assert(kbd_dev->hid_dev->initialized); 192 usbhid_req_set_report(kbd_dev->hid_dev, value, buffer,193 BOOTP_BUFFER_OUT_SIZE);186 usbhid_req_set_report(kbd_dev->hid_dev, USB_HID_REPORT_TYPE_OUTPUT, 187 buffer, BOOTP_BUFFER_OUT_SIZE); 194 188 } 195 189 … … 228 222 229 223 if (mod_mask != 0) { 230 usb_log_debug2("\n\nChanging mods and lock keys\n");231 usb_log_debug2("\nmods before: 0x%x\n", kbd_dev->mods);232 usb_log_debug2("\nLock keys before:0x%x\n\n",233 kbd_dev->lock_keys);234 235 224 if (type == KEY_PRESS) { 236 usb_log_debug2("\nKey pressed.\n");237 225 /* 238 226 * Only change lock state on transition from released … … 247 235 usbhid_kbd_set_led(kbd_dev); 248 236 } else { 249 usb_log_debug2("\nKey released.\n");250 237 kbd_dev->lock_keys = kbd_dev->lock_keys & ~mod_mask; 251 238 } 252 239 } 253 240 254 usb_log_debug2("\n\nmods after: 0x%x\n", kbd_dev->mods);255 usb_log_debug2("\nLock keys after: 0x%x\n\n", kbd_dev->lock_keys);256 257 241 if (key == KC_CAPS_LOCK || key == KC_NUM_LOCK || key == KC_SCROLL_LOCK) { 258 242 // do not send anything to the console, this is our business … … 281 265 ev.key = key; 282 266 ev.mods = kbd_dev->mods; 283 284 if (ev.mods & KM_NUM_LOCK) {285 usb_log_debug("\n\nNum Lock turned on.\n\n");286 }287 267 288 268 ev.c = layout[active_layout]->parse_ev(&ev); … … 340 320 const uint8_t *key_codes) 341 321 { 342 // TODO: phantom state!!343 344 322 unsigned int key; 345 323 unsigned int i, j; 324 325 /* 326 * First of all, check if the kbd have reported phantom state. 327 */ 328 i = 0; 329 // all fields should report Error Rollover 330 while (i < kbd_dev->keycode_count && 331 key_codes[i] == BOOTP_ERROR_ROLLOVER) { 332 ++i; 333 } 334 if (i == kbd_dev->keycode_count) { 335 usb_log_debug("Phantom state occured.\n"); 336 // phantom state, do nothing 337 return; 338 } 346 339 347 340 // TODO: quite dummy right now, think of better implementation … … 362 355 key = usbhid_parse_scancode(kbd_dev->keycodes[j]); 363 356 usbhid_kbd_push_ev(kbd_dev, KEY_RELEASE, key); 364 usb_log_debug2(" \nKey released: %d\n", key);357 usb_log_debug2("Key released: %d\n", key); 365 358 } else { 366 359 // found, nothing happens … … 382 375 // not found, i.e. new key pressed 383 376 key = usbhid_parse_scancode(key_codes[i]); 384 usb_log_debug2(" \nKey pressed: %d (keycode: %d)\n", key,377 usb_log_debug2("Key pressed: %d (keycode: %d)\n", key, 385 378 key_codes[i]); 386 379 usbhid_kbd_push_ev(kbd_dev, KEY_PRESS, key); … … 389 382 } 390 383 } 384 // // report all currently pressed keys 385 // for (i = 0; i < kbd_dev->keycode_count; ++i) { 386 // if (key_codes[i] != 0) { 387 // key = usbhid_parse_scancode(key_codes[i]); 388 // usb_log_debug2("Key pressed: %d (keycode: %d)\n", key, 389 // key_codes[i]); 390 // usbhid_kbd_push_ev(kbd_dev, KEY_PRESS, key); 391 // } 392 // } 391 393 392 394 memcpy(kbd_dev->keycodes, key_codes, kbd_dev->keycode_count); 393 394 usb_log_debug2("\nNew stored keycodes: "); 395 for (i = 0; i < kbd_dev->keycode_count; ++i) { 396 usb_log_debug2("%d ", kbd_dev->keycodes[i]); 397 } 395 396 usb_log_debug("New stored keycodes: %s\n", 397 usb_debug_str_buffer(kbd_dev->keycodes, kbd_dev->keycode_count, 0)); 398 398 } 399 399 … … 410 410 return; 411 411 } 412 413 usb_log_debug2("Got keys from parser: ");414 unsigned i;415 for (i = 0; i < count; ++i) {416 usb_log_debug2("%d ", key_codes[i]);417 }418 usb_log_debug2("\n");419 412 420 413 usbhid_kbd_t *kbd_dev = (usbhid_kbd_t *)arg; 421 414 assert(kbd_dev != NULL); 415 416 usb_log_debug("Got keys from parser: %s\n", 417 usb_debug_str_buffer(key_codes, kbd_dev->keycode_count, 0)); 422 418 423 419 if (count != kbd_dev->keycode_count) { … … 444 440 callbacks->keyboard = usbhid_kbd_process_keycodes; 445 441 446 //usb_hid_parse_report(kbd_dev->parser, buffer, actual_size, callbacks, 447 // NULL); 448 /*usb_log_debug2("Calling usb_hid_boot_keyboard_input_report() with size" 449 " %zu\n", actual_size);*/ 450 //dump_buffer("bufffer: ", buffer, actual_size); 442 usb_log_debug("Calling usb_hid_boot_keyboard_input_report() with " 443 "buffer %s\n", usb_debug_str_buffer(buffer, actual_size, 0)); 451 444 452 445 int rc = usb_hid_boot_keyboard_input_report(buffer, actual_size, … … 559 552 * Set boot protocol. 560 553 * Set LEDs according to initial setup. 554 * Set Idle rate 561 555 */ 562 556 assert(kbd_dev->hid_dev != NULL); … … 565 559 566 560 usbhid_kbd_set_led(kbd_dev); 561 562 usbhid_req_set_idle(kbd_dev->hid_dev, IDLE_RATE); 567 563 568 564 kbd_dev->initialized = 1; … … 634 630 usbhid_kbd_process_data(kbd_dev, buffer, actual_size); 635 631 636 async_usleep(kbd_dev->hid_dev->poll_interval); 632 // disabled for now, no reason to sleep 633 //async_usleep(kbd_dev->hid_dev->poll_interval); 637 634 } 638 635
Note:
See TracChangeset
for help on using the changeset viewer.