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

📄 usbh_sampletask.c

📁 epson usb2.0 控制芯片 S1R72V05 固件程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
				case TEST_GET_DESCRIPTOR:
				case TEST_GET_CONFIGURATION:
				case TEST_SET_CONFIGURATION:
				case TEST_GET_INTERFACE:
				case TEST_SET_INTERFACE:
				case TEST_GET_STATUSHUB:
				case TEST_GET_STATUSPORT:
				case TEST_CLEAR_FEATUREHUB:
				case TEST_CLEAR_FEATUREPORT:
				case TEST_SET_FEATUREHUB:
				case TEST_SET_FEATUREPORT:
				case TEST_GET_DESCRIPTORC:
				case TEST_CLEAR_TT_BUFFER:
				case TEST_RESET_TT:
				case TEST_GET_TT_STATE:
				case TEST_STOP_TT:
					/* USBH_USBD_SubmitURB control's transfer test */
					Test_SubmitURBCtlCmd(classId,inputData[0], 1);
					break;

				// Do nothing
				case QUIT_BIG :
				case QUIT_LITTLE :

				default :
					break;
			}
		}
		// Evaluation end's judgment
		if( inputData[0] == QUIT_BIG || inputData[0] == QUIT_LITTLE ) {
			DBG_FlowStrPrint("\r\n[USBH_USBD_SubmitURB() API Test Menu End]\r\n", FLOW_LV);
			break;
		}
	}
}

/*=============================================================================
// Function_Name: Test_USBH_USBD_SubmitURB
// description	: USBH_USBD_SubmitURB API test
// argument		: none
// return		: none
//=============================================================================
*/
void Test_USBH_USBD_SubmitURB(UCHAR classId)
{
	UCHAR	i, cnt;
	CHAR	inputData[80];
	USHORT	inputDataSize;

	// Variable initialization
	memset( inputData, 0x00, sizeof(inputData) );

	while(1) {
		DBG_FlowStrPrint("\r\n[    USBH_USBD_SubmitURB() API Test Menu                                ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[昡壙崁栚傪1乣h, q偺敿妏塸悢帤偱慖戰偟偰壓偝偄                          ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[1 : Control揮憲URB敪峴僥僗僩                                           ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[2 : Interrupt揮憲URB敪峴僥僗僩                                         ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[3 : Bulk揮憲URB敪峴僥僗僩                                              ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[4 : Mass Storage Class 僐儅儞僪僥僗僩(TEST_UNIT_READY)                 ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[5 : Mass Storage Class 僐儅儞僪僥僗僩(MODE_SENSE)                      ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[6 : Mass Storage Class 僐儅儞僪僥僗僩(REQUEST_SENSE)                   ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[7 : Mass Storage Class 僐儅儞僪僥僗僩(FORMAT_UNIT)                     ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[8 : Mass Storage Class 僐儅儞僪僥僗僩(INQUIRY)                         ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[9 : Mass Storage Class 僐儅儞僪僥僗僩(READ_FORMAT_CAPACITY)            ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[a : Mass Storage Class 僐儅儞僪僥僗僩(READ_CAPACITY)                   ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[b : Mass Storage Class 僐儅儞僪僥僗僩(READ10)                          ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[c : Mass Storage Class 僐儅儞僪僥僗僩(WRITE10)                         ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[d : Mass Storage Class 僐儅儞僪僥僗僩(START/STOP UNIT)                 ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[e : Mass Storage Class 僐儅儞僪僥僗僩(BulkOnlyStrage Reset)            ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[f : Mass Storage Class 僐儅儞僪僥僗僩(Get Max LUN)                     ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[g : Mass Storage Class 僐儅儞僪僥僗僩(ClearFeature(ENDPOINT_HALT OUT)) ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[h : Mass Storage Class 僐儅儞僪僥僗僩(ClearFeature(ENDPOINT_HALT IN))  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[q : End Test Menu                                                      ]", FLOW_LV);

		// Waiting key input & Get data of key input
		while(1) {
			DBG_FlowGetStr( inputData, &inputDataSize, 0 );
			if( inputDataSize == 1 &&
				((inputData[0] >= TEST_SUBMIT_CTL  && inputData[0] <= TEST_SUBMIT_STG_END)
				|| inputData[0] == QUIT_BIG || inputData[0] == QUIT_LITTLE) ) {
				break;
			} else {
				DBG_FlowStrPrint("\r\n[擖椡抣僄儔乕偱偡丅擖椡偟捈偟偰壓偝偄丅]", FLOW_LV);
			}
		}

		DBG_FlowStrPrint("\r\n[", FLOW_LV);
		DBG_FlowValPrint( PRINT_DECIMAL_MODE, DBG_STORE_DWORD, atob(inputData[0]), FLOW_LV);
		DBG_FlowStrPrint(" 偑慖戰偝傟傑偟偨丅]\r\n", FLOW_LV);

	for(i=0;i<MAX_USB_ADR + 1; i++) {
		if(testDevicePara[i].deviceStatus == DEVICE_DISCONNECT) {
			continue;
		}
		UsbDevInfo = testDevicePara[i].DevLH;
		// Evaluation item's judgment
		switch( inputData[0] ) {
			case TEST_SUBMIT_CTL:
				Test_USBH_USBD_SubmitCtlURB(classId);
				break;

			case TEST_SUBMIT_INT:
				GetEndpointAddress(EP_ATTRIBUTES_INTERRU , (USBH_USBD_DEVLIST_HEAD *)UsbDevInfo, &gin_epaddress, &gout_epaddress, &gin_epinfo, NULL);
				/* USBH_USBD_SubmitURB interrupt's transfer test */
				Test_USBH_USBD_SubmitURB_Int(classId);
				break;

			case TEST_SUBMIT_BULKO:
				break;

			case TEST_SUBMIT_STG_STU:		/* START_STOP_UNIT */
			case TEST_SUBMIT_STG_TUR:		/* TEST_UNIT_READY */
			case TEST_SUBMIT_STG_RS:		/* REQUEST_SENSE */
			case TEST_SUBMIT_STG_MS:		/* MODE_SENSE */
			case TEST_SUBMIT_STG_FU:		/* FORMAT_UNIT */
			case TEST_SUBMIT_STG_IQ:		/* INQUIRY */
			case TEST_SUBMIT_STG_RFC:		/* READ_FORMAT_CAPACITY */
			case TEST_SUBMIT_STG_RC:		/* READ_CAPACITY */
			case TEST_SUBMIT_STG_R10:		/* READ10 */
			case TEST_SUBMIT_STG_W10:		/* WRITE10 */
				GetEndpointAddress(EP_ATTRIBUTES_BULK ,(USBH_USBD_DEVLIST_HEAD *)UsbDevInfo, &gin_epaddress, &gout_epaddress, &gin_epinfo, NULL);
				Test_USBH_USBD_SubmitURB_Storage(classId,inputData[0], i);
				break;
			case TEST_SUBMIT_STG_BOMS_RS:
			case TEST_SUBMIT_STG_GMAXLUN:
			case TEST_SUBMIT_STG_CF_EPHLTO:
			case TEST_SUBMIT_STG_CF_EPHLTI:
				GetEndpointAddress(EP_ATTRIBUTES_BULK ,(USBH_USBD_DEVLIST_HEAD *)UsbDevInfo, &gin_epaddress, &gout_epaddress, &gin_epinfo, NULL);
				/* USBH_USBD_SubmitURB control's transfer test */
				Test_SubmitURBCtlCmd(classId,inputData[0], 0);
				break;
			// Do nothing
			case QUIT_BIG :
			case QUIT_LITTLE :

			default :
				break;
		}
	}
		// Evaluation end's judgment
		if( inputData[0] == QUIT_BIG || inputData[0] == QUIT_LITTLE ) {
			DBG_FlowStrPrint("\r\n[USBH_USBD_SubmitURB() API Test Menu End]\r\n", FLOW_LV);
			break;
		}
	}
}

void UnlinkAndCB(USBH_USBD_URB *pUrb, UCHAR classId, USBH_USBD_CALLBACK pfnCallback)
{
	LONG	result;
	OS_FLGPTN	flgPtn;

	result = USBH_USBD_UnlinkURB(pUrb, classId, (USBH_USBD_CALLBACK) pfnCallback);

	if(result != USBH_USBD_STATUS_INVALID_PARAMETER) {
		/* Wait until processing of USBHostStack Task ends */
		flgPtn = USBH_SampleWaitMessage();
		if(flgPtn == FLG_EVENT_USBH_SAMPLE_API_CALLBACK || flgPtn == FLG_EVENT_USBH_SAMPLE_URB_CALLBACK) {
			// Call callback
			OS_ClrFlg(FLGID_USBH_SAMPLE, ~(flgPtn));
		} else {
			DBG_FlowStrPrint("[抦傜側偄儊僢僙乕僕傪庴怣偟傑偟偨]\r\n", FLOW_LV);
			return;
		}
		DBG_FlowStrPrint("\r\n[倀俼俛傪敪峴偟傑偟偨]", FLOW_LV);
	}
	/* Display of return value */
	DBG_FlowStrPrint("\r\n[API偺栠傝抣偼亂", FLOW_LV);
	switch(result) {
		case USBH_USBD_STATUS_SUCCESS:
			/* Update device parameter */
			DBG_FlowStrPrint("USBH_USBD_STATUS_SUCCESS", FLOW_LV);
			break;
		case USBH_USBD_STATUS_INVALID_PARAMETER:
			DBG_FlowStrPrint("USBH_USBD_STATUS_INVALID_PARAMETER", FLOW_LV);
			break;
		case USBH_USBD_STATUS_UNSUCCESSFUL:
			DBG_FlowStrPrint("USBH_USBD_STATUS_UNSUCCESSFUL", FLOW_LV);
			break;
		default:
			DBG_FlowValPrint( PRINT_DECIMAL_MODE, DBG_STORE_DWORD, result, FLOW_LV);
			DBG_FlowStrPrint(" 乻Error乼娫堘偭偨抣", FLOW_LV);
			break;
	}
	DBG_FlowStrPrint("亃偱偡]", FLOW_LV);

	DBG_FlowStrPrint("\r\n[USBH_USBD_Reset() API偱搊榐偟偨僐乕儖僶僢僋娭悢偑屇傃弌偝傟傑偟偨]", FLOW_LV);
	/* Display argument */
	DBG_FlowStrPrint("\r\n[堷悢偼埲壓偺捠傝偱偡]", FLOW_LV);
	/* Dispaly message */
	DBG_FlowStrPrint("\r\n[message : ", FLOW_LV);
	if(testCBRParam.param0 == USBH_USBD_MSG_UNLINK_OK) {
		DBG_FlowStrPrint("USBH_USBD_MSG_UNLINK_OK", FLOW_LV);
	} else {
		DBG_FlowValPrint( PRINT_DECIMAL_MODE, DBG_STORE_DWORD, testCBRParam.param0, FLOW_LV);
		DBG_FlowStrPrint(" 乻Error乼娫堘偭偨儊僢僙乕僕抣", FLOW_LV);
	}
	DBG_FlowStrPrint(" ]", FLOW_LV);

	/* Display param1  */
	DBG_FlowStrPrint("\r\n[param1 : ", FLOW_LV);
	DBG_FlowValPrint(PRINT_DECIMAL_MODE, DBG_STORE_DWORD, testCBRParam.param1, FLOW_LV);
	DBG_FlowStrPrint(" ]", FLOW_LV);
	if(testCBRParam.param1 != 0) {
		DBG_FlowStrPrint("\r\n[乻Error乼param1偺抣偑0偱偼偁傝傑偣傫]", FLOW_LV);
	}

	/* 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乼pParam偺抣偑NULL偱偼偁傝傑偣傫]", FLOW_LV);
	}

	DBG_FlowStrPrint("\r\n[USBH_USBD_UnlinkURB() API Test End]", FLOW_LV);
	DBG_FlowStrPrint("壗偐僉乕傪墴偟偰壓偝偄", FLOW_LV);
	DBG_input_wait();
}

/*=============================================================================
// Function_Name: Test_USBH_USBD_UnlinkURB
// description	: USBH_USBD_UnlinkURB API test
// argument		: none
// return		: none
//=============================================================================
*/
void Test_USBH_USBD_UnlinkURB(UCHAR classId)
{
	USBH_USBD_URB		*pUrb;
	UCHAR	i;

	memset(&testUrb, 0x00, sizeof(testUrb));
	pUrb = (USBH_USBD_URB *)&testUrb;


	DBG_FlowStrPrint("\r\n[USBH_USBD_UnlinkURB() API Test Start]", FLOW_LV);

	for(i=0; i<USBH_USBD_URB_MAX; i++) {
		if(UrbListTbl[i].Enable == USBD_ENABLE) {
			UrbListTbl[i].Enable = USBD_DISABLE;
			pUrb = (USBH_USBD_URB *)&UrbListTbl[i].Urb_List;
			UnlinkAndCB(pUrb, classId, (USBH_USBD_CALLBACK) Test_USBH_USBD_SubmitURBCallback);
		}
	}
}

/*=============================================================================
// Function_Name: Test_USBH_USBD_EntryClass
// description	: USBH_USBD_EntryClass API test
// argument		: none
// return		: none
//=============================================================================
*/
void Test_USBH_USBD_EntryClass(UCHAR classCode, UCHAR *classid, USBH_USBD_CALLBACK *callback, USBH_USBD_CALLBACK *eventCallback, UCHAR dispsw )
{
	LONG	result;
	OS_FLGPTN	flgPtn;


	if(dispsw) {
		DBG_FlowStrPrint("\r\n[USBH_USBD_EntryClass() API Test Start]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[僋儔僗僪儔僀僶偺搊榐傪奐巒偟傑偡]", FLOW_LV);
	}

	memset(&testCBRParam, 0, sizeof(TEST_CALLBACK_PARAM));
	/* API Call */
	result = USBH_USBD_EntryClass(classCode, classid, (USBH_USBD_CALLBACK) callback, (USBH_USBD_CALLBACK) eventCallback);

	if(result != USBH_USBD_STATUS_INVALID_PARAMETER) {
		/* Wait until processing ofUSBHostStack Task ends */
		flgPtn = USBH_SampleWaitMessage();
		if(flgPtn == FLG_EVENT_USBH_SAMPLE_API_CALLBACK || flgPtn == FLG_EVENT_USBH_SAMPLE_URB_CALLBACK) {
			// Call callback
			OS_ClrFlg(FLGID_USBH_SAMPLE, ~(flgPtn));
		} else {
			DBG_FlowStrPrint("[抦傜側偄儊僢僙乕僕傪庴怣偟傑偟偨]\r\n", FLOW_LV);
			return;
		}
	}

	DBG_FlowStrPrint("\r\n[僋儔僗僪儔僀僶偺搊榐偑廔椆偟傑偟偨]", FLOW_LV);

	if(dispsw) {
		/* Display of return value */
		DBG_FlowStrPrint("\r\n[API偺栠傝抣偼亂", FLOW_LV);
		switch(result) {
			case USBH_USBD_STATUS_SUCCESS:
				DBG_FlowStrPrint("USBH_USBD_STATUS_SUCCESS", FLOW_LV);
				break;

			case USBH_USBD_STATUS_INVALID_PARAMETER:
				DBG_FlowStrPrint("USBH_USBD_STATUS_INVALID_PARAMETER", FLOW_LV);
				break;

			case USBH_USBD_STATUS_UNSUCCESSFUL:
				DBG_FlowStrPrint("USBH_USBD_STATUS_UNSUCCESSFUL", FLOW_LV);
				break;

			default:
				DBG_FlowValPrint( PRINT_DECIMAL_MODE, DBG_STORE_DWORD, result, FLOW_LV);
				DBG_FlowStrPrint(" 乻Error乼娫堘偭偨抣", FLOW_LV);
				break;
		}
		DBG_FlowStrPrint("亃偱偡]", FLOW_LV);

		DBG_FlowStrPrint("\r\n[USBH_USBD_EntryClass() API偱搊榐偟偨僐乕

⌨️ 快捷键说明

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