📄 usbofcompuer00.lst
字号:
#endif
1019 1 }
1020 /******************************************************************************/
1021
1022 /**********************获取空闲状态*********************************************/
1023 void get_idle(void)
1024 {
1025 1 #ifdef debug
Prints(" 获取空闲.\r\n");
#endif
1028 1 write_endpoint_buff(1,1,&idle);
1029 1 usb_flags.flags.usb_endp0_in=0;
1030 1 }
1031 /******************************************************************************/
1032
1033 /*************************获取协议**********************************************/
1034 void get_protocol(void)
1035 {
1036 1 #ifdef debug
Prints(" 获取协议.\r\n");
#endif
1039 1 write_endpoint_buff(1,1,&protocol);
1040 1 usb_flags.flags.usb_endp0_in=0;
1041 1 }
1042 /******************************************************************************/
1043
1044 /***********************设置报告***********************************************/
1045 void set_report(void)
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 18
1046 {
1047 1 #ifdef debug
Prints(" 设置报告.\r\n");
#endif
1050 1 }
1051 /******************************************************************************/
1052
1053 /***********************设置空闲***********************************************/
1054 void set_idle(void)
1055 {
1056 1 #ifdef debug
Prints(" 设置空闲.\r\n");
#endif
1059 1 while(select_endpoint(1)&0x01);
1060 1 write_endpoint_buff(1,0,0);
1061 1 idle=Control_Data.DeviceRequest.wValue;
1062 1 usb_flags.flags.usb_endp0_in=0;
1063 1 usb_flags.flags.setup_packet_out=0;
1064 1 }
1065 /******************************************************************************/
1066
1067 /**********************设置协议**************************************************/
1068 void set_protocol(void)
1069 {
1070 1 #ifdef debug
Prints(" 设置协议.\r\n");
#endif
1073 1 while(select_endpoint(1)&0x01);
1074 1 write_endpoint_buff(1,0,0);
1075 1 protocol=Control_Data.DeviceRequest.wValue;
1076 1 usb_flags.flags.usb_endp0_in=0;
1077 1 usb_flags.flags.setup_packet_out=0;
1078 1 }
1079 /******************************************************************************/
1080
1081 /****************************终端点0输入处理**************************************/
1082 void endp0_in(void)
1083 {
1084 1 read_last_status(1);
1085 1 //如果是输入请求包
1086 1 if(usb_flags.flags.setup_packet_in||usb_flags.flags.not_end)
1087 1 {
1088 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
1089 2 {
1090 3 case 0x00: //标准请求
1091 3 #ifdef debug
Prints("USB标准输入请求.\r\n");
#endif
1094 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1095 3 {
1096 4 case 0: //到设备
1097 4 switch (Control_Data.DeviceRequest.bRequest)
1098 4 {
1099 5 case 0: get_status(0);break;
1100 5 case 6: get_descriptor();break;
1101 5 case 8: get_configuration();break;
1102 5 default:break;
1103 5 }
1104 4 break;
1105 4
1106 4 case 1: //到接口
1107 4 switch (Control_Data.DeviceRequest.bRequest)
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 19
1108 4 {
1109 5 case 0: get_status(1);break;
1110 5 case 6: get_descriptor_interface();break;
1111 5 case 10: get_interface();break;
1112 5 default: break;
1113 5 }
1114 4 break;
1115 4
1116 4 case 2: //到端点
1117 4 {
1118 5 if(Control_Data.DeviceRequest.bRequest==0)get_status(2);
1119 5 }
1120 4 default: break;
1121 4 }
1122 3 break;
1123 3
1124 3 case 0x20: //类请求
1125 3 #ifdef debug
Prints("USB类输入请求.\r\n");
#endif
1128 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1129 3 {
1130 4 case 0: //到设备
1131 4 switch (Control_Data.DeviceRequest.bRequest)
1132 4 {
1133 5 default:break;
1134 5 }
1135 4 break;
1136 4
1137 4 case 1: //到接口
1138 4 switch (Control_Data.DeviceRequest.bRequest)
1139 4 {
1140 5
1141 5 case GET_REPORT: get_report(); break; //获取报告
1142 5 case GET_IDLE: get_idle(); break; //获取空闲状态
1143 5 case GET_PROTOCOL: get_protocol(); break; //获取协议
1144 5 default: break;
1145 5 }
1146 4 break;
1147 4
1148 4 case 2: //到端点
1149 4 {
1150 5 switch (Control_Data.DeviceRequest.bRequest)
1151 5 {
1152 6 default: break;
1153 6 }
1154 5 }
1155 4 default: break;
1156 4 }
1157 3 break;
1158 3
1159 3 case 0x40: //用户请求
1160 3 #ifdef debug
Prints("USB用户输入请求.\r\n");
#endif
1163 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1164 3 {
1165 4 case 0: //到设备
1166 4 switch (Control_Data.DeviceRequest.bRequest)
1167 4 {
1168 5 default: break;
1169 5 }
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 20
1170 4 break;
1171 4
1172 4 case 1: //到接口
1173 4 switch (Control_Data.DeviceRequest.bRequest)
1174 4 {
1175 5 default: break;
1176 5 }
1177 4 break;
1178 4
1179 4 case 2: //到端点
1180 4 {
1181 5 switch (Control_Data.DeviceRequest.bRequest)
1182 5 {
1183 6 default: break;
1184 6 }
1185 5 }
1186 4 default: break;
1187 4 }
1188 3 }
1189 2 return;
1190 2 }
1191 1
1192 1 //如果是输出请求包
1193 1 if(usb_flags.flags.setup_packet_out)
1194 1 {
1195 2 switch(Control_Data.DeviceRequest.bmRequestType&0x60)
1196 2 {
1197 3 case 0x00: //标准请求
1198 3 #ifdef debug
Prints("USB标准输出请求.\r\n");
#endif
1201 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1202 3 {
1203 4 case 0: //到设备
1204 4 switch (Control_Data.DeviceRequest.bRequest)
1205 4 {
1206 5 case CLEAR_FEATURE: clear_feature(0);break;
1207 5 case SET_FEATURE: set_feature(0);break;
1208 5 case SET_ADDRESS: set_usb_address();break; //set_address
1209 5 case SET_DESCRIPTOR: set_descriptor();break; //set_descriptor
1210 5 case SET_CONFIGURATION: set_configuration(); break; //set_configurat
1211 5 default: break;
1212 5 }
1213 4 break;
1214 4
1215 4 case 1: //到接口
1216 4 switch (Control_Data.DeviceRequest.bRequest)
1217 4 {
1218 5 case CLEAR_FEATURE: clear_feature(1);break;
1219 5 case SET_FEATURE: set_feature(1); break;
1220 5 case SET_INTERFACE: set_interface();break;
1221 5 default: break;
1222 5 }
1223 4 break;
1224 4
1225 4 case 2: //到端点
1226 4 switch (Control_Data.DeviceRequest.bRequest)
1227 4 {
1228 5 case CLEAR_FEATURE: clear_feature(2);break;
1229 5 case SET_FEATURE: set_feature(2);break;
1230 5 default: break;
1231 5 }
C51 COMPILER V7.06 USBOFCOMPUER00 03/13/2008 12:38:31 PAGE 21
1232 4 break;
1233 4
1234 4 default: break;
1235 4 }
1236 3 break;
1237 3
1238 3 case 0x20: //类请求
1239 3 #ifdef debug
Prints("USB类输出请求.\r\n");
#endif
1242 3 switch(Control_Data.DeviceRequest.bmRequestType&0x1F)
1243 3 {
1244 4 case 0: //接收者为设备
1245 4 switch (Control_Data.DeviceRequest.bRequest)
1246 4 {
1247 5 default: break;
1248 5 }
1249 4 break;
1250 4
1251 4 case 1: //接收者为接口
1252 4 switch (Control_Data.DeviceRequest.bRequest)
1253 4 {
1254 5 case SET_REPORT: set_report(); break; //设置报告
1255 5 case SET_IDLE: set_idle(); break; //设置空闲
1256 5 case SET_PROTOCOL: set_protocol(); break; //设置协议
1257 5 default: break;
1258 5 }
1259 4
1260 4 break;
1261 4
1262 4 case 2: //接收者为端点
1263 4 switch (Control_Data.DeviceRequest.bRequest)
1264 4 {
1265 5 default: break;
1266 5 }
1267 4 break;
1268 4
1269 4 case 3: //其它接收者
1270 4 switch (Control_Data.DeviceRequest.bRequest)
1271 4 {
1272 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -