From 48cfa84671048346f64236dedb53b61e27156ad9 Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 16 Oct 2021 14:51:29 +0200 Subject: Extended Gpio class with real functionality --- daemon/src/Gpio.cpp | 30 +++++++++++++++++++++++++++++- daemon/src/Gpio.h | 10 ++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) (limited to 'daemon') 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 + #include #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::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 + #include #include "Assembly.h" @@ -9,4 +11,12 @@ class Gpio { public: void apply(AssemblyContext ctx); +private: + static constexpr unsigned SIZE {24}; + std::array mode_of; + std::array 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; }; -- cgit v1.1