📄 tpbulk.h
字号:
/****************************************Copyright (c)****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name: Tpbulk.h
** Latest modified Date: 2007-10-8
** Latest Version: 1.0
** Descriptions: 这部分代码实现大容量类USB批量传输规范
**
**--------------------------------------------------------------------------------------------------------
** Created by: Lizhenming
** Created date: 2007-09-17
** Version: 1.0
** Descriptions: The original version
**
*********************************************************************************************************/
#ifndef __TPBULK_H__
#define __TPBULK_H__
#define __CSW_GOOD 0x00 /* 命令通过 */
#define __CSW_FAIL 0x01 /* 命令失败 */
#define __CSW_PHASE_ERROR 0x02 /* 命令有误 */
#define __CBW_SIGNATURE 0x43425355 /* CBW后固有的特征码 */
#define __CSW_SIGNATURE 0x53425355 /* CSW后固有的特征码 */
#define __CBW_FLAG_IN 0x80 /* 后面固有的标志码 */
#define __MAX_CDBLEN 0x10 /* 最长的CBWCB */
typedef struct _COMMAND_BLOCK_WRAPPER{ /* 命令数据包(CBW)结构 */
__uint32 dwCBWSignature; /* CBW标记:43425355h(小端) */
__uint32 dwCBWTag; /* 主机发送的命令块标签 */
__uint32 dwCBWDataXferLen; /* 主机要求传输的字节数 */
__uint8 bCBWFlag; /* bit7:0-DataOut,1-DataIn */
__uint8 bCBWLUN; /* 设备逻辑单元号码 */
__uint8 bCBWCDBLen; /* 命令块的有效长度 */
__uint8 bOperationCode; /* 命令块操作码 */
__CDB_RBC cdbRBC; /* 设备将执行的命令块 */
} __CBW, *__PCBW;
typedef __packed struct _COMMAND_STATUS_WRAPPER{ /* 命令状态数据包结构 */
__uint32 dwCSWSignature; /* CSW标记:53425355h(小端) */
__uint32 dwCSWTag; /* 相应CBW的dCBWTag字段值 */
__uint32 dwCSWDataResidue; /* 剩余未接收/发送的字节数 */
__uint8 bCSWStatus; /* 命令块状态值 */
} __CSW, *__PCSW;
typedef union _TPBULK_STRUC { /* 定义批量传输命令包和状 */
__CBW tpbulkCommandBlock; /* 态包联合体 */
__CSW tpbulkCommandStatus;
__uint8 TEMP[31];
}__TPBLK_STRUC, * __PTPBLK_STRUC;
typedef __packed union { /* 定义8bit的位域 */
__packed struct
{
unsigned b0 :1;
unsigned b1 :1;
unsigned b2 :1;
unsigned b3 :1;
unsigned b4 :1;
unsigned b5 :1;
unsigned b6 :1;
unsigned b7 :1;
}bit_;
__uint8 char_;
}__char_bit,*__pchar_bit;
/*********************************************************************************************************
大容量存储类USB批量传输的命令块数据包和命令状态包
*********************************************************************************************************/
extern __TPBLK_STRUC __GtpbulkBlock; /* 大容量存储类命令块数据包和 */
/* 命令状态包共用同一片RAM */
#define __GtpbulkCBW __GtpbulkBlock.tpbulkCommandBlock /* 大容量存储类命令块数据包31B */
#define __GdwCBWXferLen __GtpbulkCBW.dwCBWDataXferLen /* 批量输入或批量输出端点传输 */
/* 的数据字节数 */
#define __RBC_OPCODE __GtpbulkCBW.bOperationCode /* 设备要执行的命令块操作码 */
#define __RBC_CDB __GtpbulkCBW.cdbRBC /* 设备要执行的命令块 */
#define __GtpbulkCSW __GtpbulkBlock.tpbulkCommandStatus /* 大容量存储类命令状态包(13B) */
/*********************************************************************************************************
批量传输端点标志
*********************************************************************************************************/
extern __char_bit __GcbitTpbulkFlags;
#define __GbitBOTStallAtBulkOut __GcbitTpbulkFlags.bit_.b0 /* 批量输出端点停止(=1) */
#define __GbitBOTStallAtBulkIn __GcbitTpbulkFlags.bit_.b1 /* 批量输入端点停止(=1) */
#define __GbitBOTXferAbort __GcbitTpbulkFlags.bit_.b2 /* 批量输出/输入端点停止(=1) */
/*********************************************************************************************************
批量传输参数
*********************************************************************************************************/
typedef __packed struct _TPBULK_PARA_ {
__char_bit __GcbitBOTFsmState; /* 批量传输状态机 */
__char_bit __GcbitBOTXferSpace; /* 传输数据的存储类型 */
__uint8 reserver[2];
__uint32 __GdwBOTXferResidue; /* 批量传输数据剩余字节数 */
__uint8 *__GpucBOTXferData; /* 批量传输的数据指针 */
} __TPBULK_PARA;
extern __TPBULK_PARA __tpbulkPara[]; /* 批量传输参数 */
/*********************************************************************************************************
批量传输状态机 Finite State Machine [One-Hot] for Bulk-Only Transfer
IDLE Stage -> CBW -> CBW Proc -> DATA OUT Stage -> CSW Proc -> CSW Stage -> IDLE
IDLE Stage -> CBW -> CBW Proc -> DATA IN Stage -> CSW Proc -> CSW Stage -> IDLE
STALL Stage -> IDLE
*********************************************************************************************************/
#define __USBFSM4BOT_IDLE 0x01
#define __USBFSM4BOT_CBWPROC 0x02
#define __USBFSM4BOT_DATAIN 0x04
#define __USBFSM4BOT_DATAOUT 0x08
#define __USBFSM4BOT_CSWPROC 0x10
#define __USBFSM4BOT_CSW 0x20
#define __USBFSM4BOT_STALL 0x80
#define __GcbitBOTFsmState __tpbulkPara[__GbCurLun].__GcbitBOTFsmState
#define __GcBOTFsmState __GcbitBOTFsmState.char_
#define __GbitBOTFsmIdle __GcbitBOTFsmState.bit_.b0
#define __GbitBOTFsmCBWProc __GcbitBOTFsmState.bit_.b1
#define __GbitBOTFsmDataIn __GcbitBOTFsmState.bit_.b2
#define __GbitBOTFsmDataOut __GcbitBOTFsmState.bit_.b3
#define __GbitBOTFsmCSWProc __GcbitBOTFsmState.bit_.b4
#define __GbitBOTFsmCSW __GcbitBOTFsmState.bit_.b5
#define __GbitBOTFsmStall __GcbitBOTFsmState.bit_.b7
/*********************************************************************************************************
传输数据的存储类型
*********************************************************************************************************/
#define __BOTXFERSPACE_MASK 0x0F
#define __BOTXferAtRAM 0x10
#define __BOTXferAtATA 0x20
#define __BOTXferAtROM 0x40
#define __GcbitBOTXferSpace __tpbulkPara[__GbCurLun].__GcbitBOTXferSpace
#define __GcBOTXferSpace __GcbitBOTXferSpace.char_
#define __GbitBOTXferatRAM __GcbitBOTXferSpace.bit_.b4 /* 传输数据在RAM里 */
#define __GbitBOTXferatATA __GcbitBOTXferSpace.bit_.b5 /* 传输数据在存储器 */
#define __GbitBOTXferatROM __GcbitBOTXferSpace.bit_.b6 /* 传输数据在ROM里 */
/*********************************************************************************************************
批量传输参数
*********************************************************************************************************/
#define __GdwBOTXferResidue __tpbulkPara[__GbCurLun].__GdwBOTXferResidue/* 批量传输数据剩余字节数 */
#define __GpucBOTXferData __tpbulkPara[__GbCurLun].__GpucBOTXferData /* 批量传输的数据指针 */
/*
* Host Device Disagreement Matrix
*/
enum __HOST_DEV_DISAGREE {
__CASEOK = 0,
__CASE1,
__CASE2,
__CASE3,
__CASE4,
__CASE5,
__CASE6,
__CASE7,
__CASE8,
__CASE9,
__CASE10,
__CASE11,
__CASE12,
__CASE13,
__CASECBW,
__CASECMDFAIL
};
/*********************************************************************************************************
C[ommand]D[ata]S[tatus] architecture for mass storage device over Bulk
only Transport
*********************************************************************************************************/
/*********************************************************************************************************
** Function name: __tpbulkGetMaxLUN
**
** Descriptions: 设备支持的最大逻辑单元数目
**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -