?? usb_task.lst
字號:
221 1
222 1 dCBWTag[0] = Usb_read_byte(); /* Store Tag to be repeated in CSW */
223 1 dCBWTag[1] = Usb_read_byte();
224 1 dCBWTag[2] = Usb_read_byte();
225 1 dCBWTag[3] = Usb_read_byte();
226 1 ((Byte*)&dCBWDataTransferLength)[3] = Usb_read_byte();
227 1 ((Byte*)&dCBWDataTransferLength)[2] = Usb_read_byte();
228 1 ((Byte*)&dCBWDataTransferLength)[1] = Usb_read_byte();
229 1 ((Byte*)&dCBWDataTransferLength)[0] = Usb_read_byte();
230 1 if (Usb_read_byte() != 0x00) /* store bmCBWFlags.bit7 */
231 1 {
232 2 Usb_CBWFlag_in();
233 2 if (cbw_error)
234 2 {
235 3 Usb_clear_RXOUT_PP();
236 3 Usb_select_ep(EP_IN);
237 3 Usb_set_STALLRQ();
238 3 return;
239 3 }
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 5
240 2 }
241 1 else
242 1 {
243 2 Usb_CBWFlag_out();
244 2 if (cbw_error)
245 2 {
246 3 Usb_clear_RXOUT_PP();
247 3 Usb_set_STALLRQ();
248 3 return;
249 3 }
250 2 }
251 1
252 1 if (ms_multiple_drive)
253 1 { /* multiple drive supported */
254 2 if (Usb_read_byte() == 0)
255 2 { /* LUN = 0 */
256 3 ACC = Usb_read_byte(); /* dummy CBWCBLength read */
257 3 Usb_clear_no_data_phase();
258 3 Sbc_command_chip();
259 3 }
260 2 else
261 2 { /* LUN = 1 */
262 3 ACC = Usb_read_byte(); /* dummy CBWCBLength read */
263 3 Usb_clear_no_data_phase();
264 3 Sbc_command_card();
265 3 }
266 2 }
267 1 else
268 1 { /* only 1 drive supported */
269 2 ACC = Usb_read_byte(); /* dummy LUN read */
270 2 ACC = Usb_read_byte(); /* dummy CBWCBLength read */
271 2 Usb_clear_no_data_phase();
272 2
273 2 if (gl_memory == MEM_CHIP)
274 2 { /* on-board memory */
275 3 Sbc_command_chip();
276 3 }
277 2 else
278 2 { /* memory card */
279 3 Sbc_command_card();
280 3 }
281 2 }
282 1 }
283
284
285 /*F**************************************************************************
286 * NAME: usb_mass_storage_csw
287 *----------------------------------------------------------------------------
288 * PARAMS:
289 *
290 * return:
291 *----------------------------------------------------------------------------
292 * PURPOSE:
293 * Command Status Wrapper management
294 *----------------------------------------------------------------------------
295 * EXAMPLE:
296 *----------------------------------------------------------------------------
297 * NOTE:
298 *
299 * REQUIREMENTS:
300 *****************************************************************************/
301 void usb_mass_storage_csw (void)
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 6
302 {
303 1 Usb_select_ep(EP_IN);
304 1 while (Usb_STALL_requested())
305 1 {
306 2 Usb_select_ep(EP_CONTROL);
307 2 if (Usb_setup_received())
308 2 {
309 3 usb_enumeration_process();
310 3 }
311 2 Usb_select_ep(EP_IN);
312 2 }
313 1
314 1 Usb_select_ep(EP_OUT);
315 1 while (Usb_STALL_requested())
316 1 {
317 2 Usb_select_ep(EP_CONTROL);
318 2 if (Usb_setup_received())
319 2 {
320 3 usb_enumeration_process();
321 3 }
322 2 Usb_select_ep(EP_OUT);
323 2 }
324 1
325 1 Usb_clear_no_data_phase();
326 1 Usb_clear_status_ready();
327 1 Usb_select_ep(EP_IN);
328 1 Usb_write_byte(0x55);
329 1 Usb_write_byte(0x53);
330 1 Usb_write_byte(0x42);
331 1 Usb_write_byte(0x53);
332 1
333 1 Usb_write_byte(dCBWTag[0]);
334 1 Usb_write_byte(dCBWTag[1]);
335 1 Usb_write_byte(dCBWTag[2]);
336 1 Usb_write_byte(dCBWTag[3]);
337 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[3]);
338 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[2]);
339 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[1]);
340 1 Usb_write_byte(((Byte*)&dCBWDataTransferLength)[0]);
341 1 Usb_write_byte(status);
342 1 Usb_set_TXRDY();
343 1
344 1 Usb_select_ep(EP_IN);
345 1 while (!Usb_tx_complete());
346 1 Usb_clear_TXCMPL();
347 1 }
348
349
350 /*F**************************************************************************
351 * NAME: usb_mass_storage_reset
352 *----------------------------------------------------------------------------
353 * PARAMS:
354 *
355 * return:
356 *----------------------------------------------------------------------------
357 * PURPOSE:
358 * This function handles the mass storage reset command
359 *----------------------------------------------------------------------------
360 * EXAMPLE:
361 *----------------------------------------------------------------------------
362 * NOTE:
363 *----------------------------------------------------------------------------
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 7
364 * REQUIREMENTS:
365 *****************************************************************************/
366 void usb_mass_storage_reset (void)
367 {
368 1 Usb_clear_RXSETUP();
369 1 Usb_set_TXRDY();
370 1 while (!(Usb_tx_complete()));
371 1 Usb_clear_TXCMPL();
372 1 }
373
374
375 /*F**************************************************************************
376 * NAME: usb_mass_storage_get_lun
377 *----------------------------------------------------------------------------
378 * PARAMS:
379 *
380 * return:
381 *----------------------------------------------------------------------------
382 * PURPOSE:
383 * This function returns the mass storage class specific Logical Unit Number.
384 *----------------------------------------------------------------------------
385 * EXAMPLE:
386 *----------------------------------------------------------------------------
387 * NOTE:
388 *----------------------------------------------------------------------------
389 * REQUIREMENTS:
390 *****************************************************************************/
391 void usb_mass_storage_get_lun (void)
392 {
393 1 Usb_clear_RXSETUP();
394 1 Usb_set_DIR();
395 1 Usb_write_byte(MS_MAX_LUN);
396 1 Usb_set_TXRDY();
397 1 while (!(Usb_tx_complete()));
398 1 Usb_clear_TXCMPL();
399 1 while (!(Usb_rx_complete()));
400 1 Usb_clear_RXOUT();
401 1 Usb_clear_DIR();
402 1 #if (MS_MAX_LUN != 0)
ms_multiple_drive = TRUE; /* multiple disk support */
print_screen(MASS_SCREEN_NO_MEM); /* memory icon off */
#endif
406 1 }
407
408
409 /*F**************************************************************************
410 * NAME: usb_it_suspend
411 *----------------------------------------------------------------------------
412 * PARAMS:
413 *
414 * return:
415 *----------------------------------------------------------------------------
416 * PURPOSE:
417 * USB suspend interrupt function -> reset
418 *----------------------------------------------------------------------------
419 * EXAMPLE:
420 *----------------------------------------------------------------------------
421 * NOTE:
422 * IRQ_USB defined in extsnd1.h
423 *----------------------------------------------------------------------------
424 * REQUIREMENTS:
425 *****************************************************************************/
C51 COMPILER V7.00 USB_TASK 04/28/2004 09:31:57 PAGE 8
426 Interrupt (usb_it_suspend(void), IRQ_USB)
427 {
428 1 if (Usb_suspend())
429 1 {
430 2 Wdt_enable(0);
431 2 while (1);
432 2 }
433 1 }
434
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 473 ----
CONSTANT SIZE = 35 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = 5 ----
BIT SIZE = 6 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -