📄 usbofcompuer00.lst
字号:
763 2 return;
764 2 }
765 1 }
766 /******************************************************************************/
767
768 /*********************发到接口的获取描述符**************************************/
769 void get_descriptor_interface(void)
770 {
771 1 #ifdef debug
Prints(" 获取描述符(从接口).\r\n");
#endif
774 1 if(!usb_flags.flags.not_end)
775 1 {
776 2 switch(MSB(Control_Data.DeviceRequest.wValue))
777 2 {
778 3 case HID_DESCRIPTOR:
779 3 #ifdef debug
Prints(" 获取HID描述符.\r\n");
#endif
782 3 Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
783 3 //Control_Data.pData=(uint8 *)(&hid_descriptor);
784 3 break;
785 3 case REPORT_DESCRIPTOR:
786 3 #ifdef debug
Prints(" 获取报告描述符.\r\n");
#endif
789 3 break;
790 3 case PHYSICAL_DESCRIPTOR:
791 3 #ifdef debug
Prints(" 获取物理描述符.\r\n");
#endif
794 3 break;
795 3 default:
796 3 Prints(" 获取其它描述符..................描述符索引为:");
797 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
798 3 Prints("\r\n");
799 3 DispLineInf();
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 14
800 3 break;
801 3 }
802 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
803 2 }
804 1 //写数据到D12输入端点
805 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
806 1 {
807 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
808 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
809 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
810 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
811 2 else usb_flags.flags.usb_endp0_in=0;
812 2 return;
813 2 }
814 1 else
815 1 {
816 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
817 2 usb_flags.flags.setup_packet_in=0;
818 2 usb_flags.flags.usb_endp0_in=0;
819 2 return;
820 2 }
821 1 }
822 /******************************************************************************/
823
824 //#define debug1
825 /************************终端点0输出中断处理************************************/
826 void endp0_out(void)
827 {
828 1 #ifdef debug1
Prints("ep0 out status,last-status,status: ");
//PrintHex(read_endpoint_status(0));
#endif
832 1 Last_Status.Register=read_last_status(0);
833 1 #ifdef debug1
// PrintHex(Last_Status.Register);
// PrintHex(read_endpoint_status(0));
Prints("\r\n");
Prints("端点0输出数据:");
read_endpoint_buff(0,16,OutBuffer);
#endif
840 1
841 1 if(Last_Status.Status.setup_packet) //setup包
842 1 {
843 2 Control_Data.wLength=0;
844 2 Control_Data.wCount=0;
845 2 if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=si
-zeof(REQUESTCMD))
846 2 {
847 3 set_endpoint_status(0,0);
848 3 set_endpoint_status(1,0);
849 3 return;
850 3 }
851 2 Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
852 2 Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
853 2 Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
854 2
855 2 ack_setup(0);
856 2 ack_setup(1);
857 2 select_endpoint(0);
858 2 clear_buffer();
859 2
860 2 Control_Data.wLength=Control_Data.DeviceRequest.wLength;
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 15
861 2 usb_flags.flags.not_end=0;
862 2 usb_flags.flags.usb_endp0_in=1;
863 2 if(Control_Data.DeviceRequest.bmRequestType&0x80)
864 2 {
865 3 usb_flags.flags.setup_packet_in=1;
866 3 usb_flags.flags.setup_packet_out=0;
867 3 return;
868 3 }
869 2 else
870 2 {
871 3 usb_flags.flags.setup_packet_in=0;
872 3 usb_flags.flags.setup_packet_out=1;
873 3 if(Control_Data.wLength!=0)
874 3 {
875 4 usb_flags.flags.usb_endp0_in=0;
876 4 }
877 3 return;
878 3 }
879 2 }
880 1 else
881 1 {
882 2 if(usb_flags.flags.setup_packet_out)
883 2 {
884 3 usb_flags.flags.usb_endp0_in=1;
885 3 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
886 3 {
887 4 case 0x00: //标准请求
888 4 #ifdef debug
Prints("USB标准输出请求:数据阶段.\r\n");
#endif
891 4 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
892 4 {
893 5 case 0: //到设备
894 5 switch (Control_Data.DeviceRequest.bRequest)
895 5 {
896 6 case CLEAR_FEATURE: /*ClearFeatureD(0);*/break;
897 6 case SET_FEATURE: /*SetFeatureD(0);*/break;
898 6 case SET_ADDRESS: /*SetUsbAddressD();*/break; //set_address
899 6 case SET_DESCRIPTOR: /*SetDescriptorD();*/break; //set_descriptor
900 6 case SET_CONFIGURATION: /*SetConfigurationD();*/ break; //set_configurat
-
901 6 default: break;
902 6 }
903 5 break;
904 5
905 5 case 1: //到接口
906 5 switch (Control_Data.DeviceRequest.bRequest)
907 5 {
908 6 case CLEAR_FEATURE: /*ClearFeatureD(1);*/break;
909 6 case SET_FEATURE: /*SetFeatureD(1);*/break;
910 6 case SET_INTERFACE: /*SetInterfaceD();*/break;
911 6 default: break;
912 6 }
913 5 break;
914 5
915 5 case 2: //到端点
916 5 switch (Control_Data.DeviceRequest.bRequest)
917 5 {
918 6 case CLEAR_FEATURE: /*ClearFeature(2);*/break;
919 6 case SET_FEATURE: /*SetFeature(2);*/break;
920 6 default: break;
921 6 }
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 16
922 5 break;
923 5
924 5 default: break;
925 5 }
926 4 break;
927 4
928 4 case 0x20: //类请求
929 4 #ifdef debug
Prints("USB类输出请求:数据阶段.\r\n");
#endif
932 4 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
933 4 {
934 5 case 0: //接收者为设备
935 5 switch (Control_Data.DeviceRequest.bRequest)
936 5 {
937 6 default: break;
938 6 }
939 5 break;
940 5
941 5 case 1: //接收者为接口
942 5 switch (Control_Data.DeviceRequest.bRequest)
943 5 {
944 6 default: break;
945 6 }
946 5
947 5 break;
948 5
949 5 case 2: //接收者为端点
950 5 switch (Control_Data.DeviceRequest.bRequest)
951 5 {
952 6 default: break;
953 6 }
954 5 break;
955 5
956 5 case 3: //其它接收者
957 5 switch (Control_Data.DeviceRequest.bRequest)
958 5 {
959 6 default: break;
960 6 }break;
961 5
962 5 default: break;
963 5 }
964 4 break;
965 4
966 4 case 0x40: //用户请求
967 4 #ifdef debug
Prints("USB用户输出请求:数据阶段.\r\n");
#endif
970 4 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
971 4 {
972 5 case 0: //接收者为设备
973 5 switch (Control_Data.DeviceRequest.bRequest)
974 5 {
975 6 default: break;
976 6 }
977 5 break;
978 5
979 5 case 1: //接收者为接口
980 5 switch (Control_Data.DeviceRequest.bRequest)
981 5 {
982 6 default: break;
983 6 }
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 17
984 5 break;
985 5
986 5 case 2: //接收者为端点
987 5 switch (Control_Data.DeviceRequest.bRequest)
988 5 {
989 6 default: break;
990 6 }
991 5 break;
992 5
993 5 case 3: //其它接收者
994 5 switch (Control_Data.DeviceRequest.bRequest)
995 5 {
996 6 default: break;
997 6 }
998 5 break;
999 5
1000 5 default: break;
1001 5 }
1002 4 }
1003 3 }
1004 2 else
1005 2 {
1006 3 select_endpoint(0);
1007 3 clear_buffer();
1008 3 }
1009 2 }
1010 1 }
1011 /******************************************************************************/
1012
1013 /***********************获取报告*********************************************/
1014 void get_report(void)
1015 {
1016 1 #ifdef debug
Prints(" 获取报告.\r\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -