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