From 163db5b0a5cce79129e3670685e7407b50c726ef Mon Sep 17 00:00:00 2001 From: Sander Speetjens Date: Mon, 14 Apr 2025 08:08:32 +0200 Subject: [PATCH] server gpio Add try catch around configuration of pin --- server/gpio/gpio.cpp | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/server/gpio/gpio.cpp b/server/gpio/gpio.cpp index d5583de..277f8c3 100644 --- a/server/gpio/gpio.cpp +++ b/server/gpio/gpio.cpp @@ -24,21 +24,30 @@ void GPIO::configure_pin(Direction dir, uint8_t gpio) m_offset = gpio; if (dir == Direction::Output) { - m_request = std::make_unique( - ::gpiod::chip(chip_path) - .prepare_request() - .set_consumer("unisim_cpp") - .add_line_settings(m_offset, ::gpiod::line_settings().set_direction(::gpiod::line::direction::OUTPUT)) - .do_request()); + try { + m_request = std::make_unique( + ::gpiod::chip(chip_path) + .prepare_request() + .set_consumer("unisim_cpp") + .add_line_settings(m_offset, ::gpiod::line_settings().set_direction(::gpiod::line::direction::OUTPUT)) + .do_request()); + } catch (...) { + SPDLOG_CRITICAL("Could not set gpio {} as output, run binary as root", gpio); + } } if (dir == Direction::Input) { - m_request = std::make_unique( - ::gpiod::chip(chip_path) - .prepare_request() - .set_consumer("unisim_cpp") - .add_line_settings(m_offset, ::gpiod::line_settings().set_direction(::gpiod::line::direction::INPUT)) - .do_request()); + try { + m_request = std::make_unique( + ::gpiod::chip(chip_path) + .prepare_request() + .set_consumer("unisim_cpp") + .add_line_settings(m_offset, ::gpiod::line_settings().set_direction(::gpiod::line::direction::INPUT)) + .do_request()); + } catch (...) { + SPDLOG_CRITICAL("Could not set gpio {} as input, run binary as root", gpio); + } + } } void GPIO::set_value(bool value)