#include "gpio_explorer.hpp" #include #include #include int waveLine[5] = {1, 1, 1, 1, 0}; GPIOExplorer *g_gpioExplorer = nullptr; GPIOExplorer::GPIOExplorer(const char *chipname, int line_offset) { // Initialize the status queue with 0 m_StatusList.push_back(1); m_StatusList.push_back(1); m_StatusList.push_back(1); m_StatusList.push_back(1); m_StatusList.push_back(1); chip = gpiod_chip_open_by_name(chipname); if (!chip) { throw std::runtime_error("Error opening chip"); } line = gpiod_chip_get_line(chip, line_offset); if (!line) { gpiod_chip_close(chip); throw std::runtime_error("Error getting line"); } int ret = gpiod_line_request_input(line, "gpio_explorer"); if (ret < 0) { gpiod_chip_close(chip); throw std::runtime_error("Error requesting rising edge events"); } std::thread([this] { while(true) { int ret; ret = gpiod_line_get_value(line); std::this_thread::sleep_for(std::chrono::milliseconds(5)); m_StatusList.push_back(ret); m_StatusList.pop_front(); if(ret == 0) { if(detectZWave()) { std::lock_guard lock(m_mutex); std::this_thread::sleep_for(std::chrono::milliseconds(m_nWaitingTime)); FailingStatus = 0x07; //std::cout << "Status changed!!" << std::endl; //std::cout << "Waiting time is " << m_nWaitingTime <::iterator iter = m_StatusList.begin(); while (iter != m_StatusList.end()) { // std::cout << "-" <<*iter; if (*iter != waveLine[i]) { check = false; } iter++; i++; } // std::cout <