目的:
在大屏触摸屏上点击一个位置,通过RK3568模拟出来的触摸屏能够在usb连接的主机上也点击相对的位置。
实现HID调通的办法:
首先先把HID调通,在kernel/drivers/usb/gadget/legacy/hid.c文件中修改添加一个HID键盘,使得通过OTG的usb口连接主机后,在主机上能够识别该OTG口为一个HID键盘;
通过查询资料——https://blog.csdn.net/donghailin/article/details/106096566
添加相应代码后再编译烧录,成功在开发板上找到hidg0文件,随后通过
echo otg > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode 命令把该usb口配置成otg模式,(可以先cat一下看看是不是otg模式,我这里是host模式所以要改),同时也要mask掉adba.service,随后连接主机,能够看到设备管理器中新添加了一个hid 键盘。
调试:
参考kernel/Documentation/usb/gadget_hid.txt中的测试例程,对HID键盘进行测试,结果成功在主机上写入字母或功能键;
/* hid_gadget_test */
/*其中第一个参数是hidg0文件位置;第二个参数是m鼠标 k键盘*/
#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 BUF_LEN 512
struct options {
const char *opt;
unsigned char val;
};
static struct options kmod[] = {
{
.opt = "--left-ctrl", .val = 0x01},
{
.opt = "--right-ctrl", .val = 0x10},
{
.opt = "--left-shift", .val = 0x02},
{
.opt = "--right-shift", .val = 0x20},
{
.opt = "--left-alt", .val = 0x04},
{
.opt = "--right-alt", .val = 0x40},
{
.opt = "--left-meta", .val = 0x08},
{
.opt = "--right-meta", .val = 0x80},
{
.opt = NULL}
};
static struct options kval[] = {
{
.opt = "--return", .val = 0x28},
{
.opt = "--esc", .val = 0x29},
{
.opt = "--bckspc", .val = 0x2a},
{
.opt = "--tab", .val = 0x2b},
{
.opt = "--spacebar", .val = 0x2c},
{
.opt = "--caps-lock", .val = 0x39},
{
.opt = "--f1", .val = 0x3a},
{
.opt = "--f2", .val = 0x3b},
{
.opt = "--f3", .val = 0x3c},
{
.opt = "--f4", .val = 0x3d},
{
.opt = "--f5", .val = 0x3e},
{
.opt = "--f6", .val = 0x3f},
{
.opt = "--f7", .val = 0x40},
{
.opt = "--f8", .val = 0x41},
{
.opt = "--f9", .val = 0x42},
{
.opt = "--f10", .val = 0x43},
{
.opt = "--f11", .val = 0x44},
{
.opt = "--f12", .val = 0x45},
{
.opt = "--insert", .val = 0x49},
{
.opt = "--home", .val = 0x4a},
{
.opt = "--pageup", .val = 0x4b},
{
.opt = "--del", .val = 0x4c},
{
.opt = "--end", .val = 0x4d},
{
.opt = "--pagedown", .val = 0x4e},
{
.opt = "--right", .val = 0x4f},
{
.opt = "--left", .val = 0x50},
{
.opt = "--down", .val = 0x51},
{
.opt = "--kp-enter", .val = 0x58},
{
.opt = "--up", .val = 0x52},
{
.opt = "--num-lock", .val = 0x53},
{
.opt = NULL}
};
int keyboard_fill_report(char report[8], char buf[BUF_LEN], int *hold)
{
char *tok =