📄 chap_9.lst
字号:
514 5 if( ControlData.DeviceRequest.wIndex == 0x00 )
515 5 {
516 6 endp = 0;
517 6 Hal4D13_SetEndpointStatus(endp, 0);
518 6
519 6 Chap9_SingleTransmitEP0(0, 0);
520 6 }
521 5 else
522 5 {
523 6 Chap9_StallEP0InControlWrite();
524 6 break;
525 6 }
526 5
527 5 }
528 4
529 4 else
530 4 Chap9_StallEP0InControlWrite();
531 4
532 4 break;
533 4
534 4
535 4 default:
536 4 Chap9_StallEP0InControlWrite();
537 4 break;
538 4 }
539 3 }
540 2 }
541 1
542 1 else
543 1 {
544 2
545 2 if( ControlData.DeviceRequest.wLength == 0 )
546 2 {
547 3 switch(bRecipient)
548 3 {
549 4 case USB_RECIPIENT_DEVICE:
550 4 if(wFeature == USB_FEATURE_REMOTE_WAKEUP)
551 4 {
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 10
552 5 bD13flags.bits.remote_wakeup = 0;
553 5 Chap9_SingleTransmitEP0(0, 0);
554 5 }
555 4 else
556 4 {
557 5 Chap9_StallEP0InControlWrite();
558 5 }
559 4
560 4 break;
561 4
562 4 case USB_RECIPIENT_ENDPOINT:
563 4
564 4 if(wFeature == USB_FEATURE_ENDPOINT_STALL)
565 4 {
566 5 if( ControlData.DeviceRequest.wIndex == 0x00 )
567 5 endp = -1;
568 5 else
569 5 endp = (UCHAR)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
570 5
571 5 Hal4D13_SetEndpointStatus(endp+1, 0);
572 5 Hal4D13_SetEndpointStatus(endp+1, 0);
573 5
574 5 Chap9_SingleTransmitEP0(0, 0);
575 5 }
576 4 else
577 4 {
578 5 Chap9_StallEP0InControlWrite();
579 5 }
580 4 break;
581 4
582 4 default:
583 4 Chap9_StallEP0InControlWrite();
584 4 break;
585 4 }
586 3 }
587 2 }
588 1
589 1 }
590
591 void Chap9_SetFeature(void)
592 {
593 1 UCHAR endp = 0;
594 1 UCHAR bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
595 1 USHORT wFeature = ControlData.DeviceRequest.wValue;
596 1
597 1
598 1 if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
599 1 {
600 2 switch(bRecipient)
601 2 {
602 3 case USB_RECIPIENT_DEVICE:
603 3 if(wFeature == USB_FEATURE_REMOTE_WAKEUP)
604 3 {
605 4 bD13flags.bits.remote_wakeup = 1;
606 4 Chap9_SingleTransmitEP0(0, 0);
607 4 }
608 3 else
609 3 {
610 4 Chap9_StallEP0InControlWrite();
611 4 }
612 3 break;
613 3
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 11
614 3 case USB_RECIPIENT_ENDPOINT:
615 3 if( wFeature == USB_FEATURE_ENDPOINT_STALL)
616 3 {
617 4 if( ControlData.DeviceRequest.wIndex == 0x00 )
618 4 endp = -1;
619 4
620 4 Hal4D13_SetEndpointStatus(endp+1, D13REG_EPSTS_STALL);
621 4 Chap9_SingleTransmitEP0(0, 0);
622 4
623 4 }
624 3 else
625 3 Chap9_StallEP0InControlWrite();
626 3
627 3 break;
628 3 default:
629 3 Chap9_StallEP0InControlWrite();
630 3 break;
631 3 }
632 2 }
633 1
634 1
635 1 else
636 1 {
637 2 if( ControlData.DeviceRequest.wLength == 0 )
638 2 {
639 3 switch(bRecipient)
640 3 {
641 4 case USB_RECIPIENT_DEVICE:
642 4 if(wFeature == USB_FEATURE_REMOTE_WAKEUP)
643 4 {
644 5 bD13flags.bits.remote_wakeup = 1;
645 5 Chap9_SingleTransmitEP0(0, 0);
646 5 }
647 4 else
648 4 {
649 5 Chap9_StallEP0InControlWrite();
650 5 }
651 4 break;
652 4 case USB_RECIPIENT_ENDPOINT:
653 4 if( wFeature == USB_FEATURE_ENDPOINT_STALL)
654 4 {
655 5 if( ControlData.DeviceRequest.wIndex == 0x00 )
656 5 endp = -1;
657 5 else
658 5 endp = (UCHAR)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
659 5
660 5 Hal4D13_SetEndpointStatus(endp+1, D13REG_EPSTS_STALL);
661 5
662 5 Chap9_SingleTransmitEP0(0, 0);
663 5
664 5 }
665 4 else
666 4 {
667 5 Hal4D13_SetEndpointStatus(endp+1, 0);
668 5 Chap9_SingleTransmitEP0(0, 0);
669 5 }
670 4 break;
671 4 default:
672 4 Chap9_StallEP0InControlWrite();
673 4 break;
674 4 }
675 3 }
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 12
676 2 }
677 1
678 1
679 1
680 1 }
681
682 void Chap9_SetAddress(void)
683 {
684 1
685 1 UCHAR j;
686 1
687 1 {
688 2 RaiseIRQL();
689 2 disable();
690 2 if(!ControlData.Abort)
691 2 {
692 3 if(bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE)
693 3 {
694 4 if((ControlData.DeviceRequest.wValue & DEVICE_ADDRESS_MASK) != 0 )
695 4 {
696 5 bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE = 0;
697 5 Hal4D13_SetAddressEnable((UCHAR)(ControlData.DeviceRequest.wValue &
698 5 DEVICE_ADDRESS_MASK), 1);
699 5 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 1;
700 5 Chap9_SingleTransmitEP0(0, 0);
701 5
702 5 }
703 4
704 4 else
705 4 bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE = 1;
706 4 }
707 3
708 3 else if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
709 3 {
710 4 if((ControlData.DeviceRequest.wValue & DEVICE_ADDRESS_MASK) == 0 )
711 4 {
712 5 Hal4D13_SetAddressEnable((UCHAR)(ControlData.DeviceRequest.wValue &
713 5 DEVICE_ADDRESS_MASK), 1);
714 5 bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE = 1;
715 5 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0;
716 5 Chap9_SingleTransmitEP0(0, 0);
717 5
718 5 }
719 4
720 4 else
721 4 {
722 5 bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE = 0;
723 5 Hal4D13_SetAddressEnable((UCHAR)(ControlData.DeviceRequest.wValue &
724 5 DEVICE_ADDRESS_MASK), 1);
725 5 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 1;
726 5 Chap9_SingleTransmitEP0(0, 0);
727 5
728 5 }
729 4
730 4 }
731 3
732 3 else
733 3 {
734 4
735 4 bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 0;
736 4 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0;
737 4 bUSBCheck_Device_State.State_bits.DEVICE_DEFAULT_STATE = 1;
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 13
738 4 j = DEV_BEHAVIOUR_NOT_SPECIFIED;
739 4 Chap9_SingleTransmitEP0(&j, 0);
740 4 }
741 3
742 3 }
743 2 LowerIRQL();
744 2 enable();
745 2
746 2 }
747 1
748 1 }
749
750
751 void Chap9_GetDescriptor(void)
752 {
753 1 UCHAR bDescriptor = MSB(ControlData.DeviceRequest.wValue);
754 1 UCHAR bDescriptorIndex = LSB(ControlData.DeviceRequest.wValue);
755 1
756 1 switch(bDescriptor)
757 1 {
758 2 case USB_DEVICE_DESCRIPTOR_TYPE:
759 2 Chap9_BurstTransmitEP0((PUCHAR)&DeviceDescr, sizeof(USB_DEVICE_DESCRIPTOR));
760 2 break;
761 2 case USB_CONFIGURATION_DESCRIPTOR_TYPE:
762 2 Chap9_BurstTransmitEP0((PUCHAR)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
763 2 break;
764 2 case USB_STRING_DESCRIPTOR_TYPE:
765 2 switch(bDescriptorIndex)
766 2 {
767 3 case STR_INDEX_LANGUAGE:
768 3 Chap9_BurstTransmitEP0((PUCHAR)&strLanguage, sizeof(USB_STRING_LANGUAGE_DESCRIPTOR));
769 3 break;
770 3 case STR_INDEX_MANUFACTURER:
771 3 Chap9_BurstTransmitEP0((PUCHAR)&strManufacturer, sizeof(USB_STRING_MANUFACTURER_DESCRIPTOR));
772 3 break;
773 3 case STR_INDEX_PRODUCT:
774 3 Chap9_BurstTransmitEP0((PUCHAR)&strProduct, sizeof(USB_STRING_PRODUCT_DESCRIPTOR));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -