libusb FAQ

Can libusb be used on the USB device side, e.g. Linux Gadget Device?

No.
libusb only provides an API for writing software on the host. Of course, if the device also acts as a USB host then libusb could still be useful, but only for the host part of the device.

https://github.com/libusb/libusb/wiki/FAQ#Can_libusb_be_used_on_the_USB_device_side_eg_Linux_Gadget_Device

libusb主要用于HOST端,device(gadget)端看起来支持度不行,device端可以通过HID节点进行读写

https://blog.csdn.net/drivermonkey/article/details/43635083

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值