📄 chap9.lst
字号:
419
420 void USBClassRequest_ClearFeature(void) //ok
421 {
422 1 unsigned char endp;
423 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
424 1
425 1 if (bRecipient == USB_RECIPIENT_DEVICE
426 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
C51 COMPILER V8.02 CHAP9 08/03/2006 10:10:36 PAGE 8
427 2 DISABLE_INTERRUPTS;
428 2 bZBoardFlags.bits.bRemote_Wakeup = 0;
429 2 ENABLE_INTERRUPTS;
430 2 Chap9_ControlWriteHandshake();
431 2 }
432 1 else if (bRecipient == USB_RECIPIENT_ENDPOINT
433 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
434 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
435 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
436 2 /* clear TX stall for IN on EPn. */
437 2 ISP1581_SetEndpointStatus(endp*2 + 1, 0);
438 2 else
439 2 /* clear RX stall for OUT on EPn. */
440 2 ISP1581_SetEndpointStatus(endp*2, 0);
441 2 Chap9_ControlWriteHandshake();
442 2 } else
443 1 USB_Stall_EP0();
444 1 }
445
446 void USBClassRequest_SetFeature(void) //OK
447 {
448 1 unsigned char endp;
449 1 unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
450 1
451 1 if (bRecipient == USB_RECIPIENT_DEVICE
452 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) {
453 2 DISABLE_INTERRUPTS;
454 2 bZBoardFlags.bits.bRemote_Wakeup = 1;
455 2 ENABLE_INTERRUPTS;
456 2 Chap9_ControlWriteHandshake();
457 2 }
458 1 else if (bRecipient == USB_RECIPIENT_ENDPOINT
459 1 && ControlData.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL) {
460 2 endp = (unsigned char)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
461 2 if (ControlData.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
462 2 /* clear TX stall for IN on EPn. */
463 2 endp=endp*2 + 1;
464 2 else
465 2 /* clear RX stall for OUT on EPn. */
466 2 endp=endp*2;
467 2 ISP1581_SetEndpointStatus(endp, epctlfc_stall);
468 2 //USB_Single_Transmit(0, 0);
469 2 Chap9_ControlWriteHandshake();
470 2 } else
471 1 USB_Stall_EP0();
472 1 MCU_LED0 = 0;
473 1 }
474
475 void USBClassRequest_SetAddress(void) //ok
476 {
477 1
478 1 ISP1581_SetAddressEnable((UCHAR)(ControlData.DeviceRequest.wValue &
479 1 DEVICE_ADDRESS_MASK), 1);
480 1 Chap9_ControlWriteHandshake();
481 1
482 1 }
483
484 void USBClassRequest_GetDescriptor(void) //ok
485 {
486 1 unsigned char bDescriptor = MSB(ControlData.DeviceRequest.wValue);
487 1
488 1 if(bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE)
C51 COMPILER V8.02 CHAP9 08/03/2006 10:10:36 PAGE 9
489 1 {
490 2 if(bZBoardFlags.bits.ConnectSpeed == HighSpeed)
491 2 //Chap9_BurstTransmitEP0((PUCHAR)&DeviceDescr_H, sizeof(USB_DEVICE_DESCRIPTOR));
492 2 USB_Code_Transmit((unsigned char code *)&DeviceDescr_H, sizeof(USB_DEVICE_DESCRIPTOR));
493 2 else
494 2 USB_Code_Transmit((unsigned char code *)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
495 2 }
496 1 else if(bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE)
497 1 {
498 2 if(bZBoardFlags.bits.ConnectSpeed == HighSpeed)
499 2 USB_Code_Transmit((unsigned char code *)&ConfigDescr_H, CONFIG_DESCRIPTOR_LENGTH);
500 2 else
501 2 USB_Code_Transmit((unsigned char code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
502 2
503 2 }
504 1 else if(bDescriptor == USB_STRING_DESCRIPTOR_TYPE)
505 1 {
506 2 switch(LSB(ControlData.DeviceRequest.wValue))
507 2 {
508 3 case 0:
509 3 USB_Code_Transmit((unsigned char code *)&StringLANGID, StringLANGID[0]);
510 3 break;
511 3 case 1:
512 3 USB_Code_Transmit((unsigned char code *)szManufacturer, szManufacturer[0]);
513 3 break;
514 3 case 2:
515 3 USB_Code_Transmit((unsigned char code *)szProduct, szProduct[0]);
516 3 break;
517 3 case 3:
518 3 USB_Code_Transmit((unsigned char code *)szSerialNumber, szSerialNumber[0]);
519 3 break;
520 3 case 4:
521 3 USB_Code_Transmit((unsigned char code *)szConfiguration, szConfiguration[0]);
522 3 break;
523 3 case 5:
524 3 USB_Code_Transmit((unsigned char code *)szInterface, szInterface[0]);
525 3 break;
526 3 case 6:
527 3 USB_Code_Transmit((unsigned char code *)szUserInfo, szUserInfo[0]);
528 3 break;
529 3 default:
530 3 USB_Code_Transmit((unsigned char code *)&StringLANGID, 4);
531 3 break;
532 3 }
533 2
534 2 }
535 1 else if (bDescriptor ==USB_OTEHRSPEEDCONFIGURATION_DESCRIPTOR_TYPE)
536 1 {
537 2 if(bZBoardFlags.bits.ConnectSpeed == HighSpeed)
538 2 {
539 3 //Chap9_BurstTransmitEP0((PUCHAR)&Otherspeed_ConfigDescr_H, CONFIG_DESCRIPTOR_LENGTH);
540 3 USB_Code_Transmit((unsigned char code *)&Otherspeed_ConfigDescr_H, CONFIG_DESCRIPTOR_LENGTH);
541 3 }
542 2 else
543 2 {
544 3 USB_Stall_EP0();
545 3 }
546 2 MCU_LED0 = 0;
547 2 }
548 1 else if (bDescriptor ==USB_DEVICEQUALIFIER_DESCRIPTOR_TYPE)
549 1 {
550 2 USB_Code_Transmit((unsigned char code *)&DeviceQualifierDescr_H, sizeof(USB_DEVICEQUALIFIER_DESCRIPTOR))
C51 COMPILER V8.02 CHAP9 08/03/2006 10:10:36 PAGE 10
-;
551 2 MCU_LED0 = 0;
552 2 }
553 1 else
554 1 {
555 2 USB_Stall_EP0();
556 2
557 2 }
558 1 }
559
560 void USBClassRequest_GetConfiguration(void) //ok
561 {
562 1 unsigned char c = bZBoardFlags.bits.bConfiguration;
563 1
564 1 USB_Single_Transmit(&c, 1);
565 1 }
566
567 void USBClassRequest_SetConfiguration(void) //ok
568 {
569 1 if (ControlData.DeviceRequest.wValue == 0) {
570 2 /* put device in unconfigured state */
571 2 Chap9_ControlWriteHandshake();
572 2 DISABLE_INTERRUPTS;
573 2 bZBoardFlags.bits.bConfiguration = 0;
574 2 ENABLE_INTERRUPTS;
575 2 //USB_Init_Unconfig();
576 2 } else if (ControlData.DeviceRequest.wValue == 1) {
577 2 /* Configure device */
578 2 Chap9_ControlWriteHandshake();
579 2
580 2
581 2 DISABLE_INTERRUPTS;
582 2 bZBoardFlags.bits.bConfiguration = 1;
583 2 LED_STATUS=0;
584 2 ENABLE_INTERRUPTS;
585 2 } else
586 1 USB_Stall_EP0();
587 1 }
588
589 void USBClassRequest_GetInterface(void) //ok
590 {
591 1 unsigned char txdat = 0; /* Only/Current interface = 0 */
592 1
593 1 USB_Single_Transmit(&txdat, 1);
594 1 }
595
596 void USBClassRequest_SetInterface(void) //ok
597 {
598 1 if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
599 1 Chap9_ControlWriteHandshake();
600 1 else
601 1 USB_Stall_EP0();
602 1 }
603
604 ///////////////////////////////////////////////////////////////////////////////
605 void Chap9_ControlWriteHandshake(void)
606 {
607 1 ISP1581_ControlWriteHandshake();
608 1 bZBoardFlags.bits.DCP_state = USBFSM4DCP_CONTROLWRITEHANDSHAKE;
609 1 }
610
C51 COMPILER V8.02 CHAP9 08/03/2006 10:10:36 PAGE 11
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 638 ----
CONSTANT SIZE = 536 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 19 10
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -