我在一个MMA8563板上有一个imx6ul加速度计,并且正在使用mma8452.cLinuxIIO驱动程序。我可以通过/sys/bus/iio/设备/iio:device0 0访问x、y、z原始值。
但是,我不知道如何使用IIO事件。我已经使用以下命令在加速度计中配置了运动检测:
# echo 15 > events/in_accel_mag_rising_value
# echo 1 > events/in_accel_mag_rising_period
# echo 1 > events/in_accel_x_mag_rising_en我已经在驱动程序代码中放置了调试打印语句,并且可以看到当我移动设备时正在触发中断。我看到驱动程序然后调用iio_push_event()函数。我还可以看到,每次移动设备时,/proc/interrupts中的中断号都会增加。
从用户空间,如何访问此中断或事件?我想知道设备什么时候在运行。
驱动程序在/ dev /iio:device0 0中创建一个缓冲区和一个char :device0 0,但这似乎只在我在scan_elements目录中启用x、y或z时才会填充。
发布于 2022-10-09 03:14:02
应用程序可以通过从ioctl()请求IIO_GET_EVENT_FD_IOCTL的/dev/iio:devicex文件描述符获得的特殊文件描述符读取事件,如下所示:
struct iio_event_data event;
int fd, event_fd;
fd = open("/dev/iio:devicex", 0);
ioctl(fd, IIO_GET_EVENT_FD_IOCTL, &event_fd);
read(event_fd, &event, sizeof(event));
/* Instead of read(), may also use select() or poll() etc. */参考:
https://stackoverflow.com/questions/51144210
复制相似问题