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

📄 usbh_sampletask.c

📁 epson usb2.0 控制芯片 S1R72V05 固件程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
#endif
			break;
		}
		if( inputData[0] == ANALOG_MODE ){
			/* Analog Test */
			AnalogTestStart();
			break;
		}
	}

	/* Stop Host Stack. */
	USBH_USBDS_Cleanup();

	/* The host mode end is set in Sample Task */
	OS_SetFlg( FLGID_SAMPLE, FLG_EVENT_HOSDEVSEL_SAMPLE );
}

/*
//=============================================================================
// Function_Name: TaskInit
// description	: HostMain Task initialization
// argument		:
// return		:
// flag			:
// global		:
//=============================================================================
*/
void TaskInit( void )
{
	//=======================================================================*/
	/* 																	 */
	/* In ARM7 CPU38000 made of EPSON, IRQ is not output to an external terminal(There is FIQ )*/
	/* In NORTiOS, because the handler from the FIQ interrupt is out ou support,*/
	/* xINT from VXX is inputted to GPIO and the GPIO interrupt of CPU38000 is chosen as VXXINT*/
	//=======================================================================*/

#ifndef TOYA2_C
	//========================================================================
	// PIN of GPIOA 3 is an input
	//========================================================================
	gpioTemp = *(volatile unsigned long*)0xF8000480;	// Read the I/O direction selection register of GPIO port B
	gpioTemp &= ~(0x00000008);							// GPIO 7 is set to the input
	*(volatile unsigned long*)0xF8000480 = gpioTemp;	//

	//========================================================================
	// The interrupt of GPIO 7 is set										 //
	//========================================================================
	// GPIO is set to the LOW level edge
	gpioTemp = *(volatile unsigned long*)0xF8000488;	// Register to select interrupt's polarity of GPIO port B
	gpioTemp |= 0x00000008;								// GPIO7 is set to the LOW edge
	*(volatile unsigned long*)0xF8000488 = gpioTemp;
	// Interrupt type setting(Set it to LEVEL)
	gpioTemp = *(volatile unsigned long*)0xF800048C;	// Register to set interrupt type of GPIO port B
	gpioTemp &= ~(0x00000008);							// GPIO 7 is set to the input
	*(volatile unsigned long*)0xF800048C = gpioTemp;	//
	// Clear interrupt factor

	// When it is level interrupt, clearness is unnecessary

	// The interrupt of GPIO 7 is enabled
	gpioTemp = *(volatile unsigned long*)0xF8000490;	// Mask for interrupt of GPIO port B
	gpioTemp |= 0x00000008;								// GPIO7 is set to the LOW edge
	*(volatile unsigned long*)0xF8000490 = gpioTemp;	//

	// Set in order to enter the interrupt of GPIO A and B into IRQ10 and IRQ11
	// Both enter IRQ10 if it doesn't set it
	*(volatile unsigned long*)0xF80004B0 = 0x00000000;

	// The event handler is set
//	OS_DefInh( USBH_SAMPLE_CHIP_INT, (OS_T_DINH *)&dinh_handler1 );
#endif

	OS_LocCpu();						/* Interrupt's lock */

#ifdef TOYA2_C
	rlMX21_PTA_DDIR		&= ~0x00800000;	/* PTA23 is Input Port */
	rlMX21_PTA_ICONFA2	&= ~0x0000C000;
	rlMX21_PTA_ICONFB2	&= ~0x0000C000;
	rlMX21_PTA_GUIS		|= 0x00800000;	/* PTA23 is Use in GPIO */
	rlMX21_PTA_ICR2		|= 0x0000C000;	/* PTA23 Interrupt is Low Level */

	rlMX21_PTA_ISR		|= 0x00800000;	/* PTA23 Interrupt Clear */
	rlMX21_PTA_IMR		|= 0x00800000;	/* PTA23 Mask Off! */
#else
	gpioTemp = *(volatile unsigned long *)0xF8000208;
	gpioTemp |= 0x0000800;
	*(volatile unsigned long *)0xF8000208 = gpioTemp;
#endif

	OS_EnaInt( USBH_SAMPLE_CHIP_INT );
	OS_UnlCpu();						/* Release interrupt lock */

	/* "FLG_EVENT_FORCE_USBH_USBD" set by "USBH_Sample_Inactive()" is cleared. */

	OS_ClrFlg( FLGID_USBH_SAMPLE, ~(FLG_EVENT_FORCE_USBH_USBD));		// Clear the flag

	//========================================================================
	// Start the lower task
	//========================================================================
	OS_ActTsk( TSKID_USBH_USBD );		// Start USBH_USBD Task
	OS_ActTsk( TSKID_IDE );				// Start IDE Task

	return;
}


/*=============================================================================
// Function_Name: TestFaseSelect
// description	: Select the test fase Host Mode
// argument		: none
// return		: none
//=============================================================================
*/
#ifdef TST_MODE	//TST_MODE Start
void TestFaseSelect()
{
	CHAR		inputData[80];
	USHORT		inputDataSize;
#define	BT_MODE	'1'
#define	MT_MODE	'2'
#define	IT_MODE	'3'


	while( 1 )
	{
		// Host and device selection's input waiting
		while(1) {
			// Host and device selection's message display
			DBG_FlowStrPrint("[HostStack Test Mode Select Menu]\r\n", FLOW_LV);
			DBG_FlowStrPrint("[1 :USB Base Test Mode Select]\r\n", FLOW_LV);
			DBG_FlowStrPrint("[2 :USB HostStack MT Mode Select]\r\n", FLOW_LV);
			DBG_FlowStrPrint("[3 :USB HostStack IT Mode Select]\r\n", FLOW_LV);

			memset( inputData, 0x00, sizeof(inputData) );

			DBG_FlowGetStr( inputData, &inputDataSize, 0 );
			if( (inputDataSize == 1) && ((inputData[0] == BT_MODE) || (inputData[0] == MT_MODE) || (inputData[0] == IT_MODE)
			|| inputData[0] == QUIT_BIG || inputData[0] == QUIT_LITTLE) ) {
				break;
			} else {
				DBG_FlowStrPrint("\r\n[擖椡抣僄儔乕偱偡丅擖椡偟捈偟偰壓偝偄丅]\r\n", FLOW_LV);
			}
		}
		switch(inputData[0]) {
			case BT_MODE:
				Test_USBH_USBD_API();
				break;
			case MT_MODE:
//				Test_USBH_MT();
				break;
			case IT_MODE:
				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;
		}
	}

}

/*=============================================================================
// Function_Name: Test_USBH_USBD_API
// description	: API test of USBD of Host Mode
// argument		: none
// return		: none
//=============================================================================
*/
void Test_USBH_USBD_API()
{
	UCHAR	i;
	CHAR	inputData[80];
	USHORT	inputDataSize;

	// Variable initialization
	memset( inputData, 0x00, sizeof(inputData) );
	for(i = 0; i <= MAX_USB_ADR; i++) {
		testDevicePara[i].deviceStatus = DEVICE_DISCONNECT;
	}

	while(1) {
		DBG_FlowStrPrint("\r\n[       USB Host USBD API Test Menu           ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[昡壙崁栚傪1乣8, q偺敿妏塸悢帤偱慖戰偟偰壓偝偄]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[1 : USBH_USBD_Init()               API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[2 : USBH_USBD_SubmitURB()          API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[3 : USBH_USBD_UnlinkURB()          API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[4 : USBH_USBD_EntryClass()         API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[5 : USBH_USBD_SetConfiguration()   API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[6 : USBH_USBD_Reset()              API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[7 : USBH_USBD_PortSuspend()        API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[8 : USBH_USBD_PortResume()         API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[a : USBH_HCD_Suspend()             API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[b : USBH_HCD_Resume()              API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[c : USBH_USBD_DeviceConAndDisCon() API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[d : USBH_HCD_DetectDevConnect()    API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[e : REMOTE WAKEUP 嫋壜                       ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[f : REMOTE WAKEUP 嬛巭                       ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[g : USBH_USBD_Cleanup()            API Test  ]", FLOW_LV);
		DBG_FlowStrPrint("\r\n[q : End Test Menu (Select Host/Device Mode)  ]", FLOW_LV);

		// Wait key input & Get data of key input
		while(1) {
			DBG_FlowGetStr( inputData, &inputDataSize, 0 );
			if( inputDataSize == 1 && (inputData[0] == TEST_INIT  || inputData[0] == TEST_SUBMIT_URB
				|| inputData[0] == TEST_UNLINK_URB || inputData[0] == TEST_ENTRY_CLASS || inputData[0] == TEST_SET_CONFIG
				|| inputData[0] == TEST_RESET || inputData[0] == TEST_PORT_SUSPEND || inputData[0] == TEST_PORT_RESUME
				|| inputData[0] == TEST_VXX_SUSPEND || inputData[0] == TEST_VXX_RESUME || inputData[0] == TEST_PORT_CONDISCON
				|| inputData[0] == TEST_VXX_DETECT_DEVCON
				|| inputData[0] == TEST_REMOTE_WUP_ON || inputData[0] == TEST_REMOTE_WUP_OFF
				|| inputData[0] == TEST_CLEAN_UP
				|| inputData[0] == QUIT_BIG || inputData[0] == QUIT_LITTLE) ) {
				break;
			} else {
				DBG_FlowStrPrint("[擖椡抣僄儔乕偱偡丅擖椡偟捈偟偰壓偝偄丅]\r\n", FLOW_LV);
			}
		}

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

		// Evaluation item's judgment
		switch( inputData[0] ) {
			case TEST_INIT:
				/* USBH_USBD_Init Test */
				Test_USBH_USBD_Init((USBH_USBD_CALLBACK *)Test_USBH_USBD_InitCallback, FLOW_LV);
				break;

			case TEST_SUBMIT_URB:
				/* USBH_USBD_SubmitURB Test */
				Test_USBH_USBD_SubmitURB(classid);
				break;

			case TEST_UNLINK_URB:
				/* USBH_USBD_UnlinkURB Test */
				Test_USBH_USBD_UnlinkURB(classid);
				break;

			case TEST_ENTRY_CLASS:
				/* USBH_USBD_EntryClass Test */
				DBG_FlowStrPrint("\r\n[1 : STRAGE CLASS]", FLOW_LV);
				DBG_FlowStrPrint("\r\n[2 : HID CLASS   ]", FLOW_LV);
				// Key input waiting and key input data acquisition
				while(1) {
					DBG_FlowGetStr( inputData, &inputDataSize, 0 );
					if( inputDataSize == 1 && (inputData[0] == TEST_STRAGE_CLASS  || inputData[0] == TEST_HID_CLASS|| inputData[0] == QUIT_BIG || inputData[0] == QUIT_LITTLE) ) {
						break;
					} else {
						DBG_FlowStrPrint("[擖椡抣僄儔乕偱偡丅擖椡偟捈偟偰壓偝偄丅]\r\n", FLOW_LV);
					}
				}
				if(inputData[0] == TEST_STRAGE_CLASS) {
					Test_USBH_USBD_EntryClass(STRG_CLASS_CODE, &classid,(USBH_USBD_CALLBACK *)Test_USBH_USBD_ReturnValueCallback,(USBH_USBD_CALLBACK *)Test_USBH_USBD_EntryClassCallback, FLOW_LV);
				} else if(inputData[0] == TEST_HID_CLASS) {
					Test_USBH_USBD_EntryClass(HID_CLASS_CODE, &classid,(USBH_USBD_CALLBACK *)Test_USBH_USBD_ReturnValueCallback,(USBH_USBD_CALLBACK *)Test_USBH_USBD_EntryClassCallback, FLOW_LV);
				}
				break;

			case TEST_SET_CONFIG:
				/* USBH_USBD_SetConfiguration Test */
				Test_USBH_USBD_SetConfiguration(classid);
				break;

			case TEST_RESET:
				/* USBH_USBD_Reset Test */
				Test_USBH_USBD_Reset(classid);
				break;

			case TEST_PORT_SUSPEND:
				/* USBH_USBD_PortSuspend Test */
				Test_USBH_USBD_PortSuspend(classid);
				break;

			case TEST_PORT_RESUME:
				/* USBH_USBD_PortResume Test */
				Test_USBH_USBD_PortResume(classid);
				break;

			case TEST_VXX_SUSPEND:
				Test_USBH_HCD_Suspend();
				break;

			case TEST_VXX_RESUME:
				Test_USBH_HCD_Resume();
				break;

			case TEST_PORT_CONDISCON:
				Test_USBH_USBD_DeviceConAndDisCon();
				break;

			case TEST_VXX_DETECT_DEVCON:
				Test_USBH_HCD_DetectDevConnect();
				break;
			case TEST_REMOTE_WUP_ON:
				Test_USBH_RemoteWakeup(SAMPLE_ON, classid);
				break;
			case TEST_REMOTE_WUP_OFF:
				Test_USBH_RemoteWakeup(SAMPLE_OFF, classid);
				break;

			case TEST_CLEAN_UP:
				/* USBH_USBD_Cleanup Test */

⌨️ 快捷键说明

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