4

我正在尝试使用 input.h 中的 EVIOCSABS 调用来调整不能与 SDL 正常工作的操纵杆的灵敏度。我认为 input_absinfo 结构的 fuzz 和 flat 成员会影响轴的灵敏度,但是在黑暗中拍摄了几次之后,我仍然对它们的工作原理感到困惑。我希望有人能指出我正确的方向。

谢谢你考虑我的问题!这是我在 Joystick 类中编写的代码:

int Joystick::configure_absinfo(int axis, int fuzz, int flat)
{
    struct input_absinfo jabsx;
    int result_code = ioctl(joystick_fd, EVIOCGABS(axis), &jabsx);
    if (result_code < 0)
    {
        perror("ioctl GABS failed");
    }
    else
    {
        jabsx.fuzz = fuzz;
        jabsx.flat = flat;

        result_code = ioctl(joystick_fd, EVIOCSABS(axis), &jabsx);
        if (result_code < 0)
        {
            perror("ioctl SABS failed");
        }
    }
    return result_code;
}
4

2 回答 2

2

关于 fuzz 值,它似乎是用于 abs 输入设备的值。查看 input.h 中 input_absinfo 的文档 链接到 lxr.linux.no 中的 input.h

你可以发现

fuzz: specifies fuzz value that is used to filter noise from the event stream.

这意味着如果与最后一个值的差值小于 fuzz,则 linux 中的输入系统将丢弃设备驱动程序生成的事件。这是在输入层完成的。

于 2013-06-11T10:05:24.687 回答
1

flat值决定了死区的大小([来源])(https://wiki.archlinux.org/index.php/Gamepad#evdev_API_deadzones)。fuzz很难找到,但我能找到的最好的是这些文档

过滤(模糊值):不报告微小变化以减少噪音

因此,似乎任何小于 fuzz 的更改都应该被过滤掉/忽略。

于 2020-05-11T13:30:48.060 回答