input_report_abs 函数
时间: 2023-10-11 20:05:59 浏览: 45
`input_report_abs`是一个Linux内核中的函数,用于向输入子系统报告绝对坐标的输入事件。绝对坐标指的是与设备固定位置相关的坐标,例如触摸屏幕上的触点位置。该函数需要传入一个`struct input_dev`类型的输入设备结构体指针,以及一个输入事件类型和值。在调用该函数后,输入子系统会将该事件放入输入队列中等待被处理。
以下是`input_report_abs`函数的声明:
```c
void input_report_abs(struct input_dev *dev, unsigned int code, int value);
```
参数说明:
- `dev`:指向输入设备结构体的指针。
- `code`:输入事件的代码,指定输入事件的类型,例如X轴坐标、Y轴坐标等。
- `value`:输入事件的值,即输入事件的具体数值,例如坐标值。
需要注意的是,在使用`input_report_abs`函数之前,需要先调用`input_allocate_absinfo`函数为输入设备结构体中的绝对坐标信息分配内存空间,并将其填充完整。否则,在调用`input_report_abs`函数时可能会出现错误。
相关问题
input_report_abs 函数 数据过滤
`input_report_abs` 函数是用于向内核发送输入事件的函数。它的作用是将输入设备的绝对坐标数据打包为一个输入报告(input report),并将该报告传递到内核中,以便其它应用程序或系统组件可以读取并处理这些输入数据。由于这些数据可能包含一些无用或不必要的信息,因此可以使用数据过滤函数来处理这些数据。
在 Linux 内核中,可以使用 `input_set_abs_params` 函数来设置输入设备的绝对坐标参数,包括坐标范围、分辨率等。这些参数设置后,输入设备会将其绝对坐标数据打包为一个输入报告,并通过 `input_report_abs` 函数传递给内核。如果需要进行数据过滤,可以在发送报告之前对数据进行处理,例如去除无用信息、滤波、平滑等,然后再通过 `input_report_abs` 函数发送处理后的数据。
总之,`input_report_abs` 函数是将输入设备的绝对坐标数据打包为输入报告,而数据过滤函数可以对这些数据进行处理,以提高数据质量和准确性。
linux的gt9xx驱动中的input_report_abs函数解析
在 Linux 的 gt9xx 驱动中,input_report_abs 函数用于向输入子系统报告绝对坐标值。该函数的具体实现如下:
```
static void gt9xx_report_abs(struct gt9xx_ts_data *ts, u16 x, u16 y)
{
struct input_dev *input_dev = ts->input_dev;
input_report_abs(input_dev, ABS_MT_POSITION_X, x);
input_report_abs(input_dev, ABS_MT_POSITION_Y, y);
input_mt_sync(input_dev);
input_sync(input_dev);
}
```
该函数接受三个参数:驱动数据结构体 `ts`,以及触摸屏的 x 和 y 坐标值。该函数的作用是向输入子系统报告触摸屏的绝对坐标值,通过调用 input_report_abs 函数,向输入子系统报告输入设备的绝对坐标位置。在报告绝对坐标值之后,通过调用 input_mt_sync 函数,通知输入子系统报告多点触控事件结束。最后,通过调用 input_sync 函数,将输入事件提交给输入子系统。
需要注意的是,该函数并不是在每个触摸事件中都会被调用,通常是在触摸事件结束时被调用,以报告触摸点的最终位置。