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

📄 usbh_sampletask.c

📁 epson usb2.0 控制芯片 S1R72V05 固件程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
 * 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 + -