📄 usbh_sampletask.c
字号:
Test_USBH_USBD_Cleanup( FLOW_LV );
break;
// Do nothing
case QUIT_BIG :
case QUIT_LITTLE :
break;
default :
break;
}
// Evaluation end's judgment
if( inputData[0] == QUIT_BIG || inputData[0] == QUIT_LITTLE ) {
DBG_FlowStrPrint("\r\n[USB Host USBD API Test 廔椆]", FLOW_LV);
break;
}
}
}
/* Get the end point address of the specified transfer type of the connected device (Except end point 0 ) */
long GetEndpointAddress(UCHAR type, USBH_USBD_DEVLIST_HEAD *UsbDevList, UCHAR *in_epadd, UCHAR *out_epadd, USB_DESC_ENDPOINT *in_ep, USB_DESC_ENDPOINT *out_ep)
{
USBH_USBD_EPTBL *ep_cur;
USBH_USBD_IFTBL *iftbl;
USB_DESC_ENDPOINT *epinfo;
*in_epadd = *out_epadd = 0;
iftbl = UsbDevList->sUsbDes.InterTbl;
while(iftbl != NULL) {
ep_cur = iftbl->EPTbl;
while(ep_cur) {
epinfo = &ep_cur->EndP;
if(type == epinfo->bmAttributes) {
if((epinfo->bEndpointAddress & USBH_HCD_DIR_IN) != 0) {
if(*in_epadd == 0)
*in_epadd = epinfo->bEndpointAddress;
memcpy(in_ep , epinfo, sizeof(USB_DESC_ENDPOINT));
} else {
if(*out_epadd == 0)
*out_epadd = epinfo->bEndpointAddress;
}
}
ep_cur = ep_cur->Next;
}
iftbl = iftbl->Next;
}
if((*in_epadd != 0) || (*out_epadd != 0)) {
/* Display the end point to be test */
DBG_FlowStrPrint("\r\n[in_epaddress : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, gin_epaddress, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[out_epaddress : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, gout_epaddress, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
return USBH_USBD_STATUS_SUCCESS;
} else {
DBG_FlowStrPrint("\r\n epaddress set error!",FLOW_LV);
return USBH_USBD_STATUS_UNSUCCESSFUL;
}
}
/*=============================================================================
// Function_Name: Test_PrintDescripterInfo
// description : Display descripter of the connected device
// argument : none
// return : none
//=============================================================================
*/
void Test_PrintDescripterInfo(UCHAR dispsw)
{
UCHAR address;
USB_DESC_INTERFACE *pDescIf;
USBH_USBD_USBDEV *psDev; /* Pointer to structure of USB device information */
USBH_USBD_DEVCTL *pDeviceCtl;
USB_DESC_DEVICE devDesc;
UCHAR i;
/* Display pParam */
DBG_FlowStrPrint("\r\n[pParam乮僨僶僀僗僨傿僗僋儕僾僞傊偺億僀儞僞乯: ", FLOW_LV);
DBG_FlowValPrint(PRINT_DECIMAL_MODE, DBG_STORE_DWORD, (ULONG)testCBRParam.pParam, FLOW_LV);
DBG_FlowStrPrint(" ]", FLOW_LV);
if(testCBRParam.pParam == NULL) {
DBG_FlowStrPrint("\r\n[乻Error乼僨僶僀僗僨傿僗僋儕僾僞傊偺億僀儞僞偑NULL偱偡]", FLOW_LV);
} else {
for(i=0;i<MAX_USB_ADR + 1; i++) {
if(connectCBRParam[i].param0 == USBH_USBD_MSG_CONNECT_OK) {
UsbDevInfo = testDevicePara[i].DevLH = (USBH_USBD_DEVLIST_HEAD *)connectCBRParam[i].pParam;
psDev = &UsbDevInfo->sUsbDev;
address = psDev->devNum;
testDevicePara[address].deviceStatus = DEVICE_CONNECT;
testDevicePara[address].psDev = psDev;
testDevicePara[address].devAdr = address;
DBG_FlowStrPrint("\r\n[Device Address亂", FLOW_LV);
DBG_FlowValPrint( PRINT_DECIMAL_MODE, DBG_STORE_BYTE, address, FLOW_LV);
DBG_FlowStrPrint(" 亃]\n", FLOW_LV);
pDeviceCtl = (USBH_USBD_DEVCTL *)&UsbDevInfo->sUsbDes;
devDesc = pDeviceCtl->Dev;
pDescIf = &pDeviceCtl->InterTbl->InterF;
testDevicePara[address].subClass = pDescIf->bInterfaceSubClass;
/* Command Mode Set */
if( (testDevicePara[address].subClass == USBH_USBD_SUBCLASS_SFF8020I) || (testDevicePara[address].subClass == USBH_USBD_SUBCLASS_SFF8070I) ) {
testDevicePara[address].commandMode = ATAPI;
} else {
testDevicePara[address].commandMode = SCSI;
}
if(dispsw) {
/* Display of descripter */
DBG_FlowStrPrint("\r\n[僨僶僀僗僨傿僗僋儕僾僞傪帵偟傑偡]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bLength : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.bLength, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bDescriptorType : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.bDescriptorType, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bcdUSB : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_WORD, *( (USHORT *)&devDesc.bcdUSB[0]), FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bDeviceClass : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.bDeviceClass, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bDeviceSubClass : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.bDeviceSubClass, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bDeviceProtocol : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.bDeviceProtocol, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bMaxPacketSize0 : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.bMaxPacketSize0, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[idVendor : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_WORD, *( (USHORT *)&devDesc.idVendor[0]), FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[idProduct : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_WORD, *( (USHORT *)&devDesc.idProduct[0]), FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bcdDevice : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_WORD, *( (USHORT *)&devDesc.bcdDevice[0]), FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[iManufacturer : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.iManufacturer, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[iProduct : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.iProduct, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[iSerialNumber : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.iSerialNumber, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bNumConfigurations : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, devDesc.bNumConfigurations, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[僐儞僼傿僌儗乕僔儑儞僨傿僗僋儕僾僞傪帵偟傑偡]", FLOW_LV);
DBG_FlowStrPrint("\r\n\r\n[bLength : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, pDeviceCtl->Config.bLength, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bDescriptorType : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, pDeviceCtl->Config.bDescriptorType, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[wTotalLength : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_WORD, *( (USHORT *)&pDeviceCtl->Config.wTotalLength[0]), FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bNumInterfaces : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, pDeviceCtl->Config.bNumInterfaces, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bConfigurationValue : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, pDeviceCtl->Config.bConfigurationValue, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[iConfiguration : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, pDeviceCtl->Config.iConfiguration, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bmAttributes : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, pDeviceCtl->Config.bmAttributes, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bMaxPower : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, pDeviceCtl->Config.bMaxPower, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
}
/* Display the interface and End point descripter */
{
USBH_USBD_EPTBL *ep_cur;
USBH_USBD_IFTBL *iftbl;
USB_DESC_ENDPOINT *epinfo;
UCHAR bEndpointAddress;
iftbl = UsbDevInfo->sUsbDes.InterTbl;
while(iftbl != NULL) {
/* Display InterfaceNo */
if(dispsw) {
DBG_FlowStrPrint("\r\n\r\n[僀儞僞乕僼僃乕僗僨傿僗僋儕僾僞傪帵偟傑偡]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bLength : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bLength, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bDescriptorType : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bDescriptorType, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bInterfaceNumber : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bInterfaceNumber, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bAlternateSetting : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bAlternateSetting, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bNumEndpoints : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bNumEndpoints, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bInterfaceClass : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bInterfaceClass, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bInterfaceSubClass : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bInterfaceSubClass, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bInterfaceProtocol : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.bInterfaceProtocol, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[iInterface : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, iftbl->InterF.iInterface, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
}
ep_cur = iftbl->EPTbl;
while(ep_cur) {
epinfo = &ep_cur->EndP;
if(dispsw) {
DBG_FlowStrPrint("\r\n\r\n[僄儞僪億僀儞僩僨傿僗僋儕僾僞傪帵偟傑偡]", FLOW_LV);
/* Set the MaxPacketSize of Endpoint for Interface number specified with connected device */
bEndpointAddress = epinfo->bEndpointAddress;
DBG_FlowStrPrint("\r\n[bLength : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, epinfo->bLength, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bDescriptorType : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, epinfo->bDescriptorType, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bEndpointAddress : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, bEndpointAddress, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bmAttributes : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, epinfo->bmAttributes, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[wMaxPacketSize : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_WORD, MAKEWORD(epinfo->wMaxPacketSize[0], epinfo->wMaxPacketSize[1]), FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[bInterval : ",FLOW_LV);
DBG_FlowValPrint(PRINT_HEXA_MODE, DBG_STORE_BYTE, epinfo->bInterval, FLOW_LV);
DBG_FlowStrPrint("h ]", FLOW_LV);
}
ep_cur = ep_cur->Next;
}
iftbl = iftbl->Next;
}
}
}
}
memset(connectCBRParam, 0, sizeof(connectCBRParam));
}
}
long USBH_USBD_DeviceConAndDisCon()
{
long retValue ;
OS_FLGPTN flgPtn;
UCHAR i;
retValue = USBH_USBD_STATUS_SUCCESS;
DBG_FlowStrPrint("[僨僶僀僗傪愙懕丒愗抐偟偰壓偝偄]\r\n", FLOW_LV);
/* Wait until processing of USB Task ends */
flgPtn = USBH_SampleWaitMessage();
if(flgPtn == FLG_EVENT_USBH_SAMPLE_API_CALLBACK || flgPtn == FLG_EVENT_USBH_SAMPLE_URB_CALLBACK) {
OS_ClrFlg(FLGID_USBH_SAMPLE, ~(flgPtn));
// Call callback
} else {
DBG_FlowStrPrint("[抦傜側偄儊僢僙乕僕傪庴怣偟傑偟偨]\r\n", FLOW_LV);
retValue = USBH_USBD_STATUS_UNSUCCESSFUL;
return retValue;
}
if( testCBRParam.param0 == USBH_USBD_MSG_CONNECT_OK ){
DBG_FlowStrPrint("[僨僶僀僗愙懕偝傟傑偟偨]\r\n", FLOW_LV);
retValue = USBH_USBD_STATUS_SUCCESS;
} else if( testCBRParam.param0 == USBH_USBD_MSG_DISCONNECT_CMP ) {
DBG_FlowStrPrint("[僨僶僀僗愗抐偝傟傑偟偨]\r\n", FLOW_LV);
retValue = USBH_USBD_STATUS_SUCCESS;
} else {
DBG_FlowStrPrint("[抦傜側偄儊僢僙乕僕傪庴怣偟傑偟偨]\r\n", FLOW_LV);
DBG_FlowValPrint( PRINT_DECIMAL_MODE, DBG_STORE_DWORD, testCBRParam.param1, FLOW_LV);
retValue = USBH_USBD_STATUS_UNSUCCESSFUL;
return retValue;
}
DBG_FlowStrPrint("\r\n[USBH_USBD_EntryClass() API偱搊榐偟偨僐乕儖僶僢僋娭悢偑屇傃弌偝傟傑偟偨]", FLOW_LV);
/* Display of argument */
DBG_FlowStrPrint("\r\n[堷悢偼埲壓偺捠傝偱偡]", FLOW_LV);
/* Display of message */
DBG_FlowStrPrint("\r\n[message : ", FLOW_LV);
if(testCBRParam.param0 == USBH_USBD_MSG_CONNECT_OK) {
/* Update device parameter */
testDevicePara[testCBRParam.param1].deviceStatus = DEVICE_CONNECT;
} else {
DBG_FlowStrPrint("USBH_USBD_MSG_DISCONNECT_CMP", FLOW_LV);
/* Update device parameter */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -