Datasheet

Table Of Contents
Pico Examples: https://github.com/raspberrypi/pico-examples/tree/master/usb/device/dev_lowlevel/dev_lowlevel.c Lines 384 - 428
384 void usb_handle_setup_packet(void) {
385 volatile struct usb_setup_packet *pkt = (volatile struct usb_setup_packet *) &usb_dpram
Ê ->setup_packet;
386 uint8_t req_direction = pkt->bmRequestType;
387 uint8_t req = pkt->bRequest;
388
389 // Reset PID to 1 for EP0 IN
390 usb_get_endpoint_configuration(EP0_IN_ADDR)->next_pid = 1u;
391
392 if (req_direction == USB_DIR_OUT) {
393 if (req == USB_REQUEST_SET_ADDRESS) {
394 usb_set_device_address(pkt);
395 } else if (req == USB_REQUEST_SET_CONFIGURATION) {
396 usb_set_device_configuration(pkt);
397 } else {
398 usb_acknowledge_out_request();
399 printf("Other OUT request (0x%x)\r\n", pkt->bRequest);
400 }
401 } else if (req_direction == USB_DIR_IN) {
402 if (req == USB_REQUEST_GET_DESCRIPTOR) {
403 uint16_t descriptor_type = pkt->wValue >> 8;
404
405 switch (descriptor_type) {
406 case USB_DT_DEVICE:
407 usb_handle_device_descriptor();
408 printf("GET DEVICE DESCRIPTOR\r\n");
409 break;
410
411 case USB_DT_CONFIG:
412 usb_handle_config_descriptor(pkt);
413 printf("GET CONFIG DESCRIPTOR\r\n");
414 break;
415
416 case USB_DT_STRING:
417 usb_handle_string_descriptor(pkt);
418 printf("GET STRING DESCRIPTOR\r\n");
419 break;
420
421 default:
422 printf("Unhandled GET_DESCRIPTOR type 0x%x\r\n", descriptor_type);
423 }
424 } else {
425 printf("Other IN request (0x%x)\r\n", pkt->bRequest);
426 }
427 }
428 }
4.1.3.2.4. Replying to a setup packet on EP0 IN
The first thing a host will request is the device descriptor, the following code handles that setup request.
Pico Examples: https://github.com/raspberrypi/pico-examples/tree/master/usb/device/dev_lowlevel/dev_lowlevel.c Lines 267 - 274
267 void usb_handle_device_descriptor(void) {
268 const struct usb_device_descriptor *d = dev_config.device_descriptor;
269 // EP0 in
270 struct usb_endpoint_configuration *ep = usb_get_endpoint_configuration(EP0_IN_ADDR);
271 // Always respond with pid 1
RP2040 Datasheet
4.1. USB 415