Changeset c9399c0 in mainline
- Timestamp:
- 2013-01-05T17:05:37Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2a6e2358
- Parents:
- d1974966
- Location:
- uspace
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/vuhid/main.c
rd1974966 rc9399c0 57 57 static usbvirt_control_request_handler_t endpoint_zero_handlers[] = { 58 58 { 59 .req_direction = USB_DIRECTION_IN, 60 .req_type = USB_REQUEST_TYPE_STANDARD, 61 .req_recipient = USB_REQUEST_RECIPIENT_INTERFACE, 59 .request_type = SETUP_REQUEST_TO_HOST(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_INTERFACE), 62 60 .request = USB_DEVREQ_GET_DESCRIPTOR, 63 61 .name = "Get_Descriptor", … … 65 63 }, 66 64 { 67 .req_direction = USB_DIRECTION_OUT, 68 .req_recipient = USB_REQUEST_RECIPIENT_INTERFACE, 69 .req_type = USB_REQUEST_TYPE_CLASS, 65 .request_type = SETUP_REQUEST_TO_DEVICE(USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE), 70 66 .request = USB_HIDREQ_SET_PROTOCOL, 71 67 .name = "Set_Protocol", … … 73 69 }, 74 70 { 75 .req_direction = USB_DIRECTION_OUT, 76 .req_recipient = USB_REQUEST_RECIPIENT_INTERFACE, 77 .req_type = USB_REQUEST_TYPE_CLASS, 71 .request_type = SETUP_REQUEST_TO_DEVICE(USB_REQUEST_TYPE_CLASS, USB_REQUEST_RECIPIENT_INTERFACE), 78 72 .request = USB_HIDREQ_SET_REPORT, 79 73 .name = "Set_Report", -
uspace/drv/bus/usb/vhc/hub/virthubops.c
rd1974966 rc9399c0 340 340 341 341 342 /** IN class request. */343 #define CLASS_REQ_IN(recipient) \344 USBVIRT_MAKE_CONTROL_REQUEST_TYPE(USB_DIRECTION_IN, \345 USBVIRT_REQUEST_TYPE_CLASS, recipient)346 /** OUT class request. */347 #define CLASS_REQ_OUT(recipient) \348 USBVIRT_MAKE_CONTROL_REQUEST_TYPE(USB_DIRECTION_OUT, \349 USBVIRT_REQUEST_TYPE_CLASS, recipient)350 342 351 343 /** Recipient: other. */ … … 353 345 /** Recipient: device. */ 354 346 #define REC_DEVICE USB_REQUEST_RECIPIENT_DEVICE 355 /** Direction: in. */ 356 #define DIR_IN USB_DIRECTION_IN 357 /** Direction: out. */ 358 #define DIR_OUT USB_DIRECTION_OUT 359 360 361 /** Create a class request. 362 * 363 * @param direction Request direction. 364 * @param recipient Request recipient. 347 348 349 /** Create a class request to get data from device 350 * 351 * @param rec Request recipient. 365 352 * @param req Request code. 366 353 */ 367 #define CLASS_REQ(direction, recipient, req) \ 368 .req_direction = direction, \ 369 .req_recipient = recipient, \ 370 .req_type = USB_REQUEST_TYPE_CLASS, \ 354 #define CLASS_REQ_IN(rec, req) \ 355 .request_type = SETUP_REQUEST_TO_HOST(USB_REQUEST_TYPE_CLASS, rec), \ 371 356 .request = req 372 357 373 /** Create a standard request. 374 * 375 * @param direction Request direction. 376 * @param recipient Request recipient. 358 /** Create a class request to send data to device 359 * 360 * @param rec Request recipient. 377 361 * @param req Request code. 378 362 */ 379 #define STD_REQ(direction, recipient, req) \ 380 .req_direction = direction, \ 381 .req_recipient = recipient, \ 382 .req_type = USB_REQUEST_TYPE_STANDARD, \ 363 #define CLASS_REQ_OUT(rec, req) \ 364 .request_type = SETUP_REQUEST_TO_DEVICE(USB_REQUEST_TYPE_CLASS, rec), \ 383 365 .request = req 384 366 … … 386 368 static usbvirt_control_request_handler_t endpoint_zero_handlers[] = { 387 369 { 388 STD_REQ(DIR_IN, REC_DEVICE, USB_DEVREQ_GET_DESCRIPTOR), 370 .request_type = SETUP_REQUEST_TO_HOST(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE), 371 .request = USB_DEVREQ_GET_DESCRIPTOR, 389 372 .name = "GetDescriptor", 390 373 .callback = req_get_descriptor 391 374 }, 392 375 { 393 CLASS_REQ (DIR_IN,REC_DEVICE, USB_DEVREQ_GET_DESCRIPTOR),376 CLASS_REQ_IN(REC_DEVICE, USB_DEVREQ_GET_DESCRIPTOR), 394 377 .name = "GetDescriptor", 395 378 .callback = req_get_descriptor 396 379 }, 397 380 { 398 CLASS_REQ (DIR_IN,REC_OTHER, USB_HUB_REQUEST_GET_STATUS),381 CLASS_REQ_IN(REC_OTHER, USB_HUB_REQUEST_GET_STATUS), 399 382 .name = "GetPortStatus", 400 383 .callback = req_get_port_status 401 384 }, 402 385 { 403 CLASS_REQ (DIR_OUT,REC_DEVICE, USB_HUB_REQUEST_CLEAR_FEATURE),386 CLASS_REQ_OUT(REC_DEVICE, USB_HUB_REQUEST_CLEAR_FEATURE), 404 387 .name = "ClearHubFeature", 405 388 .callback = req_clear_hub_feature 406 389 }, 407 390 { 408 CLASS_REQ (DIR_OUT,REC_OTHER, USB_HUB_REQUEST_CLEAR_FEATURE),391 CLASS_REQ_OUT(REC_OTHER, USB_HUB_REQUEST_CLEAR_FEATURE), 409 392 .name = "ClearPortFeature", 410 393 .callback = req_clear_port_feature 411 394 }, 412 395 { 413 CLASS_REQ (DIR_IN,REC_OTHER, USB_HUB_REQUEST_GET_STATE),396 CLASS_REQ_IN(REC_OTHER, USB_HUB_REQUEST_GET_STATE), 414 397 .name = "GetBusState", 415 398 .callback = req_get_bus_state 416 399 }, 417 400 { 418 CLASS_REQ (DIR_IN,REC_DEVICE, USB_HUB_REQUEST_GET_DESCRIPTOR),401 CLASS_REQ_IN(REC_DEVICE, USB_HUB_REQUEST_GET_DESCRIPTOR), 419 402 .name = "GetHubDescriptor", 420 403 .callback = req_get_descriptor 421 404 }, 422 405 { 423 CLASS_REQ (DIR_IN,REC_DEVICE, USB_HUB_REQUEST_GET_STATUS),406 CLASS_REQ_IN(REC_DEVICE, USB_HUB_REQUEST_GET_STATUS), 424 407 .name = "GetHubStatus", 425 408 .callback = req_get_hub_status 426 409 }, 427 410 { 428 CLASS_REQ (DIR_IN,REC_OTHER, USB_HUB_REQUEST_GET_STATUS),411 CLASS_REQ_IN(REC_OTHER, USB_HUB_REQUEST_GET_STATUS), 429 412 .name = "GetPortStatus", 430 413 .callback = req_get_port_status 431 414 }, 432 415 { 433 CLASS_REQ (DIR_OUT,REC_DEVICE, USB_HUB_REQUEST_SET_FEATURE),416 CLASS_REQ_OUT(REC_DEVICE, USB_HUB_REQUEST_SET_FEATURE), 434 417 .name = "SetHubFeature", 435 418 .callback = req_set_hub_feature 436 419 }, 437 420 { 438 CLASS_REQ (DIR_OUT,REC_OTHER, USB_HUB_REQUEST_SET_FEATURE),421 CLASS_REQ_OUT(REC_OTHER, USB_HUB_REQUEST_SET_FEATURE), 439 422 .name = "SetPortFeature", 440 423 .callback = req_set_port_feature -
uspace/lib/usbvirt/include/usbvirt/device.h
rd1974966 rc9399c0 94 94 */ 95 95 typedef struct { 96 /** Request direction (in or out). */ 97 usb_direction_t req_direction; 98 /** Request recipient (device, interface or endpoint). */ 99 usb_request_recipient_t req_recipient; 100 /** Request type (standard, class or vendor). */ 101 usb_request_type_t req_type; 96 /* Request type. See usb/request.h */ 97 uint8_t request_type; 102 98 /** Actual request code. */ 103 99 uint8_t request; -
uspace/lib/usbvirt/src/ctrltransfer.c
rd1974966 rc9399c0 60 60 return EFORWARD; 61 61 } 62 63 usb_direction_t direction = setup->request_type & 128 ?64 USB_DIRECTION_IN : USB_DIRECTION_OUT;65 usb_request_recipient_t req_recipient = setup->request_type & 31;66 usb_request_type_t req_type = (setup->request_type >> 5) & 3;67 68 62 usbvirt_control_request_handler_t *handler = control_handlers; 69 while (handler->callback != NULL) { 70 if (handler->req_direction != direction) { 71 goto next; 72 } 73 if (handler->req_recipient != req_recipient) { 74 goto next; 75 } 76 if (handler->req_type != req_type) { 77 goto next; 78 } 79 if (handler->request != setup->request) { 80 goto next; 63 for (;handler->callback != NULL; ++handler) { 64 if (handler->request != setup->request || 65 handler->request_type != setup->request_type) { 66 continue; 81 67 } 82 68 … … 84 70 usb_debug_str_buffer((uint8_t*) setup, sizeof(*setup), 0)); 85 71 int rc = handler->callback(dev, setup, data, data_sent_size); 86 if (rc == EFORWARD) {87 goto next;72 if (rc != EFORWARD) { 73 return rc; 88 74 } 89 75 90 return rc;91 92 next:93 handler++;94 76 } 95 77 -
uspace/lib/usbvirt/src/stdreq.c
rd1974966 rc9399c0 192 192 usbvirt_control_request_handler_t library_handlers[] = { 193 193 { 194 .req_direction = USB_DIRECTION_OUT, 195 .req_recipient = USB_REQUEST_RECIPIENT_DEVICE, 196 .req_type = USB_REQUEST_TYPE_STANDARD, 194 .request_type = SETUP_REQUEST_TO_DEVICE(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE), 197 195 .request = USB_DEVREQ_SET_ADDRESS, 198 196 .name = "SetAddress", … … 200 198 }, 201 199 { 202 .req_direction = USB_DIRECTION_IN, 203 .req_recipient = USB_REQUEST_RECIPIENT_DEVICE, 204 .req_type = USB_REQUEST_TYPE_STANDARD, 200 .request_type = SETUP_REQUEST_TO_HOST(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE), 205 201 .request = USB_DEVREQ_GET_DESCRIPTOR, 206 202 .name = "GetDescriptor", … … 208 204 }, 209 205 { 210 .req_direction = USB_DIRECTION_OUT, 211 .req_recipient = USB_REQUEST_RECIPIENT_DEVICE, 212 .req_type = USB_REQUEST_TYPE_STANDARD, 206 .request_type = SETUP_REQUEST_TO_DEVICE(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE), 213 207 .request = USB_DEVREQ_SET_CONFIGURATION, 214 208 .name = "SetConfiguration", 215 209 .callback = req_set_configuration 216 210 }, 217 218 211 { .callback = NULL } 219 212 };
Note:
See TracChangeset
for help on using the changeset viewer.