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