📄 chap_9.lst
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -