Вопрос о структуре line_request библиотеки libgpiod - PullRequest
0 голосов
/ 06 августа 2020

Я смотрю на пример libgpiod gpiogetcxx. cpp из github https://github.com/brgl/libgpiod/blob/master/bindings/cxx/examples/gpiogetcxx.cpp Я немного запутался

line_bulk::request(const line_request& config, const ::std::vector<int> default_vals), принимая структуру line_request в качестве ссылочного параметра, содержимое структуры, как показано ниже.

struct line_request
{
    /**
     * @brief Request types.
     */
    enum : int {
        DIRECTION_AS_IS = 1,
        /**< Request for values, don't change the direction. */
        DIRECTION_INPUT,
        /**< Request for reading line values. */
        DIRECTION_OUTPUT,
        /**< Request for driving the GPIO lines. */
        EVENT_FALLING_EDGE,
        /**< Listen for falling edge events. */
        EVENT_RISING_EDGE,
        /**< Listen for rising edge events. */
        EVENT_BOTH_EDGES,
        /**< Listen for all types of events. */
    };

    GPIOD_API static const ::std::bitset<32> FLAG_ACTIVE_LOW;
    /**< Set the active state to 'low' (high is the default). */
    GPIOD_API static const ::std::bitset<32> FLAG_OPEN_SOURCE;
    /**< The line is an open-source port. */
    GPIOD_API static const ::std::bitset<32> FLAG_OPEN_DRAIN;
    /**< The line is an open-drain port. */
    GPIOD_API static const ::std::bitset<32> FLAG_BIAS_DISABLE;
    /**< The line has neither pull-up nor pull-down resistor enabled. */
    GPIOD_API static const ::std::bitset<32> FLAG_BIAS_PULL_DOWN;
    /**< The line has a configurable pull-down resistor enabled. */
    GPIOD_API static const ::std::bitset<32> FLAG_BIAS_PULL_UP;
    /**< The line has a configurable pull-up resistor enabled. */

    ::std::string consumer;
    /**< Consumer name to pass to the request. */
    int request_type;
    /**< Type of the request. */
    ::std::bitset<32> flags;
    /**< Additional request flags. */
};

Я не понимаю следующий код

lines.request({
    argv[0],
    ::gpiod::line_request::DIRECTION_INPUT,
    0
});
  1. Я заметил, что похоже, что код заполняет член структуры в очень случайном порядке, я прав? Я предположил, что argv [0] соответствует потребителю :: std :: string, DIRECTION_INPUT соответствует перечислению, я не совсем понимаю, что пытается сделать 0.

  2. Я не вижу любое объявление структурной переменной, такой как line_request obj, в коде с использованием csope, мне было интересно, почему этот код не встретит недопустимую инициализацию во время компиляции

  3. что происходит с другими членами структуры, которые не связаны в инициализации? станет ли оно по умолчанию нулевым?

...