libgpiod
Loading...
Searching...
No Matches
line-request.hpp
Go to the documentation of this file.
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/* SPDX-FileCopyrightText: 2021-2022 Bartosz Golaszewski <brgl@bgdev.pl> */
3
8#ifndef __LIBGPIOD_CXX_LINE_REQUEST_HPP__
9#define __LIBGPIOD_CXX_LINE_REQUEST_HPP__
10
11#if !defined(__LIBGPIOD_GPIOD_CXX_INSIDE__)
12#error "Only gpiod.hpp can be included directly."
13#endif
14
15#include <chrono>
16#include <cstddef>
17#include <iostream>
18#include <memory>
19
20#include "misc.hpp"
21
22namespace gpiod {
23
24class chip;
25class edge_event;
26class edge_event_buffer;
27class line_config;
28
32class line_request final
33{
34public:
35
36 line_request(const line_request& other) = delete;
37
42 line_request(line_request&& other) noexcept;
43
45
46 line_request& operator=(const line_request& other) = delete;
47
54
63 explicit operator bool() const noexcept;
64
71 void release();
72
77 ::std::string chip_name() const;
78
83 ::std::size_t num_lines() const;
84
89 line::offsets offsets() const;
90
96 line::value get_value(line::offset offset);
97
104 line::values get_values(const line::offsets& offsets);
105
110 line::values get_values();
111
121 void get_values(const line::offsets& offsets, line::values& values);
122
129 void get_values(line::values& values);
130
137 line_request& set_value(line::offset offset, line::value value);
138
144 line_request& set_values(const line::value_mappings& values);
145
153 line_request& set_values(const line::offsets& offsets, const line::values& values);
154
161 line_request& set_values(const line::values& values);
162
169
175 int fd() const;
176
187 bool wait_edge_events(const ::std::chrono::nanoseconds& timeout) const;
188
195 ::std::size_t read_edge_events(edge_event_buffer& buffer);
196
204 ::std::size_t read_edge_events(edge_event_buffer& buffer, ::std::size_t max_events);
205
206private:
207
208 line_request();
209
210 struct impl;
211
212 ::std::unique_ptr<impl> _m_priv;
213
214 friend request_builder;
215};
216
223::std::ostream& operator<<(::std::ostream& out, const line_request& request);
224
225} /* namespace gpiod */
226
227#endif /* __LIBGPIOD_CXX_LINE_REQUEST_HPP__ */
Object into which edge events are read for better performance.
Definition edge-event-buffer.hpp:33
Contains a set of line config options used in line requests and reconfiguration.
Definition line-config.hpp:29
Stores the context of a set of requested GPIO lines.
Definition line-request.hpp:33
void release()
Release the requested lines and free all associated resources.
line_request & set_values(const line::value_mappings &values)
Set the values of a subset of requested lines.
line_request & operator=(line_request &&other) noexcept
Move assignment operator.
line_request(line_request &&other) noexcept
Move constructor.
::std::size_t read_edge_events(edge_event_buffer &buffer)
Read a number of edge events from this request up to the maximum capacity of the buffer.
bool wait_edge_events(const ::std::chrono::nanoseconds &timeout) const
Wait for edge events on any of the lines requested with edge detection enabled.
line::offsets offsets() const
Get the list of offsets of requested lines.
::std::string chip_name() const
Get the name of the chip this request was made on.
line_request(const line_request &other)=delete
line_request & operator=(const line_request &other)=delete
line::values get_values()
Get the values of all requested lines.
int fd() const
Get the file descriptor number associated with this line request.
::std::size_t num_lines() const
Get the number of requested lines.
line_request & reconfigure_lines(const line_config &config)
Apply new config options to requested lines.
line_request & set_value(line::offset offset, line::value value)
Set the value of a single requested line.
line::value get_value(line::offset offset)
Get the value of a single requested line.
Intermediate object storing the configuration for a line request.
Definition request-builder.hpp:29
Definition chip-info.hpp:18