📄 usbh_sampletask.c
字号:
#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 + -