?? usb_drv.lst
字號:
274 2 break;
275 2 case GET_MAX_LUN:
276 2 usb_mass_storage_get_lun();
277 2 break;
278 2 case MASS_STORAGE_RESET:
279 2 usb_mass_storage_reset();
280 2 break;
281 2 default:
282 2 Usb_clear_RXSETUP();
283 2 Usb_set_STALLRQ();
284 2 while (!Usb_STALL_sent());
285 2 Usb_clear_STALLRQ();
286 2 Usb_clear_STALLED();
287 2 break;
288 2 }
289 1 }
290
291
292 /*F**************************************************************************
293 * NAME: usb_set_address
294 *----------------------------------------------------------------------------
295 * PARAMS:
296 *
297 * return:
298 *----------------------------------------------------------------------------
299 * PURPOSE:
300 * This function manages the SET_ADDRESS request. The new address is stored
301 * in the USBADDR register
302 *----------------------------------------------------------------------------
C51 COMPILER V7.02a USB_DRV 09/13/2007 11:53:01 PAGE 6
303 * EXAMPLE:
304 *----------------------------------------------------------------------------
305 * NOTE:
306 *----------------------------------------------------------------------------
307 * REQUIREMENTS:
308 *****************************************************************************/
309 void usb_set_address (void)
310 {
311 1 Byte add;
312 1
313 1 Usb_clear_DIR();
314 1 add = Usb_read_byte(); /* store the LSB of wValue = address */
315 1 UEPRST = 0x01 ;
316 1 UEPRST = 0x00 ;
317 1 Usb_clear_RXSETUP();
318 1 Usb_set_TXRDY(); /* send a ZLP for STATUS phase */
319 1 Usb_set_FADDEN();
320 1 while (!(Usb_tx_complete()));
321 1 Usb_clear_TXCMPL();
322 1 Usb_configure_address(add);
323 1 }
324
325
326 /*F**************************************************************************
327 * NAME: usb_set_configuration
328 *----------------------------------------------------------------------------
329 * PARAMS:
330 *
331 * return:
332 *----------------------------------------------------------------------------
333 * PURPOSE:
334 * This function manages the SET_CONFIGURATION request.
335 *----------------------------------------------------------------------------
336 * EXAMPLE:
337 *----------------------------------------------------------------------------
338 * NOTE:
339 *----------------------------------------------------------------------------
340 * REQUIREMENTS:
341 *****************************************************************************/
342 void usb_set_configuration (void)
343 {
344 1 Uchar configuration_number;
345 1
346 1 configuration_number = Usb_read_byte();
347 1 Usb_clear_DIR();
348 1 Usb_clear_RXSETUP();
349 1 Usb_set_TXRDY(); /* send a ZLP for STATUS phase */
350 1 if (configuration_number == 0)
351 1 {
352 2 Usb_clear_CONFG();
353 2 }
354 1 else
355 1 {
356 2 Usb_set_CONFG();
357 2 }
358 1 while (!Usb_tx_complete());
359 1 Usb_clear_TXCMPL();
360 1 Usb_select_ep(EP_IN); /* endpoints configuration */
361 1 UEPCONX = BULK_IN ;
362 1 Usb_select_ep(EP_OUT);
363 1 UEPCONX = BULK_OUT;
364 1 }
C51 COMPILER V7.02a USB_DRV 09/13/2007 11:53:01 PAGE 7
365
366
367 /*F**************************************************************************
368 * NAME: usb_get_descriptor
369 *----------------------------------------------------------------------------
370 * PARAMS:
371 *
372 * return:
373 *----------------------------------------------------------------------------
374 * PURPOSE:
375 * This function manages the GET_DESCRIPTOR request.
376 *----------------------------------------------------------------------------
377 * EXAMPLE:
378 *----------------------------------------------------------------------------
379 * NOTE:
380 *----------------------------------------------------------------------------
381 * REQUIREMENTS:
382 *****************************************************************************/
383 void usb_get_descriptor (void)
384 {
385 1 Byte data_to_transfer;
386 1 Uint16 wLength;
387 1 Byte descriptor_type;
388 1 Byte string_type;
389 1
390 1 Usb_set_DIR(); /* set out on EP0 */
391 1 zlp = FALSE; /* no zero length packet */
392 1
393 1 string_type = Usb_read_byte(); /* read LSB of wValue */
394 1 descriptor_type = Usb_read_byte(); /* read MSB of wValue */
395 1 switch (descriptor_type)
396 1 {
397 2 case DEVICE:
398 2 {
399 3 data_to_transfer = sizeof (usb_device_descriptor);
400 3 pbuffer = &(usb_device_descriptor.bLength);
401 3 break;
402 3 }
403 2
404 2 case CONFIGURATION:
405 2 {
406 3 data_to_transfer = sizeof (usb_configuration);
407 3 pbuffer = &(usb_configuration.cfg.bLength);
408 3 break;
409 3 }
410 2
411 2 case STRING:
412 2 {
413 3 switch (string_type)
414 3 {
415 4 case LANG_ID:
416 4 {
417 5 data_to_transfer = sizeof (usb_language);
418 5 pbuffer = &(usb_language.bLength);
419 5 break;
420 5 }
421 4 case MAN_INDEX:
422 4 {
423 5 data_to_transfer = sizeof (usb_manufacturer);
424 5 pbuffer = &(usb_manufacturer.bLength);
425 5 break;
426 5 }
C51 COMPILER V7.02a USB_DRV 09/13/2007 11:53:01 PAGE 8
427 4 case PROD_INDEX:
428 4 {
429 5 data_to_transfer = sizeof (usb_product);
430 5 pbuffer = &(usb_product.bLength);
431 5 break;
432 5 }
433 4 case SN_INDEX:
434 4 {
435 5 data_to_transfer = sizeof (usb_serial_number);
436 5 pbuffer = &(usb_serial_number.bLength);
437 5 break;
438 5 }
439 4 default:
440 4 {
441 5 Usb_clear_RXSETUP();
442 5 while (!Usb_setup_received())
443 5 {
444 6 Usb_set_STALLRQ(); /* send stall */
445 6 while ((!(Usb_STALL_sent())) && (Usb_setup_received()));
446 6 Usb_clear_STALLED();
447 6 Usb_clear_STALLRQ();
448 6 }
449 5 Usb_clear_DIR(); /* set in on EP0 */
450 5 return;
451 5 }
452 4 }
453 3 break;
454 3 }
455 2
456 2 default:
457 2 {
458 3 Usb_clear_RXSETUP();
459 3 while (!Usb_setup_received())
460 3 {
461 4 Usb_set_STALLRQ(); /* send stall */
462 4 while ((!(Usb_STALL_sent())) && (Usb_setup_received()));
463 4 Usb_clear_STALLED();
464 4 Usb_clear_STALLRQ();
465 4 }
466 3 Usb_clear_DIR(); /* set in on EP0 */
467 3 return;
468 3 }
469 2 }
470 1
471 1 ACC = Usb_read_byte(); /* don't care of wIndex field */
472 1 ACC = Usb_read_byte();
473 1 ((Byte*)&wLength)[1] = Usb_read_byte(); /* read wLength */
474 1 ((Byte*)&wLength)[0] = Usb_read_byte();
475 1 if (wLength > data_to_transfer)
476 1 {
477 2 if ((data_to_transfer % EP_CONTROL_LENGTH) == 0)
478 2 {
479 3 zlp = TRUE; /* send a zero length packet */
480 3 }
481 2 else
482 2 {
483 3 zlp = FALSE; /* no need of zero length packet */
484 3 }
485 2 }
486 1 else
487 1 {
488 2 data_to_transfer = (Byte)wLength; /* send only requested number of data */
C51 COMPILER V7.02a USB_DRV 09/13/2007 11:53:01 PAGE 9
489 2 }
490 1 Usb_clear_RXSETUP() ; /* clear the receive setup flag */
491 1
492 1 while (data_to_transfer > EP_CONTROL_LENGTH)
493 1 {
494 2 pbuffer = send_ep0_packet(pbuffer, EP_CONTROL_LENGTH);
495 2 data_to_transfer -= EP_CONTROL_LENGTH;
496 2 while ((!(Usb_rx_complete())) && (!(Usb_tx_complete())));
497 2 if ((Usb_rx_complete())) /* if no cancel from USB Host */
498 2 {
499 3 Usb_clear_RXOUT();
500 3 return;
501 3 }
502 2 if (Usb_tx_complete())
503 2 {
504 3 Usb_clear_TXCMPL();
505 3 }
506 2 }
507 1 /* send last data packet */
508 1 pbuffer = send_ep0_packet(pbuffer, data_to_transfer);
509 1 data_to_transfer = 0;
510 1 while ((!(Usb_rx_complete())) && (!(Usb_tx_complete())));
511 1 if ((Usb_rx_complete())) /* if no cancel from USB Host */
512 1 {
513 2 Usb_clear_RXOUT();
514 2 return;
515 2 }
516 1 if (Usb_tx_complete())
517 1 {
518 2 Usb_clear_TXCMPL();
519 2 }
520 1 if (zlp == TRUE)
521 1 {
522 2 send_ep0_packet(pbuffer, 0);
523 2 while ((!(Usb_rx_complete())) && (!(Usb_tx_complete())));
524 2 if ((Usb_rx_complete())) /* if no cancel from USB Host */
525 2 {
526 3 Usb_clear_RXOUT();
527 3 return;
528 3 }
529 2 if (Usb_tx_complete())
530 2 {
531 3 Usb_clear_TXCMPL();
532 3 }
533 2 }
534 1 while ((!(Usb_rx_complete())) && (!(Usb_setup_received())));
535 1 if (Usb_setup_received())
536 1 {
537 2 return;
538 2 }
539 1
540 1 if (Usb_rx_complete())
541 1 {
542 2 Usb_clear_DIR(); /* set in on EP0 */
543 2 Usb_clear_RXOUT();
544 2 }
545 1 }
546
547
548 /*F**************************************************************************
549 * NAME: usb_get_configuration
550 *----------------------------------------------------------------------------
C51 COMPILER V7.02a USB_DRV 09/13/2007 11:53:01 PAGE 10
551 * PARAMS:
552 *
553 * return:
554 *----------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -