📄 usbmouse.lst
字号:
627 2 else usb_flags.flags.usb_endp0_in=0;
628 2 return;
629 2 }
630 1 else
631 1 {
632 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
633 2 usb_flags.flags.setup_packet_in=0;
634 2 usb_flags.flags.usb_endp0_in=0;
635 2 return;
636 2 }
637 1 }
638 /******************************************************************************/
639
640 /*********************发到接口的获取描述符**************************************/
641 void get_descriptor_interface(void)
642 {
643 1 Prints(" 获取描述符(从接口)..............................",1);
644 1 if(!usb_flags.flags.not_end)
645 1 {
646 2 switch(MSB(Control_Data.DeviceRequest.wValue))
647 2 {
648 3 case HID_DESCRIPTOR:
649 3 Prints(" 获取HID描述符................................",1);
650 3 Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
651 3 //Control_Data.pData=(uint8 *)(&hid_descriptor);
652 3 break;
653 3 case REPORT_DESCRIPTOR:
654 3 Prints(" 获取报告描述符................................",1);
655 3 Control_Data.wCount=SWAP16(sizeof(MouseReportDescriptor));
656 3 Control_Data.pData=(uint8 *)(MouseReportDescriptor);
657 3 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
658 3 break;
659 3 case PHYSICAL_DESCRIPTOR:
660 3 Prints(" 获取物理描述符................................",1);
661 3 break;
662 3 default:
663 3 Prints(" 获取其它描述符..................描述符索引为:",0);
664 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
665 3 Prints("",1);
666 3 break;
667 3 }
668 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
669 2 }
670 1 //写数据到D12输入端点
671 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
672 1 {
673 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
674 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
C51 COMPILER V6.12 USBMOUSE 09/21/2007 12:44:30 PAGE 12
675 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
676 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
677 2 else usb_flags.flags.usb_endp0_in=0;
678 2 return;
679 2 }
680 1 else
681 1 {
682 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
683 2 usb_flags.flags.setup_packet_in=0;
684 2 usb_flags.flags.usb_endp0_in=0;
685 2 return;
686 2 }
687 1 }
688 /******************************************************************************/
689
690 /************************终端点0输出中断处理************************************/
691 void endp0_out(void)
692 {
693 1 Last_Status.Register=read_last_status(0);
694 1 if(Last_Status.Status.setup_packet)
695 1 {
696 2 Control_Data.wLength=0;
697 2 Control_Data.wCount=0;
698 2 if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=s
-izeof(REQUESTCMD))
699 2 {
700 3 set_endpoint_status(0,0);
701 3 set_endpoint_status(1,0);
702 3 return;
703 3 }
704 2 Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
705 2 Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
706 2 Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
707 2
708 2 ack_setup(0);
709 2 ack_setup(1);
710 2 Control_Data.wLength=Control_Data.DeviceRequest.wLength;
711 2 usb_flags.flags.not_end=0;
712 2 usb_flags.flags.usb_endp0_in=1;
713 2 usb_flags.flags.setup_packet_in=0;
714 2 usb_flags.flags.setup_packet_out=0;
715 2 if(Control_Data.DeviceRequest.bmRequestType&0x80){usb_flags.flags.setup_packet_in=1;return;}
716 2 else {usb_flags.flags.setup_packet_out=1;return;}
717 2 }
718 1 else
719 1 {
720 2 select_endpoint(0);
721 2 clear_buffer();
722 2 }
723 1 }
724 /******************************************************************************/
725
726 /***********************获取报告*********************************************/
727 void get_report(void)
728 {
729 1 Prints(" 获取报告................................",1);
730 1 }
731 /******************************************************************************/
732
733 /**********************获取空闲状态*********************************************/
734 void get_idle(void)
735 {
C51 COMPILER V6.12 USBMOUSE 09/21/2007 12:44:30 PAGE 13
736 1 Prints(" 获取空闲................................",1);
737 1 write_endpoint_buff(1,1,&idle);
738 1 usb_flags.flags.usb_endp0_in=0;
739 1 }
740 /******************************************************************************/
741
742 /*************************获取协议**********************************************/
743 void get_protocol(void)
744 {
745 1 Prints(" 获取协议................................",1);
746 1 write_endpoint_buff(1,1,&protocol);
747 1 usb_flags.flags.usb_endp0_in=0;
748 1 }
749 /******************************************************************************/
750
751 /***********************设置报告***********************************************/
752 void set_report(void)
753 {
754 1 Prints(" 设置报告................................",1);
755 1 }
756 /******************************************************************************/
757
758 /***********************设置空闲***********************************************/
759 void set_idle(void)
760 {
761 1 Prints(" 设置空闲................................",1);
762 1 while(select_endpoint(1)&0x01);
763 1 write_endpoint_buff(1,0,0);
764 1 idle=Control_Data.DeviceRequest.wValue;
765 1 usb_flags.flags.usb_endp0_in=0;
766 1 usb_flags.flags.setup_packet_out=0;
767 1 }
768 /******************************************************************************/
769
770 /**********************设置协议**************************************************/
771 void set_protocol(void)
772 {
773 1 Prints(" 设置协议................................",1);
774 1 while(select_endpoint(1)&0x01);
775 1 write_endpoint_buff(1,0,0);
776 1 protocol=Control_Data.DeviceRequest.wValue;
777 1 usb_flags.flags.usb_endp0_in=0;
778 1 usb_flags.flags.setup_packet_out=0;
779 1 }
780 /******************************************************************************/
781
782 /****************************终端点0输入处理**************************************/
783 void endp0_in(void)
784 {
785 1 read_last_status(1);
786 1 //如果是输入请求包
787 1 if(usb_flags.flags.setup_packet_in||usb_flags.flags.not_end)
788 1 {
789 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
790 2 {
791 3 case 0x00: //标准请求
792 3 Prints("USB标准请求................................",1);
793 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
794 3 {
795 4 case 0: //到设备
796 4 switch (Control_Data.DeviceRequest.bRequest)
797 4 {
C51 COMPILER V6.12 USBMOUSE 09/21/2007 12:44:30 PAGE 14
798 5 case 0: get_status(0);break;
799 5 case 6: get_descriptor();break;
800 5 case 8: get_configuration();break;
801 5 default:break;
802 5 }
803 4 break;
804 4
805 4 case 1: //到接口
806 4 switch (Control_Data.DeviceRequest.bRequest)
807 4 {
808 5 case 0: get_status(1);break;
809 5 case 6: get_descriptor_interface();break;
810 5 case 10: get_interface();break;
811 5 default: break;
812 5 }
813 4 break;
814 4
815 4 case 2: //到端点
816 4 {
817 5 if(Control_Data.DeviceRequest.bRequest==0)get_status(2);
818 5 }
819 4 default: break;
820 4 }
821 3 break;
822 3
823 3 case 0x20: //类请求
824 3 Prints("USB类请求................................",1);
825 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
826 3 {
827 4 case 0: //到设备
828 4 switch (Control_Data.DeviceRequest.bRequest)
829 4 {
830 5 default:break;
831 5 }
832 4 break;
833 4
834 4 case 1: //到接口
835 4 switch (Control_Data.DeviceRequest.bRequest)
836 4 {
837 5
838 5 case GET_REPORT: get_report(); break; //获取报告
839 5 case GET_IDLE: get_idle(); break; //获取空闲状态
840 5 case GET_PROTOCOL: get_protocol(); break; //获取协议
841 5 default: break;
842 5 }
843 4 break;
844 4
845 4 case 2: //到端点
846 4 {
847 5 switch (Control_Data.DeviceRequest.bRequest)
848 5 {
849 6 default: break;
850 6 }
851 5 }
852 4 default: break;
853 4 }
854 3 break;
855 3
856 3 case 0x40: //用户请求
857 3 Prints("USB用户请求................................",1);
858 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
859 3 {
C51 COMPILER V6.12 USBMOUSE 09/21/2007 12:44:30 PAGE 15
860 4 case 0: //到设备
861 4 switch (Control_Data.DeviceRequest.bRequest)
862 4 {
863 5 default: break;
864 5 }
865 4 break;
866 4
867 4 case 1: //到接口
868 4 switch (Control_Data.DeviceRequest.bRequest)
869 4 {
870 5 default: break;
871 5 }
872 4 break;
873 4
874 4 case 2: //到端点
875 4 {
876 5 switch (Control_Data.DeviceRequest.bRequest)
877 5 {
878 6 default: break;
879 6 }
880 5 }
881 4 default: break;
882 4 }
883 3 }
884 2 return;
885 2 }
886 1
887 1 //如果是输出请求包
888 1 if(usb_flags.flags.setup_packet_out)
889 1 {
890 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
891 2 {
892 3 case 0x00: //标准请求
893 3 Prints("USB标准请求................................",1);
894 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
895 3 {
896 4 case 0: //到设备
897 4 switch (Control_Data.DeviceRequest.bRequest)
898 4 {
899 5 case CLEAR_FEATURE: clear_feature(0);break;
900 5 case SET_FEATURE: set_feature(0);break;
901 5 case SET_ADDRESS: set_usb_address();break; //set_address
902 5 case SET_DESCRIPTOR: set_descriptor();break; //set_descriptor
903 5 case SET_CONFIGURATION: set_configuration(); break; //set_configurat
904 5 default: break;
905 5 }
906 4 break;
907 4
908 4 case 1: //到接口
909 4 switch (Control_Data.DeviceRequest.bRequest)
910 4 {
911 5 case CLEAR_FEATURE: clear_feature(1);break;
912 5 case SET_FEATURE: set_feature(1); break;
913 5 case SET_INTERFACE: set_interface();break;
914 5 default: break;
915 5 }
916 4 break;
917 4
918 4 case 2: //到端点
919 4 switch (Control_Data.DeviceRequest.bRequest)
920 4 {
921 5 case CLEAR_FEATURE: clear_feature(2);break;
C51 COMPILER V6.12 USBMOUSE 09/21/2007 12:44:30 PAGE 16
922 5 case SET_FEATURE: set_feature(2);break;
923 5 default: break;
924 5 }
925 4 break;
926 4
927 4 default: break;
928 4 }
929 3 break;
930 3
931 3 case 0x20: //类请求
932 3 Prints("USB类请求................................",1);
933 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
934 3 {
935 4 case 0: //接收者为设备
936 4 switch (Control_Data.DeviceRequest.bRequest)
937 4 {
938 5 default: break;
939 5 }
940 4 break;
941 4
942 4 case 1: //接收者为接口
943 4 switch (Control_Data.DeviceRequest.bRequest)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -