📄 usbmouse.lst
字号:
776 2 if(Control_Data.DeviceRequest.bmRequestType&0x80)
777 2 {
778 3 usb_flags.flags.setup_packet_in=1;
779 3 usb_flags.flags.setup_packet_out=0;
780 3 return;
781 3 }
782 2 else
783 2 {
784 3 usb_flags.flags.setup_packet_in=0;
785 3 usb_flags.flags.setup_packet_out=1;
786 3 if(Control_Data.wLength!=0)
787 3 {
788 4 usb_flags.flags.usb_endp0_in=0;
789 4 }
790 3 return;
791 3 }
792 2 }
793 1 else
794 1 {
795 2 if(usb_flags.flags.setup_packet_out)
796 2 {
797 3 usb_flags.flags.usb_endp0_in=1;
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 14
798 3 }
799 2 else
800 2 {
801 3 select_endpoint(0);
802 3 clear_buffer();
803 3 }
804 2 }
805 1 }
806 /******************************************************************************/
807
808 /***********************获取报告*********************************************/
809 void get_report(void)
810 {
811 1 Prints(" 获取报告.\r\n");
812 1 }
813 /******************************************************************************/
814
815 /**********************获取空闲状态*********************************************/
816 void get_idle(void)
817 {
818 1 Prints(" 获取空闲.\r\n");
819 1 write_endpoint_buff(1,1,&idle);
820 1 usb_flags.flags.usb_endp0_in=0;
821 1 }
822 /******************************************************************************/
823
824 /*************************获取协议**********************************************/
825 void get_protocol(void)
826 {
827 1 Prints(" 获取协议.\r\n");
828 1 write_endpoint_buff(1,1,&protocol);
829 1 usb_flags.flags.usb_endp0_in=0;
830 1 }
831 /******************************************************************************/
832
833 /***********************设置报告***********************************************/
834 void set_report(void)
835 {
836 1 Prints(" 设置报告.\r\n");
837 1 }
838 /******************************************************************************/
839
840 /***********************设置空闲***********************************************/
841 void set_idle(void)
842 {
843 1 Prints(" 设置空闲.\r\n");
844 1 while(select_endpoint(1)&0x01);
845 1 write_endpoint_buff(1,0,0);
846 1 idle=Control_Data.DeviceRequest.wValue;
847 1 usb_flags.flags.usb_endp0_in=0;
848 1 usb_flags.flags.setup_packet_out=0;
849 1 }
850 /******************************************************************************/
851
852 /**********************设置协议**************************************************/
853 void set_protocol(void)
854 {
855 1 Prints(" 设置协议.\r\n");
856 1 while(select_endpoint(1)&0x01);
857 1 write_endpoint_buff(1,0,0);
858 1 protocol=Control_Data.DeviceRequest.wValue;
859 1 usb_flags.flags.usb_endp0_in=0;
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 15
860 1 usb_flags.flags.setup_packet_out=0;
861 1 }
862 /******************************************************************************/
863
864 /****************************终端点0输入处理**************************************/
865 void endp0_in(void)
866 {
867 1 read_last_status(1);
868 1 //如果是输入请求包
869 1 if(usb_flags.flags.setup_packet_in||usb_flags.flags.not_end)
870 1 {
871 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
872 2 {
873 3 case 0x00: //标准请求
874 3 Prints("USB标准请求.\r\n");
875 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
876 3 {
877 4 case 0: //到设备
878 4 switch (Control_Data.DeviceRequest.bRequest)
879 4 {
880 5 case 0: get_status(0);break;
881 5 case 6: get_descriptor();break;
882 5 case 8: get_configuration();break;
883 5 default:break;
884 5 }
885 4 break;
886 4
887 4 case 1: //到接口
888 4 switch (Control_Data.DeviceRequest.bRequest)
889 4 {
890 5 case 0: get_status(1);break;
891 5 case 6: get_descriptor_interface();break;
892 5 case 10: get_interface();break;
893 5 default: break;
894 5 }
895 4 break;
896 4
897 4 case 2: //到端点
898 4 {
899 5 if(Control_Data.DeviceRequest.bRequest==0)get_status(2);
900 5 }
901 4 default: break;
902 4 }
903 3 break;
904 3
905 3 case 0x20: //类请求
906 3 Prints("USB类请求.\r\n");
907 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
908 3 {
909 4 case 0: //到设备
910 4 switch (Control_Data.DeviceRequest.bRequest)
911 4 {
912 5 default:break;
913 5 }
914 4 break;
915 4
916 4 case 1: //到接口
917 4 switch (Control_Data.DeviceRequest.bRequest)
918 4 {
919 5
920 5 case GET_REPORT: get_report(); break; //获取报告
921 5 case GET_IDLE: get_idle(); break; //获取空闲状态
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 16
922 5 case GET_PROTOCOL: get_protocol(); break; //获取协议
923 5 default: break;
924 5 }
925 4 break;
926 4
927 4 case 2: //到端点
928 4 {
929 5 switch (Control_Data.DeviceRequest.bRequest)
930 5 {
931 6 default: break;
932 6 }
933 5 }
934 4 default: break;
935 4 }
936 3 break;
937 3
938 3 case 0x40: //用户请求
939 3 Prints("USB用户请求.\r\n");
940 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
941 3 {
942 4 case 0: //到设备
943 4 switch (Control_Data.DeviceRequest.bRequest)
944 4 {
945 5 default: break;
946 5 }
947 4 break;
948 4
949 4 case 1: //到接口
950 4 switch (Control_Data.DeviceRequest.bRequest)
951 4 {
952 5 default: break;
953 5 }
954 4 break;
955 4
956 4 case 2: //到端点
957 4 {
958 5 switch (Control_Data.DeviceRequest.bRequest)
959 5 {
960 6 default: break;
961 6 }
962 5 }
963 4 default: break;
964 4 }
965 3 }
966 2 return;
967 2 }
968 1
969 1 //如果是输出请求包
970 1 if(usb_flags.flags.setup_packet_out)
971 1 {
972 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
973 2 {
974 3 case 0x00: //标准请求
975 3 Prints("USB标准请求.\r\n");
976 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
977 3 {
978 4 case 0: //到设备
979 4 switch (Control_Data.DeviceRequest.bRequest)
980 4 {
981 5 case CLEAR_FEATURE: clear_feature(0);break;
982 5 case SET_FEATURE: set_feature(0);break;
983 5 case SET_ADDRESS: set_usb_address();break; //set_address
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 17
984 5 case SET_DESCRIPTOR: set_descriptor();break; //set_descriptor
985 5 case SET_CONFIGURATION: set_configuration(); break; //set_configurat
986 5 default: break;
987 5 }
988 4 break;
989 4
990 4 case 1: //到接口
991 4 switch (Control_Data.DeviceRequest.bRequest)
992 4 {
993 5 case CLEAR_FEATURE: clear_feature(1);break;
994 5 case SET_FEATURE: set_feature(1); break;
995 5 case SET_INTERFACE: set_interface();break;
996 5 default: break;
997 5 }
998 4 break;
999 4
1000 4 case 2: //到端点
1001 4 switch (Control_Data.DeviceRequest.bRequest)
1002 4 {
1003 5 case CLEAR_FEATURE: clear_feature(2);break;
1004 5 case SET_FEATURE: set_feature(2);break;
1005 5 default: break;
1006 5 }
1007 4 break;
1008 4
1009 4 default: break;
1010 4 }
1011 3 break;
1012 3
1013 3 case 0x20: //类请求
1014 3 Prints("USB类请求.\r\n");
1015 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1016 3 {
1017 4 case 0: //接收者为设备
1018 4 switch (Control_Data.DeviceRequest.bRequest)
1019 4 {
1020 5 default: break;
1021 5 }
1022 4 break;
1023 4
1024 4 case 1: //接收者为接口
1025 4 switch (Control_Data.DeviceRequest.bRequest)
1026 4 {
1027 5 case SET_REPORT: set_report(); break; //设置报告
1028 5 case SET_IDLE: set_idle(); break; //设置空闲
1029 5 case SET_PROTOCOL: set_protocol(); break; //设置协议
1030 5 default: break;
1031 5 }
1032 4
1033 4 break;
1034 4
1035 4 case 2: //接收者为端点
1036 4 switch (Control_Data.DeviceRequest.bRequest)
1037 4 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -