📄 usb2uart.lst
字号:
762 4 Control_Data.wCount=ManufacturerString[0];
763 4 Control_Data.pData=ManufacturerString;
764 4 break;
765 4
766 4 case 2:
767 4 #ifdef debug
Prints(" 获取产品字符串.\r\n");
#endif
770 4 Control_Data.wCount=ProducterString[0];
771 4 Control_Data.pData=ProducterString;
772 4 break;
773 4
774 4 case 3:
775 4 #ifdef debug
Prints(" 获取设备序列号.\r\n");
#endif
778 4 Control_Data.wCount=device_serial_number[0];
779 4 Control_Data.pData=device_serial_number;
780 4 break;
781 4
782 4 default:
783 4 Prints(" 其它描述符(未知),描述符编码:");
784 4 PrintHex(MSB(Control_Data.DeviceRequest.wValue));
785 4 Prints("\r\n");
786 4 DispLineInf();
787 4 break;
788 4 }
789 3 break;
790 3 default:
791 3 Prints(" 获取其它描述符..................描述符索引为:");
792 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
793 3 Prints("\r\n");
794 3 DispLineInf();
795 3 break;
796 3 }
797 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
798 2 }
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 14
799 1 //写数据到D12输入端点
800 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
801 1 {
802 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
803 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
804 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
805 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
806 2 else usb_flags.flags.usb_endp0_in=0;
807 2 return;
808 2 }
809 1 else
810 1 {
811 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
812 2 usb_flags.flags.setup_packet_in=0;
813 2 usb_flags.flags.usb_endp0_in=0;
814 2 return;
815 2 }
816 1 }
817 /******************************************************************************/
818
819 /*********************发到接口的获取描述符**************************************/
820 void get_descriptor_interface(void)
821 {
822 1 #ifdef debug
Prints(" 获取描述符(从接口).\r\n");
#endif
825 1 if(!usb_flags.flags.not_end)
826 1 {
827 2 switch(MSB(Control_Data.DeviceRequest.wValue))
828 2 {
829 3 case HID_DESCRIPTOR:
830 3 #ifdef debug
Prints(" 获取HID描述符.\r\n");
#endif
833 3 Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
834 3 //Control_Data.pData=(uint8 *)(&hid_descriptor);
835 3 break;
836 3 case REPORT_DESCRIPTOR:
837 3 #ifdef debug
Prints(" 获取报告描述符.\r\n");
#endif
840 3 break;
841 3 case PHYSICAL_DESCRIPTOR:
842 3 #ifdef debug
Prints(" 获取物理描述符.\r\n");
#endif
845 3 break;
846 3 default:
847 3 Prints(" 获取其它描述符..................描述符索引为:");
848 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
849 3 Prints("\r\n");
850 3 DispLineInf();
851 3 break;
852 3 }
853 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
854 2 }
855 1 //写数据到D12输入端点
856 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
857 1 {
858 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
859 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
860 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 15
861 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
862 2 else usb_flags.flags.usb_endp0_in=0;
863 2 return;
864 2 }
865 1 else
866 1 {
867 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
868 2 usb_flags.flags.setup_packet_in=0;
869 2 usb_flags.flags.usb_endp0_in=0;
870 2 return;
871 2 }
872 1 }
873 /******************************************************************************/
874
875 //#define debug3
876 /***************设置串口的数据阶段*********************************/
877 void SetLineCodingD(void)
878 {
879 1 #ifdef debug3
Prints("设置串口属性数据阶段");
#endif
882 1 read_endpoint_buff(0,7,(uint8*)&LineCoding); //读出7字节的控制值
883 1 LineCoding.dwDTERate=SWAP32(SetUartBitRate(SWAP32(LineCoding.dwDTERate))); //设置波特率
884 1 LineCoding.bCharFormat=0; //1位停止位
885 1 LineCoding.bParityType=0; //无校验位
886 1 LineCoding.bDataBits=8; //8位数据格式
887 1 }
888 /*******************************************************************/
889
890 //#define debug1
891 /************************终端点0输出中断处理************************************/
892 void endp0_out(void)
893 {
894 1 #ifdef debug1
Prints("ep0 out status,last-status,status: ");
PrintHex(read_endpoint_status(0));
#endif
898 1 Last_Status.Register=read_last_status(0);
899 1 #ifdef debug1
PrintHex(Last_Status.Register);
PrintHex(read_endpoint_status(0));
Prints("\r\n");
#endif
904 1
905 1 if(Last_Status.Status.setup_packet) //setup包
906 1 {
907 2 Control_Data.wLength=0;
908 2 Control_Data.wCount=0;
909 2 if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=si
-zeof(REQUESTCMD))
910 2 {
911 3 set_endpoint_status(0,0);
912 3 set_endpoint_status(1,0);
913 3 return;
914 3 }
915 2 Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
916 2 Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
917 2 Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
918 2
919 2 ack_setup(0);
920 2 ack_setup(1);
921 2 select_endpoint(0);
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 16
922 2 clear_buffer();
923 2
924 2 Control_Data.wLength=Control_Data.DeviceRequest.wLength;
925 2 usb_flags.flags.not_end=0;
926 2 usb_flags.flags.usb_endp0_in=1;
927 2 if(Control_Data.DeviceRequest.bmRequestType&0x80)
928 2 {
929 3 usb_flags.flags.setup_packet_in=1;
930 3 usb_flags.flags.setup_packet_out=0;
931 3 return;
932 3 }
933 2 else
934 2 {
935 3 usb_flags.flags.setup_packet_in=0;
936 3 usb_flags.flags.setup_packet_out=1;
937 3 if(Control_Data.wLength!=0)
938 3 {
939 4 usb_flags.flags.usb_endp0_in=0;
940 4 }
941 3 return;
942 3 }
943 2 }
944 1 else
945 1 {
946 2 if(usb_flags.flags.setup_packet_out)
947 2 {
948 3 usb_flags.flags.usb_endp0_in=1;
949 3 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
950 3 {
951 4 case 0x00: //标准请求
952 4 #ifdef debug
Prints("USB标准输出请求:数据阶段.\r\n");
#endif
955 4 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
956 4 {
957 5 case 0: //到设备
958 5 switch (Control_Data.DeviceRequest.bRequest)
959 5 {
960 6 case CLEAR_FEATURE: /*ClearFeatureD(0);*/break;
961 6 case SET_FEATURE: /*SetFeatureD(0);*/break;
962 6 case SET_ADDRESS: /*SetUsbAddressD();*/break; //set_address
963 6 case SET_DESCRIPTOR: /*SetDescriptorD();*/break; //set_descriptor
964 6 case SET_CONFIGURATION: /*SetConfigurationD();*/ break; //set_configurat
-
965 6 default: break;
966 6 }
967 5 break;
968 5
969 5 case 1: //到接口
970 5 switch (Control_Data.DeviceRequest.bRequest)
971 5 {
972 6 case CLEAR_FEATURE: /*ClearFeatureD(1);*/break;
973 6 case SET_FEATURE: /*SetFeatureD(1);*/break;
974 6 case SET_INTERFACE: /*SetInterfaceD();*/break;
975 6 default: break;
976 6 }
977 5 break;
978 5
979 5 case 2: //到端点
980 5 switch (Control_Data.DeviceRequest.bRequest)
981 5 {
982 6 case CLEAR_FEATURE: /*ClearFeature(2);*/break;
C51 COMPILER V7.06 USB2UART 12/11/2007 01:02:42 PAGE 17
983 6 case SET_FEATURE: /*SetFeature(2);*/break;
984 6 default: break;
985 6 }
986 5 break;
987 5
988 5 default: break;
989 5 }
990 4 break;
991 4
992 4 case 0x20: //类请求
993 4 #ifdef debug
Prints("USB类输出请求:数据阶段.\r\n");
#endif
996 4 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
997 4 {
998 5 case 0: //接收者为设备
999 5 switch (Control_Data.DeviceRequest.bRequest)
1000 5 {
1001 6 default: break;
1002 6 }
1003 5 break;
1004 5
1005 5 case 1: //接收者为接口
1006 5 switch (Control_Data.DeviceRequest.bRequest)
1007 5 {
1008 6 case SET_REPORT: /*SetReportD();*/ break; //设置报告
1009 6 case SET_IDLE: /*SetIdleD();*/ break; //设置空闲
1010 6 case SET_PROTOCOL: /*SetProtocol();*/ break; //设置协议
1011 6 case SET_CONTROL_LINE_STATE: /*SetControlLineStateD();*/ break; //设置控制线状态
1012 6 case SET_LINE_CODING: SetLineCodingD(); break; //设置串口
1013 6 default: break;
1014 6 }
1015 5
1016 5 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -