转载地址:http://blog.csdn.net/drivermonkey/article/details/43635083
- //测试平台: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 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;
- }