📄 usbh_sampletask.c
字号:
testDevicePara[testCBRParam.param1].deviceStatus = DEVICE_DISCONNECT;
testDevicePara[testCBRParam.param1].devAdr = 0;
testDevicePara[testCBRParam.param1].subClass = 0;
for(i=0;i<18;i++) {
testDevicePara[testCBRParam.param1].reqSenseData[i] = 0;
}
testDevicePara[testCBRParam.param1].lun = 0;
testDevicePara[testCBRParam.param1].commandStatus = 0;
testDevicePara[testCBRParam.param1].commandMode = 0;
testDevicePara[testCBRParam.param1].interface = 0;
}
DBG_FlowStrPrint(" ]", FLOW_LV);
/* Display of param0 */
DBG_FlowStrPrint("\r\n[param0乮DeviceAddress乯: ", FLOW_LV);
DBG_FlowValPrint(PRINT_DECIMAL_MODE, DBG_STORE_DWORD, testDevicePara[testCBRParam.param1].devAdr, FLOW_LV);
DBG_FlowStrPrint(" ]", FLOW_LV);
if(testCBRParam.param0 == USBH_USBD_MSG_CONNECT_OK) {
Test_PrintDescripterInfo(1);
} else {
/* Display of 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);
}
}
return retValue;
}
/*=============================================================================
// Function_Name: Test_USBH_USBD_DeviceConAndDisCon
// description : Check test for connection/disconnection after USBH_USBD_Init
// argument : none
// return : none
//=============================================================================
*/
void Test_USBH_USBD_DeviceConAndDisCon(void)
{
LONG result;
DBG_FlowStrPrint("[Test_USBH_USBD_DeviceConAndDisCon() Test Start]\r\n", FLOW_LV);
/* API Call */
result = USBH_USBD_DeviceConAndDisCon();
DBG_FlowStrPrint("\r\n[廔椆偟傑偟偨]\r\n", FLOW_LV);
/* Display return value */
DBG_FlowStrPrint("[栠傝抣偼亂", FLOW_LV);
switch(result) {
case USBH_USBD_STATUS_SUCCESS:
DBG_FlowStrPrint("USBH_USBD_STATUS_SUCCESS", FLOW_LV);
break;
case USBH_USBD_STATUS_NO_DEVICE:
DBG_FlowStrPrint("USBH_USBD_STATUS_NO_DEVICE", FLOW_LV);
break;
case USBH_USBD_STATUS_MEM_ERROR:
DBG_FlowStrPrint("USBH_USBD_STATUS_MEM_ERROR", FLOW_LV);
break;
default:
DBG_FlowValPrint( PRINT_HEXA_MODE, DBG_STORE_DWORD, result, FLOW_LV);
DBG_FlowStrPrint(" 乻Error乼娫堘偭偨抣", FLOW_LV);
break;
}
DBG_FlowStrPrint("亃偱偡]\r\n", FLOW_LV);
DBG_FlowStrPrint("[Test_USBH_USBD_DeviceConAndDisCon() API Test End]\r\n", FLOW_LV);
DBG_FlowStrPrint("壗偐僉乕傪墴偟偰壓偝偄", FLOW_LV);
DBG_input_wait();
}
/*=============================================================================
// Function_Name: Test_USBH_USBD_Init
// description : USBH_USBD_Init API test
// argument : none
// return : none
//=============================================================================
*/
void Test_USBH_USBD_Init(USBH_USBD_CALLBACK *callback, UCHAR dispsw)
{
LONG result;
OS_FLGPTN flgPtn;
if(dispsw) {
DBG_FlowStrPrint("[USBH_USBD_Init() API Test Start]\r\n", FLOW_LV);
DBG_FlowStrPrint("[USBD偺弶婜壔傪奐巒偟傑偡]\r\n", FLOW_LV);
}
/* API Call */
result = USBH_USBD_Init((USBH_USBD_CALLBACK) callback);
if(result==USBH_USBD_STATUS_INVALID_PARAMETER) {
DBG_FlowStrPrint("[API偺栠傝抣偼亂USBH_USBD_STATUS_INVALID_PARAMETER亃偱偡]\r\n", FLOW_LV);
DBG_FlowStrPrint("壗偐僉乕傪墴偟偰壓偝偄", FLOW_LV);
DBG_input_wait();
return;
}
/* 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) {
OS_ClrFlg(FLGID_USBH_SAMPLE, ~(flgPtn));
// Call callback
} else {
DBG_FlowStrPrint("[抦傜側偄儊僢僙乕僕傪庴怣偟傑偟偨]\r\n", FLOW_LV);
return;
}
if(dispsw) {
DBG_FlowStrPrint("[USBD偺弶婜壔偑廔椆偟傑偟偨]\r\n", FLOW_LV);
}
if(dispsw) {
/* Display return value */
DBG_FlowStrPrint("[API偺栠傝抣偼亂", FLOW_LV);
switch(result) {
case USBH_USBD_STATUS_SUCCESS:
DBG_FlowStrPrint("USBH_USBD_STATUS_SUCCESS", FLOW_LV);
break;
case USBH_USBD_STATUS_NO_DEVICE:
DBG_FlowStrPrint("USBH_USBD_STATUS_NO_DEVICE", FLOW_LV);
break;
case USBH_USBD_STATUS_MEM_ERROR:
DBG_FlowStrPrint("USBH_USBD_STATUS_MEM_ERROR", FLOW_LV);
break;
default:
DBG_FlowValPrint( PRINT_DECIMAL_MODE, DBG_STORE_DWORD, result, FLOW_LV);
DBG_FlowStrPrint(" 乻Error乼娫堘偭偨抣", FLOW_LV);
break;
}
DBG_FlowStrPrint("亃偱偡]\r\n", FLOW_LV);
DBG_FlowStrPrint("\r\n[USBH_USBD_Init() 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_INIT_CMP) {
DBG_FlowStrPrint("USBH_USBD_MSG_INIT_CMP", 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_Init() API Test End]\r\n", FLOW_LV);
DBG_FlowStrPrint("壗偐僉乕傪墴偟偰壓偝偄", FLOW_LV);
DBG_input_wait();
}
}
/*=============================================================================
// Function_Name: Test_USBH_USBD_Cleanup
// description : USBH_USBD_Cleanup API Test
// argument : none
// return : none
//=============================================================================
*/
void Test_USBH_USBD_Cleanup( UCHAR dispsw )
{
LONG result;
OS_FLGPTN flgPtn;
if(dispsw) {
DBG_FlowStrPrint("[USBH_USBD_Cleanup() API Test Start]\r\n", FLOW_LV);
DBG_FlowStrPrint("[HostStack傪掆巭偟傑偡]\r\n", FLOW_LV);
}
/* API Call */
result = USBH_USBD_Cleanup();
if(dispsw) {
/* Display of return value */
DBG_FlowStrPrint("[API偺栠傝抣偼亂", FLOW_LV);
switch(result) {
case USBH_USBD_STATUS_SUCCESS:
DBG_FlowStrPrint("USBH_USBD_STATUS_SUCCESS", 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("亃偱偡]\r\n", FLOW_LV);
DBG_FlowStrPrint("\r\n[USBH_USBD_Cleanup() API Test End]\r\n", FLOW_LV);
DBG_FlowStrPrint("壗偐僉乕傪墴偟偰壓偝偄", FLOW_LV);
DBG_input_wait();
}
}
/*=============================================================================
// Function_Name: Test_USBH_USBD_SubmitCltURB
// description : USBH_USBD_SubmitURB API test(for control transfer)
// argument : none
// return : none
//=============================================================================
*/
#define TEST_GET_STATUS '1' // USBH_USBD_SubmitURB API (GET_STATUS)
#define TEST_CLEAR_FEATURE '2' // USBH_USBD_SubmitURB API (CLEAR_FEATURE)
#define TEST_SET_FEATURE '3' // USBH_USBD_SubmitURB API (SET_FEATURE)
#define TEST_SET_ADDRESS '4' // USBH_USBD_SubmitURB API (SET_ADDRESS)
#define TEST_GET_DESCRIPTOR '5' // USBH_USBD_SubmitURB API (GET_DESCRIPTOR)
#define TEST_GET_CONFIGURATION '6' // USBH_USBD_SubmitURB API (GET_CONFIGURATION)
#define TEST_SET_CONFIGURATION '7' // USBH_USBD_SubmitURB API (SET_CONFIGURATION)
#define TEST_GET_INTERFACE '8' // USBH_USBD_SubmitURB API (GET_INTERFACE)
#define TEST_SET_INTERFACE '9' // USBH_USBD_SubmitURB API (SET_INTERFACE)
#define TEST_GET_STATUSHUB 'a' // USBH_USBD_SubmitURB API (GET_STATUSHUB)
#define TEST_GET_STATUSPORT 'b' // USBH_USBD_SubmitURB API (GET_STATUSPORT)
#define TEST_CLEAR_FEATUREHUB 'c' // USBH_USBD_SubmitURB API (CLEAR_FEATUREHUB)
#define TEST_CLEAR_FEATUREPORT 'd' // USBH_USBD_SubmitURB API (CLEAR_FEATUREPORT)
#define TEST_SET_FEATUREHUB 'e' // USBH_USBD_SubmitURB API (SET_FEATUREHUB)
#define TEST_SET_FEATUREPORT 'f' // USBH_USBD_SubmitURB API (SET_FEATUREPORT)
#define TEST_GET_DESCRIPTORC 'g' // USBH_USBD_SubmitURB API (GET_DESCRIPTOR)
#define TEST_CLEAR_TT_BUFFER 'h' // USBH_USBD_SubmitURB API (CLEAR_TT_BUFFER)
#define TEST_RESET_TT 'i' // USBH_USBD_SubmitURB API (RESET_TT)
#define TEST_GET_TT_STATE 'j' // USBH_USBD_SubmitURB API (GET_TT_STATE)
#define TEST_STOP_TT 'k' // USBH_USBD_SubmitURB API (STOP_TT)
void Test_USBH_USBD_SubmitCtlURB(UCHAR classId)
{
UCHAR i;
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乣?, q偺敿妏塸悢帤偱慖戰偟偰壓偝偄 ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[1 : GET_STATUS ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[2 : CLEAR_FEATURE ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[3 : SET_FEATURE ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[4 : SET_ADDRESS ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[5 : GET_DESCRIPTOR ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[6 : GET_CONFIGURATION ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[7 : SET_CONFIGURATION ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[8 : GET_INTERFACE ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[9 : SET_INTERFACE ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[a : GET_STATUS(僴僽乯 ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[b : GET_STATUS(億乕僩) ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[c : CLEAR_FEATURE(僴僽) ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[d : CLEAR_FEATURE(億乕僩) ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[e : SET_FEATURE(僴僽) ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[f : SET_FEATURE(億乕僩) ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[g : GET_DESCRIPTORC ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[h : CLEAR_TT_BUFFER ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[i : RESET_TT ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[j : GET_TT_STATE ]", FLOW_LV);
DBG_FlowStrPrint("\r\n[k : STOP_TT ]", 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_GET_STATUS && inputData[0] <= TEST_STOP_TT)
|| 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_CONNECT) {
continue;
}
UsbDevInfo = testDevicePara[i].DevLH;
/* USBH_USBD_SubmitURB control's transfer test */
GetEndpointAddress(EP_ATTRIBUTES_BULK ,(USBH_USBD_DEVLIST_HEAD *)UsbDevInfo, &gin_epaddress, &gout_epaddress, NULL, NULL);
// Evaluation item's judgment
switch( inputData[0] ) {
case TEST_GET_STATUS:
case TEST_CLEAR_FEATURE:
case TEST_SET_FEATURE:
case TEST_SET_ADDRESS:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -