?? usbkeyboard.lst
字號:
727 1 }
728 /******************************************************************************/
729
730 /**********************獲取空閑狀態(tài)*********************************************/
731 void get_idle(void)
732 {
733 1 Prints(" 獲取空閑................................",1);
734 1 write_endpoint_buff(1,1,&idle);
735 1 usb_flags.flags.usb_endp0_in=0;
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 13
736 1 }
737 /******************************************************************************/
738
739 /*************************獲取協(xié)議**********************************************/
740 void get_protocol(void)
741 {
742 1 Prints(" 獲取協(xié)議................................",1);
743 1 write_endpoint_buff(1,1,&protocol);
744 1 usb_flags.flags.usb_endp0_in=0;
745 1 }
746 /******************************************************************************/
747
748 /***********************設(shè)置報告***********************************************/
749 void set_report(void)
750 {
751 1 Prints(" 設(shè)置報告................................",1);
752 1 }
753 /******************************************************************************/
754
755 /***********************設(shè)置空閑***********************************************/
756 void set_idle(void)
757 {
758 1 Prints(" 設(shè)置空閑................................",1);
759 1 while(select_endpoint(1)&0x01);
760 1 write_endpoint_buff(1,0,0);
761 1 idle=Control_Data.DeviceRequest.wValue;
762 1 usb_flags.flags.usb_endp0_in=0;
763 1 usb_flags.flags.setup_packet_out=0;
764 1 }
765 /******************************************************************************/
766
767 /**********************設(shè)置協(xié)議**************************************************/
768 void set_protocol(void)
769 {
770 1 Prints(" 設(shè)置協(xié)議................................",1);
771 1 while(select_endpoint(1)&0x01);
772 1 write_endpoint_buff(1,0,0);
773 1 protocol=Control_Data.DeviceRequest.wValue;
774 1 usb_flags.flags.usb_endp0_in=0;
775 1 usb_flags.flags.setup_packet_out=0;
776 1 }
777 /******************************************************************************/
778
779 /****************************終端點0輸入處理**************************************/
780 void endp0_in(void)
781 {
782 1 read_last_status(1);
783 1 //如果是輸入請求包
784 1 if(usb_flags.flags.setup_packet_in||usb_flags.flags.not_end)
785 1 {
786 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
787 2 {
788 3 case 0x00: //標(biāo)準請求
789 3 Prints("USB標(biāo)準請求................................",1);
790 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
791 3 {
792 4 case 0: //到設(shè)備
793 4 switch (Control_Data.DeviceRequest.bRequest)
794 4 {
795 5 case 0: get_status(0);break;
796 5 case 6: get_descriptor();break;
797 5 case 8: get_configuration();break;
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 14
798 5 default:break;
799 5 }
800 4 break;
801 4
802 4 case 1: //到接口
803 4 switch (Control_Data.DeviceRequest.bRequest)
804 4 {
805 5 case 0: get_status(1);break;
806 5 case 6: get_descriptor_interface();break;
807 5 case 10: get_interface();break;
808 5 default: break;
809 5 }
810 4 break;
811 4
812 4 case 2: //到端點
813 4 {
814 5 if(Control_Data.DeviceRequest.bRequest==0)get_status(2);
815 5 }
816 4 default: break;
817 4 }
818 3 break;
819 3
820 3 case 0x20: //類請求
821 3 Prints("USB類請求................................",1);
822 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
823 3 {
824 4 case 0: //到設(shè)備
825 4 switch (Control_Data.DeviceRequest.bRequest)
826 4 {
827 5 default:break;
828 5 }
829 4 break;
830 4
831 4 case 1: //到接口
832 4 switch (Control_Data.DeviceRequest.bRequest)
833 4 {
834 5
835 5 case GET_REPORT: get_report(); break; //獲取報告
836 5 case GET_IDLE: get_idle(); break; //獲取空閑狀態(tài)
837 5 case GET_PROTOCOL: get_protocol(); break; //獲取協(xié)議
838 5 default: break;
839 5 }
840 4 break;
841 4
842 4 case 2: //到端點
843 4 {
844 5 switch (Control_Data.DeviceRequest.bRequest)
845 5 {
846 6 default: break;
847 6 }
848 5 }
849 4 default: break;
850 4 }
851 3 break;
852 3
853 3 case 0x40: //用戶請求
854 3 Prints("USB用戶請求................................",1);
855 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
856 3 {
857 4 case 0: //到設(shè)備
858 4 switch (Control_Data.DeviceRequest.bRequest)
859 4 {
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 15
860 5 default: break;
861 5 }
862 4 break;
863 4
864 4 case 1: //到接口
865 4 switch (Control_Data.DeviceRequest.bRequest)
866 4 {
867 5 default: break;
868 5 }
869 4 break;
870 4
871 4 case 2: //到端點
872 4 {
873 5 switch (Control_Data.DeviceRequest.bRequest)
874 5 {
875 6 default: break;
876 6 }
877 5 }
878 4 default: break;
879 4 }
880 3 }
881 2 return;
882 2 }
883 1
884 1 //如果是輸出請求包
885 1 if(usb_flags.flags.setup_packet_out)
886 1 {
887 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
888 2 {
889 3 case 0x00: //標(biāo)準請求
890 3 Prints("USB標(biāo)準請求................................",1);
891 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
892 3 {
893 4 case 0: //到設(shè)備
894 4 switch (Control_Data.DeviceRequest.bRequest)
895 4 {
896 5 case CLEAR_FEATURE: clear_feature(0);break;
897 5 case SET_FEATURE: set_feature(0);break;
898 5 case SET_ADDRESS: set_usb_address();break; //set_address
899 5 case SET_DESCRIPTOR: set_descriptor();break; //set_descriptor
900 5 case SET_CONFIGURATION: set_configuration(); break; //set_configurat
901 5 default: break;
902 5 }
903 4 break;
904 4
905 4 case 1: //到接口
906 4 switch (Control_Data.DeviceRequest.bRequest)
907 4 {
908 5 case CLEAR_FEATURE: clear_feature(1);break;
909 5 case SET_FEATURE: set_feature(1); break;
910 5 case SET_INTERFACE: set_interface();break;
911 5 default: break;
912 5 }
913 4 break;
914 4
915 4 case 2: //到端點
916 4 switch (Control_Data.DeviceRequest.bRequest)
917 4 {
918 5 case CLEAR_FEATURE: clear_feature(2);break;
919 5 case SET_FEATURE: set_feature(2);break;
920 5 default: break;
921 5 }
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 16
922 4 break;
923 4
924 4 default: break;
925 4 }
926 3 break;
927 3
928 3 case 0x20: //類請求
929 3 Prints("USB類請求................................",1);
930 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
931 3 {
932 4 case 0: //接收者為設(shè)備
933 4 switch (Control_Data.DeviceRequest.bRequest)
934 4 {
935 5 default: break;
936 5 }
937 4 break;
938 4
939 4 case 1: //接收者為接口
940 4 switch (Control_Data.DeviceRequest.bRequest)
941 4 {
942 5 case SET_REPORT: set_report(); break; //設(shè)置報告
943 5 case SET_IDLE: set_idle(); break; //設(shè)置空閑
944 5 case SET_PROTOCOL: set_protocol(); break; //設(shè)置協(xié)議
945 5 default: break;
946 5 }
947 4
948 4 break;
949 4
950 4 case 2: //接收者為端點
951 4 switch (Control_Data.DeviceRequest.bRequest)
952 4 {
953 5 default: break;
954 5 }
955 4 break;
956 4
957 4 case 3: //其它接收者
958 4 switch (Control_Data.DeviceRequest.bRequest)
959 4 {
960 5 default: break;
961 5 }break;
962 4
963 4 default: break;
964 4 }
965 3 break;
966 3
967 3 case 0x40: //用戶請求
968 3 Prints("USB用戶請求................................",1);
969 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
970 3 {
971 4 case 0: //接收者為設(shè)備
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -