📄 usb_kbd_enum.lst
字号:
585 1 Usb_set_DIR();
586 1 Usb_set_stall_request();
587 1 while (!Usb_stall_sent());
588 1 Usb_clear_stall_request();
589 1 Usb_clear_stalled();
590 1 Usb_clear_DIR();
591 1 }
592
593
594 /*F**************************************************************************
595 * NAME: usb_get_status
596 *----------------------------------------------------------------------------
597 * PARAMS:
598 *
599 * return:
600 *----------------------------------------------------------------------------
601 * PURPOSE:
602 * This function manages the GET_STATUS request.
603 *----------------------------------------------------------------------------
604 * EXAMPLE:
605 *----------------------------------------------------------------------------
606 * NOTE:
607 *----------------------------------------------------------------------------
608 * REQUIREMENTS:
609 *****************************************************************************/
610 void usb_get_status (void)
611 {
612 1 Uchar wIndex;
C51 COMPILER V7.06 USB_KBD_ENUM 01/29/2008 10:59:25 PAGE 11
613 1
614 1 ACC = Usb_read_byte(); /* dummy read */
615 1 ACC = Usb_read_byte(); /* dummy read */
616 1 wIndex = Usb_read_byte();
617 1 Usb_clear_rx_setup();
618 1 Usb_set_DIR();
619 1 switch(bmRequestType)
620 1 {
621 2 case REQUEST_DEVICE_STATUS: Usb_write_byte(SELF_POWERED); break;
622 2
623 2 case REQUEST_INTERFACE_STATUS: Usb_write_byte(0x00); break;
624 2
625 2 case REQUEST_ENDPOINT_STATUS: wIndex = wIndex & MSK_EP_DIR;
626 2 Usb_write_byte(endpoint_status[wIndex]);
627 2 break;
628 2 }
629 1 Usb_write_byte(0x00);
630 1
631 1 Usb_set_tx_ready();
632 1 while ((!(Usb_tx_complete())) || (Usb_setup_received()));
633 1 Usb_clear_tx_complete();
634 1 while ((!(Usb_rx_complete())) || (Usb_setup_received()));
635 1 Usb_clear_rx();
636 1 Usb_clear_DIR();
637 1 }
638
639
640 /*F**************************************************************************
641 * NAME: usb_set_feature
642 *----------------------------------------------------------------------------
643 * PARAMS:
644 *
645 * return:
646 *----------------------------------------------------------------------------
647 * PURPOSE:
648 * This function manages the SET_FEATURE request.
649 *----------------------------------------------------------------------------
650 * EXAMPLE:
651 *----------------------------------------------------------------------------
652 * NOTE:
653 *----------------------------------------------------------------------------
654 * REQUIREMENTS:
655 *****************************************************************************/
656 void usb_set_feature (void)
657 {
658 1 if (bmRequestType == ZERO_TYPE)
659 1 {
660 2 Usb_clear_rx_setup();
661 2 Usb_set_stall_request();
662 2 while (!(Usb_stall_sent()));
663 2 Usb_clear_stall_request();
664 2 }
665 1 if (bmRequestType == INTERFACE_TYPE)
666 1 {
667 2 Usb_clear_rx_setup();
668 2 Usb_set_stall_request();
669 2 while (!(Usb_stall_sent()));
670 2 Usb_clear_stall_request();
671 2 }
672 1 if (bmRequestType == ENDPOINT_TYPE)
673 1 {
674 2 if (Usb_read_byte() == 0x00)
C51 COMPILER V7.06 USB_KBD_ENUM 01/29/2008 10:59:25 PAGE 12
675 2 {
676 3 ACC = Usb_read_byte(); /* dummy read */
677 3 switch (Usb_read_byte()) /* check wIndex */
678 3 {
679 4 case ENDPOINT_1:
680 4 {
681 5 Usb_select_ep(EP_IN);
682 5 Usb_set_stall_request();
683 5 Usb_select_ep(EP_CONTROL);
684 5 endpoint_status[EP_IN] = 0x01;
685 5 Usb_clear_rx_setup();
686 5 Usb_set_tx_ready();
687 5 while (!(Usb_tx_complete()));
688 5 Usb_clear_tx_complete();
689 5 break;
690 5 }
691 4 default:
692 4 {
693 5 Usb_clear_rx_setup();
694 5 Usb_set_stall_request();
695 5 while (!(Usb_stall_sent()));
696 5 Usb_clear_stall_request();
697 5 Usb_clear_stalled();
698 5 break;
699 5 }
700 4 }
701 3 }
702 2 }
703 1 }
704
705
706 /*F**************************************************************************
707 * NAME: usb_clear_feature
708 *----------------------------------------------------------------------------
709 * PARAMS:
710 *
711 * return:
712 *----------------------------------------------------------------------------
713 * PURPOSE:
714 * This function manages the SET_FEATURE request.
715 *----------------------------------------------------------------------------
716 * EXAMPLE:
717 *----------------------------------------------------------------------------
718 * NOTE:
719 *----------------------------------------------------------------------------
720 * REQUIREMENTS:
721 *****************************************************************************/
722 void usb_clear_feature (void)
723 {
724 1 if (bmRequestType == ZERO_TYPE)
725 1 {
726 2 Usb_clear_rx_setup();
727 2 Usb_set_stall_request();
728 2 while (!(Usb_stall_sent()));
729 2 Usb_clear_stall_request();
730 2 }
731 1 if (bmRequestType == INTERFACE_TYPE)
732 1 {
733 2 Usb_clear_rx_setup();
734 2 Usb_set_stall_request();
735 2 while (!(Usb_stall_sent()));
736 2 Usb_clear_stall_request();
C51 COMPILER V7.06 USB_KBD_ENUM 01/29/2008 10:59:25 PAGE 13
737 2 }
738 1 if (bmRequestType == ENDPOINT_TYPE)
739 1 {
740 2 if (Usb_read_byte() == 0x00)
741 2 {
742 3 ACC = Usb_read_byte(); /* dummy read */
743 3 switch (Usb_read_byte()) /* check wIndex */
744 3 {
745 4 case ENDPOINT_1:
746 4 {
747 5 Usb_select_ep(EP_IN);
748 5 Usb_clear_stall_request();
749 5 usb_reset_endpoint(EP_IN);
750 5 Usb_select_ep(EP_CONTROL);
751 5 endpoint_status[EP_IN] = 0x00;
752 5 Usb_clear_rx_setup();
753 5 Usb_set_tx_ready();
754 5 while (!(Usb_tx_complete()));
755 5 Usb_clear_tx_complete();
756 5 break;
757 5 }
758 4 case ENDPOINT_0:
759 4 {
760 5 Usb_clear_rx_setup();
761 5 Usb_set_tx_ready();
762 5 while (!(Usb_tx_complete()));
763 5 Usb_clear_tx_complete();
764 5 break;
765 5 }
766 4 default:
767 4 {
768 5 Usb_clear_rx_setup();
769 5 Usb_set_stall_request();
770 5 while (!(Usb_stall_sent()));
771 5 Usb_clear_stall_request();
772 5 break;
773 5 }
774 4 }
775 3 }
776 2 }
777 1 }
778 /*F**************************************************************************
779 * NAME: usb_hid_set_report
780 *----------------------------------------------------------------------------
781 * PARAMS:
782 *
783 * return:
784 *----------------------------------------------------------------------------
785 * PURPOSE:
786 * This function manages the SET_REPORT request (HID Class)
787 *----------------------------------------------------------------------------
788 * EXAMPLE:
789 *----------------------------------------------------------------------------
790 * NOTE:
791 *----------------------------------------------------------------------------
792 * REQUIREMENTS:
793 *****************************************************************************/
794 void usb_hid_set_report (void)
795 {
796 1 Usb_clear_rx_setup();
797 1
798 1 while(!Usb_rx_complete() );
C51 COMPILER V7.06 USB_KBD_ENUM 01/29/2008 10:59:25 PAGE 14
799 1 Usb_clear_rx();
800 1 Usb_set_tx_ready(); /* send a ZLP for STATUS phase */
801 1 while(!(Usb_tx_complete()));
802 1 Usb_clear_tx_complete();
803 1 }
804
805
806
807 /*F**************************************************************************
808 * NAME: usb_hid_set_idle
809 *----------------------------------------------------------------------------
810 * PARAMS:
811 *
812 * return:
813 *----------------------------------------------------------------------------
814 * PURPOSE:
815 * This function manages the HID_SET_IDLE request.
816 *----------------------------------------------------------------------------
817 * EXAMPLE:
818 *----------------------------------------------------------------------------
819 * NOTE:
820 *----------------------------------------------------------------------------
821 * REQUIREMENTS:
822 *****************************************************************************/
823 void usb_hid_set_idle (void)
824 {
825 1 ACC = Usb_read_byte();
826 1 hid_idle_duration = Usb_read_byte(); /* wValue contains the duration */
827 1 Usb_clear_rx_setup();
828 1
829 1 Usb_set_tx_ready(); /* send a ZLP for STATUS phase */
830 1 while(!(Usb_tx_complete()));
831 1 Usb_clear_tx_complete();
832 1 }
833
834 /*F**************************************************************************
835 * NAME: usb_hid_get_idle
836 *----------------------------------------------------------------------------
837 * PARAMS:
838 *
839 * return:
840 *----------------------------------------------------------------------------
841 * PURPOSE:
842 * This function manages the GET_IDLE request.
843 *----------------------------------------------------------------------------
844 * EXAMPLE:
845 *----------------------------------------------------------------------------
846 * NOTE:
847 *----------------------------------------------------------------------------
848 * REQUIREMENTS:
849 *****************************************************************************/
850 void usb_hid_get_idle (void)
851 {
852 1 Usb_clear_rx_setup();
853 1 Usb_set_DIR();
854 1 Usb_write_byte(hid_idle_duration);
855 1 Usb_set_tx_ready(); /* send a ZLP for STATUS phase */
856 1 while(!(Usb_tx_complete()));
857 1 Usb_clear_tx_complete();
858 1
859 1 while (!(Usb_rx_complete()));
860 1 Usb_clear_rx();
C51 COMPILER V7.06 USB_KBD_ENUM 01/29/2008 10:59:25 PAGE 15
861 1 Usb_clear_DIR();
862 1 }
863
864 /*_____ E N D O F F I L E _________________________________________________*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1135 ----
CONSTANT SIZE = 195 ----
XDATA SIZE = 8 3
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -