Date: Sat, 7 Jul 2007 20:25:20 -0400 From: "Xiaofan Chen" <xiaofanc@gmail.com> To: "Hans Petter Selasky" <hselasky@c2i.net> Cc: freebsd-usb@freebsd.org Subject: Re: libusb usb_interrupt_read hangs under FreeBSD Message-ID: <a276da400707071725x2b2b8ab3ife6c5459d06042bd@mail.gmail.com> In-Reply-To: <200707051724.30175.hselasky@c2i.net> References: <a276da400704030427g6fcfdc37u43bdf0fd1cd69ea8@mail.gmail.com> <a276da400704040434y6451900eg95e3cd2f35cae593@mail.gmail.com> <a276da400707041005k636319bax582c018c46da00ef@mail.gmail.com> <200707051724.30175.hselasky@c2i.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On 7/5/07, Hans Petter Selasky <hselasky@c2i.net> wrote: > > > > The chip does not handle a clear-stall request on the control pipe to > > > > clear-stall on the interrupt pipe. The result is that the interrupt > > > > pipe stops, or at least all buffers are cleared. > > > > The following is part of the usb firmware from Micrcohip. Somehow it masks EP0 in the handler to SET & CLEAR FEATURES requesrs. Is this the problem? if((SetupPkt.bFeature == ENDPOINT_HALT)&& (SetupPkt.Recipient == RCPT_EP)&& (SetupPkt.EPNum != 0)) /****************************************************************************** * Function: void USBStdFeatureReqHandler(void) * * PreCondition: None * * Input: None * * Output: None * * Side Effects: None * * Overview: This routine handles the standard SET & CLEAR FEATURES * requests * * Note: None *****************************************************************************/ void USBStdFeatureReqHandler(void) { if((SetupPkt.bFeature == DEVICE_REMOTE_WAKEUP)&& (SetupPkt.Recipient == RCPT_DEV)) { ctrl_trf_session_owner = MUID_USB9; if(SetupPkt.bRequest == SET_FEATURE) usb_stat.RemoteWakeup = 1; else usb_stat.RemoteWakeup = 0; }//end if if((SetupPkt.bFeature == ENDPOINT_HALT)&& (SetupPkt.Recipient == RCPT_EP)&& (SetupPkt.EPNum != 0)) { ctrl_trf_session_owner = MUID_USB9; /* Must do address calculation here */ pDst.bRam = (byte*)&ep0Bo+(SetupPkt.EPNum*8)+(SetupPkt.EPDir*4); if(SetupPkt.bRequest == SET_FEATURE) *pDst.bRam = _USIE|_BSTALL; else { if(SetupPkt.EPDir == 1) // IN *pDst.bRam = _UCPU; else *pDst.bRam = _USIE|_DAT0|_DTSEN; }//end if }//end if }//end USBStdFeatureReqHandler Regards, Xiaofan
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?a276da400707071725x2b2b8ab3ife6c5459d06042bd>