USB Host Shield 2.0
Loading...
Searching...
No Matches
masstorage.h
Go to the documentation of this file.
1/* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
2
3This program is free software; you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation; either version 2 of the License, or
6(at your option) any later version.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program; if not, write to the Free Software
15Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
17Contact information
18-------------------
19
20Circuits At Home, LTD
21Web : http://www.circuitsathome.com
22e-mail : support@circuitsathome.com
23 */
24
25#if !defined(__MASSTORAGE_H__)
26#define __MASSTORAGE_H__
27
28// Cruft removal, makes driver smaller, faster.
29#ifndef MS_WANT_PARSER
30#define MS_WANT_PARSER 0
31#endif
32
33#include "Usb.h"
34
35#define bmREQ_MASSOUT USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
36#define bmREQ_MASSIN USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
37
38// Mass Storage Subclass Constants
39#define MASS_SUBCLASS_SCSI_NOT_REPORTED 0x00 // De facto use
40#define MASS_SUBCLASS_RBC 0x01
41#define MASS_SUBCLASS_ATAPI 0x02 // MMC-5 (ATAPI)
42#define MASS_SUBCLASS_OBSOLETE1 0x03 // Was QIC-157
43#define MASS_SUBCLASS_UFI 0x04 // Specifies how to interface Floppy Disk Drives to USB
44#define MASS_SUBCLASS_OBSOLETE2 0x05 // Was SFF-8070i
45#define MASS_SUBCLASS_SCSI 0x06 // SCSI Transparent Command Set
46#define MASS_SUBCLASS_LSDFS 0x07 // Specifies how host has to negotiate access before trying SCSI
47#define MASS_SUBCLASS_IEEE1667 0x08
48
49// Mass Storage Class Protocols
50#define MASS_PROTO_CBI 0x00 // CBI (with command completion interrupt)
51#define MASS_PROTO_CBI_NO_INT 0x01 // CBI (without command completion interrupt)
52#define MASS_PROTO_OBSOLETE 0x02
53#define MASS_PROTO_BBB 0x50 // Bulk Only Transport
54#define MASS_PROTO_UAS 0x62
55
56// Request Codes
57#define MASS_REQ_ADSC 0x00
58#define MASS_REQ_GET 0xFC
59#define MASS_REQ_PUT 0xFD
60#define MASS_REQ_GET_MAX_LUN 0xFE
61#define MASS_REQ_BOMSR 0xFF // Bulk-Only Mass Storage Reset
62
63#define MASS_CBW_SIGNATURE 0x43425355
64#define MASS_CSW_SIGNATURE 0x53425355
65
66#define MASS_CMD_DIR_OUT 0 // (0 << 7)
67#define MASS_CMD_DIR_IN 0x80 //(1 << 7)
68
69/*
70 * Reference documents from T10 (http://www.t10.org)
71 * SCSI Primary Commands - 3 (SPC-3)
72 * SCSI Block Commands - 2 (SBC-2)
73 * Multi-Media Commands - 5 (MMC-5)
74 */
75
76/* Group 1 commands (CDB's here are should all be 6-bytes) */
77#define SCSI_CMD_TEST_UNIT_READY 0x00
78#define SCSI_CMD_REQUEST_SENSE 0x03
79#define SCSI_CMD_FORMAT_UNIT 0x04
80#define SCSI_CMD_READ_6 0x08
81#define SCSI_CMD_WRITE_6 0x0A
82#define SCSI_CMD_INQUIRY 0x12
83#define SCSI_CMD_MODE_SELECT_6 0x15
84#define SCSI_CMD_MODE_SENSE_6 0x1A
85#define SCSI_CMD_START_STOP_UNIT 0x1B
86#define SCSI_CMD_PREVENT_REMOVAL 0x1E
87/* Group 2 Commands (CDB's here are 10-bytes) */
88#define SCSI_CMD_READ_FORMAT_CAPACITIES 0x23
89#define SCSI_CMD_READ_CAPACITY_10 0x25
90#define SCSI_CMD_READ_10 0x28
91#define SCSI_CMD_WRITE_10 0x2A
92#define SCSI_CMD_SEEK_10 0x2B
93#define SCSI_CMD_ERASE_10 0x2C
94#define SCSI_CMD_WRITE_AND_VERIFY_10 0x2E
95#define SCSI_CMD_VERIFY_10 0x2F
96#define SCSI_CMD_SYNCHRONIZE_CACHE 0x35
97#define SCSI_CMD_WRITE_BUFFER 0x3B
98#define SCSI_CMD_READ_BUFFER 0x3C
99#define SCSI_CMD_READ_SUBCHANNEL 0x42
100#define SCSI_CMD_READ_TOC 0x43
101#define SCSI_CMD_READ_HEADER 0x44
102#define SCSI_CMD_PLAY_AUDIO_10 0x45
103#define SCSI_CMD_GET_CONFIGURATION 0x46
104#define SCSI_CMD_PLAY_AUDIO_MSF 0x47
105#define SCSI_CMD_PLAY_AUDIO_TI 0x48
106#define SCSI_CMD_PLAY_TRACK_REL_10 0x49
107#define SCSI_CMD_GET_EVENT_STATUS 0x4A
108#define SCSI_CMD_PAUSE_RESUME 0x4B
109#define SCSI_CMD_READ_DISC_INFORMATION 0x51
110#define SCSI_CMD_READ_TRACK_INFORMATION 0x52
111#define SCSI_CMD_RESERVE_TRACK 0x53
112#define SCSI_CMD_SEND_OPC_INFORMATION 0x54
113#define SCSI_CMD_MODE_SELECT_10 0x55
114#define SCSI_CMD_REPAIR_TRACK 0x58
115#define SCSI_CMD_MODE_SENSE_10 0x5A
116#define SCSI_CMD_CLOSE_TRACK_SESSION 0x5B
117#define SCSI_CMD_READ_BUFFER_CAPACITY 0x5C
118#define SCSI_CMD_SEND_CUE_SHEET 0x5D
119/* Group 5 Commands (CDB's here are 12-bytes) */
120#define SCSI_CMD_REPORT_LUNS 0xA0
121#define SCSI_CMD_BLANK 0xA1
122#define SCSI_CMD_SECURITY_PROTOCOL_IN 0xA2
123#define SCSI_CMD_SEND_KEY 0xA3
124#define SCSI_CMD_REPORT_KEY 0xA4
125#define SCSI_CMD_PLAY_AUDIO_12 0xA5
126#define SCSI_CMD_LOAD_UNLOAD 0xA6
127#define SCSI_CMD_SET_READ_AHEAD 0xA7
128#define SCSI_CMD_READ_12 0xA8
129#define SCSI_CMD_PLAY_TRACK_REL_12 0xA9
130#define SCSI_CMD_WRITE_12 0xAA
131#define SCSI_CMD_READ_MEDIA_SERIAL_12 0xAB
132#define SCSI_CMD_GET_PERFORMANCE 0xAC
133#define SCSI_CMD_READ_DVD_STRUCTURE 0xAD
134#define SCSI_CMD_SECURITY_PROTOCOL_OUT 0xB5
135#define SCSI_CMD_SET_STREAMING 0xB6
136#define SCSI_CMD_READ_MSF 0xB9
137#define SCSI_CMD_SET_SPEED 0xBB
138#define SCSI_CMD_MECHANISM_STATUS 0xBD
139#define SCSI_CMD_READ_CD 0xBE
140#define SCSI_CMD_SEND_DISC_STRUCTURE 0xBF
141/* Vendor-unique Commands, included for completeness */
142#define SCSI_CMD_CD_PLAYBACK_STATUS 0xC4 /* SONY unique */
143#define SCSI_CMD_PLAYBACK_CONTROL 0xC9 /* SONY unique */
144#define SCSI_CMD_READ_CDDA 0xD8 /* Vendor unique */
145#define SCSI_CMD_READ_CDXA 0xDB /* Vendor unique */
146#define SCSI_CMD_READ_ALL_SUBCODES 0xDF /* Vendor unique */
147
148/* SCSI error codes */
149#define SCSI_S_NOT_READY 0x02
150#define SCSI_S_MEDIUM_ERROR 0x03
151#define SCSI_S_ILLEGAL_REQUEST 0x05
152#define SCSI_S_UNIT_ATTENTION 0x06
153#define SCSI_ASC_LBA_OUT_OF_RANGE 0x21
154#define SCSI_ASC_MEDIA_CHANGED 0x28
155#define SCSI_ASC_MEDIUM_NOT_PRESENT 0x3A
156
157/* USB error codes */
158#define MASS_ERR_SUCCESS 0x00
159#define MASS_ERR_PHASE_ERROR 0x02
160#define MASS_ERR_UNIT_NOT_READY 0x03
161#define MASS_ERR_UNIT_BUSY 0x04
162#define MASS_ERR_STALL 0x05
163#define MASS_ERR_CMD_NOT_SUPPORTED 0x06
164#define MASS_ERR_INVALID_CSW 0x07
165#define MASS_ERR_NO_MEDIA 0x08
166#define MASS_ERR_BAD_LBA 0x09
167#define MASS_ERR_MEDIA_CHANGED 0x0A
168#define MASS_ERR_DEVICE_DISCONNECTED 0x11
169#define MASS_ERR_UNABLE_TO_RECOVER 0x12 // Reset recovery error
170#define MASS_ERR_INVALID_LUN 0x13
171#define MASS_ERR_WRITE_STALL 0x14
172#define MASS_ERR_READ_NAKS 0x15
173#define MASS_ERR_WRITE_NAKS 0x16
174#define MASS_ERR_WRITE_PROTECTED 0x17
175#define MASS_ERR_NOT_IMPLEMENTED 0xFD
176#define MASS_ERR_GENERAL_SCSI_ERROR 0xFE
177#define MASS_ERR_GENERAL_USB_ERROR 0xFF
178#define MASS_ERR_USER 0xA0 // For subclasses to define their own error codes
179
180#define MASS_TRANS_FLG_CALLBACK 0x01 // Callback is involved
181#define MASS_TRANS_FLG_NO_STALL_CHECK 0x02 // STALL condition is not checked
182#define MASS_TRANS_FLG_NO_PHASE_CHECK 0x04 // PHASE_ERROR is not checked
183
184#define MASS_MAX_ENDPOINTS 3
185
186struct Capacity {
188 //uint32_t dwBlockAddress;
189 //uint32_t dwBlockLength;
191
192struct BASICCDB {
194
195 unsigned unused : 5;
196 unsigned LUN : 3;
197
200
202
226
227typedef CDB6 CDB6_t;
228
260
262
278
280
305
328
332
333 unsigned Reserved : 7;
334 unsigned Removable : 1;
335
337
338 unsigned ResponseDataFormat : 4;
339 unsigned HISUP : 1;
340 unsigned NormACA : 1;
341 unsigned TrmTsk : 1;
342 unsigned AERC : 1;
343
345 //uint8_t Reserved3[2];
346
347 unsigned PROTECT : 1;
348 unsigned Res : 2;
349 unsigned ThreePC : 1;
350 unsigned TPGS : 2;
351 unsigned ACC : 1;
352 unsigned SCCS : 1;
353
354 unsigned ADDR16 : 1;
355 unsigned R1 : 1;
356 unsigned R2 : 1;
357 unsigned MCHNGR : 1;
358 unsigned MULTIP : 1;
359 unsigned VS : 1;
360 unsigned ENCSERV : 1;
361 unsigned BQUE : 1;
362
363 unsigned SoftReset : 1;
364 unsigned CmdQue : 1;
365 unsigned Reserved4 : 1;
366 unsigned Linked : 1;
367 unsigned Sync : 1;
368 unsigned WideBus16Bit : 1;
369 unsigned WideBus32Bit : 1;
370 unsigned RelAddr : 1;
371
376
391
393
394 struct {
397 };
398
399 struct {
402 };
403
405
406public:
407 // All zeroed.
408
411 for(int i = 0; i < 16; i++) CBWCB[i] = 0;
412 }
413
414 // Generic Wrap, CDB zeroed.
415
419 for(int i = 0; i < 16; i++) CBWCB[i] = 0;
420 // Type punning can cause optimization problems and bugs.
421 // Using reinterpret_cast to a dreinterpretifferent object is the proper way to do this.
422 //(((BASICCDB_t *) CBWCB)->LUN) = cmd;
423 BASICCDB_t *x = reinterpret_cast<BASICCDB_t *>(CBWCB);
424 x->LUN = cmd;
425 }
426
427 // Wrap for CDB of 6
428
434 // Wrap for CDB of 10
435
442
449
468
470protected:
471 static const uint8_t epDataInIndex; // DataIn endpoint index
472 static const uint8_t epDataOutIndex; // DataOUT endpoint index
473 static const uint8_t epInterruptInIndex; // InterruptIN endpoint index
474
477 uint8_t bConfNum; // configuration number
478 uint8_t bIface; // interface value
479 uint8_t bNumEP; // total number of EP in the configuration
480 uint32_t qNextPollTime; // next poll time
481 bool bPollEnable; // poll enable flag
482
484
486 //uint32_t dCBWDataTransferLength; // Data Transfer Length
487 uint8_t bLastUsbError; // Last USB error
488 uint8_t bMaxLUN; // Max LUN
489 uint8_t bTheLUN; // Active LUN
491 uint16_t CurrentSectorSize[MASS_MAX_SUPPORTED_LUN]; // Sector size, clipped to 16 bits
492 bool LUNOk[MASS_MAX_SUPPORTED_LUN]; // use this to check for media changes.
495
496
497 // Additional Initialization Method for Subclasses
498
499 virtual uint8_t OnInit() {
500 return 0;
501 };
502public:
503 BulkOnly(USB *p);
504
506 return bLastUsbError;
507 };
508
510 return bMaxLUN; // Max LUN
511 }
512
514 return bTheLUN; // Active LUN
515 }
516
523
524 bool LUNIsGood(uint8_t lun);
527
528 // USBDeviceConfig implementation
529 uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
531
533 uint8_t Poll();
534
535 virtual uint8_t GetAddress() {
536 return bAddress;
537 };
538
539 // UsbConfigXtracter implementation
541
542 virtual bool DEVCLASSOK(uint8_t klass) {
543 return (klass == USB_CLASS_MASS_STORAGE);
544 }
545
548
549private:
551 uint8_t TestUnitReady(uint8_t lun);
552 uint8_t RequestSense(uint8_t lun, uint16_t size, uint8_t *buf);
554 uint8_t GetMaxLUN(uint8_t *max_lun);
555 uint8_t SetCurLUN(uint8_t lun);
556 void Reset();
557 uint8_t ResetRecovery();
558 uint8_t ReadCapacity10(uint8_t lun, uint8_t *buf);
559 void ClearAllEP();
560 void CheckMedia();
561 bool CheckLUN(uint8_t lun);
562 uint8_t Page3F(uint8_t lun);
563 bool IsValidCBW(uint8_t size, uint8_t *pcbw);
564 bool IsMeaningfulCBW(uint8_t size, uint8_t *pcbw);
565
567
568 uint8_t ClearEpHalt(uint8_t index);
569#if MS_WANT_PARSER
571#endif
572 uint8_t Transaction(CommandBlockWrapper *cbw, uint16_t bsize, void *buf);
573 uint8_t HandleUsbError(uint8_t error, uint8_t index);
574 uint8_t HandleSCSIError(uint8_t status);
575
576};
577
578#endif // __MASSTORAGE_H__
#define USB_CLASS_MASS_STORAGE
Definition UsbCore.h:86
static const uint8_t epInterruptInIndex
Definition masstorage.h:473
void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)
uint8_t bLastUsbError
Definition masstorage.h:487
bool bPollEnable
Definition masstorage.h:481
uint8_t bTheLUN
Definition masstorage.h:489
uint32_t qNextPollTime
Definition masstorage.h:480
uint8_t MediaCTL(uint8_t lun, uint8_t ctl)
virtual uint8_t GetAddress()
Definition masstorage.h:535
virtual uint8_t OnInit()
Definition masstorage.h:499
uint8_t Write(uint8_t lun, uint32_t addr, uint16_t bsize, uint8_t blocks, const uint8_t *buf)
uint8_t Read(uint8_t lun, uint32_t addr, uint16_t bsize, uint8_t blocks, uint8_t *buf)
uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
uint8_t Poll()
uint32_t GetCapacity(uint8_t lun)
USB * pUsb
Definition masstorage.h:475
uint8_t bMaxLUN
Definition masstorage.h:488
uint8_t bNumEP
Definition masstorage.h:479
uint32_t CurrentCapacity[MASS_MAX_SUPPORTED_LUN]
Definition masstorage.h:490
uint32_t dCBWTag
Definition masstorage.h:485
bool WriteProtected(uint8_t lun)
virtual bool DEVCLASSOK(uint8_t klass)
Definition masstorage.h:542
uint8_t Release()
static const uint8_t epDataOutIndex
Definition masstorage.h:472
uint8_t bAddress
Definition masstorage.h:476
static const uint8_t epDataInIndex
Definition masstorage.h:471
bool LUNOk[MASS_MAX_SUPPORTED_LUN]
Definition masstorage.h:492
uint16_t CurrentSectorSize[MASS_MAX_SUPPORTED_LUN]
Definition masstorage.h:491
bool LUNIsGood(uint8_t lun)
uint8_t ConfigureDevice(uint8_t parent, uint8_t port, bool lowspeed)
uint8_t bConfNum
Definition masstorage.h:477
uint8_t GetLastUsbError()
Definition masstorage.h:505
uint8_t SCSITransaction6(CDB6_t *cdb, uint16_t buf_size, void *buf, uint8_t dir)
uint8_t bIface
Definition masstorage.h:478
void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR *ep_ptr)
uint16_t GetSectorSize(uint8_t lun)
uint8_t GetbTheLUN()
Definition masstorage.h:513
uint8_t LockMedia(uint8_t lun, uint8_t lock)
EpInfo epInfo[MASS_MAX_ENDPOINTS]
Definition masstorage.h:483
uint8_t SCSITransaction10(CDB10_t *cdb, uint16_t buf_size, void *buf, uint8_t dir)
uint8_t GetbMaxLUN()
Definition masstorage.h:509
bool WriteOk[MASS_MAX_SUPPORTED_LUN]
Definition masstorage.h:493
Definition UsbCore.h:220
#define BGRAB1(__usi__)
Definition macros.h:57
#define BGRAB2(__usi__)
Definition macros.h:58
#define BGRAB0(__usi__)
Definition macros.h:56
#define BGRAB3(__usi__)
Definition macros.h:59
#define MASS_CBW_SIGNATURE
Definition masstorage.h:63
CDB6 CDB6_t
Definition masstorage.h:227
BASICCDB BASICCDB_t
Definition masstorage.h:201
#define MASS_MAX_ENDPOINTS
Definition masstorage.h:184
CDB12 CDB12_t
Definition masstorage.h:279
CDB10 CDB10_t
Definition masstorage.h:261
#define MASS_MAX_SUPPORTED_LUN
Definition settings.h:79
unsigned unused
Definition masstorage.h:195
unsigned LUN
Definition masstorage.h:196
uint8_t Opcode
Definition masstorage.h:193
uint8_t info[12]
Definition masstorage.h:198
uint8_t Misc2
Definition masstorage.h:240
uint8_t ALC_MB
Definition masstorage.h:242
unsigned LUN
Definition masstorage.h:233
uint8_t ALC_LB
Definition masstorage.h:243
uint8_t LBA_L_L_MB
Definition masstorage.h:237
uint8_t LBA_L_L_LB
Definition masstorage.h:238
uint8_t Control
Definition masstorage.h:245
uint8_t LBA_L_M_LB
Definition masstorage.h:236
CDB10(uint8_t _Opcode, uint8_t _LUN)
Definition masstorage.h:248
CDB10(uint8_t _Opcode, uint8_t _LUN, uint16_t xflen, uint32_t _LBA)
Definition masstorage.h:254
uint8_t LBA_L_M_MB
Definition masstorage.h:235
uint8_t Opcode
Definition masstorage.h:230
unsigned Service_Action
Definition masstorage.h:232
uint8_t ALC_L_MB
Definition masstorage.h:274
uint8_t Control
Definition masstorage.h:276
uint8_t ALC_L_LB
Definition masstorage.h:275
uint8_t LBA_L_L_MB
Definition masstorage.h:270
uint8_t ALC_M_LB
Definition masstorage.h:273
uint8_t LBA_L_M_LB
Definition masstorage.h:269
uint8_t Opcode
Definition masstorage.h:264
unsigned Service_Action
Definition masstorage.h:266
uint8_t LBA_L_L_LB
Definition masstorage.h:271
unsigned Misc
Definition masstorage.h:267
unsigned LBAMSB
Definition masstorage.h:206
uint8_t LBALB
Definition masstorage.h:210
uint8_t AllocationLength
Definition masstorage.h:211
uint8_t LBAHB
Definition masstorage.h:209
uint8_t Control
Definition masstorage.h:212
CDB6(uint8_t _Opcode, uint8_t _LUN, uint32_t LBA, uint8_t _AllocationLength, uint8_t _Control)
Definition masstorage.h:216
unsigned LUN
Definition masstorage.h:207
uint8_t Opcode
Definition masstorage.h:204
CDB6(uint8_t _Opcode, uint8_t _LUN, uint8_t _AllocationLength, uint8_t _Control)
Definition masstorage.h:221
uint8_t ALC_L_LB
Definition masstorage.h:300
uint8_t A_M_L_MB
Definition masstorage.h:294
uint8_t LBA_L_L_LB
Definition masstorage.h:290
uint8_t Misc2
Definition masstorage.h:302
uint8_t LBA_L_M_MB
Definition masstorage.h:287
unsigned Misc
Definition masstorage.h:285
uint8_t ALC_M_LB
Definition masstorage.h:298
uint8_t A_M_L_LB
Definition masstorage.h:295
unsigned Service_Action
Definition masstorage.h:284
uint8_t LBA_L_L_MB
Definition masstorage.h:289
uint8_t ALC_M_MB
Definition masstorage.h:297
uint8_t Opcode
Definition masstorage.h:282
uint8_t A_M_M_MB
Definition masstorage.h:292
uint8_t Control
Definition masstorage.h:303
uint8_t LBA_L_M_LB
Definition masstorage.h:288
uint8_t ALC_L_MB
Definition masstorage.h:299
uint8_t A_M_M_LB
Definition masstorage.h:293
uint8_t LBA_M_M_MB
Definition masstorage.h:310
uint8_t ALC_L_LB
Definition masstorage.h:323
uint8_t Opcode
Definition masstorage.h:307
uint8_t LBA_L_L_LB
Definition masstorage.h:318
uint8_t LBA_M_L_MB
Definition masstorage.h:312
uint8_t LBA_L_L_MB
Definition masstorage.h:317
uint8_t Misc
Definition masstorage.h:308
uint8_t ALC_M_LB
Definition masstorage.h:321
uint8_t LBA_L_M_LB
Definition masstorage.h:316
uint8_t LBA_L_M_MB
Definition masstorage.h:315
uint8_t Misc2
Definition masstorage.h:325
uint8_t ALC_M_MB
Definition masstorage.h:320
uint8_t ALC_L_MB
Definition masstorage.h:322
uint8_t LBA_M_L_LB
Definition masstorage.h:313
uint8_t Control
Definition masstorage.h:326
uint8_t LBA_M_M_LB
Definition masstorage.h:311
uint8_t data[8]
Definition masstorage.h:187
CommandBlockWrapperBase(uint32_t tag, uint32_t xflen, uint8_t flgs)
Definition masstorage.h:387
uint32_t dCBWDataTransferLength
Definition masstorage.h:380
uint8_t CBWCB[16]
Definition masstorage.h:404
CommandBlockWrapper(uint32_t tag, uint32_t xflen, CDB6_t *cdb, uint8_t dir)
Definition masstorage.h:429
CommandBlockWrapper(uint32_t tag, uint32_t xflen, CDB10_t *cdb, uint8_t dir)
Definition masstorage.h:436
CommandBlockWrapper(uint32_t tag, uint32_t xflen, uint8_t flgs, uint8_t lu, uint8_t cmdlen, uint8_t cmd)
Definition masstorage.h:416
uint8_t ProductID[16]
Definition masstorage.h:373
unsigned NormACA
Definition masstorage.h:340
unsigned PROTECT
Definition masstorage.h:347
uint8_t RevisionID[4]
Definition masstorage.h:374
unsigned CmdQue
Definition masstorage.h:364
unsigned WideBus16Bit
Definition masstorage.h:368
unsigned ThreePC
Definition masstorage.h:349
unsigned RelAddr
Definition masstorage.h:370
unsigned MULTIP
Definition masstorage.h:358
unsigned ENCSERV
Definition masstorage.h:360
unsigned WideBus32Bit
Definition masstorage.h:369
unsigned ResponseDataFormat
Definition masstorage.h:338
uint8_t PeripheralQualifier
Definition masstorage.h:331
unsigned Removable
Definition masstorage.h:334
unsigned Reserved
Definition masstorage.h:333
uint8_t DeviceType
Definition masstorage.h:330
uint8_t AdditionalLength
Definition masstorage.h:344
unsigned Linked
Definition masstorage.h:366
unsigned MCHNGR
Definition masstorage.h:357
unsigned SoftReset
Definition masstorage.h:363
uint8_t VendorID[8]
Definition masstorage.h:372
unsigned ADDR16
Definition masstorage.h:354
unsigned TrmTsk
Definition masstorage.h:341
unsigned Reserved4
Definition masstorage.h:365
uint8_t Information[4]
Definition masstorage.h:460
uint8_t bAdditionalSenseCode
Definition masstorage.h:463
uint8_t SenseKeySpecific[3]
Definition masstorage.h:466
uint8_t bAdditionalSenseQualifier
Definition masstorage.h:464
uint8_t CmdSpecificInformation[4]
Definition masstorage.h:462
uint8_t bFieldReplaceableUnitCode
Definition masstorage.h:465