📄 usb.lst
字号:
760 1 hid_protocol = Control_Data.DeviceRequest.wValue;
761 1 Control_Data.wLength = 0; //== 发送0字节长度数据到主机做回答
762 1 Control_Data.wCount = 0;
763 1 bEPPflags.bits.control_state = USB_TRANSMIT; //== 设置为发送状态,等待in端点中断
764 1 return 0;
765 1 }
766
767 //===============================================================================//
768 //== 函 数 名:clear_feature
769 //== 功 能:清除特性
770 //== 说 明:
771 //== 时 间:2008.8.20 创建函数
772 //== 入口参数:receiver: 被清除的对象
773 //== 返 回 值:0
774 //===============================================================================//
775 unsigned char clear_feature(unsigned char receiver)
776 {
777 1 unsigned char endp;
778 1 #ifdef __DEBUG__ //== 打印调试信息
779 1 Print_Msg("Runing clear_feature()!\r\n");
780 1 #endif
781 1 switch (receiver)
782 1 {
783 2 case USB_RECIPIENT_DEVICE:
784 2 {
785 3 if (Control_Data.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) //== 清除远程唤醒功能
786 3 {
787 4 bEPPflags.bits.remote_wakeup = 0;
788 4 Control_Data.wLength = 0; //== 发送0字节长度数据到主机做回答
789 4 Control_Data.wCount = 0;
790 4 bEPPflags.bits.control_state = USB_TRANSMIT; //== 设置为发送状态,等待in端点中断
791 4 }
792 3 } break;
793 2
794 2 case USB_RECIPIENT_INTERFACE:
795 2 {
796 3 if (Control_Data.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)//== 清除端点stall
797 3 {
798 4 endp = (unsigned char)(Control_Data.DeviceRequest.wIndex & MAX_ENDPOINTS);
799 4
C51 COMPILER V7.50 USB 11/24/2008 09:12:36 PAGE 14
800 4 if (Control_Data.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
801 4 {
802 5 set_endpoint_status(endp*2 + 1, 0); //== clear TX stall for IN on EPn.
803 5 }
804 4 else
805 4 {
806 5 set_endpoint_status(endp*2, 0); //== clear RX stall for OUT on EPn.
807 5 }
808 4
809 4 Control_Data.wLength = 0; //== 发送0字节长度数据到主机做回答
810 4 Control_Data.wCount = 0;
811 4 bEPPflags.bits.control_state = USB_TRANSMIT; //== 设置为发送状态,等待in端点中断
812 4 }
813 3 else
814 3 {
815 4 stall_ep0();
816 4 }
817 3 } break;
818 2
819 2 case USB_RECIPIENT_ENDPOINT:
820 2 {
821 3 stall_ep0();
822 3 } break;
823 2
824 2 default: stall_ep0();
825 2 }
826 1 return 0;
827 1 }
828
829 //===============================================================================//
830 //== 函 数 名:set_feature
831 //== 功 能:设置特性
832 //== 说 明:
833 //== 时 间:2008.8.20 创建函数
834 //== 入口参数:receiver: 被清除的对象
835 //== 返 回 值:0
836 //===============================================================================//
837 unsigned char set_feature(unsigned char receiver)
838 {
839 1 unsigned char endp;
840 1 #ifdef __DEBUG__ //== 打印调试信息
841 1 Print_Msg("Runing set_feature()!\r\n");
842 1 #endif
843 1 switch (receiver)
844 1 {
845 2 case USB_RECIPIENT_DEVICE:
846 2 {
847 3 if (Control_Data.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP) //== 清除远程唤醒功能
848 3 {
849 4 bEPPflags.bits.remote_wakeup = 1;
850 4 Control_Data.wLength = 0; //== 发送0字节长度数据到主机做回答
851 4 Control_Data.wCount = 0;
852 4 bEPPflags.bits.control_state = USB_TRANSMIT; //== 设置为发送状态,等待in端点中断
853 4 }
854 3 } break;
855 2
856 2 case USB_RECIPIENT_INTERFACE:
857 2 {
858 3 if (Control_Data.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)//== 清除端点stall
859 3 {
860 4 endp = (unsigned char)(Control_Data.DeviceRequest.wIndex & MAX_ENDPOINTS);
861 4
C51 COMPILER V7.50 USB 11/24/2008 09:12:36 PAGE 15
862 4 if (Control_Data.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
863 4 {
864 5 set_endpoint_status(endp*2 + 1, 1); //== clear TX stall for IN on EPn.
865 5 }
866 4 else
867 4 {
868 5 set_endpoint_status(endp*2, 1); //== clear RX stall for OUT on EPn.
869 5 }
870 4
871 4 Control_Data.wLength = 0; //== 发送0字节长度数据到主机做回答
872 4 Control_Data.wCount = 0;
873 4 bEPPflags.bits.control_state = USB_TRANSMIT; //== 设置为发送状态,等待in端点中断
874 4 }
875 3 else
876 3 {
877 4 stall_ep0();
878 4 }
879 3 } break;
880 2
881 2 case USB_RECIPIENT_ENDPOINT:
882 2 {
883 3 stall_ep0();
884 3 } break;
885 2
886 2 default: stall_ep0();
887 2 }
888 1 return 0;
889 1 }
890
891 //===============================================================================//
892 //== 函 数 名:control_handler
893 //== 功 能:处理主机请求的建立包
894 //== 说 明:
895 //== 时 间:2008.8.20 创建函数
896 //== 入口参数:无
897 //== 返 回 值:0
898 //===============================================================================//
899 unsigned char setup_handler(void)
900 {
901 1 #ifdef __DEBUG__ //== 打印调试信息
902 1 Print_Msg("Runing setup_handler()!\r\n");
903 1 #endif
904 1
905 1 if (bEPPflags.bits.setup_packet_in) //== 主机要求输入
906 1 {
907 2 bEPPflags.bits.setup_packet_in = 0;
908 2 switch (Control_Data.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK)
909 2 {
910 3 case USB_STANDARD_REQUEST: //== 标准请求
911 3 {
912 4 #ifdef __DEBUG__ //== 打印调试信息
913 4 Print_Msg("USB标准请求................................\r\n");
914 4 #endif
915 4 switch (Control_Data.DeviceRequest.bmRequestType & USB_RECIPIENT)
916 4 {
917 5 case USB_RECIPIENT_DEVICE: //== 询问设备
918 5 {
919 6 switch (Control_Data.DeviceRequest.bRequest & USB_REQUEST_MASK)
920 6 {
921 7 case GET_STATUS : get_status(USB_RECIPIENT_DEVICE); break;
922 7 case GET_DESCRIPTOR : get_descriptor(); break;
923 7 case GET_CONFIGURATION : get_configuration(); break;
C51 COMPILER V7.50 USB 11/24/2008 09:12:36 PAGE 16
924 7 // case GET_INTERFACE : reserved(); break;
925 7 // case SYNCH_FRAME : reserved(); break;
926 7 default : reserved(); break;
927 7 }
928 6 } break;
929 5
930 5 case USB_RECIPIENT_INTERFACE: //== 询问接口
931 5 {
932 6 switch (Control_Data.DeviceRequest.bRequest & USB_REQUEST_MASK)
933 6 {
934 7 case GET_STATUS : get_status(USB_RECIPIENT_INTERFACE); break;
935 7 case GET_DESCRIPTOR : get_descriptor_interface(); break;
936 7 // case GET_CONFIGURATION : reserved(); break;
937 7 case GET_INTERFACE : get_interface(); break;
938 7 // case SYNCH_FRAME : reserved(); break;
939 7 default : reserved(); break;
940 7 }
941 6 } break;
942 5
943 5 case USB_RECIPIENT_ENDPOINT: //== 询问端点
944 5 {
945 6 switch (Control_Data.DeviceRequest.bRequest & USB_REQUEST_MASK)
946 6 {
947 7 case GET_STATUS : get_status(USB_RECIPIENT_ENDPOINT); break;
948 7 // case GET_DESCRIPTOR : get_descriptor(); break;
949 7 // case GET_CONFIGURATION : reserved(); break;
950 7 // case GET_INTERFACE : get_interface();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -