Linux USB HID Device 测试代码
/***************************************************************** * Author: DriverMonkey * Mail: [email protected] * 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 bytes typedef 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; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。