diff options
author | Aki <please@ignore.pl> | 2021-10-16 14:51:29 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2021-10-16 14:51:29 +0200 |
commit | 48cfa84671048346f64236dedb53b61e27156ad9 (patch) | |
tree | 4601501a3090200285b82109b58b2321da3902ba /daemon | |
parent | e811b2f7a084ee34e37b6eb79b9dc2f14d9d1dac (diff) | |
download | hwd-48cfa84671048346f64236dedb53b61e27156ad9.zip hwd-48cfa84671048346f64236dedb53b61e27156ad9.tar.gz hwd-48cfa84671048346f64236dedb53b61e27156ad9.tar.bz2 |
Extended Gpio class with real functionality
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/src/Gpio.cpp | 30 | ||||
-rw-r--r-- | daemon/src/Gpio.h | 10 |
2 files changed, 39 insertions, 1 deletions
diff --git a/daemon/src/Gpio.cpp b/daemon/src/Gpio.cpp index 656c585..23341aa 100644 --- a/daemon/src/Gpio.cpp +++ b/daemon/src/Gpio.cpp @@ -1,5 +1,7 @@ #include "Gpio.h" +#include <limits> + #include <rpc/server.h> #include "Assembly.h" @@ -7,5 +9,31 @@ void Gpio::apply(AssemblyContext ctx) { - ctx.bind("nothing", []{}); + ctx.bind("/set_mode", [&](const unsigned port, const short mode){ set_mode(port, mode); }); + ctx.bind("/write", [&](const unsigned port, const short value){ write(port, value); }); + ctx.bind("/read", [&](const unsigned port) -> short { return read(port); }); +} + + +void Gpio::set_mode(const unsigned port, const short mode) +{ + if (SIZE <= port) + return; + mode_of[port] = mode & 0x1; +} + + +void Gpio::write(const unsigned port, const short value) +{ + if (SIZE <= port) + return; + value_of[port] = value & 0x1; +} + + +short Gpio::read(const unsigned port) const +{ + if (SIZE <= port) + return std::numeric_limits<short>::max(); + return value_of[port]; } diff --git a/daemon/src/Gpio.h b/daemon/src/Gpio.h index ef77631..e3941f6 100644 --- a/daemon/src/Gpio.h +++ b/daemon/src/Gpio.h @@ -1,5 +1,7 @@ #pragma once +#include <array> + #include <rpc/server.h> #include "Assembly.h" @@ -9,4 +11,12 @@ class Gpio { public: void apply(AssemblyContext ctx); +private: + static constexpr unsigned SIZE {24}; + std::array<short, SIZE> mode_of; + std::array<short, SIZE> value_of; + + void set_mode(const unsigned port, const short mode); + void write(const unsigned port, const short value); + short read(const unsigned port) const; }; |