使用c ++ libgpiod库,如何设置gpio行为输出并使用set_value()函数处理单行?

时间:2018-07-12 16:25:17

标签: c++ gpio

我刚开始使用libgpiod库的c ++绑定,并且在设置gpios时遇到问题。我知道,我可以创建长值向量,并将其一次全部应用,但是我希望能够设置它们的方向并分别控制它们。我该怎么办?

我尝试过的是这个

首先:一次应用所有值的工作代码:

#include <gpiod.hpp>

int main(int argc, char **argv)
    {

    ::gpiod::chip chip("gpiochip0");
    auto lines = chip.get_all_lines();

    ::gpiod::line_request requestOutputs = {
        argv[0],
        ::gpiod::line_request::DIRECTION_OUTPUT,
        0
    };

    int value_to_be_set = 0xAAAAAAA ; //example value
    ::std::vector<int> values;

    for (int i = 0; i < 32; i++)
    {
        values.push_back((value_to_be_set >> i) & 1UL);
    }

    lines.request(requestOutputs, values);
    lines.release();

    return EXIT_SUCCESS;
}

第二,我想要的方法:

#include <gpiod.hpp>

int main(int argc, char **argv)
{
    ::gpiod::chip chip("gpiochip0");
    auto lines = chip.get_all_lines();

    ::gpiod::line_request requestOutputs = {
        argv[0],
        ::gpiod::line_request::DIRECTION_OUTPUT,
        0
    };
    lines.request(requestOutputs);

    int value_to_be_set = 0xAAAAAAA; //example value

    for (int i = 0; i < 32; i++)
    {
        // This does not set value :(
        lines.get(i).set_value((value_to_be_set >> i) & 1UL);
    }

    lines.release();

    return EXIT_SUCCESS;
}

0 个答案:

没有答案