我需要的是转换成input前的usb数据
时间: 2024-03-05 19:49:30 浏览: 19
要获取USB触摸屏的原始数据(即转换成input前的USB数据),可以使用Linux系统提供的usbmon工具进行抓包。usbmon可以监控USB总线上的数据传输过程,包括输入和输出的数据包。
以下是使用usbmon抓取USB触摸屏原始数据的步骤:
1. 确定USB触摸屏的总线和端口号
使用lsusb命令可以列出系统中所有的USB设备,找到对应的USB触摸屏设备,获取其总线和端口号。假设USB触摸屏设备的总线号为3,端口号为1,则对应的设备文件路径为/sys/kernel/debug/usb/usbmon/3u。
2. 启动usbmon抓包
使用以下命令启动usbmon抓包:
```
sudo cat /sys/kernel/debug/usb/usbmon/3u > usbmon.log
```
其中,3u表示第3个USB总线的上行数据(即主机发送到设备的数据),输出结果会保存到usbmon.log文件中。
3. 操作USB触摸屏
在启动usbmon抓包后,操作USB触摸屏,产生相应的输入数据。
4. 停止usbmon抓包
按Ctrl+C停止usbmon抓包。
5. 分析抓包结果
打开usbmon.log文件,可以看到USB总线上的数据传输过程,其中包括了输入和输出的数据包。找到对应的输入数据包,即可获取USB触摸屏的原始数据。需要注意的是,usbmon抓包结果是16进制格式的数据,需要进行相应的解析和转换。
以上是使用usbmon抓取USB触摸屏原始数据的简单步骤,实际操作可能会更加复杂,需要根据具体情况进行相应的处理。
相关问题
Linux5.1内核,用C语言写一段获取USB触摸屏原始数据的代码,未转换成input的USB数据
以下是一个获取USB触摸屏原始数据的示例代码,基于Linux 5.1内核和C语言:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <linux/usbdevice_fs.h>
#include <linux/input.h>
#define VENDOR_ID 0x1234
#define PRODUCT_ID 0x5678
int main(int argc, char** argv)
{
int fd;
char dev_name[20];
struct usbdevfs_urb urb;
unsigned char buf[8];
if(argc != 2)
{
printf("Usage: %s <device>\n", argv[0]);
return 1;
}
sprintf(dev_name, "/dev/bus/usb/%s", argv[1]);
fd = open(dev_name, O_RDWR);
if(fd == -1)
{
perror("open");
return 1;
}
memset(&urb, 0, sizeof(struct usbdevfs_urb));
urb.type = USBDEVFS_URB_TYPE_INTERRUPT;
urb.endpoint = 0x81;
urb.flags = USBDEVFS_URB_NO_TRANSFER_DMA_MAP;
urb.buffer = buf;
urb.buffer_length = sizeof(buf);
urb.usercontext = NULL;
if(ioctl(fd, USBDEVFS_SUBMITURB, &urb) < 0)
{
perror("ioctl");
return 1;
}
while(1)
{
if(read(fd, &urb, sizeof(struct usbdevfs_urb)) < sizeof(struct usbdevfs_urb))
{
perror("read");
return 1;
}
if(urb.status != 0)
{
perror("urb");
return 1;
}
printf("Data: %02x %02x %02x %02x %02x %02x %02x %02x\n", buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
}
close(fd);
return 0;
}
```
该示例代码打开一个 USB 设备文件(例如 `/dev/bus/usb/001/001`),并使用 `USBDEVFS_SUBMITURB` ioctl 发起一个中断传输(endpoint 0x81)。然后使用 `read` 函数从设备文件中读取输入数据。读取到的数据是未转换成 `input` 格式的原始数据,您可以根据 USB 触摸屏的协议解析这些数据。注意,该示例代码中使用了硬编码的厂商 ID 和产品 ID,您需要根据实际情况修改这些值。
FPGA串口通信通过那个管脚将数据发送给上位机
在FPGA串口通信中,数据通过串口通信模块(如UART)发送给上位机时,一般会使用FPGA芯片上的一组GPIO(General Purpose Input/Output)管脚来实现。这组GPIO管脚通常被配置为串口的发送数据线(TX,即Transmit),通过这些管脚将数据传输给上位机。
具体使用哪些GPIO管脚来进行数据发送,取决于你所使用的FPGA芯片型号以及具体的设计。你需要参考FPGA芯片的数据手册或者开发板的引脚分配表来确定正确的管脚连接。
一般情况下,串口通信的发送数据线(TX)会被连接到FPGA芯片上的某个GPIO管脚,并通过适当的电平转换电路将信号转换为符合串口通信协议要求的电平水平。然后,这个GPIO管脚的输出信号将通过连接到开发板上的相应接口(如DB9串口接口、USB串口转接器等)传输给上位机。
请注意,具体的管脚连接和配置可能会因不同的FPGA芯片、开发板和串口通信模块而有所不同。因此,在实际设计中,需要仔细查阅相关文档并进行正确的管脚连接和配置。