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