📄 usbsffbulkdevlib.h
字号:
/* usbSFFBulkDevLib.h - USB SFF Bulk only Mass Storage class header file */#ifndef __INCusbSFFBulkDevLibh#define __INCusbSFFBulkDevLibh#ifdef __cplusplusextern "C" {#endif#ifndef _ASMLANGUAGE/* includes */#include "vwModNum.h" /* USB Module Number Def's */#include "usb/usbMassStorage.h" /* Command Status codes */ #define USB_SFF_BULK_SUB_MODULE 11#define M_usbSFFBulkLib ( (USB_SFF_BULK_SUB_MODULE << 8) | M_usbHostLib )#define usbSFFBulkErr(x) (M_usbSFFBulkLib | (x))#define S_usbSFFBulkDevLib_NOT_INITIALIZED usbSFFBulkErr (1)#define S_usbSFFBulkDevLib_BAD_PARAM usbSFFBulkErr (2)#define S_usbSFFBulkDevLib_OUT_OF_MEMORY usbSFFBulkErr (3)#define S_usbSFFBulkDevLib_OUT_OF_RESOURCES usbSFFBulkErr (4)#define S_usbSFFBulkDevLib_GENERAL_FAULT usbSFFBulkErr (5)#define S_usbSFFBulkDevLib_QUEUE_FULL usbSFFBulkErr (6)#define S_usbSFFBulkDevLib_QUEUE_EMPTY usbSFFBulkErr (7)#define S_usbSFFBulkDevLib_NOT_IMPLEMENTED usbSFFBulkErr (8)#define S_usbSFFBulkDevLib_USBD_FAULT usbSFFBulkErr (9)#define S_usbSFFBulkDevLib_NOT_REGISTERED usbSFFBulkErr (10)#define S_usbSFFBulkDevLib_NOT_LOCKED usbSFFBulkErr (11)#define USB_CLASS_MASS_STORAGE 0x08 /* USB Mass storage class code */#define USB_SUBCLASS_SFF_COMMAND_SET 0x05 /* SFF command set definition */#define USB_INTERFACE_PROTOCOL_BULK_ONLY 0x50 /* BULK only interface protocol*//* * usbBulkDevIoctl function codes - chosen outside existing IO control * codes supported by file systems */#define USB_SFF_BULK_DESCRIPTOR_GET 0xF0 /* Shows all descriptors */ #define USB_SFF_BULK_DEV_RESET 0xF1 /* Class-specific reset */#define USB_SFF_BULK_MAX_LUN 0xF2 /* Max. LUN on the device */#define USB_SFF_BULK_EJECT_MEDIA 0xF3 /* Eject media command *//* Bulk only protocol constants */#define USB_SFF_CBW_SIGNATURE 0x43425355 /* Command block ID */#define USB_SFF_CBW_TAG 0xA5A5A5A5 /* Command block Tag */#define USB_SFF_CSW_SIGNATURE 0x53425355 /* Status block ID */#define USB_SFF_CBW_DIR_NONE 0x00 /* No direction => no data xfer */ #define USB_SFF_CBW_DIR_OUT 0x00 /* Direction OUT - to device */#define USB_SFF_CBW_DIR_IN 0x80 /* Direction IN - from device */#define USB_SFF_CBW_LUN_MASK 0x0F /* Mask for LUN field in CBW */#define USB_SFF_CBW_CBLEN_MASK 0x1F /* Mask for Command length field*/#define USB_SFF_CBW_LENGTH 0x1F /* Length of CBW */ #define USB_SFF_CBW_MAX_CBLEN 0x10 /* Max. length of command block */#define USB_SFF_CSW_LENGTH 0x0D /* Length of CSW *//* Status code in CSW */#define USB_SFF_CSW_STATUS_PASS 0x00 /* CBW Command success */ #define USB_SFF_CSW_STATUS_FAIL 0x01 /* CBW Command failed */#define USB_SFF_CSW_PHASE_ERROR 0x02 /* Phase Error *//* IRP Time out in millisecs */#define USB_SFF_BULK_IRP_TIME_OUT 5000/* SFF Commands and related constants */#define USB_SFF_WRITE12 0xAA /* 12-byte WRITE command */ #define USB_SFF_WRITE10 0x2A /* 10-byte WRITE command */ #define USB_SFF_READ12 0xA8 /* 12-byte READ command */ #define USB_SFF_READ10 0x28 /* 10-byte READ command */ #define USB_SFF_INQUIRY 0x12 /* Standard INQUIRY command */#define USB_SFF_START_STOP_UNIT 0x1B /* Start Stop Unit command */#define USB_SFF_REQ_SENSE 0x03 /* REQUEST SENSE data */ #define USB_SFF_TEST_UNIT_READY 0x00 /* TEST UNIT READY command */#define USB_SFF_READ_CAPACITY 0x25 /* READ CAPACITY command */#define USB_SFF_PREVENT_REMOVAL 0x1E /* Prevent media removal */#define USB_SFF_FORMAT_UNIT 0x04 /* FORMAT UNIT Command */ /* specific bit definitions in SFF commands */#define USB_SFF_STD_INQUIRY_LEN 0x24 /* Length of std INQUIRY data */#define USB_SFF_REQ_SENSE_LEN 0x12 /* Length of Req Sense data */#define USB_SFF_READ_CAP_LEN 0x08 /* Length of RD_CAP response */#define USB_SFF_INQUIRY_RMB_BIT 0x80 /* Media Type bit */#define USB_SFF_START_STOP_LOEJ 0x02 /* Media load eject bit */#define USB_SFF_START_STOP_START 0x01 /* Media start bit *//* definitions with in request sense data */#define USB_SFF_SENSE_KEY_OFFSET 0x02 /* Sense key offset in sense */#define USB_SFF_SENSE_ASC 0x0C /* Add'tl sense code offset */#define USB_SFF_SENSE_ASCQ 0x0D /* Add'tl sense code qualifier */ #define USB_SFF_SENSE_CUR_ERR 0x70 /* code for Current Errors */ #define USB_SFF_SENSE_KEY_MASK 0x0F /* Mask for sense key */#define USB_SFF_KEY_NO_SENSE 0x00 /* No specific sense key */#define USB_SFF_KEY_NOT_READY 0x02 /* Not ready value for key */#define USB_SFF_KEY_UNIT_ATTN 0x06 /* Unit Attn value for key */#define USB_SFF_KEY_HW_ERROR 0x04 /* Hardware Err value for key */ #define USB_SFF_ASC_NO_MEDIA 0x3A /* Media not present code */ #define USB_SFF_ASC_RESET 0x29 /* Reset or media change code *//* device create flag bits */#define USB_SFF_FLAG_READ_WRITE10 0x00000001 /* READ/WRITE10 */#define USB_SFF_FLAG_READ_WRITE12 0x00000000 /* READ/WRITE12 *//* Class specific commands */#define USB_SFF_BULK_RESET 0xFF /* Mass storage reset command */ #define USB_SFF_BULK_GET_MAX_LUN 0xFE /* Acquire Max. LUN command *//* Attach codes used by USB_SFF_BULK_ATTACH_CALLBACK. */#define USB_SFF_BULK_ATTACH 0 /* Bulk-only Device attached */#define USB_SFF_BULK_REMOVE 1 /* Bulk-only Device removed *//* Swap macros *//* * SCSI Response is in BIG ENDIAN format. Needs swapping on LITTLE ENDIAN * platforms. */#if (_BYTE_ORDER == _BIG_ENDIAN)#define USB_SFF_SWAP_32#define USB_SFF_SWAP_16#else#define USB_SFF_SWAP_32(x) LONGSWAP((UINT)x)#define USB_SFF_SWAP_16(x) ((LSB(x) << 8)|MSB(x))#endif/* * Command blocks for Bulk-only devices are in LITTLE ENDIAN format. Need * swapping on BIG ENDIAN platforms. */#if (_BYTE_ORDER == _BIG_ENDIAN)#define USB_SFF_BULK_SWAP_32(x) LONGSWAP((UINT)x)#define USB_SFF_BULK_SWAP_16(x) ((LSB(x) << 8)|MSB(x))#else /* _BYTE_ORDER == _BIG_ENDIAN */#define USB_SFF_BULK_SWAP_32 #define USB_SFF_BULK_SWAP_16#endif /* _BYTE_ORDER == _BIG_ENDIAN *//* command block wrapper */typedef struct usbSFFBulkCbw { UINT32 signature; /* CBW Signature */ UINT32 tag; /* Tag field */ UINT32 dataXferLength; /* Size of data (bytes) */ UINT8 direction; /* direction bit */ UINT8 lun; /* Logical Unit Number */ UINT8 length; /* Length of command block */ UINT8 CBD [USB_SFF_CBW_MAX_CBLEN];/* buffer for command block */ } USB_SFF_BULK_CBW, *pUSB_SFF_BULK_CBW;typedef struct usbSFFBulkCsw { UINT32 signature; /* CBW Signature */ UINT32 tag; /* Tag field */ UINT32 dataResidue; /* Size of residual data(bytes) */ UINT8 status; /* buffer for command block */ } USB_SFF_BULK_CSW, *pUSB_SFF_BULK_CSW;typedef VOID (*USB_SFF_BULK_ATTACH_CALLBACK) ( pVOID arg, /* caller-defined argument */ USBD_NODE_ID nodeId, /* nodeId of the bulk-only device */ UINT16 attachCode /* attach or remove code */ );/* function prototypes */STATUS usbSFFBulkDevInit (void);STATUS usbSFFBulkDevShutDown (int errCode);STATUS usbSFFBulkDynamicAttachRegister ( USB_SFF_BULK_ATTACH_CALLBACK callback, pVOID arg);BLK_DEV *usbSFFBulkBlkDevCreate (USBD_NODE_ID nodeId, UINT32 numBlks, UINT32 blkOffset, UINT32 flags);STATUS usbSFFBulkDevIoctl (BLK_DEV * pBlkDev, int request, int someArg); STATUS usbSFFBulkDynamicAttachUnregister ( USB_SFF_BULK_ATTACH_CALLBACK callback, pVOID arg);STATUS usbSFFBulkDevLock (USBD_NODE_ID nodeId);STATUS usbSFFBulkDevUnlock (USBD_NODE_ID nodeId);#endif /* _ASMLANGUAGE */#ifdef __cplusplus}#endif /* __cplusplus */#endif /* __INCusbSFFBulkDevLibh */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -