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

📄 pdiusbd12.lst

📁 HID 设备测试程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 234          //== 说    明:端点状态 1:停止 0:运行
 235          //== 时    间:2008.8.13 创建函数
 236          //== 入口参数:endp:端点索引号(0-5)
 237          //                         status:端点状态
 238          //                                         bit1-bit7为保留位 
 239          //                                         bit0 = 1--表示端点处于停止状态
 240          //== 返 回 值:0
 241          //===============================================================================//
C51 COMPILER V7.50   PDIUSBD12                                                             11/24/2008 09:12:37 PAGE 5   

 242          unsigned char set_endpoint_status(unsigned char endp,unsigned char status)  
 243          {
 244   1              #ifdef __DEBUG__        //== 打印调试信息
 245   1                      Print_Msg("Runing set_endpoint_status()!\r\n");
 246   1              #endif
 247   1      
 248   1              write_D12_command(0x40+endp);
 249   1              write_a_D12_data(status);
 250   1              return 0;
 251   1      }
 252          
 253          //===============================================================================//
 254          //== 函 数 名:read_endpoint_status
 255          //== 功    能:读端点状态,命令为0x80+endp
 256          //== 说    明:主要作用是判断端点缓冲区是否满
 257          //== 时    间:2008.8.13 创建函数
 258          //== 入口参数:endp:端点索引号(0-5)
 259          //== 返 回 值:当前端点状态信息
 260          //===============================================================================//
 261          unsigned char read_endpoint_status(unsigned char endp)
 262          {
 263   1              #ifdef __DEBUG__        //== 打印调试信息
 264   1                      Print_Msg("Runing read_endpoint_status()!\r\n");
 265   1              #endif
 266   1      
 267   1              write_D12_command(0x80+endp);
 268   1              return read_a_D12_data();
 269   1      }
 270          
 271          //===============================================================================//
 272          //== 函 数 名:clear_buffer
 273          //== 功    能:清缓冲区,命令为0xf2
 274          //== 说    明:清的是选择的端点的缓冲区,在读取缓冲数据后调用
 275          //== 时    间:2008.8.13 创建函数
 276          //== 入口参数:无
 277          //== 返 回 值:0
 278          //===============================================================================//
 279          unsigned char clear_buffer(void)
 280          {
 281   1              #ifdef __DEBUG__        //== 打印调试信息
 282   1                      Print_Msg("Runing clear_buffer()!\r\n");
 283   1              #endif
 284   1      
 285   1              write_D12_command(Clear_Buffer);
 286   1              return 0;
 287   1      }
 288          
 289          //===============================================================================//
 290          //== 函 数 名:validate_buffer
 291          //== 功    能:缓冲区数据有效
 292          //== 说    明:选择的端点的缓冲区有效,在写缓冲后调用
 293          //== 时    间:2008.8.13 创建函数
 294          //== 入口参数:无
 295          //== 返 回 值:0
 296          //===============================================================================//
 297          unsigned char validate_buffer(void)
 298          {
 299   1              #ifdef __DEBUG__        //== 打印调试信息
 300   1                      Print_Msg("Runing validate_buffer()!\r\n");
 301   1              #endif
 302   1      
 303   1              write_D12_command(Validate_Buffer);
C51 COMPILER V7.50   PDIUSBD12                                                             11/24/2008 09:12:37 PAGE 6   

 304   1              return 0;
 305   1      }
 306          
 307          
 308          //===============================================================================//
 309          //== 函 数 名:ack_setup
 310          //== 功    能:应答建立包
 311          //== 说    明:处理完 setup 包后调用
 312          //== 时    间:2008.8.13 创建函数
 313          //== 入口参数:endp:端点索引号
 314          //== 返 回 值:0
 315          //===============================================================================//
 316          unsigned char ack_setup(unsigned char endp)
 317          {
 318   1              #ifdef __DEBUG__        //== 打印调试信息
 319   1                      Print_Msg("Runing ack_setup()!\r\n");
 320   1              #endif
 321   1      
 322   1              select_endpoint(endp);
 323   1              write_D12_command(Ack_Setup);
 324   1              return 0;
 325   1      }
 326          
 327          //===============================================================================//
 328          //== 函 数 名:error
 329          //== 功    能:出错处理
 330          //== 说    明:
 331          //== 时    间:2008.8.13 创建函数
 332          //== 入口参数:number:错误号
 333          //== 返 回 值:0
 334          //===============================================================================//
 335          unsigned char error(unsigned char number)
 336          {
 337   1              #ifdef __DEBUG__        //== 打印调试信息
 338   1                      Print_Msg("Runing error()!\r\n");
 339   1              #endif
 340   1      
 341   1              number = 0;
 342   1              return 0;
 343   1      }
 344          
 345          //===============================================================================//
 346          //== 函 数 名:read_endpoint_buff
 347          //== 功   能 :读端点缓冲区(读取逻辑端点0和1),读出的数据为
 348          //== 说   明 :字节1: 保留可为任意值
 349          //==             :字节2: 数据字节的数目/长度
 350          //==             :字节3: 数据字节1
 351          //==             :字节4: 数据字节2
 352          //== 时   间 :2008.8.13 创建函数
 353          //== 入口参数:endp:端点号 len:要读出的长度 buff:存储的缓冲区
 354          //== 返 回 值:ret:实际读取的字节数
 355          //===============================================================================//
 356          unsigned char read_endpoint_buff(unsigned char endp,unsigned char len,unsigned char * buff)
 357          {
 358   1              unsigned char i, ret;
 359   1      
 360   1              #ifdef __DEBUG__        //== 打印调试信息
 361   1                      Print_Msg("Runing read_endpoint_buff()!\r\n");
 362   1              #endif
 363   1      
 364   1              //== 进行端点操作前要选择端点
 365   1              if ((select_endpoint(endp)&0x01) == 0x00)//== 端点缓冲区为空时返回,端点必须在运行状态时才可引发中断
C51 COMPILER V7.50   PDIUSBD12                                                             11/24/2008 09:12:37 PAGE 7   

 366   1              {                                                                       //== 所以这里只是判断缓冲区是否满,并没有要判断端点是否运行
 367   2                      error(0);
 368   2                      return 0;
 369   2              }
 370   1      
 371   1              write_D12_command(Read_Buffer);         //== 读缓冲区命令,读nB
 372   1              read_a_D12_data();                                      //== 读出的第一个字节,保留,可为任意值
 373   1              ret = read_a_D12_data();                        //== 读出的第二个字节是数据字节的数目/长度
 374   1      
 375   1              if (ret > len)                                          //== 数据字节长度最大130B
 376   1              {
 377   2                      ret = len;
 378   2              }
 379   1      
 380   1              for (i=0; i<ret; i++)
 381   1              {
 382   2                      *(buff+i) = D12_DATA_ADD;
 383   2              }
 384   1              clear_buffer();
 385   1              return ret;
 386   1      }
 387          
 388          //===============================================================================//
 389          //== 函 数 名:read_main_endpoint_buff
 390          //== 功   能 :读端点4缓冲区(主输出端点),读出的数据为
 391          //== 说   明 :字节1: 保留可为任意值
 392          //==             :字节2: 数据字节的数目/长度
 393          //==             :字节3: 数据字节1
 394          //==             :字节4: 数据字节2
 395          //==             :主端点4和5都是双缓冲区,每个端点都有2个64字节的缓冲区
 396          //== 时   间 :2008.8.13 创建函数
 397          //== 入口参数:buff:存储的缓冲区
 398          //== 返 回 值:ret:实际读取的字节数
 399          //===============================================================================//
 400          unsigned char read_main_endpoint_buff(unsigned char* buff)
 401          {
 402   1              unsigned char i, ret;
 403   1              unsigned char bDbuBuf = 1;                      //== 记录有几个缓冲区满
 404   1              unsigned char j = 0;
 405   1      
 406   1              #ifdef __DEBUG__        //== 打印调试信息
 407   1                      Print_Msg("Runing read_main_endpoint_buff()!\r\n");
 408   1              #endif
 409   1       
 410   1              if ((read_endpoint_status(0x84)&0x60) == 0x60)//== 两个缓冲区都满都满,要读取128个字节
 411   1              {
 412   2      //              error(0);
 413   2                      bDbuBuf = 2;
 414   2              }
 415   1      
 416   1              for (; bDbuBuf>0; bDbuBuf--)
 417   1              {       //== 进行端点操作前要选择端点
 418   2                      if ((select_endpoint(0x04))&0x01 == 0x00)       //== 端点缓冲区为空时退出
 419   2                      {
 420   3                              break;
 421   3                      }
 422   2      
 423   2                      write_D12_command(Read_Buffer);         //== 读缓冲区命令,读nB
 424   2                      read_a_D12_data();                                      //== 读出的第一个字节,保留,可为任意值
 425   2                      ret = read_a_D12_data();                        //== 读出的第二个字节是数据字节的数目/长度
 426   2      
 427   2                      for (i=0; i<ret; i++)                           //== 数据字节长度最大130B
C51 COMPILER V7.50   PDIUSBD12                                                             11/24/2008 09:12:37 PAGE 8   

 428   2                      {
 429   3                              *(buff+i+j) = D12_DATA_ADD;
 430   3                      }
 431   2      
 432   2                      j += ret;
 433   2                      clear_buffer();
 434   2              }
 435   1              ret = j;
 436   1      
 437   1              return ret;
 438   1      }
 439          
 440          //===============================================================================//
 441          //== 函 数 名:write_endpoint_buff
 442          //== 功    能:写端点缓冲区
 443          //== 说    明:最多一次能写入130个字节
 444          //== 时    间:2008.8.13 创建函数
 445          //== 入口参数:endp:端点号 len:要写入的长度 buff:存储的缓冲区
 446          //== 返 回 值:len:实际写入的字节数
 447          //===============================================================================//
 448          unsigned char write_endpoint_buff(unsigned char endp, unsigned char len, unsigned char* buff)
 449          {
 450   1              unsigned char i;
 451   1      
 452   1              #ifdef __DEBUG__        //== 打印调试信息
 453   1                      Print_Msg("Runing write_endpoint_buff()!\r\n");
 454   1              #endif
 455   1      
 456   1              read_last_status(endp);
 457   1              select_endpoint(endp);
 458   1      
 459   1              write_D12_command(Write_Buffer);
 460   1              write_a_D12_data(0);                            //== 写入的第一个字节保留,总为0
 461   1              write_a_D12_data(len);
 462   1      
 463   1              for (i=0; i<len; i++)
 464   1              {
 465   2                      D12_DATA_ADD = *(buff+i);
 466   2              }
 467   1              
 468   1              validate_buffer();
 469   1      
 470   1              Print_Msg("************** ");
 471   1              Print_Hex(buff, len);
 472   1              Print_Msg("**************!\r\n");
 473   1              

⌨️ 快捷键说明

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