libgpiod
chip.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_CHIP_HPP__
9 #define __LIBGPIOD_CXX_CHIP_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 <filesystem>
19 #include <memory>
20 
21 #include "line.hpp"
22 
23 namespace gpiod {
24 
25 class chip_info;
26 class info_event;
27 class line_config;
28 class line_info;
29 class line_request;
30 class request_builder;
31 class request_config;
32 
36 class chip final
37 {
38 public:
39 
45  explicit chip(const ::std::filesystem::path& path);
46 
51  chip(chip&& other) noexcept;
52 
53  ~chip();
54 
55  chip& operator=(const chip& other) = delete;
56 
62  chip& operator=(chip&& other) noexcept;
63 
71  explicit operator bool() const noexcept;
72 
78  void close();
79 
84  ::std::filesystem::path path() const;
85 
90  chip_info get_info() const;
91 
98  line_info get_line_info(line::offset offset) const;
99 
106  line_info watch_line_info(line::offset offset) const;
107 
112  void unwatch_line_info(line::offset offset) const;
113 
118  int fd() const;
119 
130  bool wait_info_event(const ::std::chrono::nanoseconds& timeout) const;
131 
136  info_event read_info_event() const;
137 
144  int get_line_offset_from_name(const ::std::string& name) const;
145 
151 
152 private:
153 
154  struct impl;
155 
156  ::std::shared_ptr<impl> _m_priv;
157 
158  chip(const chip& other);
159 
160  friend request_builder;
161 };
162 
169 ::std::ostream& operator<<(::std::ostream& out, const chip& chip);
170 
171 } /* namespace gpiod */
172 
173 #endif /* __LIBGPIOD_CXX_CHIP_HPP__ */
Definition: chip-info.hpp:18
Represents an immutable snapshot of GPIO chip information.
Definition: chip-info.hpp:25
line_info get_line_info(line::offset offset) const
Retrieve the current snapshot of line information for a single line.
line_info watch_line_info(line::offset offset) const
Wrapper around gpiod::chip::get_line_info that retrieves the line info and starts watching the line f...
::std::ostream & operator<<(::std::ostream &out, const chip_info &chip)
Stream insertion operator for GPIO chip objects.
info_event read_info_event() const
Read a single line status change event from this chip.
void unwatch_line_info(line::offset offset) const
Stop watching the line at given offset for info events.
request_builder prepare_request()
Create a request_builder associated with this chip.
chip & operator=(const chip &other)=delete
Intermediate object storing the configuration for a line request.
Definition: request-builder.hpp:28
int get_line_offset_from_name(const ::std::string &name) const
Map a GPIO line's name to its offset within the chip.
Immutable object containing data about a single line info event.
Definition: info-event.hpp:29
chip_info get_info() const
Get information about the chip.
Represents a GPIO chip.
Definition: chip.hpp:36
Contains an immutable snapshot of the line's state at the time when the object of this class was inst...
Definition: line-info.hpp:29
void close()
Close the GPIO chip device file and free associated resources.
::std::filesystem::path path() const
Get the filesystem path that was used to open this GPIO chip.
Wrapper around unsigned int for representing line offsets.
Definition: line.hpp:29
int fd() const
Get the file descriptor associated with this chip.
bool wait_info_event(const ::std::chrono::nanoseconds &timeout) const
Wait for line status events on any of the watched lines exposed by this chip.
chip(const ::std::filesystem::path &path)
Instantiates a new chip object by opening the device file indicated by the path argument.