📄 usbimpl.lst
字号:
506 1 PRINT("set_address ");
507 1
508 1 D12_SetAddressEnable((u8)(ControlData.DevRequest.wValue &
509 1 DEVICE_ADDRESS_MASK), 1);
510 1 single_transmit(0, 0);
511 1 }
512 void get_descriptor(void)
513 {
514 1 u8 bDescriptor = ControlData.DevRequest.wValue>>8;
515 1
516 1 // PRINT("get_descriptor:");
517 1 if (bDescriptor == USB_DEVICE_DESCRIPTOR_TYPE)
518 1 {
519 2 PRINT("device ");
520 2 code_transmit((u8 code *)&DeviceDescr, sizeof(DEVICE_DESCRIPTOR));
521 2 }
522 1 else if (bDescriptor == USB_CONFIGURATION_DESCRIPTOR_TYPE)
523 1 {
524 2 PRINT("Config ");
525 2 code_transmit((u8 code *)&ConfigDescr, CONFIG_DESCRIPTOR_LENGTH);
526 2 }
527 1 else if (bDescriptor == USB_INTERFACE_DESCRIPTOR_TYPE)
528 1 {
529 2 PRINT("interface ");
530 2 code_transmit((u8 code *)&InterfaceDescr, sizeof(INTERFACE_DESCRIPTOR));
531 2 }
532 1 #ifdef _HID_DEVICE
533 1 else if (bDescriptor == USB_HID_DESCRIPTOR_TYPE)
534 1 {
535 2 PRINT("hid ");
536 2 code_transmit((u8 code *)&HidDescr, sizeof(HID_DESCRIPTOR));
537 2 }
538 1 else if (bDescriptor == USB_REPORT_DESCRIPTOR_TYPE)
539 1 {
540 2 PRINT("report ");
541 2 code_transmit((u8 code *)szHidReport, 0x34);
542 2 }
543 1 #endif //_HID_DEVICE
544 1 else if(bDescriptor == USB_STRING_DESCRIPTOR_TYPE) //获取字符描述符
545 1 {
546 2 PRINT("string");
547 2 switch(LSB(ControlData.DevRequest.wValue)) //获取描述符索引
548 2 {
549 3 case 0:
550 3 PRINT("0 ");
551 3 code_transmit((u8 code *)&StringLANGID, StringLANGID[0]);
C51 COMPILER V7.01 USBIMPL 06/30/2007 11:42:51 PAGE 10
552 3 break;
553 3 case 1:
554 3 PRINT("1 ");
555 3 code_transmit((u8 code *)&szManufacturer, szManufacturer[0]);
556 3 break;
557 3 case 2:
558 3 PRINT("2 ");
559 3 code_transmit((u8 code *)&szProduct, szProduct[0]);
560 3 break;
561 3 case 3:
562 3 PRINT("3 ");
563 3 code_transmit((u8 code *)&szSerialNumber, szSerialNumber[0]);
564 3 break;
565 3 case 4:
566 3 PRINT("4 ");
567 3 code_transmit((u8 code *)&szConfiguration, szConfiguration[0]);
568 3 break;
569 3 case 5:
570 3 PRINT("5 ");
571 3 code_transmit((u8 code *)&szInterface, szInterface[0]);
572 3 break;
573 3 case 6:
574 3 PRINT("6 ");
575 3 code_transmit((u8 code *)&szUserInfo, szUserInfo[0]);
576 3 break;
577 3 default:
578 3 PRINT("default ");
579 3 code_transmit((u8 code *)&StringLANGID, 4);
580 3 break;
581 3 }
582 2 }
583 1 else
584 1 {
585 2 stall_ep0();
586 2 }
587 1 }
588 void get_configuration(void)
589 {
590 1 u8 c = bEppflags.flags.config;
591 1 // PRINT("get_config ");
592 1 single_transmit(&c, 1);
593 1 }
594
595 void set_configuration(void)
596 {
597 1 PRINT("set_config ");
598 1 if (ControlData.DevRequest.wValue == 0)
599 1 {
600 2 /* put device in unconfigured state */
601 2 single_transmit(0, 0);
602 2 DISABLE_INTERRUPT;
603 2 bEppflags.flags.config = 0;
604 2 ENABLE_INTERRUPT;
605 2 init_unconfig();
606 2 }
607 1 else if (ControlData.DevRequest.wValue == 1)
608 1 {
609 2 /* Configure device */
610 2 single_transmit(0, 0);
611 2 init_unconfig();
612 2 init_config();
613 2 DISABLE_INTERRUPT;
C51 COMPILER V7.01 USBIMPL 06/30/2007 11:42:51 PAGE 11
614 2 bEppflags.flags.config = 1;
615 2 ENABLE_INTERRUPT;
616 2 } else
617 1 stall_ep0();
618 1 }
619 void get_interface(void)
620 {
621 1 u8 txdat = 0; /* Only/Current interface = 0 */
622 1 // PRINT("get_interface ");
623 1
624 1 single_transmit(&txdat, 1);
625 1 }
626
627 void set_interface(void)
628 {
629 1 PRINT("set_interface ");
630 1 if (ControlData.DevRequest.wValue == 0
631 1 && ControlData.DevRequest.wIndex == 0)
632 1 single_transmit(0, 0);
633 1 else
634 1 stall_ep0();
635 1 }
636
637 ///////////////////////////////////////////////////////////////
638 // follow is custom request, read_write_register commmand code is 0xC
639 /*
640 void get_firmware_version()
641 {
642 u8 i = 0x1;
643 PRINT("get_firmware_version");
644
645 D12_WriteEndpointBuffer(1, &i, 1);
646 }
647
648 void get_buffer_size()
649 {
650 u8 i[4] = {0, 0, 0, 0};
651
652 PRINT("get_buffer_size");
653
654 i[0] = EP1_PACKET_SIZE;
655 D12_WriteEndpointBuffer(1, i, 4);
656 }
657
658 void trans_data()
659 {
660 u8 len, epstatus;
661 PRINT("trans_data");
662
663 if (ControlData.buffer[5] == 0x81)
664 {
665 //device to pc
666 D12_WriteEndpointBuffer(3, Ep1Buf, ControlData.buffer[3]);
667 }
668 if (ControlData.buffer[5] == 0x80)
669 {
670 epstatus = D12_ReadEndpointStatus(2);
671 epstatus &= 0x60;
672 if (epstatus == 0x60)
673 len = D12_ReadEndpointBuffer(4, Ep1Buf, EP1_PACKET_SIZE);
674 }
675 single_transmit(0, 0);
C51 COMPILER V7.01 USBIMPL 06/30/2007 11:42:51 PAGE 12
676 }
677 */
678 //custom request
679 void read_write_register()
680 {
681 1 // u8 i, len, epstatus;
682 1 /*
683 1 PRINT("read_write_register");
684 1
685 1 if (ControlData.DevRequest.bmRequestType & (u8)USB_ENDPOINT_DIRECTION_MASK)
686 1 {
687 1 if (ControlData.DevRequest.wIndex == GET_FIRMWARE_VERSION
688 1 && ControlData.DevRequest.wValue == 0
689 1 && ControlData.DevRequest.wLength == 1)
690 1 get_firmware_version(); //get firmware version, transform 1byte
691 1 else if (ControlData.DevRequest.wIndex == GET_BUFFER_SIZE
692 1 && ControlData.DevRequest.wValue == 0
693 1 && ControlData.DevRequest.wLength == 4)
694 1 get_buffer_size(); //get buffer size, transform 4 bytes
695 1 else
696 1 stall_ep0();
697 1 }
698 1 else
699 1 {
700 1 if (ControlData.DevRequest.wIndex == TRANS_REQUEST
701 1 && ControlData.DevRequest.wValue == 0
702 1 && ControlData.DevRequest.wLength == 6)
703 1 trans_data(); //transform data, 6 bytes
704 1 else
705 1 stall_ep0();
706 1 }
707 1 */
708 1 }
709
710 //////////////////////////////////////////////////////////
711 //follow code is used for hid device
712 #ifdef _HID_DEVICE
713 void get_report()
714 {
715 1 PRINT("get_report ");
716 1
717 1 code_transmit(szHidReport, 52);
718 1 }
719
720 void get_idle()
721 {
722 1 PRINT("get_idle ");
723 1 }
724
725 void get_protocol()
726 {
727 1 PRINT("get_idle ");
728 1 }
729
730 void set_report()
731 {
732 1 PRINT("set_report ");
733 1 }
734
735 void set_idle()
736 {
737 1 PRINT("set_idle ");
C51 COMPILER V7.01 USBIMPL 06/30/2007 11:42:51 PAGE 13
738 1 stall_ep0();
739 1 }
740
741 void set_protocol()
742 {
743 1 PRINT("set_protocol ");
744 1 }
745 #endif //_HID_DEVICE
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1068 ----
CONSTANT SIZE = 535 ----
XDATA SIZE = 2 16
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -