diff options
| -rw-r--r-- | openpcd/firmware/src/pcd_enumerate.c | 36 | 
1 files changed, 22 insertions, 14 deletions
| diff --git a/openpcd/firmware/src/pcd_enumerate.c b/openpcd/firmware/src/pcd_enumerate.c index 36dedfb..241feb3 100644 --- a/openpcd/firmware/src/pcd_enumerate.c +++ b/openpcd/firmware/src/pcd_enumerate.c @@ -18,10 +18,10 @@  // 12. Apr. 2006: added modification found in the mikrocontroller.net gcc-Forum   //                additional line marked with /* +++ */ -//#include "board.h" -#include <include/usb_ch9.h>  #include <include/types.h> +#include <include/usb_ch9.h>  #include <include/lib_AT91SAM7.h> +  #include "pcd_enumerate.h"  #include "openpcd.h"  #include "dbgu.h" @@ -88,14 +88,14 @@ const struct _desc cfgDescriptor = {  		  }, {  			  .bLength = USB_DT_ENDPOINT_SIZE,  			  .bDescriptorType = USB_DT_ENDPOINT, -			  .bEndpointAddress = 0x81, +			  .bEndpointAddress = 0x82,  			  .bmAttributes = USB_ENDPOINT_XFER_BULK,  			  .wMaxPacketSize = 64,  			  .bInterval = 0x10,	/* FIXME */  		  }, {  			  .bLength = USB_DT_ENDPOINT_SIZE,  			  .bDescriptorType = USB_DT_ENDPOINT, -			  .bEndpointAddress = 0x82, +			  .bEndpointAddress = 0x83,  			  .bmAttributes = USB_ENDPOINT_XFER_INT,  			  .wMaxPacketSize = 64,  			  .bInterval = 0x10,	/* FIXME */ @@ -252,7 +252,6 @@ AT91PS_CDC AT91F_CDC_Open(AT91PS_UDP pUdp)  	AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_UDP);  	/* End-of-Bus-Reset is always enabled */ -	//pCdc->pUdp->UDP_IER = (AT91C_UDP_EPINT0|AT91C_UDP_EPINT1| AT91C_UDP_EPINT2|AT91C_UDP_EPINT3);  	return pCdc;  } @@ -303,7 +302,7 @@ static u_int32_t AT91F_UDP_Read(char *pData, u_int32_t length)  //*----------------------------------------------------------------------------  //* \fn    AT91F_CDC_Write -//* \brief Send through endpoint 2 +//* \brief Send through endpoint 2/3  //*----------------------------------------------------------------------------  u_int32_t AT91F_UDP_Write(u_int8_t irq, const char *pData, u_int32_t length)  { @@ -311,7 +310,7 @@ u_int32_t AT91F_UDP_Write(u_int8_t irq, const char *pData, u_int32_t length)  	u_int32_t cpt = 0;  	u_int8_t ep; -	DEBUGPCRF("enter\n"); +	DEBUGPCRF("enter(irq=%u, len=%u)", irq, length);  	if (irq)  		ep = 3; @@ -354,7 +353,7 @@ u_int32_t AT91F_UDP_Write(u_int8_t irq, const char *pData, u_int32_t length)  	pUdp->UDP_CSR[ep] &= ~(AT91C_UDP_TXCOMP);  	while (pUdp->UDP_CSR[ep] & AT91C_UDP_TXCOMP) ; -	DEBUGPCRF("return(normal, len=%u)\n", length); +	DEBUGPCRF("return(normal, len=%u)", length);  	return length;  } @@ -494,7 +493,7 @@ static void AT91F_CDC_Enumerate(void)  		pUDP->UDP_CSR[3] =  		    (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_INT_IN) : 0;  		pUDP->UDP_IER = (AT91C_UDP_EPINT0|AT91C_UDP_EPINT1| -				  AT91C_UDP_EPINT2|AT91C_UDP_EPINT3); +				  0);//AT91C_UDP_EPINT2|AT91C_UDP_EPINT3);  		break;  	case STD_GET_CONFIGURATION:  		DEBUGP("GET_CONFIG "); @@ -512,7 +511,7 @@ static void AT91F_CDC_Enumerate(void)  		AT91F_USB_SendData(pUDP, (char *)&wStatus, sizeof(wStatus));  		break;  	case STD_GET_STATUS_ENDPOINT: -		DEBUGP("GET_STATUS_ENDPOINT "); +		DEBUGP("GET_STATUS_ENDPOINT(EPidx=%u) ", wIndex&0x0f);  		wStatus = 0;  		wIndex &= 0x0F;  		if ((pUDP->UDP_GLBSTATE & AT91C_UDP_CONFG) && (wIndex <= 3)) { @@ -556,21 +555,30 @@ static void AT91F_CDC_Enumerate(void)  		AT91F_USB_SendZlp(pUDP);  		break;  	case STD_CLEAR_FEATURE_ENDPOINT: -		DEBUGP("CLEAR_FEATURE_ENDPOINT "); +		DEBUGP("CLEAR_FEATURE_ENDPOINT(EPidx=%u) ", wIndex & 0x0f);  		wIndex &= 0x0F;  		if ((wValue == 0) && wIndex && (wIndex <= 3)) { -			if (wIndex == 1) +			if (wIndex == 1) {  				pUDP->UDP_CSR[1] =  				    (AT91C_UDP_EPEDS |  				     AT91C_UDP_EPTYPE_BULK_OUT); -			else if (wIndex == 2) +				pUDP->UDP_RSTEP |= AT91C_UDP_EP1; +				pUDP->UDP_RSTEP &= ~AT91C_UDP_EP1; +			} +			else if (wIndex == 2) {  				pUDP->UDP_CSR[2] =  				    (AT91C_UDP_EPEDS |  				     AT91C_UDP_EPTYPE_BULK_IN); -			else if (wIndex == 3) +				pUDP->UDP_RSTEP |= AT91C_UDP_EP2; +				pUDP->UDP_RSTEP &= ~AT91C_UDP_EP2; +			} +			else if (wIndex == 3) {  				pUDP->UDP_CSR[3] =  				    (AT91C_UDP_EPEDS |  				     AT91C_UDP_EPTYPE_INT_IN); +				pUDP->UDP_RSTEP |= AT91C_UDP_EP3; +				pUDP->UDP_RSTEP &= ~AT91C_UDP_EP3; +			}  			AT91F_USB_SendZlp(pUDP);  		} else  			AT91F_USB_SendStall(pUDP); | 
