我正在为adc ads1243开发linux驱动程序并使用iio框架。我想添加从ADC到IIO缓冲区读取和存储数据的功能。
我添加了iio_trigged_buffer_setup()来探测驱动程序的函数。

ret = iio_triggered_buffer_setup(indio_dev, NULL, &ads1243_trigger_handler, NULL);

我正在使用sysfs触发器,成功调用了ads1243_trigger_handler
static irqreturn_t ads1243_trigger_handler(int irq, void *p)
{
    struct iio_poll_func *pf = p;
    struct iio_dev *indio_dev = pf->indio_dev;
    struct ads1243_state *st = iio_priv(indio_dev);
    u32 val[8];
    int ret;

    val[0] = 0x01;
    val[1] = 0x02;
    val[2] = 0x03;
    val[3] = 0x04;

    ret = iio_push_to_buffers_with_timestamp(indio_dev, val,
                                       iio_get_time_ns());
    /* iio_push_to_buffers(indio_dev, val); */

    iio_trigger_notify_done(indio_dev->trig);

    return IRQ_HANDLED;

}
在处理程序中,我只使用一些推送到iio缓冲区的测试数据。
然后我设置了触发器
echo 0 > iio_sysfs_trigger/add_trigger
cat /sys/bus/iio/devices/trigger0/name > /sys/bus/iio/devices/iio:device1/trigger/current_trigger

启用某些扫描元素,设置并启用IIO设备的缓冲区
echo 1 > scan_elements/in_voltage0-voltage1_en
echo 1 > scan_elements/in_voltage2-voltage3_en

echo 64 > buffer/length
echo 1 > buffer/enable

扣动扳机
echo 1 > /sys/bus/iio/devices/trigger0/trigger_now

然后尝试读取设备(缓冲区)
cat /dev/iio\:device1

但我没有结果。我错过了重要的事情吗?
谢谢你的回复!

最佳答案

代码正确且有效。我很蠢-我没意识到猫命令不会打印隐形字符!
例如,使用相当hexdump。

关于linux - IIO(字符)设备输出无输出-IIO缓冲区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43134050/

10-11 18:43