📄 usbclient.c
字号:
}
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 + -