@@ -264,13 +264,13 @@ void usb_start_transfer(struct usb_endpoint_configuration *ep, uint8_t *buf, uin
264
264
* @brief Send device descriptor to host
265
265
*
266
266
*/
267
- void usb_handle_device_descriptor (void ) {
267
+ void usb_handle_device_descriptor (volatile struct usb_setup_packet * pkt ) {
268
268
const struct usb_device_descriptor * d = dev_config .device_descriptor ;
269
269
// EP0 in
270
270
struct usb_endpoint_configuration * ep = usb_get_endpoint_configuration (EP0_IN_ADDR );
271
271
// Always respond with pid 1
272
272
ep -> next_pid = 1 ;
273
- usb_start_transfer (ep , (uint8_t * ) d , sizeof (struct usb_device_descriptor ));
273
+ usb_start_transfer (ep , (uint8_t * ) d , MIN ( sizeof (struct usb_device_descriptor ), pkt -> wLength ));
274
274
}
275
275
276
276
/**
@@ -305,7 +305,7 @@ void usb_handle_config_descriptor(volatile struct usb_setup_packet *pkt) {
305
305
// Send data
306
306
// Get len by working out end of buffer subtract start of buffer
307
307
uint32_t len = (uint32_t ) buf - (uint32_t ) & ep0_buf [0 ];
308
- usb_start_transfer (usb_get_endpoint_configuration (EP0_IN_ADDR ), & ep0_buf [0 ], len );
308
+ usb_start_transfer (usb_get_endpoint_configuration (EP0_IN_ADDR ), & ep0_buf [0 ], MIN ( len , pkt -> wLength ) );
309
309
}
310
310
311
311
/**
@@ -337,7 +337,7 @@ void usb_handle_string_descriptor(volatile struct usb_setup_packet *pkt) {
337
337
len = usb_prepare_string_descriptor (dev_config .descriptor_strings [i - 1 ]);
338
338
}
339
339
340
- usb_start_transfer (usb_get_endpoint_configuration (EP0_IN_ADDR ), & ep0_buf [0 ], len );
340
+ usb_start_transfer (usb_get_endpoint_configuration (EP0_IN_ADDR ), & ep0_buf [0 ], MIN ( len , pkt -> wLength ) );
341
341
}
342
342
343
343
/**
@@ -404,7 +404,7 @@ void usb_handle_setup_packet(void) {
404
404
405
405
switch (descriptor_type ) {
406
406
case USB_DT_DEVICE :
407
- usb_handle_device_descriptor ();
407
+ usb_handle_device_descriptor (pkt );
408
408
printf ("GET DEVICE DESCRIPTOR\r\n" );
409
409
break ;
410
410
0 commit comments