summaryrefslogtreecommitdiff
path: root/firmware/usbstack/usb_storage.c
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2008-04-26 19:02:16 +0000
committerFrank Gevaerts <frank@gevaerts.be>2008-04-26 19:02:16 +0000
commitbec6aa3176fc6d5ce80bcd4d6022358aa6c01629 (patch)
treedfbaa924ba3e13d6f73dc446b1a2149610ed3e67 /firmware/usbstack/usb_storage.c
parent33c44461e1b5fb9aff2f8ba7470ad2449b3c410e (diff)
downloadrockbox-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.c29
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
329int usb_storage_get_config_descriptor(unsigned char *dest,int max_packet_size, 329int 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}
334int usb_storage_set_first_interface(int interface)
335{
336 usb_interface = interface;
337 return interface + 1;
338}
334 339
340int 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
353void usb_storage_init_connection(int interface,int endpoint) 362void 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() */
380void usb_storage_transfer_complete(bool in,int status,int length) 386void 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);