📄 bulk_only.lst
字号:
118 //Removable Block Access Capabilities Page
119 0x1b, //Page Code
120 0x0a, //Page Length
121 0,//0x80, //SFLP=1
122 0x01, //TLUN=1
123 0,0,0,0,0,0,0,0//Reserved 保留
124 };
125 */
126
127 code unsigned char B_Mode_Sense_ALL[]={0x0b,0x00,//Mode Data Length
128 0x00,0x08,0x00,0x00,
129 0x7d,0,0,0,0x02,0x00
130 };
131 /*
132 code unsigned char B_Mode_Sense_TPP[]={0x00,0x0d,//Mode Data Length
133 0x00, //Medium Type Code
134 0,//write enabled
135 0,0,0,0,//reserved
136 0x1c,0x06,0,0x05,0,0,0,0
137 };
138 */
139 code unsigned char B_Mode_Sense_TPP[]={0xf0,0x00,//Mode Data Length
140 05,00,00,00,00,0x0b,00,00,00,00,0x24,00,00,00,00,00
141 };
142 code unsigned char B_Mode_Sense_ZERO[]={0x00,0x06,//Mode Data Length
143 0x00, //Medium Type Code
144 0,//write enabled
145 0,0,0,0//reserved
146 };
147 unsigned char bulk_CSW[]={0x55,0x53,0x42,0x53, // bytes 4 dCSWSignature
148 0x00,0x00,0x00,0x00, //bytes 4 dCSWTag
149 0,0,0,0, //bytes 4 dDataResiduce
150 0x00}; //bCSWStatus 00=good state.
151
152
153 typedef struct _STRUCT_CBW
154 {
155 unsigned char dCBWSignature[4];
156 unsigned char dCBWTag[4]; //dCBWTag of CBW
157 long unsigned int dCBWDataTransferLength;//dCBWDataTransferLength of CBW
158 unsigned char bmCBWFlags;
159 unsigned char bCBWLUN;
160 unsigned char bCBWCBLength;
161 unsigned char CBWCB[12];//for UFI Command all have 12bit
162 } struct_CBW;
163
164 struct_CBW bulk_CBW;
165
166 void InterpretCBW()
167 {
168 1 int i;
169 1 // printu("InterpretCBW\n");
170 1
171 1 bulk_CSW[4] = Bulk_Out_Buf[4];
172 1 bulk_CSW[5] = Bulk_Out_Buf[5];
173 1 bulk_CSW[6] = Bulk_Out_Buf[6];
174 1 bulk_CSW[7] = Bulk_Out_Buf[7];
175 1
176 1 // for(i=0;i<4;i++) bulk_CBW.dCBWDataTransferLength = (bulk_CBW.dCBWDataTransferLength<<8) +*(EpBuf+11-i);
177 1 // bulk_CBW.bmCBWFlags = *(EpBuf+12);
178 1 // bulk_CBW.bCBWLUN = *(EpBuf+13)&0x0f;
179 1 // bulk_CBW.bCBWCBLength = *(EpBuf+14)&0x1f;
C51 COMPILER V6.23a BULK_ONLY 11/27/2003 16:50:20 PAGE 4
180 1
181 1 for(i=0;i<12;i++)
182 1 bulk_CBW.CBWCB [i] = Bulk_Out_Buf[i+15];
183 1 // printu("\n\nSCSI:");
184 1 // for(j=0;j<12;j++) {printuf("%x ",bulk_CBW.CBWCB[j]);}
185 1
186 1 switch(bulk_CBW.CBWCB[0]){
187 2 // case 0x04 :SCSI_Reserved();break;
188 2 case Inquiry :SCSI_Inquiry();break;
189 2 // case 0x55 :SCSI_Reserved();break;
190 2 case Mode_Sense :SCSI_Mode_Sense();break;
191 2 case Read10 :SCSI_Read10();break;
192 2 // case 0xA8 :SCSI_Reserved();break;
193 2 case Read_Capacity :SCSI_Read_Capacity();break;
194 2 case Read_Format_Capacities :SCSI_Read_Format_Capacities();break;
195 2 // case 0x03 :SCSI_Reserved();break;
196 2 // case 0x01 :SCSI_Reserved();break;
197 2 // case 0x2B :SCSI_Reserved();break;
198 2 // case 0x1D :SCSI_Reserved();break;
199 2 // case 0x1B :SCSI_Reserved();break;
200 2 case Test_Unit_Ready :SCSI_Test_Unit_Ready();break;
201 2 case Verify :SCSI_Verify();break;
202 2 case Write10 :SCSI_Write10();break;
203 2 // case 0xAA :SCSI_Reserved();break;
204 2 // case 0x2E :SCSI_Reserved();break;
205 2 case Medium_Removal :SCSI_Medium_Removal();break;
206 2 default :SCSI_Reserved();break;
207 2 }
208 1
209 1 }
210
211 void SCSI_Inquiry()
212 {
213 1 // printu("SCSI_Inquiry\n");
214 1 bulk_state = BULK_DATA_END;
215 1 WriteEpBulk(1, sizeof(B_InquiryData), B_InquiryData);
216 1
217 1 }
218
219
220 void SCSI_Read_Format_Capacities()
221 {
222 1 // printu("SCSI_Read_Format_Capacities\n");
223 1 if(bulk_CBW.CBWCB[7]==0 && bulk_CBW.CBWCB[8]==0)
224 1 return;
225 1 bulk_state = BULK_DATA_END;
226 1 WriteEpBulk(1, sizeof(B_Read_Format_capacities), B_Read_Format_capacities);
227 1 }
228
229
230 void SCSI_Read_Capacity()
231 {
232 1 // printu("SCSI_Read_Capacity\n");
233 1 bulk_state = BULK_DATA_END;
234 1 WriteEpBulk(1, sizeof(B_Read_Capacity), B_Read_Capacity);
235 1
236 1 }
237
238 void SCSI_Read10()
239 {
240 1 int i;
241 1 // printu("SCSI_Read10\n");
C51 COMPILER V6.23a BULK_ONLY 11/27/2003 16:50:20 PAGE 5
242 1
243 1 for(i=0;i<4;i++) Logical_Block_Address = (Logical_Block_Address<<8) +bulk_CBW.CBWCB[2+i]; //要传的数据的
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -