📄 usbcore.lst
字号:
276 2 switch (SetupPacket.wValue.WB.H) {
277 3 #if USB_HID
case HID_HID_DESCRIPTOR_TYPE:
if (SetupPacket.wIndex.WB.L != USB_HID_IF_NUM) {
return (FALSE); /* Only Single HID Interface is supported */
}
EP0Data.pData = (BYTE *)USB_ConfigDescriptor + HID_DESC_OFFSET;
len = HID_DESC_SIZE;
break;
case HID_REPORT_DESCRIPTOR_TYPE:
if (SetupPacket.wIndex.WB.L != USB_HID_IF_NUM) {
return (FALSE); /* Only Single HID Interface is supported */
}
EP0Data.pData = (BYTE *)HID_ReportDescriptor;
len = HID_ReportDescSize;
break;
case HID_PHYSICAL_DESCRIPTOR_TYPE:
return (FALSE); /* HID Physical Descriptor is not supported */
#endif
295 3 default:
296 3 return (FALSE);
297 3 }
298 2 break;
299 2 default:
300 2 return (FALSE);
301 2 }
302 1
303 1 if (EP0Data.Count > len) {
304 2 EP0Data.Count = len;
305 2 }
306 1 USB_DataInStage();
307 1
308 1 return (TRUE);
309 1 }
310
311
312 /*
313 * Set Configuration USB Request
314 * Parameters: None (global SetupPacket)
315 * Return Value: TRUE - Success, FALSE - Error
316 */
317
318 __inline BOOL USB_SetConfiguration (void) {
319 1 USB_COMMON_DESCRIPTOR *pD;
320 1 DWORD alt, n, m;
321 1
322 1 if (SetupPacket.wValue.WB.L) {
ARM COMPILER V2.50a, usbcore 27/03/06 17:22:53 PAGE 6
323 2 pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
324 2 while (pD->bLength) {
325 3 switch (pD->bDescriptorType) {
326 4 case USB_CONFIGURATION_DESCRIPTOR_TYPE:
327 4 if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue == SetupPacket.wValue.WB.L) {
328 5 USB_Configuration = SetupPacket.wValue.WB.L;
329 5 USB_NumInterfaces = ((USB_CONFIGURATION_DESCRIPTOR *)pD)->bNumInterfaces;
330 5 for (n = 0; n < USB_IF_NUM; n++) {
331 6 USB_AltSetting[n] = 0;
332 6 }
333 5 for (n = 1; n < 16; n++) {
334 6 if (USB_EndPointMask & (1 << n)) {
335 7 USB_DisableEP(n);
336 7 }
337 6 if (USB_EndPointMask & ((1 << 16) << n)) {
338 7 USB_DisableEP(n | 0x80);
339 7 }
340 6 }
341 5 USB_EndPointMask = 0x00010001;
342 5 USB_EndPointHalt = 0x00000000;
343 5 USB_Configure(TRUE);
344 5 if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bmAttributes & USB_CONFIG_SELF_POWERED) {
345 6 USB_DeviceStatus |= USB_GETSTATUS_SELF_POWERED;
346 6 } else {
347 6 USB_DeviceStatus &= ~USB_GETSTATUS_SELF_POWERED;
348 6 }
349 5 } else {
350 5 (BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
351 5 continue;
352 5 }
353 4 break;
354 4 case USB_INTERFACE_DESCRIPTOR_TYPE:
355 4 alt = ((USB_INTERFACE_DESCRIPTOR *)pD)->bAlternateSetting;
356 4 break;
357 4 case USB_ENDPOINT_DESCRIPTOR_TYPE:
358 4 if (alt == 0) {
359 5 n = ((USB_ENDPOINT_DESCRIPTOR *)pD)->bEndpointAddress & 0x8F;
360 5 m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
361 5 USB_EndPointMask |= m;
362 5 USB_ConfigEP((USB_ENDPOINT_DESCRIPTOR *)pD);
363 5 USB_EnableEP(n);
364 5 USB_ResetEP(n);
365 5 }
366 4 break;
367 4 }
368 3 (BYTE *)pD += pD->bLength;
369 3 }
370 2 }
371 1 else {
372 2 USB_Configuration = 0;
373 2 for (n = 1; n < 16; n++) {
374 3 if (USB_EndPointMask & (1 << n)) {
375 4 USB_DisableEP(n);
376 4 }
377 3 if (USB_EndPointMask & ((1 << 16) << n)) {
378 4 USB_DisableEP(n | 0x80);
379 4 }
380 3 }
381 2 USB_EndPointMask = 0x00010001;
382 2 USB_EndPointHalt = 0x00000000;
383 2 USB_Configure(FALSE);
384 2 }
385 1
386 1 if (USB_Configuration == SetupPacket.wValue.WB.L) {
387 2 return (TRUE);
388 2 } else {
ARM COMPILER V2.50a, usbcore 27/03/06 17:22:53 PAGE 7
389 2 return (FALSE);
390 2 }
391 1 }
392
393
394 /*
395 * Set Interface USB Request
396 * Parameters: None (global SetupPacket)
397 * Return Value: TRUE - Success, FALSE - Error
398 */
399
400 __inline BOOL USB_SetInterface (void) {
401 1 USB_COMMON_DESCRIPTOR *pD;
402 1 DWORD ifn, alt, old, msk, n, m;
403 1 BOOL set;
404 1
405 1 if (USB_Configuration == 0) return (FALSE);
406 1
407 1 set = FALSE;
408 1 pD = (USB_COMMON_DESCRIPTOR *)USB_ConfigDescriptor;
409 1 while (pD->bLength) {
410 2 switch (pD->bDescriptorType) {
411 3 case USB_CONFIGURATION_DESCRIPTOR_TYPE:
412 3 if (((USB_CONFIGURATION_DESCRIPTOR *)pD)->bConfigurationValue != USB_Configuration) {
413 4 (BYTE *)pD += ((USB_CONFIGURATION_DESCRIPTOR *)pD)->wTotalLength;
414 4 continue;
415 4 }
416 3 break;
417 3 case USB_INTERFACE_DESCRIPTOR_TYPE:
418 3 ifn = ((USB_INTERFACE_DESCRIPTOR *)pD)->bInterfaceNumber;
419 3 alt = ((USB_INTERFACE_DESCRIPTOR *)pD)->bAlternateSetting;
420 3 msk = 0;
421 3 if ((ifn == SetupPacket.wIndex.WB.L) && (alt == SetupPacket.wValue.WB.L)) {
422 4 set = TRUE;
423 4 old = USB_AltSetting[ifn];
424 4 USB_AltSetting[ifn] = (BYTE)alt;
425 4 }
426 3 break;
427 3 case USB_ENDPOINT_DESCRIPTOR_TYPE:
428 3 if (ifn == SetupPacket.wIndex.WB.L) {
429 4 n = ((USB_ENDPOINT_DESCRIPTOR *)pD)->bEndpointAddress & 0x8F;
430 4 m = (n & 0x80) ? ((1 << 16) << n) : (1 << n);
431 4 if (alt == SetupPacket.wValue.WB.L) {
432 5 USB_EndPointMask |= m;
433 5 USB_EndPointHalt &= ~m;
434 5 USB_ConfigEP((USB_ENDPOINT_DESCRIPTOR *)pD);
435 5 USB_EnableEP(n);
436 5 USB_ResetEP(n);
437 5 msk |= m;
438 5 }
439 4 else if ((alt == old) && ((msk & m) == 0)) {
440 5 USB_EndPointMask &= ~m;
441 5 USB_EndPointHalt &= ~m;
442 5 USB_DisableEP(n);
443 5 }
444 4 }
445 3 break;
446 3 }
447 2 (BYTE *)pD += pD->bLength;
448 2 }
449 1 return (set);
450 1 }
451
452
453 /*
454 * USB Endpoint 0 Event Callback
ARM COMPILER V2.50a, usbcore 27/03/06 17:22:53 PAGE 8
455 * Parameter: event
456 */
457
458 void USB_EndPoint0 (DWORD event) {
459 1
460 1 switch (event) {
461 2
462 2 case USB_EVT_SETUP:
463 2 USB_SetupStage();
464 2 USB_DirCtrlEP(SetupPacket.bmRequestType.BM.Dir);
465 2 EP0Data.Count = SetupPacket.wLength;
466 2 switch (SetupPacket.bmRequestType.BM.Type) {
467 3
468 3 case REQUEST_STANDARD:
469 3 switch (SetupPacket.bRequest) {
470 4
471 4 case USB_REQUEST_GET_STATUS:
472 4 if (!USB_GetStatus()) {
473 5 goto stall_i;
474 5 }
475 4 break;
476 4
477 4 case USB_REQUEST_CLEAR_FEATURE:
478 4 if (!USB_SetClrFeature(0)) {
479 5 goto stall_i;
480 5 }
481 4 USB_StatusInStage();
482 4 #if USB_FEATURE_EVENT
USB_Feature_Event();
#endif
485 4 break;
486 4
487 4 case USB_REQUEST_SET_FEATURE:
488 4 if (!USB_SetClrFeature(1)) {
489 5 goto stall_i;
490 5 }
491 4 USB_StatusInStage();
492 4 #if USB_FEATURE_EVENT
USB_Feature_Event();
#endif
495 4 break;
496 4
497 4 case USB_REQUEST_SET_ADDRESS:
498 4 switch (SetupPacket.bmRequestType.BM.Recipient) {
499 5 case REQUEST_TO_DEVICE:
500 5 USB_DeviceAddress = 0x80 | SetupPacket.wValue.WB.L;
501 5 USB_StatusInStage();
502 5 break;
503 5 default:
504 5 goto stall_i;
505 5 }
506 4 break;
507 4
508 4 case USB_REQUEST_GET_DESCRIPTOR:
509 4 if (!USB_GetDescriptor()) {
510 5 goto stall_i;
511 5 }
512 4 break;
513 4
514 4 case USB_REQUEST_SET_DESCRIPTOR:
515 4 /*stall_o:*/ USB_SetStallEP(0x00);
516 4 EP0Data.Count = 0;
517 4 break;
518 4
519 4 case USB_REQUEST_GET_CONFIGURATION:
520 4 switch (SetupPacket.bmRequestType.BM.Recipient) {
ARM COMPILER V2.50a, usbcore 27/03/06 17:22:53 PAGE 9
521 5 case REQUEST_TO_DEVICE:
522 5 EP0Data.pData = &USB_Configuration;
523 5 USB_DataInStage();
524 5 break;
525 5 default:
526 5 goto stall_i;
527 5 }
528 4 break;
529 4
530 4 case USB_REQUEST_SET_CONFIGURATION:
531 4 switch (SetupPacket.bmRequestType.BM.Recipient) {
532 5 case REQUEST_TO_DEVICE:
533 5 if (!USB_SetConfiguration()) {
534 6 goto stall_i;
535 6 }
536 5 USB_StatusInStage();
537 5 #if USB_CONFIGURE_EVENT
USB_Configure_Event();
#endif
540 5 break;
541 5 default:
542 5 goto stall_i;
543 5 }
544 4 break;
545 4
546 4 case USB_REQUEST_GET_INTERFACE:
547 4 switch (SetupPacket.bmRequestType.BM.Recipient) {
548 5 case REQUEST_TO_INTERFACE:
549 5 if ((USB_Configuration != 0) &&
550 5 (SetupPacket.wIndex.WB.L < USB_NumInterfaces)) {
551 6 EP0Data.pData = USB_AltSetting + SetupPacket.wIndex.WB.L;
552 6 USB_DataInStage();
553 6 } else {
554 6 goto stall_i;
555 6 }
556 5 break;
557 5 default:
558 5 goto stall_i;
559 5 }
560 4 break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -