Linux USB HID Device 测试代码

转载地址:http://blog.csdn.net/drivermonkey/article/details/43635083
[cpp]  view plain  copy
  1. //测试平台:linux 3.2, am335x  
[cpp]  view plain  copy
  1. /***************************************************************** 
  2. * Author:       DriverMonkey 
  3. * Mail:     bookworepeng@Hotmail.com 
  4. * Phone:        18575593141 
  5. * QQ:       196568501 
  6. * Blog:     http://blog.csdn.net/drivermonkey 
  7. * Date:     02/07/2015 
  8.  *****************************************************************/  
  9. #include <pthread.h>  
  10. #include <string.h>  
  11. #include <stdio.h>  
  12. #include <ctype.h>  
  13. #include <fcntl.h>  
  14. #include <errno.h>  
  15. #include <stdio.h>  
  16. #include <stdlib.h>  
  17. #include <unistd.h>  
  18.   
  19. #define HID_MAX_PACKET_SIZE 64  
  20. #define HID_BUFFER_SIZE (10*1024*1024)// 10M bytes  
  21.   
  22. typedef struct   
  23. {  
  24.     char null_array[HID_MAX_PACKET_SIZE];  
  25. }buffer_offset_size_t;  
  26.   
  27.   
  28. static char hid_read_buffer[HID_BUFFER_SIZE];  
  29. static char hid_write_buffer[HID_BUFFER_SIZE];  
  30.   
  31. static int hid_file_handle = 0;  
  32. static const char* hid_file_name = "/dev/hidg0";  
  33.   
  34. static int hid_init(void);  
  35. static int hid_read(void* buffer, int buffer_size);  
  36. static int hid_write(void* buffer, int buffer_size);  
  37.   
  38. /***************************************************************** 
  39.  * Function name:           main 
  40.  * Author:              DriverMonkey 
  41.  * Function Description:    main function just for hid temp testing 
  42.  * Input argv: 
  43.  * Output argv: 
  44.  * Return: 
  45.  * Be careful: 
  46.  *****************************************************************/  
  47. int main(void)  
  48. {  
  49.     int read_size = 0;  
  50.     int test_count = 100;  
  51.     hid_init();  
  52.   
  53.     while(test_count--)  
  54.     {  
  55.         memset(hid_read_buffer, 0x00, HID_BUFFER_SIZE);  
  56.         read_size = hid_read(hid_read_buffer, HID_BUFFER_SIZE);  
  57.         //printf("getting report::%s \n", hid_read_buffer);  
  58.   
  59.         memset(hid_write_buffer, 0x00, HID_BUFFER_SIZE);  
  60.         strcpy(hid_write_buffer, hid_read_buffer);  
  61.         hid_write(hid_write_buffer, read_size);  
  62.     }  
  63.       
  64.     return 0;  
  65. }  
  66. /***************************************************************** 
  67.  * Function name:           hid_init 
  68.  * Author:              DriverMonkey 
  69.  * Function Description:    init HID 
  70.  * Input argv: 
  71.  * Output argv: 
  72.  * Return:              >= 0 - no error 
  73.                         < 0 - reading error 
  74.  * Be careful: Must be called befoore HID be used! 
  75.  *****************************************************************/  
  76. static int hid_init(void)  
  77. {  
  78.     if ((hid_file_handle = open(hid_file_name, O_RDWR, 0666)) < 0)  
  79.     {  
  80.         perror(hid_file_name);  
  81.         return hid_file_handle;  
  82.     }else  
  83.     {  
  84.         return hid_file_handle;  
  85.     }  
  86. }  
  87.   
  88. /***************************************************************** 
  89.  * Function name:           hid_read 
  90.  * Author:              DriverMonkey 
  91.  * Function Description:    Read data form hid driver 
  92.  * Input argv:              buffer_size - buffer size  
  93.  * Output argv:         buffer - buffer to save reading out data 
  94.  * Return:              >= 0 - read size 
  95.                         < 0 - reading error 
  96.  * Be careful:  
  97.  *****************************************************************/  
  98. static int hid_read(void* buffer, int buffer_size)  
  99. {  
  100.     if(buffer == NULL)  
  101.     {  
  102.         perror("hid_read::pointer error!");  
  103.         return -1;  
  104.     }  
  105.     return read(hid_file_handle, buffer, buffer_size);  
  106. }  
  107.   
  108. /***************************************************************** 
  109.  * Function name:           hid_read 
  110.  * Author:              DriverMonkey 
  111.  * Function Description:    Read data form hid driver 
  112.  * Input argv:              buffer_size - buffer size  
  113.  * Output argv:         buffer - buffer to save reading out data 
  114.  * Return:              >= 0 - no error 
  115.                         < 0 - reading error 
  116.  * Be careful:  
  117.  *****************************************************************/  
  118. static int hid_write(void* buffer, int buffer_size)  
  119. {  
  120.     int return_v = 0;  
  121.     int writting_count = buffer_size / HID_MAX_PACKET_SIZE;  
  122.     int remainding_size = buffer_size % HID_MAX_PACKET_SIZE;  
  123.     buffer_offset_size_t* buffer_offset = (buffer_offset_size_t*)buffer;  
  124.       
  125.     if(buffer == NULL)  
  126.     {  
  127.         perror("hid_write::pointer error!");  
  128.         return -1;  
  129.     }  
  130.   
  131.     while(writting_count--)  
  132.     {  
  133.         return_v = write(hid_file_handle, buffer_offset,HID_MAX_PACKET_SIZE);  
  134.         if(return_v < 0)  
  135.         {  
  136.             perror("hid_write::writting error!");  
  137.             return return_v;  
  138.         }  
  139.         buffer_offset++;  
  140.     }  
  141.   
  142.     return_v = write(hid_file_handle, buffer_offset, remainding_size);  
  143.   
  144.     return return_v;  
  145. }  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值