📄 drv_usb_bo.h
字号:
/*************************************************
Copyright (C), 2008, DTK Computer.
File name: BulkOnly.h
Author: lihai
Version: 1.0
Date: 2008.04.28
Description: 实现USB驱动Bulk-Only批量传输协议相关函数功能
Others: 无
Function List:
Bulk_CBWHandler(void): 接收、处理输出端点(EP2)的传输命令
Bulk_CSWHandler(): 发送执行状态CSW
Bulk_code_transmit(D_UINT8 * pRomData, D_UINT16 len): 批量发送
IsCBWValid(): 判断是否CBW数据包
Bulk_ErrorHandler(D_UINT8 Status, D_UINT32 wByteCount):处理状态控制
ChangeEndian(D_UINT8* num): 转换4字节数据字节序
History: 初稿
*************************************************/
#ifndef __DRV_USB_BO_H__
#define __DRV_USB_BO_H__
#include "drv_usb_scsi.h"
#include "drv_usb_scsidef.h"
#include "drv_usb_main.h"
/*定义CBW命令执行状态*/
#define CSW_GOOD 0x00
#define CSW_FAIL 0x01
#define CSW_PHASE_ERROR 0x02
/* bulkStatus */
#define BULK_IDLE 0
#define BULK_DATA_TRANS 1
#define BULK_DATA_END 2
#define BULK_REQEST_TRANS 3
#define BULK_DATA_RECIEVE 4
/*倒序0x55534243 : USBC - USB Command*/
#define CBW_SIGNATURE 0x43425355
/*倒序0x55534253 : USBS - USB command Status*/
#define CSW_SIGNATURE 0x53425355
#define CBW_FLAG_IN 0x80
#define MAX_CDBLEN 0x10
#define CANCEL_BLOCK 2047
#pragma pack(push,1)
/*CBW数据结构*/
typedef struct _COMMAND_BLOCK_WRAPPER{
D_UINT32 dCBWSignature;
D_UINT32 dCBWTag;
D_UINT32 dCBWDataTransferLength;
D_UINT8 bmCBWFlags;
D_UINT8 bCBWLUN;
D_UINT8 bCBWCBLength;
CDB_RBC CBWCB;
} CBW,*PCBW;
/*CSW数据结构*/
typedef struct _COMMAND_STATUS_WRAPPER{
D_UINT32 dCSWSignature;
D_UINT32 dCSWTag;
D_UINT32 dCSWDataResidue;
D_UINT8 bCSWStatus;
} CSW, *PCSW;
/* cbw & csw - UNION */
typedef union _BULK_STRUCT {
CBW cbw;
CSW csw;
}BULK_STRUCT,*pBULK_STRUCT;
/*Bulk传输数据控制结构*/
typedef struct _BULK_CONTROL {
D_UINT32 LogicalBlockAddress;
D_UINT32 Transfer_Length;
D_UINT32 BufCount;
}BULK_CONTROL,*pBULK_CONTROL;
#pragma pack(pop)
/*接收、处理输出端点(EP2)的传输命令*/
void Bulk_CBWHandler( void );
/*发送执行状态CSW*/
void Bulk_CSWHandler( void );
/* 判断是否CBW数据包*/
D_BOOL IsCBWValid(void);
/*批量发送*/
void Bulk_code_transmit(D_UINT8 * pRomData, D_UINT16 len);
/*处理状态控制*/
void Bulk_ErrorHandler(D_UINT8 status, D_UINT32 wByteCount);
/*转换4字节数据字节序*/
void ChangeEndian(D_UINT8* num);
extern BULK_CONTROL Bulk_Control_r;
extern BULK_CONTROL Bulk_Control_w;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -