Linux gadget 模拟触控屏 支持多点触控

通过gadget命令行生成hid设备

下面xxx自己根据需要修改,例如VID,PID,产品名称


const char *INSTALL_GADGET_CMDS[] = {
   
   
    "modprobe libcomposite",

    "mkdir /sys/kernel/config/usb_gadget/g1",

    "echo 'xxx' > /sys/kernel/config/usb_gadget/g1/idVendor",
    "echo 'xxx' > /sys/kernel/config/usb_gadget/g1/idProduct",

    "mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409",                                  // 设备信息目录
    "echo 'xxx' > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber", // 产品序列号
    "echo 'xxx' > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer",             // 产品制造商
    "echo 'xxx' > /sys/kernel/config/usb_gadget/g1/strings/0x409/product",            // 产品名字

    "mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1", // 配置目录
    "mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409",
    "echo 'config' > /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409/configuration",
    "echo 0x80 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes",
    "echo 100 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower",

    // 下面这些functions下的目配置都是接口描述符配置,一个目录是一个接口

    // Touchscreen
    "mkdir -p /sys/kernel/config/usb_gadget/g1/functions/hid.usb0", // 功能描述
    "echo 1 > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/subclass",
    "echo 0 > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/protocol",
    "echo 12 > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_length", // hid report max size
    "echo '050d0904a1018501050d0922a102050d9501750609511500253f810209422501750195018102750195018103050195017510550e65110930260040350046a6148142093126004046a40b8142c0050d0922a102050d9501750609511500253f810209422501750195018102750195018103050195017510550e65110930260040350046a6148142093126004046a40b8142c0050d0954257f95017508810285020955250a75089501b102c0' | xxd " XXD_ARGS " > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_desc", // hid desc
    "ln -s /sys/kernel/config/usb_gadget/g1/functions/hid.usb0 /sys/kernel/config/usb_gadget/g1/configs/c.1", // 关联配置和功能文件
    "ls /sys/class/udc > /sys/kernel/config/usb_gadget/g1/UDC", // 启动设备
};

const char *UNINSTALL_GADGET_CMDS[] = {
   
   
    "echo '' > /sys/kernel/config/usb_gadget/g1/UDC",

    "rm /sys/kernel/config/usb_gadget/g1/configs/c.1/hid.usb0",
    "rmdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409",
    "rmdir /sys/kernel/config/usb_gadget/g1/configs/c.1",
    "rmdir /sys/kernel/config/usb_gadget/g1/functions/hid.usb0",
    "rmdir /sys/kernel/config/usb_gadget/g1/strings/0x409",
    "rmdir /sys/kernel/config/usb_gadget/g1",
};

里面很长的那个字符串,是hid报告描述符,下面详细讲。

hid报告描述符

把上面hid报告描述符贴到 https://www.usbzh.com/tool/usb.html,可以分析出结构,我已经在关键位置加了注释。

0x05, 0x0D,        // Usage Page (Digitizer)
0x09, 0x04,        // Usage (Touch Screen)	//触控屏
	0xA1, 0x01,        // Collection (Application)	//每一个collection相当于c++里面的花括号,里面是一个集合
	0x85, 0x01,        //   Report ID (1)
	0x05, 0x0D,        //   Usage Page (Digitizer)
	0x09, 0x22,        //   Usage (Finger)
		//下面是一个触控点的数据包,也就是第一个手指
		0xA1, 0x02,        //   Collection (Logical)	//这里主要描述到时候上报数据的数据格式,例如触控id/坐标xy,占用几个bit这些信息
			0x05, 0x0D,        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值