/workspaces/astro/sol3-sdk/cpp/sol3/gpio/gpio_input_signal.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/gpio/gpio_input_signal.h Source File
Space-ng SDK
gpio_input_signal.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 
3 #pragma once
4 
5 #include "sol3/core/event_signal.h"
6 #include "sol3/gpio/gpio.h"
8 
9 #include <spdlog/spdlog.h>
10 
11 #include <stdexcept>
12 
13 namespace sol3::gpio {
14 
18  public:
20  : edge_(pin.getOptions().edge),
21  listener_(
22  std::move(pin), [this](sol3::gpio::GpioInputEvent const& event) {
23  if (event.edge == edge_) {
24  signal_.notify();
25  }
26  }) {
27  if (edge_ == GpioEdge::BOTH) {
28  throw std::invalid_argument(
29  "Cannot signal input event on GpioEdge::BOTH.");
30  }
31  }
32 
33  core::EventSignal const& signal() const { return signal_; }
34 
35  void start() { listener_.start(); }
36 
37  void stop() { listener_.stop(); }
38 
39  private:
40  GpioEdge edge_;
41  core::EventSignal signal_;
42  GpioInputListener listener_;
43 };
44 
45 } // namespace sol3::gpio
Definition: event_signal.h:15
void notify()
Notify all waiting threads of an event.
Definition: event_signal.h:40
Definition: gpio_input_listener.h:26
void start()
Start monitoring GPIO events.
void stop()
Stop monitoring GPIO events.
RAII wrapper for GPIO input pins.
Definition: gpio.h:73
Definition: gpio_input_signal.h:17
void stop()
Definition: gpio_input_signal.h:37
void start()
Definition: gpio_input_signal.h:35
GpioInputSignal(GpioInputPin pin)
Definition: gpio_input_signal.h:19
core::EventSignal const & signal() const
Definition: gpio_input_signal.h:33
Definition: gpio.h:11
GpioEdge
Edge trigger modes for GPIO input event detection.
Definition: gpio.h:17
@ BOTH
Trigger on both transitions.
Definition: carrier_board_msg_spec.h:10
Definition: shmem_buffer.h:219
Event on a GPIO input pin.
Definition: gpio_input_listener.h:14