diff --git a/FlippR-Driver/contrib/json_example/output/Display_Config.json b/FlippR-Driver/contrib/json_example/output/Display_Config.json index 2998018..397d6c7 100644 --- a/FlippR-Driver/contrib/json_example/output/Display_Config.json +++ b/FlippR-Driver/contrib/json_example/output/Display_Config.json @@ -1,4 +1,4 @@ -{ + { "update_frequency": 1000, "display_board" : { @@ -15,7 +15,8 @@ "C": 6, "D": 5 }, - "run" : 12 + "run" : 21, + "lt" : 26 }, "displays" : [ diff --git a/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp b/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp index 9a6c9c9..0e778ea 100644 --- a/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp +++ b/FlippR-Driver/src/output/detail/DisplayBoardPinController.cpp @@ -5,6 +5,7 @@ #include "output/detail/DisplayBoardPinController.h" #include +#include #include "utility/config.h" @@ -16,12 +17,10 @@ namespace detail { DisplayBoardPinController::DisplayBoardPinController(std::map & pins_display) : - pins_display_board{std::move(pins_display)} + pins_display_board{} { + this->set_pin_map(pins_display); initialize_pins_output(); - - clear(); - CLOG(DEBUG, OUTPUT_LOGGER) << "Created DisplayBoardPinController"; } @@ -31,26 +30,20 @@ DisplayBoardPinController::DisplayBoardPinController() : CLOG(DEBUG, OUTPUT_LOGGER) << "Created DisplayBoardPinController without pin map"; } -void DisplayBoardPinController::clear() -{ - std::for_each(this->pins_display_board.begin(), this->pins_display_board.end(), [](auto& pin) { write_pin(pin.second, 0); }); -} - void DisplayBoardPinController::initDisplay(const items::OutputDisplay &display) const { initialize_output_pin(display.get_address()); - - write_pin(display.get_address(), 0); + write_pin(display.get_address(), DISPLAY_LOW); } void DisplayBoardPinController::activate_displays() const { - write_pin(pins_display_board.at("run"), 1); + write_pin(pins_display_board.at("run"), DISPLAY_LOW); } void DisplayBoardPinController::deactivate_displays() const { - write_pin(pins_display_board.at("run"), 0); + write_pin(pins_display_board.at("run"), DISPLAY_HIGH); } void DisplayBoardPinController::write_display(const items::OutputDisplay &display) const @@ -66,11 +59,8 @@ void DisplayBoardPinController::write_display(const items::OutputDisplay &displa void DisplayBoardPinController::write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) const { select_display_segment(position); - select_display_digit(content); - run_display(display_address); - std::this_thread::sleep_for(std::chrono::milliseconds(DISPLAY_SLEEP_TIME_MILLI)); } @@ -91,25 +81,33 @@ void DisplayBoardPinController::select_display_digit(uint8_t content) const void DisplayBoardPinController::run_display(uint8_t address) const { - write_pin(address, 1); - write_pin(address, 0); + write_pin(address, DISPLAY_HIGH); + write_pin(address, DISPLAY_LOW); } void DisplayBoardPinController::set_pin_map(std::map & pins_display) { this->pins_display_board.insert(pins_display.begin(), pins_display.end()); - this->initialize_pins_output(); - - clear(); + this->init_pin_states(); } void DisplayBoardPinController::initialize_pins_output() { - for(auto& pin : this->pins_display_board) { + for(auto& pin : this->pins_display_board) + { initialize_output_pin(pin.second); } } +void DisplayBoardPinController::init_pin_states() +{ + for(auto& pin : this->pins_display_board) + { + write_pin(pin.second, DISPLAY_LOW); + } + write_pin(this->pins_display_board["run"], DISPLAY_HIGH); +} + } } } \ No newline at end of file diff --git a/FlippR-Driver/src/output/detail/DisplayBoardPinController.h b/FlippR-Driver/src/output/detail/DisplayBoardPinController.h index 7dcaf84..9fe3bc0 100644 --- a/FlippR-Driver/src/output/detail/DisplayBoardPinController.h +++ b/FlippR-Driver/src/output/detail/DisplayBoardPinController.h @@ -34,11 +34,11 @@ public: private: void initialize_pins_output(); - void clear(); void write_display_digit(uint8_t display_address, uint8_t content, uint8_t position) const; void select_display_segment(uint8_t digit) const; void select_display_digit(uint8_t content) const; void run_display(uint8_t address) const; + void init_pin_states(); private: std::map pins_display_board; diff --git a/FlippR-Driver/src/output/detail/DisplayController.cpp b/FlippR-Driver/src/output/detail/DisplayController.cpp index c072697..2f7948f 100644 --- a/FlippR-Driver/src/output/detail/DisplayController.cpp +++ b/FlippR-Driver/src/output/detail/DisplayController.cpp @@ -34,7 +34,7 @@ DisplayController::DisplayController(std::mapdisplay_cycle_thread = std::thread(&DisplayController::cycle_displays, this); + this->display_cycle_thread = std::thread(&DisplayController::cycle_displays, this); CLOG(DEBUG, OUTPUT_LOGGER) << "Created DisplayController and started cycling them."; } diff --git a/FlippR-Driver/src/output/factories/DisplayFactory.cpp b/FlippR-Driver/src/output/factories/DisplayFactory.cpp index 49613b4..8910e42 100644 --- a/FlippR-Driver/src/output/factories/DisplayFactory.cpp +++ b/FlippR-Driver/src/output/factories/DisplayFactory.cpp @@ -45,6 +45,7 @@ void DisplayFactory::create_pin_map() { nlohmann::json board_config = this->object.at(config_path::display_board); this->pin_map["run"] = board_config.at(config_path::run_pin); + this->pin_map["lt"] = board_config.at(config_path::display_lt_pin); nlohmann::json segment_select = board_config.at(config_path::display_segement_select); this->pin_map["segment_select_A"] = segment_select.at("A"); diff --git a/FlippR-Driver/src/output/factories/ItemFactory.h b/FlippR-Driver/src/output/factories/ItemFactory.h index 216bb2b..1aa4182 100644 --- a/FlippR-Driver/src/output/factories/ItemFactory.h +++ b/FlippR-Driver/src/output/factories/ItemFactory.h @@ -48,6 +48,7 @@ namespace config_path const char display_digit_select[] = "digit_select"; const char display_digits[] = "digits"; const char display_list[] = "displays"; + const char display_lt_pin[] = "lt"; } class ItemFactory diff --git a/FlippR-Driver/src/output/items/detail/Display.cpp b/FlippR-Driver/src/output/items/detail/Display.cpp index dd8d037..14bb4a9 100644 --- a/FlippR-Driver/src/output/items/detail/Display.cpp +++ b/FlippR-Driver/src/output/items/detail/Display.cpp @@ -45,8 +45,8 @@ std::string Display::fit_score_string(std::string & score_string, const unsigned if (score_length > length) { CLOG(DEBUG, OUTPUT_LOGGER) << "Score too long for display"; - std::string full_display; - return full_display.insert(0, length, '9'); + std::string filled_display; + return filled_display.insert(0, length, '9'); } score_string.insert(0, length - score_length, '\0'); diff --git a/FlippR-Driver/src/utility/wiringPiTesting.hpp b/FlippR-Driver/src/utility/wiringPiTesting.hpp index b952d71..82d38a8 100644 --- a/FlippR-Driver/src/utility/wiringPiTesting.hpp +++ b/FlippR-Driver/src/utility/wiringPiTesting.hpp @@ -10,6 +10,8 @@ #define INPUT 0 #define OUTPUT 1 +#define DISPLAY_HIGH 0 +#define DISPLAY_LOW 1 static int wiringPiSetup() { diff --git a/cli/main.py b/cli/main.py old mode 100644 new mode 100755