diff --git a/src/devices/arduino-homecockpit/ArduinoHomeCockpit.cpp b/src/devices/arduino-homecockpit/ArduinoHomeCockpit.cpp index 0b463c2..a6f03aa 100644 --- a/src/devices/arduino-homecockpit/ArduinoHomeCockpit.cpp +++ b/src/devices/arduino-homecockpit/ArduinoHomeCockpit.cpp @@ -31,8 +31,10 @@ ArduinoHomeCockpit::ArduinoHomeCockpit(ClassConfiguration& config) :UsbHidDevice return; } + register_selectors(arduino_buttons); register_buttons(arduino_buttons); register_displays(arduino_displays); + register_lights(arduino_lights); for (auto config_display : get_config().generic_displays) { @@ -137,14 +139,20 @@ int ArduinoHomeCockpit::read_board_configuration(std::string file_name, unsigned continue; } + if (std::regex_match(line.c_str(), m, std::regex(TOKEN_LIGHT))) + { + unsigned int bit_index = stoi(m[2]); + arduino_lights.push_back(PanelLight(register_index * 8 + bit_index, m[1])); + + Logger(TLogLevel::logDEBUG) << "board config: add light: " << m[1] << " [" << register_index << "," << bit_index << "]" << std::endl; + continue; + } + Logger(TLogLevel::logERROR) << "board config: invalid config line (" << current_line_nr << "): " << line << std::endl; exit_status = EXIT_FAILURE; } input_file.close(); - - register_selectors(arduino_buttons); - return exit_status; } diff --git a/src/devices/arduino-homecockpit/ArduinoHomeCockpit.h b/src/devices/arduino-homecockpit/ArduinoHomeCockpit.h index 189961a..9423f72 100644 --- a/src/devices/arduino-homecockpit/ArduinoHomeCockpit.h +++ b/src/devices/arduino-homecockpit/ArduinoHomeCockpit.h @@ -13,6 +13,8 @@ class ArduinoHomeCockpit :public UsbHidDevice private: std::vector arduino_buttons; std::vector arduino_displays; + std::vector arduino_lights; + int read_board_configuration(std::string file_name, unsigned int expected_vid, unsigned int expected_pid); unsigned int register_index; @@ -22,6 +24,7 @@ class ArduinoHomeCockpit :public UsbHidDevice const std::string TOKEN_REGISTER = "\\[register:adr=([0-9]+)\\]"; const std::string TOKEN_BUTTON = "button:id=\"([a-zA-Z0-9_-]+)\",bit=([0-9]+)"; const std::string TOKEN_DISPLAY = "display:id=\"([a-zA-Z0-9_-]+)\",width=([0-9]+)"; + const std::string TOKEN_LIGHT = "light:id=\"([a-zA-Z0-9_-]+)\",bit=([0-9]+)"; public: ArduinoHomeCockpit(ClassConfiguration& config); int connect(hid_device* _device_handle);