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

📄 usb.lst

📁 HID 设备测试程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V7.50   USB                                                                   11/24/2008 09:12:36 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE USB
OBJECT MODULE PLACED IN USB.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE USB.c BROWSE DEFINE(__DEBUG__) DEBUG OBJECTEXTEND

line level    source

   1          /*===============================================================================//
   2          //== 文 件 名:USB.c
   3          //== author      :gnsusn
   4          //== 说    明:对 USB 协议的处理
   5          //== 修改日志:2008.8.20 创建文件
   6          //== 
   7          //===============================================================================*/
   8          #include <reg52.h>
   9          #include "USB.h"
  10          #include "PDIUSBD12.h"
  11          #include "functions.h"
  12          #include "hid_report.h"
  13          
  14          //***************************************************************************************
  15          //=======================================================================================
  16          
  17          EPPFLAGS                                bEPPflags;                              //== 程序运行状态标志
  18          CONTROL_DATA_BUFF               Control_Data;                   //== setup 包
  19          
  20          unsigned char usb_transmit_buf[8];                              //== 用于给USB发送数据的缓冲区
  21          unsigned char hid_idle;                                                 //== HID 设备的idle状态
  22          unsigned char hid_protocol;                                             //== HID 当前协议
  23          
  24          //*********************************************************************************
  25          //== 协议中用到的数据
  26          code unsigned char LANGUAGE_ID[4] = {0x04,0x03,0x09,0x04};              //== 字符串描述符所用的语言种类
  27                                                                                  
  28          code unsigned char device_serial_number[] =                                             //== 设备序列号 
  29          {
  30                  22,STRING_DESCRIPTOR,'2',0,'0',0,'0',0,
  31                  '8',0,'-',0,'0',0,'8',0,'-',0,'2',0,'3',0
  32          };
  33          
  34          code unsigned char ManufacturerString[28] =                                             //== 厂商字符串
  35          {
  36                  28,STRING_DESCRIPTOR,0x3F,0x80,0x11,0x68,0x7E,0x67,0x84,
  37                  0x76,'U',0x00,'S',0x00,'B',0x00,'-',0x00,'H',0x00,'I',
  38                  0x00,'D',0x00,0xBE,0x8B,0x07,0x59
  39          };
  40          
  41          code unsigned char ProducterString[30] =                                                //== 产品字符串
  42          {
  43                  30,STRING_DESCRIPTOR,0x3F,0x80,0x11,0x68,0x7E,0x67,0x84,
  44                  0x76,'U',0x00,'S',0x00,'B',0x00,'-',0x00,'-',0x00,'H',
  45                  0x00,'I',0x00,'D',0x00,0xBE,0x8B,0x07,0x59
  46          };
  47          
  48          code DEVICE_DESCRIPTOR_STRUCT device_descriptor =                               //== 设备描述符
  49          {
  50                  sizeof(DEVICE_DESCRIPTOR_STRUCT),                                                       //== 设备描述符的字节数大小
  51                  DEVICE_DESCRIPTOR,                                                                                      //== 设备描述符类型编号
  52                  SWAP16(0x0110),                                                                                         //== USB版本号
  53                  0x03,                                                                                                           //== USB分配的设备类代码
  54                  0x00,                                                                                                           //== USB分配的子类代码
  55                  0x00,                                                                                                           //== USB分配的设备协议代码
C51 COMPILER V7.50   USB                                                                   11/24/2008 09:12:36 PAGE 2   

  56                  0x10,                                                                                                           //== 端点0的最大包大小
  57                  SWAP16(0x0471),                                                                                         //== 厂商编号VID,这里只是作为测试用,请使用自己的VID
  58                  SWAP16(0x1234),                                                                                         //== 产品编号PID,这里只是作为测试用,请使用自己的PID
  59                  SWAP16(0x0001),                                                                                         //== 设备出厂编号
  60                  0x01,                                                                                                           //== 设备厂商字符串的索引
  61                  0x02,                                                                                                           //== 描述产品字符串的索引
  62                  0x03,                                                                                                           //== 描述设备序列号字符串的索引
  63                  0x01                                                                                                            //== 可能的配置数量
  64          };
  65          
  66          //== 定义配置,接口,端点等描述符结构体,因为它们是随配置描述符一起返回的
  67          typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT
  68          {
  69                  CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor;
  70                  INTERFACE_DESCRIPTOR_STRUCT             interface_descriptor;
  71                  HID_DESCRIPTOR_STRUCT                   hid_descriptor;
  72                  ENDPOINT_DESCRIPTOR_STRUCT              endpoint_descriptor[ENDPOINT_NUMBER];
  73          }CON_INT_ENDP_DESCRIPTOR_STRUCT;
  74          
  75          code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor =
  76          {
  77                  //configuration_descriptor                                                                      //配置描述符
  78                  {
  79                          sizeof(CONFIGURATION_DESCRIPTOR_STRUCT),                                //== 配置描述符的字节数大小
  80                          CONFIGURATION_DESCRIPTOR,                                                               //== 配置描述符类型编号
  81                          SWAP16(sizeof(CON_INT_ENDP_DESCRIPTOR_STRUCT)),
  82                          0x01,                                                                                                   //== 只包含一个接口
  83                          0x01,                                                                                                   //== 该配置的编号
  84                          0x00,                                                                                                   //== iConfiguration字段
  85                          0x80,                                                                                                   //== 采用总线供电
  86                          0xC8                                                                                                    //== 从总线获取最大电流400mA
  87                  },
  88                  //interface_descritor                                                                           //== 接口描述符
  89                  {
  90                          sizeof(INTERFACE_DESCRIPTOR_STRUCT),                                    //== 接口描述符的字节数大小
  91                          INTERFACE_DESCRIPTOR,                                                                   //== 接口描述符类型编号
  92                          0x00,                                                                                                   //== 接口编号为0
  93                          0x00,                                                                                                   //== 该接口描述符的编号
  94                          ENDPOINT_NUMBER,                                                                                //== 该接口使用的端点数量,非0端点数量为4,只使用端点主端点输入和输出
  95                          0x03,                                                                                                   //== 人机接口设备(HID)类
  96                          0x00,                                                                                                   //== 使用的子类:未定义
  97                          0x00,                                                                                                   //== 使用的协议:未定义
  98                          0x00                                                                                                    //== 接口描述符字符串索引
  99                  },
 100                  //hid_descriptor
 101                  {
 102                          sizeof(HID_DESCRIPTOR_STRUCT),                                                  //== HID描述符的字节数大小
 103                          HID_DESCRIPTOR,                                                                                 //== HID描述符类型编号
 104                          0x1001,                                                                                                 //== HID类协议版本号,为1.1
 105                          0x00,                                                                                                   //== 固件的国家地区代号,0x21为美国
 106                          NUM_SUB_DESCRIPTORS,                                                                    //== 下级描述符的数量
 107                          {
 108                                  {
 109                                          REPORT_DESCRIPTOR,                                                              //== 下级描述符为报告描述符
 110                                          SWAP16(sizeof(DataReportDescriptor))                    //== 下级描述符的长度
 111                                  }
 112                          },
 113                  },
 114                  //endpoint_descriptor[]
 115                  {
 116                          {                                                                                                               //== 主端点输入描述
 117                                  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                                     //== 端点描述符的字节数大小
C51 COMPILER V7.50   USB                                                                   11/24/2008 09:12:36 PAGE 3   

 118                                  ENDPOINT_DESCRIPTOR,                                                            //== 端点描述符类型编号
 119                                  POINT_1_IN,                                                                                     //== 控制输入端点
 120                                  ENDPOINT_TYPE_INTERRUPT,                                                        //== 使用的传输类型:中断传输
 121                                  SWAP16(0x0010),                                                                         //== 该端点支持的最大包尺寸,16字节
 122                                  0x0A                                                                                            //== 中断扫描时间:设置为10ms
 123                          },
 124            
 125                          {                                                                                                               //== 主端点输出描述
 126                                  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                                     //== 端点描述符的字节数大小
 127                                  ENDPOINT_DESCRIPTOR,                                                            //== 端点描述符类型编号
 128                                  POINT_1_OUT,                                                                            //== 控制输出端点
 129                                  ENDPOINT_TYPE_INTERRUPT,                                                        //== 使用的传输类型:中断传输
 130                                  SWAP16(0x0010),                                                                         //== 该端点支持的最大包尺寸,16字节
 131                                  0x0A                                                                                            //== 中断扫描时间:设置为10ms
 132                          },
 133          
 134                          {                                                                                                               //== 主端点输出描述
 135                                  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                                     //== 端点描述符的字节数大小
 136                                  ENDPOINT_DESCRIPTOR,                                                            //== 端点描述符类型编号
 137                                  MAIN_POINT_IN,                                                                          //== 端点号,主输入端点
 138                                  ENDPOINT_TYPE_INTERRUPT,                                                        //== 使用的传输类型:批量传输
 139                                  SWAP16(0x0040),                                                                         //== 该端点支持的最大包尺寸,64字节
 140                                  0x0A                                                                                            //== 中断扫描时间:设置为10ms
 141                          },
 142          
 143                          {                                                                                                               //== 主端点输出描述
 144                                  sizeof(ENDPOINT_DESCRIPTOR_STRUCT),                                     //== 端点描述符的字节数大小
 145                                  ENDPOINT_DESCRIPTOR,                                                            //== 端点描述符类型编号
 146                                  MAIN_POINT_OUT,                                                                         //== 端点号,主输出端点
 147                                  ENDPOINT_TYPE_INTERRUPT,                                                        //== 使用的传输类型:中断传输
 148                                  SWAP16(0x0040),                                                                         //== 该端点支持的最大包尺寸,64字节
 149                                  0x0A                                                                                            //== 中断扫描时间:设置为10ms
 150                          },
 151                  },
 152          };
 153           
 154          //*********************************************************************************
 155          
 156          //===============================================================================//
 157          //== 函 数 名:usb_bus_reset
 158          //== 功    能:USB 总线复位处理
 159          //== 说    明:
 160          //== 时    间:2008.8.13 创建函数
 161          //== 入口参数:无
 162          //== 返 回 值:0
 163          //===============================================================================//
 164          unsigned char usb_bus_reset(void)
 165          {
 166   1              #ifdef __DEBUG__        //== 打印调试信息
 167   1                      Print_Msg("Runing usb_bus_reset()!\r\n");
 168   1              #endif
 169   1      
 170   1              #ifdef __DEBUG__        //== 打印调试信息
 171   1                      Print_Msg("USB总线复位................................\r\n");
 172   1              #endif
 173   1      
 174   1              bEPPflags.bits.bus_reset = 1;
 175   1      
 176   1              return 0;
 177   1      }
 178          
 179          //===============================================================================//
C51 COMPILER V7.50   USB                                                                   11/24/2008 09:12:36 PAGE 4   

 180          //== 函 数 名:usb_bus_suspend
 181          //== 功    能:USB 总线挂起处理
 182          //== 说    明:
 183          //== 时    间:2008.8.13 创建函数

⌨️ 快捷键说明

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