⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbclient.c

📁 PXA270硬件测试源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    }

    return errorCount;
}


/*
*******************************************************************************
*
* FUNCTION:			UsbClientEnumerateTest
*
* DESCRIPTION:		This is the top level functon that calls start USb Client test
*
* INPUT PARAMETERS:	PVOID ctxP - a pointer to the USB Client context structure
*					PCHAR param - an optional parameter to enable loopback with USB Host
*
* RETURNS:		    None.
*
* GLOBAL EFFECTS:	None.
*
* ASSUMPTIONS:		Usb client is attached to Usb Host port.
*
* CALLS:
*
* CALLED BY:		The menu system
*
* PROTOTYPE:		void UsbClientEnumerateTest (PVOID ctxP, PCHAR param)
*
*******************************************************************************
*/
void UsbClientEnumerateTest (PVOID ctxp, PCHAR param)
{
	P_XLLP_UDC_T ctxP = (P_XLLP_UDC_T)ctxp;
    INT loopbackEnabled;
    UINT status;

    if (sscanf(param, "%d", &loopbackEnabled) != 1)
	{
		// Bad number of the parameters have been passed to the function
        status = ERRORCODEX(ERR_L_XSUDC,
                        ERR_S_XSUDC_STARTCLIENT,
                        1,
                        ERR_T_ILLPARAM);
        XllpUtilityOutputError(status);
        return;
	}

    PostUsbClientEnumerateTest (ctxP, loopbackEnabled);
}


XLLP_UINT32_T UsbClientTransmit (P_XLLP_UDC_T pUdcHandle,
                                XLLP_UDC_USB_EP_T usbEndpointNum,
                                XLLP_UINT32_T xferLength)
{
    XLLP_UINT32_T xferCompleteFlag, status = 0, error = 0;
    XLLP_UINT32_T maxPacketSize = 64, i = 0, numBuff = 8, pattern = 0x56;
    P_XLLP_UINT32_T pTxBuff;
    XLLP_VUINT32_T statusEnum = 0;
    
    printf (" Testing USB Client Transmit\r\n");

    if (pUdcHandle->setupComplete == XLLP_FALSE)
    {
        status = XsUdcHWSetup();
        if (status)
        {
            // USB Client setup fail
            error = ERRORCODEX(ERR_L_XSUDC,
                            ERR_S_XSUDC_TRANSMIT,
                            1,
                            ERR_T_NODEVICE);
            XllpUtilityOutputError(error);
        }
        else
        {
            pUdcHandle->setupComplete = XLLP_TRUE;
        }
    }

    // Allocate memory for the transmit buffer
    pTxBuff = malloc (xferLength);

    while (pUdcHandle->pConfigTable[++i].usbEndpointNum != usbEndpointNum);
    
    if (pUdcHandle->pConfigTable[i].maxPacketSize)
    {
        maxPacketSize = pUdcHandle->pConfigTable[i].maxPacketSize;
        numBuff = xferLength / maxPacketSize;
    }

    // Fill the buffer with the known pattern
    for (i = 0; i < numBuff; ++i)
    {
        FillBufferSerial ((P_XLLP_INT8_T)(pTxBuff + ((maxPacketSize * i) >> 2)), 
                           maxPacketSize, 
                           pattern + i);
    }

    while (!statusEnum)
         statusEnum=pUdcHandle->enumerateComplete;

    XsUdcSend (pUdcHandle, 
               usbEndpointNum,
               pTxBuff,
               xferLength,
               &xferCompleteFlag);

	// Report completion of the controll transfer
    if (xferCompleteFlag == XLLP_FALSE)
    {
        error = ERRORCODEX(ERR_L_XSUDC, 
                          ERR_S_XSUDC_TRANSMIT,
                          2,
                          ERR_T_NOTRANSMIT);
                XllpUtilityOutputError(error); 
    }
    else
    {
  	    printf (" USB Endpoint %d, Transfer length: %d bytes\r\n", usbEndpointNum, (UINT32)xferLength);
        DumpBufferSerial ((P_XLLP_INT8_T)pTxBuff, xferLength);
  	    
  	    // Test done
  	    printf (" Success!\r\n");
    }
    
    // Free alocated memory
    free((PVOID)pTxBuff);

    return error;
}


/*
*******************************************************************************
*
* FUNCTION:			UsbClientTransmitTest
*
* DESCRIPTION:		This is the top level functon that calls USb Client transmit test
*
* INPUT PARAMETERS:	PVOID ctxP - a pointer to the USB Client context structure
*					PCHAR param - an optional parameter to select interupt or polled
*                                 mode for the cable detection.
*
* RETURNS:		    None.
*
* GLOBAL EFFECTS:	None.
*
* ASSUMPTIONS:		Usb client is attached to Usb Host port.
*
* CALLS:
*
* CALLED BY:		The menu system
*
* PROTOTYPE:		void UsbClientTransmitTest (PVOID ctxP, PCHAR param)
*
*******************************************************************************
*/
void UsbClientTransmitTest (PVOID ctxp, PCHAR param)
{
	P_XLLP_UDC_T ctxP = (P_XLLP_UDC_T)ctxp;
    XLLP_UINT32_T paramArray[4];
    XLLP_UINT32_T usbEndpointNum;
    XLLP_UINT32_T xferLength;

    GetMultipleParamFromString (param, 2, (PUINT32)paramArray);
    usbEndpointNum = paramArray[0];
    xferLength = paramArray[1];
    UsbClientTransmit (ctxP, usbEndpointNum, xferLength);
}

XLLP_UINT32_T UsbClientReceive (P_XLLP_UDC_T pUdcHandle,
                                XLLP_UDC_USB_EP_T usbEndpointNum,
                                XLLP_UINT32_T xferLength)
{
    XLLP_UINT32_T status = 0, error = 0;
    P_XLLP_UINT32_T pRxBuff;
    XLLP_VUINT32_T statusEnum = 0;
    XLLP_UINT32_T numBytesRead = 0;

    printf (" Testing USB Client Receive\r\n");

    if (pUdcHandle->setupComplete == XLLP_FALSE)
    {
        status = XsUdcHWSetup();
        if (status)
        {
            // USB Client setup fail
            error = ERRORCODEX(ERR_L_XSUDC,
                            ERR_S_XSUDC_RECEIVE,
                            1,
                            ERR_T_NODEVICE);
            XllpUtilityOutputError(error);
        }
        else
        {
            pUdcHandle->setupComplete = XLLP_TRUE;
        }
    }

    while (!statusEnum)
        statusEnum=pUdcHandle->enumerateComplete;

    // Allocate memory for the receive buffer
    pRxBuff = malloc (xferLength);

    // Clear the Rx buffer
    memset ((P_XLLP_INT8_T)pRxBuff, 0, xferLength);

    XsUdcRead (pUdcHandle, 
               usbEndpointNum,
               pRxBuff,
               &numBytesRead);

    if (numBytesRead == xferLength)
    {
  	    printf (" USB Endpoint %d, Received: %d bytes\r\n", usbEndpointNum, (UINT32)numBytesRead);
    }

    DumpBufferSerial ((P_XLLP_INT8_T)pRxBuff, numBytesRead);

    // Free alocated memory
    free((PVOID)pRxBuff);

  	// Test done
  	printf (" Success!\r\n");

    return error;
}

/*
*******************************************************************************
*
* FUNCTION:			UsbClientReceiveTest
*
* DESCRIPTION:		This is the top level functon that calls USb Client receive test
*
* INPUT PARAMETERS:	PVOID ctxP - a pointer to the USB Client context structure
*					PCHAR param - an optional parameter to select interupt or polled
*                                 mode for the cable detection.
*
* RETURNS:		    None.
*
* GLOBAL EFFECTS:	None.
*
* ASSUMPTIONS:		Usb client is attached to Usb Host port.
*
* CALLS:
*
* CALLED BY:		The menu system
*
* PROTOTYPE:		void UsbClientTransmitTest (PVOID ctxP, PCHAR param)
*
*******************************************************************************
*/
void UsbClientReceiveTest (PVOID ctxp, PCHAR param)
{
	P_XLLP_UDC_T ctxP = (P_XLLP_UDC_T)ctxp;
    XLLP_UINT32_T paramArray[4];
    XLLP_UINT32_T usbEndpointNum;
    XLLP_UINT32_T xferLength;


    GetMultipleParamFromString (param, 2, (PUINT32)paramArray);
    usbEndpointNum = paramArray[0];
    xferLength = paramArray[1];

    UsbClientReceive (ctxP, usbEndpointNum, xferLength);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -