Linux USB HID Device 测试代码

来源:互联网 发布:怎么看淘宝店 编辑:程序博客网 时间:2024/05/21 09:40
//测试平台:linux 3.2, am335x
/****************************************************************** Author:DriverMonkey* Mail:bookworepeng@Hotmail.com* Phone:18575593141* QQ:196568501* Blog:http://blog.csdn.net/drivermonkey* Date:02/07/2015 *****************************************************************/#include <pthread.h>#include <string.h>#include <stdio.h>#include <ctype.h>#include <fcntl.h>#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#define HID_MAX_PACKET_SIZE 64#define HID_BUFFER_SIZE (10*1024*1024)// 10M bytestypedef struct {char null_array[HID_MAX_PACKET_SIZE];}buffer_offset_size_t;static char hid_read_buffer[HID_BUFFER_SIZE];static char hid_write_buffer[HID_BUFFER_SIZE];static int hid_file_handle = 0;static const char* hid_file_name = "/dev/hidg0";static int hid_init(void);static int hid_read(void* buffer, int buffer_size);static int hid_write(void* buffer, int buffer_size);/***************************************************************** * Function name: main * Author:DriverMonkey * Function Description: main function just for hid temp testing * Input argv: * Output argv: * Return: * Be careful: *****************************************************************/int main(void){int read_size = 0;int test_count = 100;hid_init();while(test_count--){memset(hid_read_buffer, 0x00, HID_BUFFER_SIZE);read_size = hid_read(hid_read_buffer, HID_BUFFER_SIZE);//printf("getting report::%s \n", hid_read_buffer);memset(hid_write_buffer, 0x00, HID_BUFFER_SIZE);strcpy(hid_write_buffer, hid_read_buffer);hid_write(hid_write_buffer, read_size);}return 0;}/***************************************************************** * Function name: hid_init * Author:DriverMonkey * Function Description: init HID * Input argv: * Output argv: * Return:>= 0 - no error < 0 - reading error * Be careful: Must be called befoore HID be used! *****************************************************************/static int hid_init(void){if ((hid_file_handle = open(hid_file_name, O_RDWR, 0666)) < 0){perror(hid_file_name);return hid_file_handle;}else{return hid_file_handle;}}/***************************************************************** * Function name: hid_read * Author:DriverMonkey * Function Description: Read data form hid driver * Input argv:buffer_size - buffer size  * Output argv:buffer - buffer to save reading out data * Return:>= 0 - read size < 0 - reading error * Be careful:  *****************************************************************/static int hid_read(void* buffer, int buffer_size){if(buffer == NULL){perror("hid_read::pointer error!");return -1;}return read(hid_file_handle, buffer, buffer_size);}/***************************************************************** * Function name: hid_read * Author:DriverMonkey * Function Description: Read data form hid driver * Input argv:buffer_size - buffer size  * Output argv:buffer - buffer to save reading out data * Return:>= 0 - no error < 0 - reading error * Be careful:  *****************************************************************/static int hid_write(void* buffer, int buffer_size){int return_v = 0;int writting_count = buffer_size / HID_MAX_PACKET_SIZE;int remainding_size = buffer_size % HID_MAX_PACKET_SIZE;buffer_offset_size_t* buffer_offset = (buffer_offset_size_t*)buffer;if(buffer == NULL){perror("hid_write::pointer error!");return -1;}while(writting_count--){return_v = write(hid_file_handle, buffer_offset,HID_MAX_PACKET_SIZE);if(return_v < 0){perror("hid_write::writting error!");return return_v;}buffer_offset++;}return_v = write(hid_file_handle, buffer_offset, remainding_size);return return_v;}

1 0