📄 mass.h
字号:
#ifndef _MASS_H
#define _MASS_H
#include "_hc_core/dev_ep.h"
#include "_hc_core/transfer.h"
#define MAX_MASS_DEVICES_DEFINE 2
#define MAX_MASS_DEVICES_LUN_DEFINE MAX_MASS_DEVICES_DEFINE+ 3
#define mass_instance_ptr( x ) ((x)->class_instance_ptr)
#define MAX_MASS_LUN 4
/* 大容量设备描述数据结构 */
typedef struct MASS_STORAGE_CLASS
{ unsigned char LUN; /* 该设备的逻辑单元数*/
struct _HMEDLUN *LUN_infor_ptr[MAX_MASS_LUN]; /* 逻辑单元描述信息结构指针 */
device_instance *dvi_ptr; /* 设备信息描述结构指针*/
endpoint_info *setup_epi_ptr; /* 控制端点描述信息结构指针 */
transfer_instance *tr_bulk_in_ptr; /* 批量输入传输描述符 */
transfer_instance *tr_bulk_out_ptr; /* 批量输出传输描述符 */
transfer_instance *tr_int_in_ptr; /* 中断输入传输描述符CBI-Only使用*/
unsigned char SubclassCode; /* 子类代码 */
unsigned char ProtocolCode; /* 传输协议代码CBI 或BULK*/
unsigned char *CBW_BuffPtr; /* 批量传输的命令包缓冲区指针 */
unsigned char RBC_BuffPtr[12]; /* 命令设置缓冲区 */
}MassStorageClass,*PMassStorageClass;
/* 媒介设备句柄 */
typedef struct _HMEDLUN
{
unsigned char LUN; // 所在大容量设备的逻辑单元号
MassStorageClass *MSC; // 大容量设备的描述信息结构
unsigned char VendorInfo[8]; // 厂商信息
unsigned char ProductInfo[16]; // 产品信息
unsigned char ProductRev[4]; // 产品版本
unsigned int LastLogicalBlookAddress;// 最后逻辑块地址
unsigned int BlockLengthInBytes; // 逻辑块长度
}hMedLUN;
/* RBC与传输的通讯的数据结构 */
typedef struct _TR_With_RBC
{
/* */
MassStorageClass *MSC; /*协议代码CBI 或BULK*/
unsigned char LUN; // 所在大容量设备的逻辑单元号
/* RBC到传输 */
uint16 DataTransferLength;
uint8 TrDirection; /* 数据传输方向(输入、输出、无数据) */
uint8 CBLength; /* 命令有效字节的长度,UFI固定为12字节 */
uint8 *RBC_BuffPtr; /* 命令设置缓冲区指针 */
/* 传输到RBC */
uint8 *Data_BuffPtr; /* 命令接收数据缓冲区指针*/
}TR_With_RBC;
void ini_mass_device_LUN_mem(void);
void ini_mass_device_mem(void);
unsigned short mass_init_commands( device_instance *dvi_ptr );
unsigned short mass_dispose_process( device_instance *dvi_ptr );
hMedLUN * Creat_Medium(device_instance *dvi_ptr ,unsigned char LUNIndex);
void Close_Medium(hMedLUN *hMedLUNPtr,unsigned char LUNIndex);
unsigned short ReadBlockData(hMedLUN *MediumPtr, unsigned char *BufferPtr,
unsigned int LBA, unsigned short TrBLength);
unsigned short WriteBlockData(hMedLUN *MediumPtr, unsigned char *BufferPtr,
unsigned int LBA, unsigned short TrBLength);
#endif // _MASS_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -