Changes in / [af430ce:37b1651d] in mainline
- Location:
- uspace
- Files:
-
- 4 edited
-
drv/usbhid/kbddev.c (modified) (1 diff)
-
drv/usbhid/usbhid.ma (modified) (1 diff)
-
lib/usb/src/request.c (modified) (2 diffs)
-
srv/hid/console/console.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbhid/kbddev.c
raf430ce r37b1651d 289 289 290 290 usb_log_debug2("Sending key %d to the console\n", ev.key); 291 if (kbd_dev->console_phone < 0) { 292 usb_log_warning( 293 "Connection to console not ready, key discarded.\n"); 294 return; 295 } 291 assert(kbd_dev->console_phone != -1); 296 292 297 293 async_msg_4(kbd_dev->console_phone, KBD_EVENT, ev.type, ev.key, -
uspace/drv/usbhid/usbhid.ma
raf430ce r37b1651d 1 100 usb&interface&class=HID&subclass=0x01&protocol=0x01 1 10 usb&class=hid 2 10 usb&class=HID 2 3 10 usb&interface&class=HID 4 10 usb&hid -
uspace/lib/usb/src/request.c
raf430ce r37b1651d 504 504 * 505 505 * @param[in] pipe Control endpoint pipe (session must be already started). 506 * @param[in] index String index (in native endianess), 507 * first index has number 1 (index from descriptors can be used directly). 506 * @param[in] index String index (in native endianess). 508 507 * @param[in] lang String language (in native endianess). 509 508 * @param[out] string_ptr Where to store allocated string in native encoding. … … 516 515 return EBADMEM; 517 516 } 518 /* 519 * Index is actually one byte value and zero index is used 520 * to retrieve list of supported languages. 521 */ 522 if ((index < 1) || (index > 0xFF)) { 517 /* Index is actually one byte value. */ 518 if (index > 0xFF) { 523 519 return ERANGE; 524 520 } -
uspace/srv/hid/console/console.c
raf430ce r37b1651d 41 41 #include <ipc/ns.h> 42 42 #include <errno.h> 43 #include <str_error.h>44 43 #include <ipc/console.h> 45 44 #include <unistd.h> … … 65 64 #define NAME "console" 66 65 #define NAMESPACE "term" 67 /** Interval for checking for new keyboard (1/4s). */68 #define HOTPLUG_WATCH_INTERVAL (1000 * 250)69 66 70 67 /** Phone to the keyboard driver. */ … … 728 725 } 729 726 730 int rc = async_connect_to_me(phone, SERVICE_CONSOLE, 0, 0, 731 keyboard_events); 727 /* NB: The callback connection is slotted for removal */ 728 sysarg_t phonehash; 729 sysarg_t taskhash; 730 int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE, 731 0, 0, NULL, NULL, NULL, &taskhash, &phonehash); 732 732 if (rc != EOK) { 733 printf(NAME ": " \ 734 "Failed to create callback from input device: %s.\n", 735 str_error(rc)); 733 printf(NAME ": Failed to create callback from input device\n"); 736 734 return rc; 737 735 } 738 736 739 printf(NAME ": found keyboard \"%s\".\n", path); 737 async_new_connection(taskhash, phonehash, 0, NULL, keyboard_events); 738 739 printf(NAME ": we got a hit (new keyboard \"%s\").\n", path); 740 740 741 741 return phone; 742 742 } 743 743 744 745 /** Periodically check for new keyboards in /dev/class/. 744 /** Try to connect to given keyboard, bypassing provided libc routines. 746 745 * 747 * @param arg Class name.748 * @return This function should never exit.746 * @param devmap_path Path to keyboard without /dev prefix. 747 * @return Phone or error code. 749 748 */ 749 static int connect_keyboard_bypass(char *devmap_path) 750 { 751 int devmap_phone = async_connect_me_to_blocking(PHONE_NS, 752 SERVICE_DEVMAP, DEVMAP_CLIENT, 0); 753 if (devmap_phone < 0) { 754 return devmap_phone; 755 } 756 ipc_call_t answer; 757 aid_t req = async_send_2(devmap_phone, DEVMAP_DEVICE_GET_HANDLE, 758 0, 0, &answer); 759 760 sysarg_t retval = async_data_write_start(devmap_phone, 761 devmap_path, str_size(devmap_path)); 762 if (retval != EOK) { 763 async_wait_for(req, NULL); 764 async_hangup(devmap_phone); 765 return retval; 766 } 767 768 async_wait_for(req, &retval); 769 770 if (retval != EOK) { 771 async_hangup(devmap_phone); 772 return retval; 773 } 774 775 devmap_handle_t handle = (devmap_handle_t) IPC_GET_ARG1(answer); 776 777 async_hangup(devmap_phone); 778 779 int phone = async_connect_me_to(PHONE_NS, 780 SERVICE_DEVMAP, DEVMAP_CONNECT_TO_DEVICE, handle); 781 if (phone < 0) { 782 return phone; 783 } 784 785 /* NB: The callback connection is slotted for removal */ 786 sysarg_t phonehash; 787 sysarg_t taskhash; 788 int rc = async_req_3_5(phone, IPC_M_CONNECT_TO_ME, SERVICE_CONSOLE, 789 0, 0, NULL, NULL, NULL, &taskhash, &phonehash); 790 if (rc != EOK) { 791 printf(NAME ": Failed to create callback from input device\n"); 792 return rc; 793 } 794 795 async_new_connection(taskhash, phonehash, 0, NULL, keyboard_events); 796 797 printf(NAME ": we got a hit (new keyboard \"/dev/%s\").\n", 798 devmap_path); 799 800 return phone; 801 } 802 803 750 804 static int check_new_keyboards(void *arg) 751 805 { 752 806 char *class_name = (char *) arg; 753 807 754 size_t index = 1;808 int index = 1; 755 809 756 810 while (true) { 757 async_usleep( HOTPLUG_WATCH_INTERVAL);811 async_usleep(1 * 500 * 1000); 758 812 char *path; 759 int rc = asprintf(&path, "/dev/class/%s\\%zu", 760 class_name, index); 813 int rc = asprintf(&path, "class/%s\\%d", class_name, index); 761 814 if (rc < 0) { 762 815 continue; 763 816 } 764 817 rc = 0; 765 rc = connect_keyboard (path);818 rc = connect_keyboard_bypass(path); 766 819 if (rc > 0) { 767 820 /* We do not allow unplug. */
Note:
See TracChangeset
for help on using the changeset viewer.
