Changes in / [54d4b9e:98caf49] in mainline
- Location:
- uspace
- Files:
-
- 1 added
- 1 deleted
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/usbinfo/Makefile
r54d4b9e r98caf49 43 43 dev.c \ 44 44 dump.c \ 45 hid.c \46 45 info.c \ 47 46 main.c -
uspace/app/usbinfo/main.c
r54d4b9e r98caf49 56 56 printf("Usage: %s [options] device [device [device [ ... ]]]\n", 57 57 app_name); 58 printf(_INDENT "The device can be specified in two ways.\n"); 59 printf(_INDENT " o Using its devman path, e.g. /hw/pci0/.../usb00_a1.\n"); 60 printf(_INDENT " o Or using BUS.ADDR numbers as printed by lsusb.\n"); 58 printf(_INDENT "The device is a devman path to the device.\n"); 61 59 62 60 _OPTION("-h --help", "Print this help and exit."); … … 67 65 _OPTION("-s --strings", "Try to print all string descriptors."); 68 66 _OPTION("-S --status", "Get status of the device."); 69 _OPTION("-r --hid-report", "Dump HID report descriptor.");70 67 71 68 printf("\n"); … … 85 82 {"strings", no_argument, NULL, 's'}, 86 83 {"status", no_argument, NULL, 'S'}, 87 {"hid-report", no_argument, NULL, 'r'},88 84 {0, 0, NULL, 0} 89 85 }; 90 static const char *short_options = "himtTsS r";86 static const char *short_options = "himtTsS"; 91 87 92 88 static usbinfo_action_t actions[] = { … … 119 115 .opt = 'S', 120 116 .action = dump_status, 121 .active = false122 },123 {124 .opt = 'r',125 .action = dump_hidreport,126 117 .active = false 127 118 }, -
uspace/app/usbinfo/usbinfo.h
r54d4b9e r98caf49 85 85 void dump_strings(usbinfo_device_t *); 86 86 void dump_status(usbinfo_device_t *); 87 void dump_hidreport(usbinfo_device_t *);88 87 89 88 -
uspace/drv/ohci/root_hub.c
r54d4b9e r98caf49 251 251 int opResult; 252 252 if (request->ep->transfer_type == USB_TRANSFER_CONTROL) { 253 usb_log_ debug("Root hub got CONTROL packet\n");253 usb_log_info("Root hub got CONTROL packet\n"); 254 254 opResult = process_ctrl_request(instance, request); 255 255 usb_transfer_batch_finish_error(request, opResult); 256 256 } else if (request->ep->transfer_type == USB_TRANSFER_INTERRUPT) { 257 usb_log_ debug("Root hub got INTERRUPT packet\n");257 usb_log_info("Root hub got INTERRUPT packet\n"); 258 258 create_interrupt_mask_in_instance(instance); 259 259 if (is_zeros(instance->interrupt_buffer, -
uspace/drv/usbhid/Makefile
r54d4b9e r98caf49 43 43 BINARY = usbhid 44 44 45 SUBDRIVER_SOURCES = \46 kbd/conv.c \47 kbd/kbddev.c \48 kbd/kbdrepeat.c \49 mouse/mousedev.c \50 multimedia/multimedia.c \51 multimedia/keymap.c52 53 45 SOURCES = \ 54 46 main.c \ 55 47 usbhid.c \ 56 48 subdrivers.c \ 49 kbd/conv.c \ 50 kbd/kbddev.c \ 51 kbd/kbdrepeat.c \ 57 52 generic/hiddev.c \ 58 $(SUBDRIVER_SOURCES) 53 mouse/mousedev.c \ 54 multimedia/multimedia.c \ 55 multimedia/keymap.c \ 56 $(STOLEN_LAYOUT_SOURCES) 59 57 60 58 include $(USPACE_PREFIX)/Makefile.common -
uspace/drv/usbhid/generic/hiddev.c
r54d4b9e r98caf49 231 231 /*----------------------------------------------------------------------------*/ 232 232 233 bool usb_generic_hid_polling_callback(usb_hid_dev_t *hid_dev, void *data) 234 { 233 bool usb_generic_hid_polling_callback(usb_hid_dev_t *hid_dev, void *data, 234 uint8_t *buffer, size_t buffer_size) 235 { 236 usb_log_debug2("usb_hid_polling_callback(%p, %p, %zu)\n", 237 hid_dev, buffer, buffer_size); 238 usb_debug_str_buffer(buffer, buffer_size, 0); 235 239 return true; 236 240 } -
uspace/drv/usbhid/generic/hiddev.h
r54d4b9e r98caf49 50 50 int usb_generic_hid_init(struct usb_hid_dev *hid_dev, void **data); 51 51 52 bool usb_generic_hid_polling_callback(struct usb_hid_dev *hid_dev, void *data); 52 bool usb_generic_hid_polling_callback(struct usb_hid_dev *hid_dev, void *data, 53 uint8_t *buffer, size_t buffer_size); 53 54 54 55 #endif // USB_HID_HIDDDEV_H_ -
uspace/drv/usbhid/kbd/kbddev.c
r54d4b9e r98caf49 434 434 * usb_hid_parse_report(). 435 435 */ 436 static void usb_kbd_process_data(usb_hid_dev_t *hid_dev, usb_kbd_t *kbd_dev) 436 static void usb_kbd_process_data(usb_hid_dev_t *hid_dev, usb_kbd_t *kbd_dev, 437 uint8_t *buffer, size_t actual_size) 437 438 { 438 439 assert(hid_dev->report != NULL); 439 440 assert(hid_dev != NULL); 440 441 assert(kbd_dev != NULL); 442 443 usb_log_debug("Calling usb_hid_parse_report() with " 444 "buffer %s\n", usb_debug_str_buffer(buffer, actual_size, 0)); 441 445 442 446 usb_hid_report_path_t *path = usb_hid_report_path(); 443 447 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_KEYBOARD, 0); 444 448 445 usb_hid_report_path_set_report_id (path, hid_dev->report_id); 449 uint8_t report_id; 450 int rc = usb_hid_parse_report(hid_dev->report, buffer, actual_size, 451 &report_id); 452 453 if (rc != EOK) { 454 usb_log_warning("Error in usb_hid_parse_report():" 455 "%s\n", str_error(rc)); 456 } 457 458 usb_hid_report_path_set_report_id (path, report_id); 446 459 447 460 // fill in the currently pressed keys … … 743 756 /*----------------------------------------------------------------------------*/ 744 757 745 bool usb_kbd_polling_callback(usb_hid_dev_t *hid_dev, void *data) 746 { 747 if (hid_dev == NULL/* || buffer == NULL*/ || data == NULL) { 758 bool usb_kbd_polling_callback(usb_hid_dev_t *hid_dev, void *data, 759 uint8_t *buffer, size_t buffer_size) 760 { 761 if (hid_dev == NULL || buffer == NULL || data == NULL) { 748 762 // do not continue polling (???) 749 763 return false; … … 754 768 755 769 // TODO: add return value from this function 756 usb_kbd_process_data(hid_dev, kbd_dev );770 usb_kbd_process_data(hid_dev, kbd_dev, buffer, buffer_size); 757 771 758 772 return true; … … 790 804 if ((*kbd_dev)->repeat_mtx != NULL) { 791 805 //assert(!fibril_mutex_is_locked((*kbd_dev)->repeat_mtx)); 792 // FIXME - the fibril_mutex_is_locked may not cause793 // fibril scheduling794 806 while (fibril_mutex_is_locked((*kbd_dev)->repeat_mtx)) {} 795 807 free((*kbd_dev)->repeat_mtx); -
uspace/drv/usbhid/kbd/kbddev.h
r54d4b9e r98caf49 125 125 int usb_kbd_init(struct usb_hid_dev *hid_dev, void **data); 126 126 127 bool usb_kbd_polling_callback(struct usb_hid_dev *hid_dev, void *data); 127 bool usb_kbd_polling_callback(struct usb_hid_dev *hid_dev, void *data, 128 uint8_t *buffer, size_t buffer_size); 128 129 129 130 int usb_kbd_is_initialized(const usb_kbd_t *kbd_dev); -
uspace/drv/usbhid/mouse/mousedev.c
r54d4b9e r98caf49 229 229 /*----------------------------------------------------------------------------*/ 230 230 231 static bool usb_mouse_process_report(usb_hid_dev_t *hid_dev, 232 usb_mouse_t *mouse_dev) 231 static bool usb_mouse_process_report(usb_hid_dev_t *hid_dev, 232 usb_mouse_t *mouse_dev, uint8_t *buffer, 233 size_t buffer_size) 233 234 { 234 235 assert(mouse_dev != NULL); 236 237 usb_log_debug2("got buffer: %s.\n", 238 usb_debug_str_buffer(buffer, buffer_size, 0)); 235 239 236 240 if (mouse_dev->mouse_phone < 0) { … … 240 244 241 245 /* 246 * parse the input report 247 */ 248 249 usb_log_debug(NAME " Calling usb_hid_parse_report() with " 250 "buffer %s\n", usb_debug_str_buffer(buffer, buffer_size, 0)); 251 252 uint8_t report_id; 253 254 int rc = usb_hid_parse_report(hid_dev->report, buffer, buffer_size, 255 &report_id); 256 257 if (rc != EOK) { 258 usb_log_warning(NAME "Error in usb_hid_parse_report(): %s\n", 259 str_error(rc)); 260 return true; 261 } 262 263 /* 242 264 * X 243 265 */ … … 248 270 USB_HIDUT_USAGE_GENERIC_DESKTOP_X); 249 271 250 usb_hid_report_path_set_report_id(path, hid_dev->report_id);272 usb_hid_report_path_set_report_id(path, report_id); 251 273 252 274 usb_hid_report_field_t *field = usb_hid_report_get_sibling( … … 271 293 USB_HIDUT_USAGE_GENERIC_DESKTOP_Y); 272 294 273 usb_hid_report_path_set_report_id(path, hid_dev->report_id);295 usb_hid_report_path_set_report_id(path, report_id); 274 296 275 297 field = usb_hid_report_get_sibling( … … 299 321 USB_HIDUT_USAGE_GENERIC_DESKTOP_WHEEL); 300 322 301 usb_hid_report_path_set_report_id(path, hid_dev->report_id);323 usb_hid_report_path_set_report_id(path, report_id); 302 324 303 325 field = usb_hid_report_get_sibling( … … 323 345 path = usb_hid_report_path(); 324 346 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_BUTTON, 0); 325 usb_hid_report_path_set_report_id(path, hid_dev->report_id);347 usb_hid_report_path_set_report_id(path, report_id); 326 348 327 349 field = usb_hid_report_get_sibling( … … 488 510 /*----------------------------------------------------------------------------*/ 489 511 490 bool usb_mouse_polling_callback(usb_hid_dev_t *hid_dev, void *data) 512 bool usb_mouse_polling_callback(usb_hid_dev_t *hid_dev, void *data, 513 uint8_t *buffer, size_t buffer_size) 491 514 { 492 515 usb_log_debug("usb_mouse_polling_callback()\n"); 516 usb_debug_str_buffer(buffer, buffer_size, 0); 493 517 494 518 if (hid_dev == NULL || data == NULL) { … … 500 524 usb_mouse_t *mouse_dev = (usb_mouse_t *)data; 501 525 502 return usb_mouse_process_report(hid_dev, mouse_dev); 526 return usb_mouse_process_report(hid_dev, mouse_dev, buffer, 527 buffer_size); 503 528 } 504 529 -
uspace/drv/usbhid/mouse/mousedev.h
r54d4b9e r98caf49 65 65 int usb_mouse_init(struct usb_hid_dev *hid_dev, void **data); 66 66 67 bool usb_mouse_polling_callback(struct usb_hid_dev *hid_dev, void *data); 67 bool usb_mouse_polling_callback(struct usb_hid_dev *hid_dev, void *data, 68 uint8_t *buffer, size_t buffer_size); 68 69 69 70 void usb_mouse_deinit(struct usb_hid_dev *hid_dev, void *data); -
uspace/drv/usbhid/multimedia/multimedia.c
r54d4b9e r98caf49 94 94 95 95 usb_multimedia_t *multim_dev = (usb_multimedia_t *)fun->driver_data; 96 //usb_hid_dev_t *hid_dev = (usb_hid_dev_t *)fun->driver_data; 96 97 97 98 if (multim_dev == NULL) { … … 273 274 /*----------------------------------------------------------------------------*/ 274 275 275 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data) 276 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data, 277 uint8_t *buffer, size_t buffer_size) 276 278 { 277 279 // TODO: checks 278 if (hid_dev == NULL || data == NULL ) {280 if (hid_dev == NULL || data == NULL || buffer == NULL) { 279 281 return false; 280 282 } 281 283 284 usb_log_debug(NAME " usb_lgtch_polling_callback(%p, %p, %zu)\n", 285 hid_dev, buffer, buffer_size); 286 282 287 usb_multimedia_t *multim_dev = (usb_multimedia_t *)data; 288 289 usb_log_debug(NAME " Calling usb_hid_parse_report() with " 290 "buffer %s\n", usb_debug_str_buffer(buffer, buffer_size, 0)); 283 291 284 292 usb_hid_report_path_t *path = usb_hid_report_path(); 285 293 usb_hid_report_path_append_item(path, USB_HIDUT_PAGE_CONSUMER, 0); 286 294 287 usb_hid_report_path_set_report_id(path, hid_dev->report_id); 295 uint8_t report_id; 296 297 int rc = usb_hid_parse_report(hid_dev->report, buffer, buffer_size, 298 &report_id); 299 300 if (rc != EOK) { 301 usb_log_warning(NAME "Error in usb_hid_parse_report(): %s\n", 302 str_error(rc)); 303 return true; 304 } 305 306 usb_hid_report_path_set_report_id(path, report_id); 288 307 289 308 usb_hid_report_field_t *field = usb_hid_report_get_sibling( -
uspace/drv/usbhid/multimedia/multimedia.h
r54d4b9e r98caf49 47 47 void usb_multimedia_deinit(struct usb_hid_dev *hid_dev, void *data); 48 48 49 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data); 49 bool usb_multimedia_polling_callback(struct usb_hid_dev *hid_dev, void *data, 50 uint8_t *buffer, size_t buffer_size); 50 51 51 52 /*----------------------------------------------------------------------------*/ -
uspace/drv/usbhid/subdrivers.h
r54d4b9e r98caf49 49 49 /*----------------------------------------------------------------------------*/ 50 50 51 /** Structure representing the mapping between device requirements and the 52 * subdriver supposed to handle this device. 53 * 54 * By filling in this structure and adding it to the usb_hid_subdrivers array, 55 * a new subdriver mapping will be created and used by the HID driver when it 56 * searches for appropriate subdrivers for a device. 51 /* TODO: This mapping must contain some other information to get the proper 52 * interface. 57 53 */ 58 54 typedef struct usb_hid_subdriver_mapping { 59 /** Usage path that the device's Input reports must contain.60 *61 * It is an array of pairs <usage_page, usage>, terminated by a <0, 0>62 * pair. If you do not wish to specify the device in this way, set this63 * to NULL.64 */65 55 const usb_hid_subdriver_usage_t *usage_path; 66 67 /** Report ID for which the path should apply. */68 56 int report_id; 69 70 /** Compare type for the Usage path. */71 57 int compare; 72 73 /** Vendor ID (set to -1 if not specified). */74 58 int vendor_id; 75 76 /** Product ID (set to -1 if not specified). */77 59 int product_id; 78 79 /** Subdriver for controlling this device. */80 60 usb_hid_subdriver_t subdriver; 81 61 } usb_hid_subdriver_mapping_t; -
uspace/drv/usbhid/usbhid.c
r54d4b9e r98caf49 582 582 } 583 583 584 // parse the input report585 586 int rc = usb_hid_parse_report(hid_dev->report, buffer, buffer_size,587 &hid_dev->report_id);588 589 if (rc != EOK) {590 usb_log_warning("Error in usb_hid_parse_report():"591 "%s\n", str_error(rc));592 }593 594 584 bool cont = false; 595 585 … … 598 588 if (hid_dev->subdrivers[i].poll != NULL 599 589 && hid_dev->subdrivers[i].poll(hid_dev, 600 hid_dev->subdrivers[i].data )) {590 hid_dev->subdrivers[i].data, buffer, buffer_size)) { 601 591 cont = true; 602 592 } -
uspace/drv/usbhid/usbhid.h
r54d4b9e r98caf49 46 46 #include <bool.h> 47 47 48 typedef struct usb_hid_dev usb_hid_dev_t; 49 typedef struct usb_hid_subdriver usb_hid_subdriver_t; 48 struct usb_hid_dev; 50 49 51 /** Subdriver initialization callback. 52 * 53 * @param dev Backing USB HID device. 54 * @param data Custom subdriver data (pointer where to store them). 55 * @return Error code. 56 */ 57 typedef int (*usb_hid_driver_init_t)(usb_hid_dev_t *dev, void **data); 50 typedef int (*usb_hid_driver_init_t)(struct usb_hid_dev *, void **data); 51 typedef void (*usb_hid_driver_deinit_t)(struct usb_hid_dev *, void *data); 52 typedef bool (*usb_hid_driver_poll)(struct usb_hid_dev *, void *data, uint8_t *, 53 size_t); 54 typedef int (*usb_hid_driver_poll_ended)(struct usb_hid_dev *, void *data, 55 bool reason); 58 56 59 /** Subdriver deinitialization callback. 60 * 61 * @param dev Backing USB HID device. 62 * @param data Custom subdriver data. 63 */ 64 typedef void (*usb_hid_driver_deinit_t)(usb_hid_dev_t *dev, void *data); 65 66 /** Subdriver callback on data from device. 67 * 68 * @param dev Backing USB HID device. 69 * @param data Custom subdriver data. 70 * @return Whether to continue polling (typically true always). 71 */ 72 typedef bool (*usb_hid_driver_poll_t)(usb_hid_dev_t *dev, void *data); 73 74 /** Subdriver callback after communication with the device ceased. 75 * 76 * @param dev Backing USB HID device. 77 * @param data Custom subdriver data. 78 * @param ended_due_to_errors Whether communication ended due to errors in 79 * communication (true) or deliberately by driver (false). 80 */ 81 typedef void (*usb_hid_driver_poll_ended_t)(usb_hid_dev_t *dev, void *data, 82 bool ended_due_to_errors); 83 84 struct usb_hid_subdriver { 57 typedef struct usb_hid_subdriver { 85 58 /** Function to be called when initializing HID device. */ 86 59 usb_hid_driver_init_t init; … … 88 61 usb_hid_driver_deinit_t deinit; 89 62 /** Function to be called when data arrives from the device. */ 90 usb_hid_driver_poll _tpoll;63 usb_hid_driver_poll poll; 91 64 /** Function to be called when polling ends. */ 92 usb_hid_driver_poll_ended _tpoll_end;65 usb_hid_driver_poll_ended poll_end; 93 66 /** Arbitrary data needed by the subdriver. */ 94 67 void *data; 95 } ;68 } usb_hid_subdriver_t; 96 69 97 70 /*----------------------------------------------------------------------------*/ … … 99 72 * Structure for holding general HID device data. 100 73 */ 101 struct usb_hid_dev {74 typedef struct usb_hid_dev { 102 75 /** Structure holding generic USB device information. */ 103 76 usb_device_t *usb_dev; … … 121 94 usb_hid_report_t *report; 122 95 123 uint8_t report_id;124 125 96 uint8_t *input_report; 126 97 … … 129 100 130 101 int report_nr; 131 } ;102 } usb_hid_dev_t; 132 103 133 104 /*----------------------------------------------------------------------------*/ -
uspace/lib/usb/src/hc.c
r54d4b9e r98caf49 98 98 return EBUSY; 99 99 100 async_sess_t *sess = devman_device_connect(EXCHANGE_ ATOMIC,100 async_sess_t *sess = devman_device_connect(EXCHANGE_SERIALIZE, 101 101 connection->hc_handle, 0); 102 102 if (!sess) … … 177 177 { 178 178 async_sess_t *parent_sess = 179 devman_parent_device_connect(EXCHANGE_ ATOMIC, dev_handle,179 devman_parent_device_connect(EXCHANGE_SERIALIZE, dev_handle, 180 180 IPC_FLAG_BLOCKING); 181 181 if (!parent_sess) … … 241 241 { 242 242 async_sess_t *parent_sess = 243 devman_parent_device_connect(EXCHANGE_ ATOMIC, device_handle,243 devman_parent_device_connect(EXCHANGE_SERIALIZE, device_handle, 244 244 IPC_FLAG_BLOCKING); 245 245 if (!parent_sess) -
uspace/lib/usbdev/src/pipes.c
r54d4b9e r98caf49 81 81 { 82 82 async_sess_t *parent_sess = 83 devman_parent_device_connect(EXCHANGE_ ATOMIC, device->handle,83 devman_parent_device_connect(EXCHANGE_SERIALIZE, device->handle, 84 84 IPC_FLAG_BLOCKING); 85 85 if (!parent_sess) … … 122 122 123 123 async_sess_t *parent_sess = 124 devman_parent_device_connect(EXCHANGE_ ATOMIC, dev->handle,124 devman_parent_device_connect(EXCHANGE_SERIALIZE, dev->handle, 125 125 IPC_FLAG_BLOCKING); 126 126 if (!parent_sess) -
uspace/lib/usbhid/src/hidreq.c
r54d4b9e r98caf49 82 82 value |= (type << 8); 83 83 84 usb_log_debug("Sending Set 84 usb_log_debug("Sending Set_Report request to the device.\n"); 85 85 86 86 rc = usb_control_request_set(ctrl_pipe, … … 89 89 90 90 if (rc != EOK) { 91 usb_log_warning("Error sending Set Report request to the"92 " device:%s.\n", str_error(rc));91 usb_log_warning("Error sending output report to the keyboard: " 92 "%s.\n", str_error(rc)); 93 93 return rc; 94 94 } … … 129 129 int rc; 130 130 131 usb_log_debug("Sending Set 131 usb_log_debug("Sending Set_Protocol request to the device (" 132 132 "protocol: %d, iface: %d).\n", protocol, iface_no); 133 133 … … 137 137 138 138 if (rc != EOK) { 139 usb_log_warning("Error sending Set Protocol request to the"140 " device:%s.\n", str_error(rc));139 usb_log_warning("Error sending output report to the keyboard: " 140 "%s.\n", str_error(rc)); 141 141 return rc; 142 142 } … … 177 177 int rc; 178 178 179 usb_log_debug("Sending Set 179 usb_log_debug("Sending Set_Idle request to the device (" 180 180 "duration: %u, iface: %d).\n", duration, iface_no); 181 181 … … 187 187 188 188 if (rc != EOK) { 189 usb_log_warning("Error sending Set Idle request to the device: "189 usb_log_warning("Error sending output report to the keyboard: " 190 190 "%s.\n", str_error(rc)); 191 191 return rc; … … 235 235 value |= (type << 8); 236 236 237 usb_log_debug("Sending Get 237 usb_log_debug("Sending Get_Report request to the device.\n"); 238 238 239 239 rc = usb_control_request_get(ctrl_pipe, … … 243 243 244 244 if (rc != EOK) { 245 usb_log_warning("Error sending Get Report request to the device: "245 usb_log_warning("Error sending output report to the keyboard: " 246 246 "%s.\n", str_error(rc)); 247 247 return rc; … … 283 283 int rc; 284 284 285 usb_log_debug("Sending Get 285 usb_log_debug("Sending Get_Protocol request to the device (" 286 286 "iface: %d).\n", iface_no); 287 287 … … 294 294 295 295 if (rc != EOK) { 296 usb_log_warning("Error sending Get Protocol request to the"297 " device:%s.\n", str_error(rc));296 usb_log_warning("Error sending output report to the keyboard: " 297 "%s.\n", str_error(rc)); 298 298 return rc; 299 299 } … … 344 344 int rc; 345 345 346 usb_log_debug("Sending Get 346 usb_log_debug("Sending Get_Idle request to the device (" 347 347 "iface: %d).\n", iface_no); 348 348 … … 357 357 358 358 if (rc != EOK) { 359 usb_log_warning("Error sending Get Idle request to the device: "359 usb_log_warning("Error sending output report to the keyboard: " 360 360 "%s.\n", str_error(rc)); 361 361 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.