📄 usbh_sampletask.c
字号:
/*
* description: HostSample Task
* Maker : Shuichi.Yanagihara
* Copyright : (C)2005,SEIKO EPSON Corp. All Rights Reserved.
*/
//=============================================================================
// Include file
//=============================================================================
#include <string.h>
#include <SPRDEF.h>
#include <SPRSTS.h>
#include <OSCall.h>
#include <SampleTask.h>
#include <usbh_SampleTaskAPI.h>
#include <usbh_SampleTask.h>
#include "usbh_storage_if.h"
#include <usbh_usbd_api.h>
#include <usbh_hcd.h>
#include <usbh_hcds_common.h>
#include <usbh_stacktask.h>
#include <usbh_usbd_api.h>
#include <usbh_usbds_api.h>
#include <FileSystemMain.h>
#include <TestAnalog.h>
#include "DebugTask.h"
#ifdef TOYA2_C
#include "reg_mx21.h"
#endif
//=============================================================================
// Define declaration
//=============================================================================
#define SAMPLE_ON 1
#define SAMPLE_OFF 0
#define NO_USE (0x00) /* Not used */
#define FLOW_LV 3
//=============================================================================
// Macro declaration
//=============================================================================
//=============================================================================
// Structure declaration
//=============================================================================
//=============================================================================
// Variable declaration
//=============================================================================
//=============================================================================
// Static functions
//=============================================================================
static void TaskInit( void ); // Task initialization
//=============================================================================
// For test routine
//=============================================================================
/* Host USBD Test Defines */
#define FILESYSTEM_MODE '1' /* Select USB Device Mode */
#define HOST_MODE '2' /* Select USB Host Mode */
#define ANALOG_MODE '3' /* Select USB Host Analog Test Mode */
#define NOTSEL_MODE '0' /* Not Select USB Mode */
#define QUIT_BIG 'Q' // End
#define QUIT_LITTLE 'q' // End
#define SKIP_BIG 'S' // Skip
#define SKIP_LITTLE 's' // Skip
#define OFF_ZERO '0'
#define atob(input) input-OFF_ZERO
#define TEST_INIT '1' // USBH_USBD_Init API test
#define TEST_SUBMIT_URB '2' // USBH_USBD_SubmitURB API test
#define TEST_UNLINK_URB '3' // USBH_USBD_Unlink API test
#define TEST_ENTRY_CLASS '4' // USBH_USBD_EntryClass API test
#define TEST_SET_CONFIG '5' // USBH_USBD_SetConfiguration API test
#define TEST_RESET '6' // USBH_USBD_Reset API test
#define TEST_PORT_SUSPEND '7' // USBH_USBD_PortSuspend API test
#define TEST_PORT_RESUME '8' // USBH_USBD_PortResume API test
#define TEST_VXX_SUSPEND 'a' // USBH_HCD_Suspend API test
#define TEST_VXX_RESUME 'b' // USBH_HCD_Resume API test
#define TEST_PORT_CONDISCON 'c' // USBH_USBD_DeviceConAndDisCon API test
#define TEST_VXX_DETECT_DEVCON 'd' // USBH_UCD_DetectDevConnect API test
#define TEST_REMOTE_WUP_ON 'e' // REMOTE WAKEUP ON test
#define TEST_REMOTE_WUP_OFF 'f' // REMOTE WAKEUP ON test
#define TEST_CLEAN_UP 'g' // USBH_USBD_Cleanup API test
#define TEST_STRAGE_CLASS '1' // USBH_USBD_EntryClass STRAGE CLASS Select
#define TEST_HID_CLASS '2' // USBH_USBD_EntryClass HID CLASS Select
#define TEST_SUBMIT_CTL '1' // USBH_USBD_SubmitURB API control transfer test
#define TEST_SUBMIT_INT '2' // USBH_USBD_SubmitURB API interrupt transfer test
#define TEST_SUBMIT_BULKO '3' // USBH_USBD_SubmitURB API bulk transfer test(OUT)
#define TEST_SUBMIT_STG_TUR '4' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(TEST_UNIT_READY)
#define TEST_SUBMIT_STG_MS '5' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(MODE_SENSE)
#define TEST_SUBMIT_STG_RS '6' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(REQUEST_SENSE)
#define TEST_SUBMIT_STG_FU '7' // USBH_USBD_SubmitURB API Mass Storage Class transfer test (FORMAT_UNIT)
#define TEST_SUBMIT_STG_IQ '8' // USBH_USBD_SubmitURB API Mass Storage Class transfer test (INQUIRY)
#define TEST_SUBMIT_STG_RFC '9' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(READ_FORMAT_CAPACITY)
#define TEST_SUBMIT_STG_RC 'a' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(READ_CAPACITY)
#define TEST_SUBMIT_STG_R10 'b' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(READ10)
#define TEST_SUBMIT_STG_W10 'c' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(WRITE10)
#define TEST_SUBMIT_STG_STU 'd' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(START_STOP_UNIT)
#define TEST_SUBMIT_STG_BOMS_RS 'e' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(BulkOnly Mass Strage Reset)
#define TEST_SUBMIT_STG_GMAXLUN 'f' // USBH_USBD_SubmitURB API Mass Storage Class transfer(Get Max LUN)
#define TEST_SUBMIT_STG_CF_EPHLTO 'g' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(Clear Feature(ENDPOINT_HALT OUT)
#define TEST_SUBMIT_STG_CF_EPHLTI 'h' // USBH_USBD_SubmitURB API Mass Storage Class transfer test(Clear Feature(ENDPOINT_HALT IN)
#define TEST_SUBMIT_STG_END 'z'
#if 0
#define USBH_USBD_STRG_CLASS_CODE 0x00 /* Mass Storage Class Code */
#define USBH_USBD_AUDIO_CLASS_CODE 0x00 /* Audio Interface Class Code */
#define USBH_USBD_HID_CLASS_CODE 0x00 /* HID Class Code */
#endif
#define USBH_USBD_COMDEV_CLASS_CODE 0x02 /* Communication Device Class Code */
#define USBH_USBD_SUBCLASS_RBC 0x01 /* Reduced Block Command */
#define USBH_USBD_SUBCLASS_SFF8020I 0x02 /* SFF8020i or MMC-2 */
#define USBH_USBD_SUBCLASS_QIC157 0x03 /* QIC-157 */
#define USBH_USBD_SUBCLASS_UFI 0x04 /* UFI */
#define USBH_USBD_SUBCLASS_SFF8070I 0x05 /* SFF8070i */
#define USBH_USBD_SUBCLASS_SCSI 0x06 /* SCSI Primary Command-2 */
#define DEVICE_DISCONNECT 0x00
#define DEVICE_CONNECT 0x01
#define DEVICE_SUSPEND 0x02
/* Attribute of end point */
#define EP_ATTRIBUTES_CONTROL 0x00 /* Control */
#define EP_ATTRIBUTES_ISOCRON 0x01 /* Isocronous */
#define EP_ATTRIBUTES_BULK 0x02 /* Bulk */
#define EP_ATTRIBUTES_INTERRU 0x03 /* Interrupt */
#define MAX_USB_ADR 15 /* USB Address Max Value(for S1R72VXX) */
/* CBW/CSW Fixed Value */
#define CBW_SIGNATURE 0x43425355 /* CBW Signature */
#define CBW_TAG 0x34333231 /* CBW Tag */
#define CBW_OUT 0x00 /* CBW Flag : Data Out */
#define CBW_IN 0x80 /* CBW Flag : Data In */
#define CBW_LENGTH 0x1F /* CBW Length 31byte */
#define CSW_LENGTH 0x0D /* CSW Length 13byte */
/* CSW Status */
#define CSW_OK 0x00 /* CSW Status OK */
#define CSW_ERR 0x01 /* CSW Status Error */
#define CSW_PHASE_ERR 0x02 /* CSW Status Phase Error */
/* SCSI/ATAPI Command Mode */
#define SCSI 0x00
#define ATAPI 0x01
/* SCSI/ATAPI OP Code */
#define TEST_UNIT_READY 0x00
#define REQUEST_SENSE 0x03
#define MODE_SENSE 0x5A
#define FORMAT_UNIT 0x04
#define INQUIRY 0x12
#define READ_FORMAT_CAPACITY 0x23
#define READ_CAPACITY 0x25
#define READ10 0x28
#define WRITE10 0x2A
#define START_STOP_UNIT 0x1B
#define BO_CBW_SIZE (31)
#define BO_CSW_SIZE (13)
#ifdef TST_MODE
static ATAPI_INFO atinf;
#define GETDESCRIPTER_DEFSIZE (0xFF) /* Default size for GetDescripter */
static UCHAR GDdata[GETDESCRIPTER_DEFSIZE];
#endif
extern USBH_USBD_DEVLIST_HEAD * SeachDevAddrIDToDevice(UCHAR classid, UCHAR devaddr, long *retValue, UCHAR *bConfigurationValue);
extern void Test_USBH_MT(void);
extern void Test_USBH_IT(void);
/* Host USBD API Test Variable */
#ifdef TST_MODE
static UCHAR classid;
TEST_DEVICE_PARA testDevicePara[MAX_USB_ADR + 1];
static UCHAR tranData[MAX_USB_ADR + 1][512];
static TEST_STRG_CBW pCbw[MAX_USB_ADR + 1];
static TEST_STRG_CSW pCsw[MAX_USB_ADR + 1];
static TEST_CALLBACK_PARAM ResetCBRParam, testCBRParam, connectCBRParam[MAX_USB_ADR + 1];
static USBH_USBD_URB *pTestCBRUrb;
static USBH_USBD_URB testUrb; /* URB realize for storage test(Test_USBH_USBD_SubmitURB_Bulk) */
static USBH_USBD_URB StrageUrb[3]; /* URB entity for storage test(Test_USBH_USBD_SubmitURB_Storage) */
static UCHAR gin_epaddress, gout_epaddress;
static USBH_USBD_DEVLIST_HEAD *UsbDevInfo;
static USB_DESC_ENDPOINT gin_epinfo;
TEST_CTL_SETUP TmpSetupData;
static LONG ReturnValue;
#endif
/* HostStack Test Fase Select */
#ifdef TST_MODE
static void TestFaseSelect(void);
#endif
/* Host USBD API Test Routine */
#ifdef TST_MODE
static void Test_USBH_USBD_API(void);
void Test_USBH_USBD_Init(USBH_USBD_CALLBACK *callback, UCHAR dispsw);
void Test_USBH_USBD_Cleanup( UCHAR dispsw );
void Test_USBH_USBD_SubmitURB(UCHAR classID);
static void Test_USBH_USBD_UnlinkURB(UCHAR classId);
void Test_USBH_USBD_EntryClass(UCHAR classCode, UCHAR *classId, USBH_USBD_CALLBACK *callback, USBH_USBD_CALLBACK *eventCallback, UCHAR dispsw);
static void Test_USBH_USBD_SetConfiguration(UCHAR classId);
static void Test_USBH_USBD_Reset(UCHAR classId);
static void Test_USBH_USBD_PortSuspend(UCHAR classId);
static void Test_USBH_USBD_PortResume(UCHAR classId);
static void Test_USBH_HCD_Suspend(void);
static void Test_USBH_HCD_Resume(void);
static void Test_USBH_HCD_DetectDevConnect(void);
static void Test_USBH_USBD_SubmitURB_Int(UCHAR classId);
static void Test_SubmitURBCtlCmd(UCHAR classId,UCHAR type, UCHAR sw);
static void Test_USBH_USBD_SubmitURB_Storage(UCHAR classId,UCHAR type, UCHAR no);
LONG Test_USBH_USBD_InitCallback( ULONG message, ULONG param0, VOID* pParam );
LONG Test_USBH_USBD_SetConfigurationCallback( ULONG message, ULONG param0, VOID* pParam );
LONG Test_USBH_USBD_EntryClassCallback( ULONG message, ULONG param0, VOID* pParam );
void Test_USBH_USBD_EntryClass(UCHAR classCode, UCHAR *classId, USBH_USBD_CALLBACK *callback, USBH_USBD_CALLBACK *eventCallback, UCHAR dispsw);
LONG Test_USBH_USBD_ReturnValueCallback( ULONG message, ULONG param0, VOID* pParam );
LONG Test_USBH_USBD_ResetCallback( ULONG message, ULONG param0, VOID* pParam );
LONG Test_USBH_USBD_PortSuspendCallback( ULONG message, ULONG param0, VOID* pParam );
LONG Test_USBH_USBD_PortResumeCallback( ULONG message, ULONG param0, VOID* pParam );
LONG Test_USBH_USBD_SubmitURBCallback( ULONG message, ULONG param0, VOID* pParam );
void Test_USBH_USBD_SubmitURB_IntCallback(USBH_USBD_URB *pUrb);
void Test_USBH_USBD_SubmitURB_StorageCallback(USBH_USBD_URB *pUrb);
static void Test_USBH_HCD_SuspendCallback(unsigned long message, unsigned long param1, void *pParam );
static void Test_USBH_HCD_ResumeCallback(unsigned long message, unsigned long param1, void *pParam );
static void Test_USBH_HCD_DetectDevConnectCallback(unsigned long message, unsigned long param1, void *pParam );
static void Test_USBH_USBD_DeviceConAndDisCon(void);
char DBG_input_wait(void);
Inline void USBH_SampleSendMessage ( ULONG flg );
Inline OS_FLGPTN USBH_SampleWaitMessage ( void );
#endif
void SetConfigAndCB(UCHAR classId, UCHAR devaddr, USBH_USBD_CALLBACK pfnCallback, UCHAR dispsw);
void ResetAndCB(UCHAR classId, UCHAR devaddr, USBH_USBD_CALLBACK pfnCallback);
void PortSuspendAndCB(UCHAR classId, UCHAR devaddr, USBH_USBD_CALLBACK pfnCallback);
void PortResumeAndCB(UCHAR classId, UCHAR devaddr, USBH_USBD_CALLBACK pfnCallback);
void Test_USBH_RemoteWakeup(UCHAR type, UCHAR classId);
/*
//=============================================================================
// Function_Name: USBH_SampleTask
// description : Main Task of host mode
// argument : none
// return : none
//=============================================================================
*/
void USBH_SampleTask( void )
{
CHAR inputData[80];
USHORT inputDataSize;
// Task initialization
TaskInit();
//========================================================================
// HostSample Task's main loop
//========================================================================
while( 1 )
{
// Host and device selection's input waiting
while(1) {
#ifdef DEMOMODE_C
inputData[0] = FILESYSTEM_MODE;
inputData[1] = '\n';
inputDataSize = 1;
#else /* #ifdef DEMOMODE_C */
// Host and device selection's message display
DBG_FlowStrPrint("[USB Host Mode Select Menu]\r\n", FLOW_LV);
DBG_FlowStrPrint("[1 :FileSystem Mode Select]\r\n", FLOW_LV);
DBG_FlowStrPrint("[2 :USB Host Mode Select]\r\n", FLOW_LV);
DBG_FlowStrPrint("[3 :USB Host Analog Test Select]\r\n", FLOW_LV);
memset( inputData, 0x00, sizeof(inputData) );
DBG_FlowGetStr( inputData, &inputDataSize, 0 );
#endif /* #ifndef DEMOMODE_C */
#ifdef API_MODE
if( (inputDataSize == 1) && ((inputData[0] == FILESYSTEM_MODE) || (inputData[0] == HOST_MODE) || (inputData[0] == ANALOG_MODE)) ) {
#else
if( (inputDataSize == 1) && ((inputData[0] == FILESYSTEM_MODE) || (inputData[0] == ANALOG_MODE)) ) {
#endif
break;
} else {
DBG_FlowStrPrint("\r\n[It is an input value error. Try to input it.]\r\n\n", FLOW_LV);
}
}
if( inputData[0] == FILESYSTEM_MODE ){
/* Demo Mode */
// FileSystemMain();
break;
}
if( inputData[0] == HOST_MODE ){
/* USBD API Test */
#ifdef TST_MODE
TestFaseSelect();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -