📄 usb_task.lst
字号:
195 2 }
196 1
197 1 dCBWTag[0] = Usb_read_byte(); /* Store Tag to be repeated in CSW */
198 1 dCBWTag[1] = Usb_read_byte();
199 1 dCBWTag[2] = Usb_read_byte();
200 1 dCBWTag[3] = Usb_read_byte();
201 1 ((Byte*)&dCBWDataTransferLength)[3] = Usb_read_byte();
202 1 ((Byte*)&dCBWDataTransferLength)[2] = Usb_read_byte();
203 1 ((Byte*)&dCBWDataTransferLength)[1] = Usb_read_byte();
204 1 ((Byte*)&dCBWDataTransferLength)[0] = Usb_read_byte();
205 1 if (Usb_read_byte() != 0x00) /* store bmCBWFlags.bit7 */
206 1 {
207 2 Usb_CBWFlag_in();
208 2 if (cbw_error)
209 2 {
210 3 Usb_select_ep(EP_IN);
211 3 Usb_clear_RXOUT();
212 3 Usb_set_STALLRQ();
213 3 return;
214 3 }
215 2 }
216 1 else
217 1 {
218 2 Usb_CBWFlag_out();
219 2 if (cbw_error)
220 2 {
221 3 Usb_clear_RXOUT();
222 3 Usb_set_STALLRQ();
223 3 return;
224 3 }
225 2 }
226 1
227 1 if (ms_multiple_drive)
228 1 { /* multiple drive supported */
229 2 if (Usb_read_byte() == 0)
230 2 {
231 3 ACC = Usb_read_byte(); /* dummy CBWCBLength read */
232 3 Usb_clear_no_data_phase();
233 3 sbc_command_df();
234 3 }
235 2 else
236 2 {
237 3 ACC = Usb_read_byte(); /* dummy CBWCBLength read */
238 3 Usb_clear_no_data_phase();
239 3 sbc_command_mmc();
240 3 }
C51 COMPILER V6.20c USB_TASK 07/10/2002 15:17:42 PAGE 5
241 2 }
242 1 else
243 1 { /* only 1 drive supported */
244 2 ACC = Usb_read_byte(); /* dummy LUN read */
245 2 ACC = Usb_read_byte(); /* dummy CBWCBLength read */
246 2 Usb_clear_no_data_phase();
247 2
248 2 if (gl_memory == MEM_DF)
249 2 {
250 3 sbc_command_df();
251 3 }
252 2 else
253 2 {
254 3 sbc_command_mmc();
255 3 }
256 2 }
257 1 }
258
259
260 /*F**************************************************************************
261 * NAME: usb_mass_storage_csw
262 *----------------------------------------------------------------------------
263 * PARAMS:
264 *
265 * return:
266 *----------------------------------------------------------------------------
267 * PURPOSE:
268 * Command Status Wrapper management
269 *----------------------------------------------------------------------------
270 * EXAMPLE:
271 *----------------------------------------------------------------------------
272 * NOTE:
273 *
274 * REQUIREMENTS:
275 *****************************************************************************/
276 void usb_mass_storage_csw (void)
277 {
278 1 Usb_select_ep(EP_IN);
279 1 while (Usb_STALL_requested())
280 1 {
281 2 Usb_select_ep(EP_CONTROL);
282 2 if (Usb_setup_received())
283 2 {
284 3 usb_enumeration_process();
285 3 }
286 2 Usb_select_ep(EP_IN);
287 2 }
288 1
289 1 Usb_select_ep(EP_OUT);
290 1 while (Usb_STALL_requested())
291 1 {
292 2 Usb_select_ep(EP_CONTROL);
293 2 if (Usb_setup_received())
294 2 {
295 3 usb_enumeration_process();
296 3 }
297 2 Usb_select_ep(EP_OUT);
298 2 }
299 1
300 1 Usb_clear_no_data_phase();
301 1 Usb_clear_status_ready();
302 1 Usb_select_ep(EP_IN);
C51 COMPILER V6.20c USB_TASK 07/10/2002 15:17:42 PAGE 6
303 1 Usb_write_byte(0x55);
304 1 Usb_write_byte(0x53);
305 1 Usb_write_byte(0x42);
306 1 Usb_write_byte(0x53);
307 1
308 1 Usb_write_byte(dCBWTag[0]);
309 1 Usb_write_byte(dCBWTag[1]);
310 1 Usb_write_byte(dCBWTag[2]);
311 1 Usb_write_byte(dCBWTag[3]);
312 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[3]);
313 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[2]);
314 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[1]);
315 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[0]);
316 1 Usb_write_byte(status);
317 1 Usb_set_TXRDY();
318 1
319 1 Usb_select_ep(EP_IN);
320 1 while (!Usb_tx_complete());
321 1 Usb_clear_TXCMPL();
322 1 }
323
324
325 /*F**************************************************************************
326 * NAME: usb_mass_storage_reset
327 *----------------------------------------------------------------------------
328 * PARAMS:
329 *
330 * return:
331 *----------------------------------------------------------------------------
332 * PURPOSE:
333 * This function handles the mass storage reset command
334 *----------------------------------------------------------------------------
335 * EXAMPLE:
336 *----------------------------------------------------------------------------
337 * NOTE:
338 *----------------------------------------------------------------------------
339 * REQUIREMENTS:
340 *****************************************************************************/
341 void usb_mass_storage_reset (void)
342 {
343 1 Usb_clear_RXSETUP();
344 1 Usb_set_TXRDY();
345 1 while (!(Usb_tx_complete()));
346 1 Usb_clear_TXCMPL();
347 1 }
348
349
350 /*F**************************************************************************
351 * NAME: usb_mass_storage_get_lun
352 *----------------------------------------------------------------------------
353 * PARAMS:
354 *
355 * return:
356 *----------------------------------------------------------------------------
357 * PURPOSE:
358 * This function returns the mass storage class specific Logical Unit Number.
359 *----------------------------------------------------------------------------
360 * EXAMPLE:
361 *----------------------------------------------------------------------------
362 * NOTE:
363 *----------------------------------------------------------------------------
364 * REQUIREMENTS:
C51 COMPILER V6.20c USB_TASK 07/10/2002 15:17:42 PAGE 7
365 *****************************************************************************/
366 void usb_mass_storage_get_lun (void)
367 {
368 1 Usb_clear_RXSETUP();
369 1 Usb_set_DIR();
370 1 Usb_write_byte(MS_MAX_LUN);
371 1 Usb_set_TXRDY();
372 1 while (!(Usb_tx_complete()));
373 1 Usb_clear_TXCMPL();
374 1 while (!(Usb_rx_complete()));
375 1 Usb_clear_RXOUT();
376 1 Usb_clear_DIR();
377 1 #if (MS_MAX_LUN != 0)
378 1 ms_multiple_drive = TRUE; /* multiple disk support */
379 1 print_screen(MASS_SCREEN_NO_MEM); /* memory icon off */
380 1 #endif
381 1 }
382
383
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 417 ----
CONSTANT SIZE = 42 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = 4 ----
BIT SIZE = 5 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -