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;
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。