📄 usbkeyboard.lst
字号:
483 1 write_endpoint_buff(1,2,status);
484 1 usb_flags.flags.usb_endp0_in=0;
485 1 }
486 /******************************************************************************/
487
488 /*********************清除特性*******************************************/
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 9
489 void clear_feature(uint8 receiver)
490 {
491 1 Prints(" 清除特性................................",1);
492 1 receiver=0;
493 1 write_endpoint_buff(1,0,0);
494 1 usb_flags.flags.usb_endp0_in=0;
495 1 usb_flags.flags.setup_packet_out=0;
496 1 }
497 /******************************************************************************/
498
499 /*******************设置特性**************************************************/
500 void set_feature(uint8 receiver)
501 {
502 1 Prints(" 设置特性................................",1);
503 1 receiver=0;
504 1 write_endpoint_buff(1,0,0);
505 1 usb_flags.flags.usb_endp0_in=0;
506 1 usb_flags.flags.setup_packet_out=0;
507 1 }
508 /******************************************************************************/
509
510 /*****************************设置描述*****************************************/
511 void set_descriptor(void)
512 {
513 1 Prints(" 设置描述符................................",1);
514 1 usb_flags.flags.usb_endp0_in=0;
515 1 usb_flags.flags.setup_packet_out=0;
516 1 }
517 /******************************************************************************/
518
519 /***************************设置配置*******************************************/
520 void set_configuration(void)
521 {
522 1 Prints(" 设置配置................................",1);
523 1 write_endpoint_buff(1,0,0);
524 1 usb_flags.flags.usb_endp0_in=0;
525 1 usb_flags.flags.setup_packet_out=0;
526 1 }
527 /******************************************************************************/
528
529 /************************获取配置状态******************************************/
530 void get_configuration(void)
531 {
532 1 uint8 value=0x01;
533 1 Prints(" 获取配置................................",1);
534 1 write_endpoint_buff(1,1,&value);
535 1 usb_flags.flags.usb_endp0_in=0;
536 1 }
537 /******************************************************************************/
538
539 /****************************设置接口************************************/
540 void set_interface(void)
541 {
542 1 Prints(" 设置接口................................",1);
543 1 write_endpoint_buff(1,0,0);
544 1 usb_flags.flags.usb_endp0_in=0;
545 1 usb_flags.flags.setup_packet_out=0;
546 1 }
547 /******************************************************************************/
548
549 /***************************获取接口状态***************************************/
550 void get_interface(void)
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 10
551 {
552 1 uint8 value=0x01;
553 1 Prints(" 获取接口................................",1);
554 1 write_endpoint_buff(1,1,&value);
555 1 usb_flags.flags.usb_endp0_in=0;
556 1 }
557 /******************************************************************************/
558
559 /***********************获取描述符*********************************************/
560 void get_descriptor(void)
561 {
562 1 Prints(" 获取描述符................................",1);
563 1 if(!usb_flags.flags.not_end)
564 1 {
565 2 switch(MSB(Control_Data.DeviceRequest.wValue))
566 2 {
567 3 case DEVICE_DESCRIPTOR:
568 3 Prints(" 获取设备描述符................................",1);
569 3 Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
570 3 Control_Data.pData=(uint8 *)(&device_descriptor);
571 3 break;
572 3 case CONFIGURATION_DESCRIPTOR:
573 3 Prints(" 获取配置描述符................................",1);
574 3 Control_Data.wCount=SWAP16(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
575 3 Control_Data.pData=(uint8 *)(&con_int_endp_descriptor);
576 3 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
577 3 break;
578 3 case STRING_DESCRIPTOR:
579 3 Prints(" 获取字符串描述符................................",1);
580 3 switch(LSB(Control_Data.DeviceRequest.wValue))
581 3 {
582 4 case 0:
583 4 Prints(" 获取语言ID................................",1);
584 4 Control_Data.wCount=LANGUAGE_ID[0];
585 4 Control_Data.pData=LANGUAGE_ID;
586 4 break;
587 4
588 4 case 1:
589 4 Prints(" 获取厂商字符串................................",1);
590 4 Control_Data.wCount=ManufacturerString[0];
591 4 Control_Data.pData=ManufacturerString;
592 4 break;
593 4
594 4 case 2:
595 4 Prints(" 获取产品字符串................................",1);
596 4 Control_Data.wCount=ProducterString[0];
597 4 Control_Data.pData=ProducterString;
598 4 break;
599 4
600 4 case 3:
601 4 Prints(" 获取设备序列号................................",1);
602 4 Control_Data.wCount=device_serial_number[0];
603 4 Control_Data.pData=device_serial_number;
604 4 break;
605 4
606 4 default: break;
607 4 }
608 3 break;
609 3 default:
610 3 Prints(" 获取其它描述符..................描述符索引为:",0);
611 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
612 3 Prints("",1);
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 11
613 3 break;
614 3 }
615 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
616 2 }
617 1 //写数据到D12输入端点
618 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
619 1 {
620 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
621 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
622 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
623 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
624 2 else usb_flags.flags.usb_endp0_in=0;
625 2 return;
626 2 }
627 1 else
628 1 {
629 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
630 2 usb_flags.flags.setup_packet_in=0;
631 2 usb_flags.flags.usb_endp0_in=0;
632 2 return;
633 2 }
634 1 }
635 /******************************************************************************/
636
637 /*********************发到接口的获取描述符**************************************/
638 void get_descriptor_interface(void)
639 {
640 1 Prints(" 获取描述符(从接口)..............................",1);
641 1 if(!usb_flags.flags.not_end)
642 1 {
643 2 switch(MSB(Control_Data.DeviceRequest.wValue))
644 2 {
645 3 case HID_DESCRIPTOR:
646 3 Prints(" 获取HID描述符................................",1);
647 3 Control_Data.wCount=sizeof(HID_DESCRIPTOR_STRUCT);
648 3 //Control_Data.pData=(uint8 *)(&hid_descriptor);
649 3 break;
650 3 case REPORT_DESCRIPTOR:
651 3 Prints(" 获取报告描述符................................",1);
652 3 Control_Data.wCount=SWAP16(sizeof(KeyBoardReportDescriptor));
653 3 Control_Data.pData=(uint8 *)(KeyBoardReportDescriptor);
654 3 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
655 3 break;
656 3 case PHYSICAL_DESCRIPTOR:
657 3 Prints(" 获取物理描述符................................",1);
658 3 break;
659 3 default:
660 3 Prints(" 获取其它描述符..................描述符索引为:",0);
661 3 PrintLongInt(MSB(Control_Data.DeviceRequest.wValue));
662 3 Prints("",1);
663 3 break;
664 3 }
665 2 if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
666 2 }
667 1 //写数据到D12输入端点
668 1 if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
669 1 {
670 2 write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
671 2 Control_Data.pData+=MAX_CONTROL_DATA_SIZE;
672 2 Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;
673 2 if(usb_flags.flags.set_addr)usb_flags.flags.not_end=1;
674 2 else usb_flags.flags.usb_endp0_in=0;
C51 COMPILER V7.06 USBKEYBOARD 03/23/2007 23:58:29 PAGE 12
675 2 return;
676 2 }
677 1 else
678 1 {
679 2 write_endpoint_buff(1,Control_Data.wCount,Control_Data.pData);
680 2 usb_flags.flags.setup_packet_in=0;
681 2 usb_flags.flags.usb_endp0_in=0;
682 2 return;
683 2 }
684 1 }
685 /******************************************************************************/
686
687 /************************终端点0输出中断处理************************************/
688 void endp0_out(void)
689 {
690 1 Last_Status.Register=read_last_status(0);
691 1 if(Last_Status.Status.setup_packet)
692 1 {
693 2 Control_Data.wLength=0;
694 2 Control_Data.wCount=0;
695 2 if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(uint8 *)(&(Control_Data.DeviceRequest)))!=s
-izeof(REQUESTCMD))
696 2 {
697 3 set_endpoint_status(0,0);
698 3 set_endpoint_status(1,0);
699 3 return;
700 3 }
701 2 Control_Data.DeviceRequest.wValue=SWAP16(Control_Data.DeviceRequest.wValue);
702 2 Control_Data.DeviceRequest.wIndex=SWAP16(Control_Data.DeviceRequest.wIndex);
703 2 Control_Data.DeviceRequest.wLength=SWAP16(Control_Data.DeviceRequest.wLength);
704 2
705 2 ack_setup(0);
706 2 ack_setup(1);
707 2 Control_Data.wLength=Control_Data.DeviceRequest.wLength;
708 2 usb_flags.flags.not_end=0;
709 2 usb_flags.flags.usb_endp0_in=1;
710 2 usb_flags.flags.setup_packet_in=0;
711 2 usb_flags.flags.setup_packet_out=0;
712 2 if(Control_Data.DeviceRequest.bmRequestType&0x80){usb_flags.flags.setup_packet_in=1;return;}
713 2 else {usb_flags.flags.setup_packet_out=1;return;}
714 2 }
715 1 else
716 1 {
717 2 select_endpoint(0);
718 2 clear_buffer();
719 2 }
720 1 }
721 /******************************************************************************/
722
723 /***********************获取报告*********************************************/
724 void get_report(void)
725 {
726 1 Prints(" 获取报告................................",1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -