diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2008-04-26 19:02:16 +0000 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2008-04-26 19:02:16 +0000 |
commit | bec6aa3176fc6d5ce80bcd4d6022358aa6c01629 (patch) | |
tree | dfbaa924ba3e13d6f73dc446b1a2149610ed3e67 /firmware/usbstack/usb_storage.c | |
parent | 33c44461e1b5fb9aff2f8ba7470ad2449b3c410e (diff) | |
download | rockbox-bec6aa3176fc6d5ce80bcd4d6022358aa6c01629.tar.gz rockbox-bec6aa3176fc6d5ce80bcd4d6022358aa6c01629.zip |
- change the usb class driver framework to allow for device classes with more than one interface or more than one endpoint pair
- move the charging-only dummy driver out of usb_core
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17252 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/usbstack/usb_storage.c')
-rw-r--r-- | firmware/usbstack/usb_storage.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/firmware/usbstack/usb_storage.c b/firmware/usbstack/usb_storage.c index 693d50c009..c7bced9ecc 100644 --- a/firmware/usbstack/usb_storage.c +++ b/firmware/usbstack/usb_storage.c | |||
@@ -326,23 +326,32 @@ void usb_storage_init(void) | |||
326 | } | 326 | } |
327 | 327 | ||
328 | 328 | ||
329 | int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size, | 329 | int usb_storage_set_first_endpoint(int endpoint) |
330 | int interface_number,int endpoint) | ||
331 | { | 330 | { |
332 | endpoint_descriptor.wMaxPacketSize=max_packet_size; | 331 | usb_endpoint = endpoint; |
333 | interface_descriptor.bInterfaceNumber=interface_number; | 332 | return endpoint + 1; |
333 | } | ||
334 | int usb_storage_set_first_interface(int interface) | ||
335 | { | ||
336 | usb_interface = interface; | ||
337 | return interface + 1; | ||
338 | } | ||
334 | 339 | ||
340 | int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size) | ||
341 | { | ||
342 | endpoint_descriptor.wMaxPacketSize=max_packet_size; | ||
343 | interface_descriptor.bInterfaceNumber=usb_interface; | ||
335 | 344 | ||
336 | memcpy(dest,&interface_descriptor, | 345 | memcpy(dest,&interface_descriptor, |
337 | sizeof(struct usb_interface_descriptor)); | 346 | sizeof(struct usb_interface_descriptor)); |
338 | dest+=sizeof(struct usb_interface_descriptor); | 347 | dest+=sizeof(struct usb_interface_descriptor); |
339 | 348 | ||
340 | endpoint_descriptor.bEndpointAddress = endpoint | USB_DIR_IN, | 349 | endpoint_descriptor.bEndpointAddress = usb_endpoint | USB_DIR_IN, |
341 | memcpy(dest,&endpoint_descriptor, | 350 | memcpy(dest,&endpoint_descriptor, |
342 | sizeof(struct usb_endpoint_descriptor)); | 351 | sizeof(struct usb_endpoint_descriptor)); |
343 | dest+=sizeof(struct usb_endpoint_descriptor); | 352 | dest+=sizeof(struct usb_endpoint_descriptor); |
344 | 353 | ||
345 | endpoint_descriptor.bEndpointAddress = endpoint | USB_DIR_OUT, | 354 | endpoint_descriptor.bEndpointAddress = usb_endpoint | USB_DIR_OUT, |
346 | memcpy(dest,&endpoint_descriptor, | 355 | memcpy(dest,&endpoint_descriptor, |
347 | sizeof(struct usb_endpoint_descriptor)); | 356 | sizeof(struct usb_endpoint_descriptor)); |
348 | 357 | ||
@@ -350,11 +359,8 @@ int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size, | |||
350 | 2*sizeof(struct usb_endpoint_descriptor); | 359 | 2*sizeof(struct usb_endpoint_descriptor); |
351 | } | 360 | } |
352 | 361 | ||
353 | void usb_storage_init_connection(int interface,int endpoint) | 362 | void usb_storage_init_connection(void) |
354 | { | 363 | { |
355 | usb_interface = interface; | ||
356 | usb_endpoint = endpoint; | ||
357 | |||
358 | logf("ums: set config"); | 364 | logf("ums: set config"); |
359 | /* prime rx endpoint. We only need room for commands */ | 365 | /* prime rx endpoint. We only need room for commands */ |
360 | state = WAITING_FOR_COMMAND; | 366 | state = WAITING_FOR_COMMAND; |
@@ -377,8 +383,9 @@ void usb_storage_init_connection(int interface,int endpoint) | |||
377 | } | 383 | } |
378 | 384 | ||
379 | /* called by usb_core_transfer_complete() */ | 385 | /* called by usb_core_transfer_complete() */ |
380 | void usb_storage_transfer_complete(bool in,int status,int length) | 386 | void usb_storage_transfer_complete(int ep,bool in,int status,int length) |
381 | { | 387 | { |
388 | (void)ep; | ||
382 | struct command_block_wrapper* cbw = (void*)tb.transfer_buffer; | 389 | struct command_block_wrapper* cbw = (void*)tb.transfer_buffer; |
383 | 390 | ||
384 | //logf("transfer result %X %d", status, length); | 391 | //logf("transfer result %X %d", status, length); |