chap_9.lst
来自「ED2开发板功能和结构简介,如何使用ED2开发板」· LST 代码 · 共 1,074 行 · 第 1/4 页
LST
1,074 行
253
254
255
256 USB_STRING_LANGUAGE_DESCRIPTOR strLanguage =
257 {
258 sizeof(USB_STRING_LANGUAGE_DESCRIPTOR),
259 USB_STRING_DESCRIPTOR_TYPE,
260 SWAP(0x0409)
261 };
262 */
263 USB_STRING_INTERFACE_DESCRIPTOR strInterface =
264 {
265 sizeof(USB_STRING_INTERFACE_DESCRIPTOR),
266 USB_STRING_DESCRIPTOR_TYPE,
267 {'I',0,'n',0,'t',0,'e',0,'r',0,'f',0,'a',0,'c',0,'e',0,'0',0,'0',0}
268 };
269
270 USB_STRING_CONFIGURATION_DESCRIPTOR strConfiguration =
271 {
272 sizeof(USB_STRING_CONFIGURATION_DESCRIPTOR),
273 USB_STRING_DESCRIPTOR_TYPE,
274 {
275 'C',0,
276 'o',0,
277 'n',0,
278 'f',0,
279 'i',0,
280 'g',0,
281 '0',0,
282 '0',0
283 }
284 };
285
286 USB_STRING_SERIALNUMBER_DESCRIPTOR strSerialNum =
287 {
288 sizeof(strSerialNum),
289 USB_STRING_DESCRIPTOR_TYPE,
290 {
291 '0',0,
292 '0',0,
293 '0',0,
294 '0',0,
295
296 '0',0,
297 '0',0,
298 '0',0,
299 '0',0,
300
301 '0',0,
302 '0',0,
303 '0',0,
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 6
304 '0',0
305 }
306 };
307 USB_STRING_PRODUCT_DESCRIPTOR strProduct =
308 {
309 sizeof(USB_STRING_PRODUCT_DESCRIPTOR),
310 USB_STRING_DESCRIPTOR_TYPE,
311 {
312 'P', 0,
313 'H', 0,
314 'I', 0,
315 'L', 0,
316 'I', 0,
317 'P', 0,
318 'S', 0,
319 ' ', 0,
320 'I', 0,
321 'S', 0,
322 'P', 0,
323 '1', 0,
324 '1', 0,
325 '8', 0,
326 '1', 0,
327 ' ', 0,
328 'T', 0,
329 'e', 0,
330 's', 0,
331 't', 0,
332 ' ', 0,
333 ' ', 0,
334 ' ', 0
335 }
336 };
337
338 USB_STRING_MANUFACTURER_DESCRIPTOR strManufacturer =
339 {
340 sizeof(USB_STRING_MANUFACTURER_DESCRIPTOR),
341 USB_STRING_DESCRIPTOR_TYPE,
342 {
343 'P', 0,
344 'H', 0,
345 'I', 0,
346 'L', 0,
347 'I', 0,
348 'P', 0,
349 'S', 0,
350 ' ', 0,
351 'S', 0,
352 'e', 0,
353 'm', 0,
354 'i', 0,
355 'c', 0,
356 'o', 0,
357 'n', 0,
358 'd', 0,
359 'u', 0,
360 'c', 0,
361 't', 0,
362 'o', 0,
363 'r', 0,
364 's', 0,
365 ' ', 0,
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 7
366 'A', 0,
367 'P', 0,
368 'I', 0,
369 'C', 0}
370 };
371
372 // *************************************************************************
373 // USB Protocol Layer
374 // ************************************************************************
375
376
377
378 // *************************************************************************
379 // USB standard device requests
380 // *************************************************************************
381
382 void Chap9_GetStatus(void)
383 {
384 1 UCHAR endp, txdat[2];
385 1 UCHAR c;
386 1 UCHAR bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
387 1
388 1
389 1 if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
390 1 {
391 2 switch(bRecipient)
392 2 {
393 3 case USB_RECIPIENT_DEVICE:
394 3 if(bD13flags.bits.remote_wakeup == 1)
395 3 txdat[0] = DEVSTS_SELFPOWERED|DEVSTS_REMOTEWAKEUP; /* remote wakeup and Self-powered */
396 3 else
397 3 txdat[0] = DEVSTS_SELFPOWERED; /* Self-powered*/
398 3 txdat[1]=0;
399 3
400 3 Chap9_SingleTransmitEP0(txdat, 2);
401 3 break;
402 3
403 3 case USB_RECIPIENT_INTERFACE:
404 3
405 3 Chap9_StallEP0InControlRead();
406 3 break;
407 3
408 3 case USB_RECIPIENT_ENDPOINT:
409 3
410 3 if( ControlData.DeviceRequest.wIndex == 0x00 )
411 3 {
412 4 endp = -1;
413 4 c = Hal4D13_GetEndpointStatusWOInteruptClear(endp + 1);
414 4 if(c & D13REG_EPSTS_STALL)
415 4 txdat[0] = ENDPSTS_HALT; /* Halt */
416 4 else
417 4 txdat[0] = 0;
418 4
419 4 txdat[1] = 0;
420 4
421 4 Chap9_SingleTransmitEP0(txdat, 2);
422 4 }
423 3 else
424 3 Chap9_StallEP0InControlRead();
425 3
426 3 break;
427 3
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 8
428 3 default:
429 3 Chap9_StallEP0InControlRead();
430 3 break;
431 3 }
432 2 }
433 1
434 1
435 1 else
436 1 {
437 2 if(ControlData.DeviceRequest.wValue == 0 && ControlData.DeviceRequest.wLength == 2 )
438 2 {
439 3 switch(bRecipient)
440 3 {
441 4 case USB_RECIPIENT_DEVICE:
442 4 if(bD13flags.bits.remote_wakeup == 1)
443 4 txdat[0] = DEVSTS_SELFPOWERED|DEVSTS_REMOTEWAKEUP; /* remote wakeup and Self-powered */
444 4 else
445 4 txdat[0] = DEVSTS_SELFPOWERED; /* Self-powered*/
446 4 txdat[1]=0;
447 4
448 4 Chap9_SingleTransmitEP0(txdat, 2);
449 4 break;
450 4
451 4 case USB_RECIPIENT_INTERFACE:
452 4 txdat[0]=0;
453 4 txdat[1]=0;
454 4
455 4 Chap9_SingleTransmitEP0(txdat, 2);
456 4 break;
457 4
458 4 case USB_RECIPIENT_ENDPOINT:
459 4
460 4 if( ControlData.DeviceRequest.wIndex == 0x00 )
461 4 endp = -1;
462 4 else
463 4 endp = (UCHAR)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
464 4
465 4 c = Hal4D13_GetEndpointStatusWOInteruptClear(endp + 1);
466 4 if(c & D13REG_EPSTS_STALL)
467 4 txdat[0] = ENDPSTS_HALT; /* Halt */
468 4 else
469 4 txdat[0] = 0;
470 4
471 4 txdat[1] = 0;
472 4
473 4 Chap9_SingleTransmitEP0(txdat, 2);
474 4 break;
475 4
476 4 default:
477 4 Chap9_StallEP0InControlRead();
478 4 break;
479 4 }
480 3 }
481 2 }
482 1
483 1 }
484
485 void Chap9_ClearFeature(void)
486 {
487 1 UCHAR endp;
488 1 UCHAR bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
489 1 USHORT wFeature = ControlData.DeviceRequest.wValue;
C51 COMPILER V7.06 CHAP_9 08/18/2005 15:30:26 PAGE 9
490 1
491 1 if(bUSBCheck_Device_State.State_bits.DEVICE_ADDRESS_STATE)
492 1 {
493 2 if( ControlData.DeviceRequest.wLength == 0 )
494 2 {
495 3 switch(bRecipient)
496 3 {
497 4 case USB_RECIPIENT_DEVICE:
498 4 if(wFeature == USB_FEATURE_REMOTE_WAKEUP)
499 4 {
500 5 bD13flags.bits.remote_wakeup = 0;
501 5 Chap9_SingleTransmitEP0(0, 0);
502 5 }
503 4 else
504 4 Chap9_StallEP0InControlWrite();
505 4
506 4 break;
507 4
508 4
509 4
510 4 case USB_RECIPIENT_ENDPOINT:
511 4
512 4 if(wFeature == USB_FEATURE_ENDPOINT_STALL)
513 4 {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?