⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usb.lst

📁 HID 设备测试程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 760   1              hid_protocol = Control_Data.DeviceRequest.wValue;
 761   1              Control_Data.wLength = 0;                                                               //== 发送0字节长度数据到主机做回答
 762   1              Control_Data.wCount = 0;
 763   1              bEPPflags.bits.control_state = USB_TRANSMIT;                    //== 设置为发送状态,等待in端点中断
 764   1              return 0;
 765   1      }
 766          
 767          //===============================================================================//
 768          //== 函 数 名:clear_feature
 769          //== 功    能:清除特性
 770          //== 说    明:
 771          //== 时    间:2008.8.20 创建函数
 772          //== 入口参数:receiver: 被清除的对象
 773          //== 返 回 值:0
 774          //===============================================================================//
 775          unsigned char clear_feature(unsigned char receiver)
 776          {
 777   1              unsigned char endp;
 778   1              #ifdef __DEBUG__        //== 打印调试信息
 779   1                      Print_Msg("Runing clear_feature()!\r\n");
 780   1              #endif
 781   1              switch (receiver)
 782   1              {
 783   2                      case USB_RECIPIENT_DEVICE:
 784   2                      {
 785   3                              if (Control_Data.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP)     //== 清除远程唤醒功能
 786   3                              {
 787   4                                      bEPPflags.bits.remote_wakeup = 0;
 788   4                                      Control_Data.wLength = 0;                                                                               //== 发送0字节长度数据到主机做回答
 789   4                                      Control_Data.wCount = 0;
 790   4                                      bEPPflags.bits.control_state = USB_TRANSMIT;                                    //== 设置为发送状态,等待in端点中断
 791   4                              }
 792   3                      } break;
 793   2      
 794   2                      case USB_RECIPIENT_INTERFACE:
 795   2                      {
 796   3                              if (Control_Data.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)//== 清除端点stall
 797   3                              {
 798   4                                      endp = (unsigned char)(Control_Data.DeviceRequest.wIndex & MAX_ENDPOINTS);
 799   4      
C51 COMPILER V7.50   USB                                                                   11/24/2008 09:12:36 PAGE 14  

 800   4                                      if (Control_Data.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 801   4                                      {
 802   5                                              set_endpoint_status(endp*2 + 1, 0);                                                     //== clear TX stall for IN on EPn.
 803   5                                      }
 804   4                                      else
 805   4                                      {
 806   5                                              set_endpoint_status(endp*2, 0);                                                         //== clear RX stall for OUT on EPn.
 807   5                                      }
 808   4      
 809   4                                      Control_Data.wLength = 0;                                                                               //== 发送0字节长度数据到主机做回答
 810   4                                      Control_Data.wCount = 0;
 811   4                                      bEPPflags.bits.control_state = USB_TRANSMIT;                                    //== 设置为发送状态,等待in端点中断
 812   4                              }
 813   3                              else
 814   3                              {
 815   4                                      stall_ep0();
 816   4                              }
 817   3                      } break;
 818   2      
 819   2                      case USB_RECIPIENT_ENDPOINT:
 820   2                      {
 821   3                              stall_ep0();
 822   3                      } break;
 823   2      
 824   2                      default: stall_ep0();
 825   2              }
 826   1              return 0;
 827   1      }
 828          
 829          //===============================================================================//
 830          //== 函 数 名:set_feature
 831          //== 功    能:设置特性
 832          //== 说    明:
 833          //== 时    间:2008.8.20 创建函数
 834          //== 入口参数:receiver: 被清除的对象
 835          //== 返 回 值:0
 836          //===============================================================================//
 837          unsigned char set_feature(unsigned char receiver)
 838          {
 839   1              unsigned char endp;
 840   1              #ifdef __DEBUG__        //== 打印调试信息
 841   1                      Print_Msg("Runing set_feature()!\r\n");
 842   1              #endif
 843   1              switch (receiver)
 844   1              {
 845   2                      case USB_RECIPIENT_DEVICE:
 846   2                      {
 847   3                              if (Control_Data.DeviceRequest.wValue == USB_FEATURE_REMOTE_WAKEUP)     //== 清除远程唤醒功能
 848   3                              {
 849   4                                      bEPPflags.bits.remote_wakeup = 1;
 850   4                                      Control_Data.wLength = 0;                                                                               //== 发送0字节长度数据到主机做回答
 851   4                                      Control_Data.wCount = 0;
 852   4                                      bEPPflags.bits.control_state = USB_TRANSMIT;                                    //== 设置为发送状态,等待in端点中断
 853   4                              }
 854   3                      } break;
 855   2      
 856   2                      case USB_RECIPIENT_INTERFACE:
 857   2                      {
 858   3                              if (Control_Data.DeviceRequest.wValue == USB_FEATURE_ENDPOINT_STALL)//== 清除端点stall
 859   3                              {
 860   4                                      endp = (unsigned char)(Control_Data.DeviceRequest.wIndex & MAX_ENDPOINTS);
 861   4      
C51 COMPILER V7.50   USB                                                                   11/24/2008 09:12:36 PAGE 15  

 862   4                                      if (Control_Data.DeviceRequest.wIndex & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 863   4                                      {
 864   5                                              set_endpoint_status(endp*2 + 1, 1);                                                     //== clear TX stall for IN on EPn.
 865   5                                      }
 866   4                                      else
 867   4                                      {
 868   5                                              set_endpoint_status(endp*2, 1);                                                         //== clear RX stall for OUT on EPn.
 869   5                                      }
 870   4      
 871   4                                      Control_Data.wLength = 0;                                                                               //== 发送0字节长度数据到主机做回答
 872   4                                      Control_Data.wCount = 0;
 873   4                                      bEPPflags.bits.control_state = USB_TRANSMIT;                                    //== 设置为发送状态,等待in端点中断
 874   4                              }
 875   3                              else
 876   3                              {
 877   4                                      stall_ep0();
 878   4                              }
 879   3                      } break;
 880   2      
 881   2                      case USB_RECIPIENT_ENDPOINT:
 882   2                      {
 883   3                              stall_ep0();
 884   3                      } break;
 885   2      
 886   2                      default: stall_ep0();
 887   2              }
 888   1              return 0;
 889   1      }
 890          
 891          //===============================================================================//
 892          //== 函 数 名:control_handler
 893          //== 功    能:处理主机请求的建立包
 894          //== 说    明:
 895          //== 时    间:2008.8.20 创建函数
 896          //== 入口参数:无
 897          //== 返 回 值:0
 898          //===============================================================================//
 899          unsigned char setup_handler(void)
 900          {
 901   1              #ifdef __DEBUG__        //== 打印调试信息
 902   1                      Print_Msg("Runing setup_handler()!\r\n");
 903   1              #endif
 904   1      
 905   1              if (bEPPflags.bits.setup_packet_in)     //== 主机要求输入
 906   1              {
 907   2                      bEPPflags.bits.setup_packet_in = 0;
 908   2                      switch (Control_Data.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK)
 909   2                      {
 910   3                              case USB_STANDARD_REQUEST:                              //== 标准请求
 911   3                              {
 912   4                                      #ifdef __DEBUG__        //== 打印调试信息
 913   4                                              Print_Msg("USB标准请求................................\r\n");
 914   4                                      #endif
 915   4                                      switch (Control_Data.DeviceRequest.bmRequestType & USB_RECIPIENT)
 916   4                                      {
 917   5                                              case USB_RECIPIENT_DEVICE:              //== 询问设备
 918   5                                              {
 919   6                                                      switch (Control_Data.DeviceRequest.bRequest & USB_REQUEST_MASK)
 920   6                                                      {
 921   7                                                              case GET_STATUS                 : get_status(USB_RECIPIENT_DEVICE);     break;
 922   7                                                              case GET_DESCRIPTOR             : get_descriptor();                                             break;
 923   7                                                              case GET_CONFIGURATION  : get_configuration();                                  break;
C51 COMPILER V7.50   USB                                                                   11/24/2008 09:12:36 PAGE 16  

 924   7                                                      //      case GET_INTERFACE              : reserved();                                                   break;
 925   7                                                      //      case SYNCH_FRAME                : reserved();                                                   break;
 926   7                                                              default                                 : reserved();                                                   break;
 927   7                                                      }
 928   6                                              } break;
 929   5      
 930   5                                              case USB_RECIPIENT_INTERFACE:   //== 询问接口
 931   5                                              {
 932   6                                                      switch (Control_Data.DeviceRequest.bRequest & USB_REQUEST_MASK)
 933   6                                                      {
 934   7                                                              case GET_STATUS                 : get_status(USB_RECIPIENT_INTERFACE);  break;
 935   7                                                              case GET_DESCRIPTOR             : get_descriptor_interface();                   break;
 936   7                                                      //      case GET_CONFIGURATION  : reserved();                                                   break;
 937   7                                                              case GET_INTERFACE              : get_interface();                                              break;
 938   7                                                      //      case SYNCH_FRAME                : reserved();                                                   break;
 939   7                                                              default                                 : reserved();                                                   break;
 940   7                                                      }
 941   6                                              } break;
 942   5      
 943   5                                              case USB_RECIPIENT_ENDPOINT:    //== 询问端点
 944   5                                              {
 945   6                                                      switch (Control_Data.DeviceRequest.bRequest & USB_REQUEST_MASK)
 946   6                                                      {
 947   7                                                              case GET_STATUS                 : get_status(USB_RECIPIENT_ENDPOINT);   break;
 948   7                                                      //      case GET_DESCRIPTOR             : get_descriptor();                                             break;
 949   7                                                      //      case GET_CONFIGURATION  : reserved();                                                   break;
 950   7                                                      //      case GET_INTERFACE              : get_interface();          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -