📄 usbmouse.lst
字号:
515 void set_usb_address(void)
516 {
517 1 usb_flags.flags.set_addr=1;
518 1 set_usb_addr(Control_Data.DeviceRequest.wValue);
519 1 while(select_endpoint(1)&0x01);
520 1 write_endpoint_buff(1,0,0);
521 1 while(select_endpoint(1)&0x01);
522 1 usb_flags.flags.usb_endp0_in=0;
523 1 usb_flags.flags.setup_packet_out=0;
524 1 }
525 /******************************************************************************/
526
527 /**************************获取状态响应*****************************************/
528 void get_status(uint8 receiver)
529 {
530 1 uint8 status[2];
531 1 switch (receiver)
532 1 {
533 2 case 0: //获取设备状态
534 2 status[0]=0x00;
535 2 status[1]=0x00;
536 2 break;
537 2 case 1: //获取接口状态
538 2 status[0]=0x00;
539 2 status[0]=0x00;
540 2 break;
541 2 case 2: //获取端点状态
542 2 status[0]=0x00;
543 2 status[1]=0x00;
544 2 break;
545 2 }
546 1 write_endpoint_buff(1,2,status);
547 1 usb_flags.flags.usb_endp0_in=0;
548 1 }
549 /******************************************************************************/
550
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 10
551 /*********************清除特性*******************************************/
552 void clear_feature(uint8 receiver)
553 {
554 1 Prints(" 清除特性.\r\n");
555 1 receiver=0;
556 1 write_endpoint_buff(1,0,0);
557 1 usb_flags.flags.usb_endp0_in=0;
558 1 usb_flags.flags.setup_packet_out=0;
559 1 }
560 /******************************************************************************/
561
562 /*******************设置特性**************************************************/
563 void set_feature(uint8 receiver)
564 {
565 1 Prints(" 设置特性.\r\n");
566 1 receiver=0;
567 1 write_endpoint_buff(1,0,0);
568 1 usb_flags.flags.usb_endp0_in=0;
569 1 usb_flags.flags.setup_packet_out=0;
570 1 }
571 /******************************************************************************/
572
573 /*****************************设置描述*****************************************/
574 void set_descriptor(void)
575 {
576 1 Prints(" 设置描述符.\r\n");
577 1 usb_flags.flags.usb_endp0_in=0;
578 1 usb_flags.flags.setup_packet_out=0;
579 1 }
580 /******************************************************************************/
581
582 /***************************设置配置*******************************************/
583 void set_configuration(void)
584 {
585 1 Prints(" 设置配置.\r\n");
586 1 write_endpoint_buff(1,0,0);
587 1 usb_flags.flags.usb_endp0_in=0;
588 1 usb_flags.flags.setup_packet_out=0;
589 1 }
590 /******************************************************************************/
591
592 /************************获取配置状态******************************************/
593 void get_configuration(void)
594 {
595 1 uint8 value=0x01;
596 1 Prints(" 获取配置.\r\n");
597 1 write_endpoint_buff(1,1,&value);
598 1 usb_flags.flags.usb_endp0_in=0;
599 1 }
600 /******************************************************************************/
601
602 /****************************设置接口************************************/
603 void set_interface(void)
604 {
605 1 Prints(" 设置接口.\r\n");
606 1 write_endpoint_buff(1,0,0);
607 1 usb_flags.flags.usb_endp0_in=0;
608 1 usb_flags.flags.setup_packet_out=0;
609 1 }
610 /******************************************************************************/
611
612 /***************************获取接口状态***************************************/
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 11
613 void get_interface(void)
614 {
615 1 uint8 value=0x01;
616 1 Prints(" 获取接口.\r\n");
617 1 write_endpoint_buff(1,1,&value);
618 1 usb_flags.flags.usb_endp0_in=0;
619 1 }
620 /******************************************************************************/
621
622 /***********************获取描述符*********************************************/
623 void get_descriptor(void)
624 {
625 1 Prints(" 获取描述符.\r\n");
626 1 if(!usb_flags.flags.not_end)
627 1 {
628 2 switch(MSB(Control_Data.DeviceRequest.wValue))
629 2 {
630 3 case DEVICE_DESCRIPTOR:
631 3 Prints(" 获取设备描述符.\r\n");
632 3 Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
633 3 Control_Data.pData=(uint8 *)(&device_descriptor);
634 3 break;
635 3 case CONFIGURATION_DESCRIPTOR:
636 3 Prints(" 获取配置描述符.\r\n");
637 3 Control_Data.wCount=SWAP16(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
638 3 Control_Data.pData=(uint8 *)(&con_int_endp_descriptor);
639 3 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
640 3 break;
641 3 case STRING_DESCRIPTOR:
642 3 Prints(" 获取字符串描述符.\r\n");
643 3 switch(LSB(Control_Data.DeviceRequest.wValue))
644 3 {
645 4 case 0:
646 4 Prints(" 获取语言ID.\r\n");
647 4 Control_Data.wCount=LANGUAGE_ID[0];
648 4 Control_Data.pData=LANGUAGE_ID;
649 4 break;
650 4
651 4 case 1:
652 4 Prints(" 获取厂商字符串.\r\n");
653 4 Control_Data.wCount=ManufacturerString[0];
654 4 Control_Data.pData=ManufacturerString;
655 4 break;
656 4
657 4 case 2:
658 4 Prints(" 获取产品字符串.\r\n");
659 4 Control_Data.wCount=ProducterString[0];
660 4 Control_Data.pData=ProducterString;
661 4 break;
662 4
663 4 case 3:
664 4 Prints(" 获取设备序列号.\r\n");
665 4 Control_Data.wCount=device_serial_number[0];
666 4 Control_Data.pData=device_serial_number;
667 4 break;
668 4
669 4 default: break;
670 4 }
671 3 break;
672 3 default:
673 3 Prints(" 获取其它描述符..................描述符索引为:");
674 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 12
675 3 Prints("\r\n");
676 3 break;
677 3 }
678 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
679 2 }
680 1 //写数据到D12输入端点
681 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
682 1 {
683 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
684 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
685 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
686 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
687 2 else usb_flags.flags.usb_endp0_in=0;
688 2 return;
689 2 }
690 1 else
691 1 {
692 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
693 2 usb_flags.flags.setup_packet_in=0;
694 2 usb_flags.flags.usb_endp0_in=0;
695 2 return;
696 2 }
697 1 }
698 /******************************************************************************/
699
700 /*********************发到接口的获取描述符**************************************/
701 void get_descriptor_interface(void)
702 {
703 1 Prints(" 获取描述符(从接口).\r\n");
704 1 if(!usb_flags.flags.not_end)
705 1 {
706 2 switch(MSB(Control_Data.DeviceRequest.wValue))
707 2 {
708 3 case HID_DESCRIPTOR:
709 3 Prints(" 获取HID描述符.\r\n");
710 3 Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
711 3 //Control_Data.pData=(uint8 *)(&hid_descriptor);
712 3 break;
713 3 case REPORT_DESCRIPTOR:
714 3 Prints(" 获取报告描述符.\r\n");
715 3 Control_Data.wCount=SWAP16(sizeof(MouseReportDescriptor));
716 3 Control_Data.pData=(uint8 *)(MouseReportDescriptor);
717 3 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
718 3 break;
719 3 case PHYSICAL_DESCRIPTOR:
720 3 Prints(" 获取物理描述符.\r\n");
721 3 break;
722 3 default:
723 3 Prints(" 获取其它描述符..................描述符索引为:");
724 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
725 3 Prints("\r\n");
726 3 break;
727 3 }
728 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
729 2 }
730 1 //写数据到D12输入端点
731 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
732 1 {
733 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
734 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
735 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
736 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
C51 COMPILER V7.06 USBMOUSE 12/10/2007 14:20:43 PAGE 13
737 2 else usb_flags.flags.usb_endp0_in=0;
738 2 return;
739 2 }
740 1 else
741 1 {
742 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
743 2 usb_flags.flags.setup_packet_in=0;
744 2 usb_flags.flags.usb_endp0_in=0;
745 2 return;
746 2 }
747 1 }
748 /******************************************************************************/
749
750 /************************终端点0输出中断处理************************************/
751 void endp0_out(void)
752 {
753 1 Last_Status.Register=read_last_status(0);
754 1 if(Last_Status.Status.setup_packet)
755 1 {
756 2 Control_Data.wLength=0;
757 2 Control_Data.wCount=0;
758 2 if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=s
-izeof(REQUESTCMD))
759 2 {
760 3 set_endpoint_status(0,0);
761 3 set_endpoint_status(1,0);
762 3 return;
763 3 }
764 2 Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
765 2 Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
766 2 Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
767 2
768 2 ack_setup(0);
769 2 ack_setup(1);
770 2 select_endpoint(0);
771 2 clear_buffer();
772 2
773 2 Control_Data.wLength=Control_Data.DeviceRequest.wLength;
774 2 usb_flags.flags.not_end=0;
775 2 usb_flags.flags.usb_endp0_in=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -