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

📄 usbh_sampletask.c

📁 epson usb2.0 控制芯片 S1R72V05 固件程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
				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 + -