📄 chap_9.lst
字号:
775 3 break;
776 3 case STR_INDEX_SERIALNUMBER:
777 3 Chap9_BurstTransmitEP0((PUCHAR)&ConfigDescr, sizeof(CONFIG_DESCRIPTOR_LENGTH));
778 3 break;
779 3 case STR_INDEX_CONFIGURATION:
780 3 Chap9_BurstTransmitEP0((PUCHAR)&strConfiguration, sizeof(USB_STRING_CONFIGURATION_DESCRIPTOR) );
781 3 break;
782 3 case STR_INDEX_INTERFACE:
783 3 Chap9_BurstTransmitEP0((PUCHAR)&strInterface, sizeof(USB_STRING_INTERFACE_DESCRIPTOR) );
784 3 break;
785 3 default:
786 3 Chap9_StallEP0InControlRead();
787 3 break;
788 3 }
789 2 case USB_INTERFACE_DESCRIPTOR_TYPE:
790 2 case USB_ENDPOINT_DESCRIPTOR_TYPE:
791 2 case USB_POWER_DESCRIPTOR_TYPE:
792 2 default:
793 2 Chap9_StallEP0InControlRead();
794 2 break;
795 2 }
796 1 }
797
798 void Chap9_GetConfiguration(void)
799 {
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 14
800 1 UCHAR c = bD13flags.bits.configuration;
801 1 UCHAR j;
802 1
803 1 if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
804 1 {
805 2 j = 0;
806 2 Chap9_SingleTransmitEP0(&j, 1);
807 2 }
808 1
809 1 else
810 1 {
811 2 if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0 && ControlData.Device
-Request.wLength == 1)
812 2 {
813 3
814 3 Chap9_SingleTransmitEP0(&c, 1);
815 3 }
816 2 }
817 1
818 1 }
819
820 void Chap9_SetConfiguration(void)
821 {
822 1
823 1 if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
824 1 {
825 2 if(ControlData.DeviceRequest.wIndex == 0 && ControlData.DeviceRequest.wLength == 0)
826 2 {
827 3 if (ControlData.DeviceRequest.wValue == 0)
828 3 {
829 4 /* put device in unconfigured state */
830 4 bD13flags.bits.configuration = 0;
831 4 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 1;
832 4 Chap9_SingleTransmitEP0(0, 0);
833 4 }
834 3 else if (ControlData.DeviceRequest.wValue == 1)
835 3 {
836 4 /* Configure device */
837 4 bD13flags.bits.configuration = 1;
838 4 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0;
839 4 bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 1;
840 4 Chap9_SingleTransmitEP0(0, 0);
841 4 }
842 3
843 3 else
844 3 Chap9_StallEP0InControlWrite();
845 3 }
846 2 }
847 1
848 1 else
849 1 {
850 2 if (ControlData.DeviceRequest.wValue == 0)
851 2 {
852 3 /* put device in unconfigured state */
853 3 bD13flags.bits.configuration = 0;
854 3 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 1;
855 3 bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 0;
856 3 Chap9_SingleTransmitEP0(0, 0);
857 3
858 3 }
859 2
860 2 else if (ControlData.DeviceRequest.wValue == 1)
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 15
861 2 {
862 3 /* Configure device */
863 3 bD13flags.bits.configuration = 1;
864 3 bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE = 0;
865 3 bUSBCheck_Device_State.State_bits.DEVICE_CONFIGURATION_STATE = 1;
866 3 Chap9_SingleTransmitEP0(0, 0);
867 3 }
868 2 else
869 2 Chap9_StallEP0InControlWrite();
870 2 }
871 1
872 1 }
873
874 void Chap9_GetInterface(void)
875 {
876 1
877 1 if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
878 1 Chap9_StallEP0InControlRead();
879 1
880 1
881 1 else
882 1 {
883 2
884 2 if ((ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0 && ControlData.Devic
-eRequest.wLength == 1))
885 2 Chap9_SingleTransmitEP0(&ALTERNATIVE_SETTING, 1); //txdat
886 2 else
887 2 Chap9_StallEP0InControlRead();
888 2 }
889 1
890 1 }
891
892 void Chap9_SetInterface(void)
893 {
894 1 UCHAR dir = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_DIR_MASK;
895 1
896 1 if(dir)
897 1 Chap9_StallEP0InControlRead();
898 1
899 1
900 1 if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
901 1 Chap9_StallEP0InControlRead();
902 1
903 1
904 1
905 1 else
906 1 {
907 2
908 2 if (ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wIndex == 0)
909 2 {
910 3 ALTERNATIVE_SETTING = 0;
911 3 Chap9_SingleTransmitEP0(0,0);
912 3 }
913 2
914 2 else if (ControlData.DeviceRequest.wValue == 1 && ControlData.DeviceRequest.wIndex == 0)
915 2 {
916 3 ALTERNATIVE_SETTING = 1;
917 3 Chap9_SingleTransmitEP0(0,0);
918 3 }
919 2 else
920 2 {
921 3 Chap9_StallEP0InControlWrite();
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 16
922 3 }
923 2 }
924 1
925 1 }
926
927 // *************************************************************************
928 // Chap9 support functions
929 // *************************************************************************
930
931 void Chap9_StallEP0(void)
932 {
933 1 UCHAR dir;
934 1 dir = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_DIR_MASK;
935 1 if(dir)
936 1 {
937 2 Hal4D13_StallEP0InControlRead();
938 2 }
939 1 else
940 1 {
941 2 Hal4D13_StallEP0InControlWrite();
942 2 }
943 1
944 1 RaiseIRQL();
945 1 if(!ControlData.Abort)
946 1 {
947 2 bD13flags.bits.DCP_state = USBFSM4DCP_STALL;
948 2
949 2 }
950 1 LowerIRQL();
951 1 }
952 void Chap9_StallEP0InControlWrite(void)
953 {
954 1 Hal4D13_StallEP0InControlWrite();
955 1
956 1 RaiseIRQL();
957 1 if(!ControlData.Abort)
958 1 {
959 2 bD13flags.bits.DCP_state = USBFSM4DCP_STALL;
960 2
961 2 }
962 1 LowerIRQL();
963 1 }
964
965 void Chap9_StallEP0InControlRead(void)
966 {
967 1 Hal4D13_StallEP0InControlRead();
968 1 RaiseIRQL();
969 1 if(!ControlData.Abort)
970 1 {
971 2 bD13flags.bits.DCP_state = USBFSM4DCP_STALL;
972 2
973 2 }
974 1 LowerIRQL();
975 1 }
976
977 void Chap9_SingleTransmitEP0(PUCHAR buf, USHORT len)
978 {
979 1
980 1 Hal4D13_SingleTransmitEP0(buf, len);
981 1
982 1 RaiseIRQL();
983 1 if(!ControlData.Abort)
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 17
984 1 {
985 2 ControlData.wLength = ControlData.wCount = len;
986 2 bD13flags.bits.DCP_state = USBFSM4DCP_HANDSHAKE;
987 2
988 2 }
989 1 LowerIRQL();
990 1 }
991
992 void Chap9_BurstTransmitEP0(PUCHAR pData, USHORT len)
993 {
994 1 ControlData.wCount = 0;
995 1 if(ControlData.wLength > len)
996 1 ControlData.wLength = len;
997 1
998 1 ControlData.Addr.pData = pData;
999 1
1000 1 if( ControlData.wLength >= EP0_PACKET_SIZE)
1001 1 {
1002 2 Hal4D13_WriteEndpoint(EPINDEX4EP0_CONTROL_IN, pData, EP0_PACKET_SIZE);
1003 2
1004 2 RaiseIRQL();
1005 2 if(!ControlData.Abort)
1006 2 {
1007 3 ControlData.wCount += EP0_PACKET_SIZE;
1008 3 bD13flags.bits.DCP_state = USBFSM4DCP_DATAIN;
1009 3
1010 3 }
1011 2 LowerIRQL();
1012 2 }
1013 1 else
1014 1 {
1015 2 Hal4D13_WriteEndpoint(EPINDEX4EP0_CONTROL_IN, pData, ControlData.wLength);
1016 2
1017 2 RaiseIRQL();
1018 2 if(!ControlData.Abort)
1019 2 {
1020 3 ControlData.wCount += ControlData.wLength;
1021 3 bD13flags.bits.DCP_state = USBFSM4DCP_HANDSHAKE;
1022 3
1023 3 }
1024 2 LowerIRQL();
1025 2 }
1026 1 }
1027
*** ERROR C249 IN LINE 1027 OF CHAP_9.C: 'DATA': SEGMENT TOO LARGE
C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -