On Tue, Jan 22, 2013 at 10:49:50PM +0800, victor yeo wrote: > Hi, > > >> >> > It sounds like the UDC driver now works okay for control transfers but > >> >> > not for bulk transfers. > >> >> > > >> >> > >> >> Some code in file_storage.c that i cannot understand. In > >> >> ep0_complete(), the code snippet: > >> >> > >> >> if (req->status == 0 && req->context) > >> >> ((fsg_routine_t) (req->context))(fsg); > >> >> > >> >> Does the UDC driver provide the context pointer to file_storage.c? > >> > > >> > That belongs to the gadget driver. file_storage.c maintains that > >> > req->context. > >> > > >> >> Another gadget question: get_next_command() is receiving command from > >> >> host PC, UDC HW isr routine is also receiving data from host PC. What > >> >> is the difference between these two? > >> > > >> > hmm... ISR receives data and bounces it back to gadget driver. What do > >> > you mean ? > >> > >> Ok, rephrase the question, is this the flow for bulk transfer? > >> > >> 1) data is received by Usb mass storage HW, the UDC driver ISR is > >> called to read the data to usb_request buffer > >> 2) bulk_out_complete() in gadget driver, is called to set buffer state to full > >> 3) get_next_command() in gadget driver, is called to read the CBW. > >> 4) do_scsi_command() to process SCSI command encoded in CBW > >> 5) send_status() sends the CSW to host > > > > Something like below: > > > > OUT Token -> ISR -> giveback() -> bulk_out_complete() -> > > get_next_command() -> do_scsi_command() -> usb_ep_queue() -> OUT/IN > > Token -> ISR -> bulk_out_complete() -> send_status() > > For the IN Token, i will just write the data to the HW buffer, and the > flow will go to send_status(). > > I use a different USB cable, now the USB gadget is able to receive > bulk transfer data from host PC. I am working on the bulk transfer > code. Thank you for the very useful answers. np -- balbi
Attachment:
signature.asc
Description: Digital signature