From 30095d6cd8f685695bbfc1eac450c516540e7bbf Mon Sep 17 00:00:00 2001 From: Johannes Wendel Date: Mon, 15 Jul 2019 13:41:46 +0200 Subject: [PATCH] Adapted code to new layout --- .../json_example/output/Lamp_Config.json | 6 ++ .../json_example/output/Solenoid_Config.json | 6 ++ FlippR-Driver/src/PinController.cpp | 2 +- FlippR-Driver/src/PinController.h | 2 +- .../src/output/OutputDriverFactory.cpp | 3 + .../detail/DriverBoardPinController.cpp | 56 +------------------ .../output/detail/DriverBoardPinController.h | 13 ++--- .../output/items/detail/DriverBoardItem.cpp | 4 +- .../src/output/items/detail/DriverBoardItem.h | 2 +- .../src/output/items/detail/Lamp.cpp | 4 +- FlippR-Driver/src/output/items/detail/Lamp.h | 2 +- .../src/output/items/detail/Solenoid.cpp | 4 +- .../src/output/items/detail/Solenoid.h | 2 +- .../src/output/items/detail/Sound.cpp | 4 +- FlippR-Driver/src/output/items/detail/Sound.h | 2 +- 15 files changed, 37 insertions(+), 75 deletions(-) diff --git a/FlippR-Driver/contrib/json_example/output/Lamp_Config.json b/FlippR-Driver/contrib/json_example/output/Lamp_Config.json index dca6d9d..adb447b 100644 --- a/FlippR-Driver/contrib/json_example/output/Lamp_Config.json +++ b/FlippR-Driver/contrib/json_example/output/Lamp_Config.json @@ -1,4 +1,10 @@ { + "port_extender" : + [ + "name" : "extender_1", + "i2c_address" : 33, + "pin_base" : 82 + ], "lamps" : [ { diff --git a/FlippR-Driver/contrib/json_example/output/Solenoid_Config.json b/FlippR-Driver/contrib/json_example/output/Solenoid_Config.json index 0c7b7d2..94db004 100644 --- a/FlippR-Driver/contrib/json_example/output/Solenoid_Config.json +++ b/FlippR-Driver/contrib/json_example/output/Solenoid_Config.json @@ -1,4 +1,10 @@ { + "port_extender" : + [ + "name" : "extender_0", + "i2c_address" : 32, + "pin_base" : 65 + ], "deactivation_time_milliseconds" : 10, "flippers" : [ diff --git a/FlippR-Driver/src/PinController.cpp b/FlippR-Driver/src/PinController.cpp index 71c40bb..cb72ea3 100644 --- a/FlippR-Driver/src/PinController.cpp +++ b/FlippR-Driver/src/PinController.cpp @@ -27,7 +27,7 @@ void PinController::initialize_input_pin(uint8_t address) pinMode(address, INPUT); } -void PinController::initialize_output_pin(uint8_t address) +void PinController::initialize_output_pin(const uint8_t address) { pinMode(address, OUTPUT); } diff --git a/FlippR-Driver/src/PinController.h b/FlippR-Driver/src/PinController.h index f78be89..5624155 100644 --- a/FlippR-Driver/src/PinController.h +++ b/FlippR-Driver/src/PinController.h @@ -24,7 +24,7 @@ public: protected: static void initialize_input_pin(uint8_t address); - static void initialize_output_pin(uint8_t address); + static void initialize_output_pin(const uint8_t address); static void write_pin(uint8_t address, bool value); diff --git a/FlippR-Driver/src/output/OutputDriverFactory.cpp b/FlippR-Driver/src/output/OutputDriverFactory.cpp index cefe693..8ab2d2c 100644 --- a/FlippR-Driver/src/output/OutputDriverFactory.cpp +++ b/FlippR-Driver/src/output/OutputDriverFactory.cpp @@ -45,6 +45,8 @@ std::shared_ptr get_OutputDriver(std::istream& output_pin_config, json output_config; output_pin_config >> output_config; + + //TODO new board layout json driver_board_config = output_config.at("driver_board"); std::shared_ptr driver_board_pin_controller(new detail::DriverBoardPinController(parse_pins_driver_board(driver_board_config), output_pin_mutex)); auto solenoids = create_solenoids(solenoid_config, driver_board_pin_controller); @@ -232,6 +234,7 @@ std::shared_ptr create_flipper(nlohmann::json &flipper_j std::map> create_lamps(std::istream &lamp_config, std::shared_ptr &output_gpio_interface) { + //TODO initialize portextender std::map> lamps; json lamp_config_json; diff --git a/FlippR-Driver/src/output/detail/DriverBoardPinController.cpp b/FlippR-Driver/src/output/detail/DriverBoardPinController.cpp index a64247f..803470b 100644 --- a/FlippR-Driver/src/output/detail/DriverBoardPinController.cpp +++ b/FlippR-Driver/src/output/detail/DriverBoardPinController.cpp @@ -21,7 +21,7 @@ DriverBoardPinController::DriverBoardPinController(std::map guard(*output_item_mutex); - write_driver_board_address(driver_board_item.get_address()); - - write_data(true); + write_pin(driver_board_item.get_address(), true); } void DriverBoardPinController::deactivate(items::DriverBoardItem &driver_board_item) { std::lock_guard guard(*output_item_mutex); - write_driver_board_address(driver_board_item.get_address()); - - write_data(false); -} - -// todo new layout without mux! - -void DriverBoardPinController::write_driver_board_address(uint8_t address) const -{ - int latch = address / 8; - int pin = address % 8; - - select_mux(latch); - - select_latch(latch); - - select_pin(pin); -} - -void DriverBoardPinController::select_mux(uint8_t latch)const -{ - bool mux1 = latch / 8; - - write_pin(pins_driver_board.at("mux1"), mux1); - write_pin(pins_driver_board.at("mux2"), !mux1); -} - -void DriverBoardPinController::select_latch(uint8_t latch) const -{ - // todo not nice - if(latch > 8) - latch -= 8; - - write_pin(pins_driver_board.at("latch-select-A"), latch & 0b001u); - write_pin(pins_driver_board.at("latch-select-B"), latch & 0b010u); - write_pin(pins_driver_board.at("latch-select-C"), latch & 0b100u); - -} - -void DriverBoardPinController::write_data(bool data) const -{ - write_pin(pins_driver_board.at("data"), data); -} - -void DriverBoardPinController::select_pin(uint8_t pin) const -{ - write_pin(pins_driver_board.at("pin-select-A"), pin & 0b001u); - write_pin(pins_driver_board.at("pin-select-B"), pin & 0b010u); - write_pin(pins_driver_board.at("pin-select-C"), pin & 0b100u); + write_pin(driver_board_item.get_address(), false); } void DriverBoardPinController::write_pin(uint8_t pin, bool value) const diff --git a/FlippR-Driver/src/output/detail/DriverBoardPinController.h b/FlippR-Driver/src/output/detail/DriverBoardPinController.h index 2c8de2b..2d66847 100644 --- a/FlippR-Driver/src/output/detail/DriverBoardPinController.h +++ b/FlippR-Driver/src/output/detail/DriverBoardPinController.h @@ -24,16 +24,13 @@ public: DriverBoardPinController(std::map pins_driver_board, std::shared_ptr output_item_mutex); ~DriverBoardPinController() override = default; - void activate(items::DriverBoardItem &driver_board_item) override; - void deactivate(items::DriverBoardItem &driver_board_item) override; + void activate(items::DriverBoardItem & driver_board_item) override; + void deactivate(items::DriverBoardItem & driver_board_item) override; + + void initialize_port_expander(const uint8_t i2c_address, const uint8_t pin_base); + void initialize_pin(const uint8_t address); private: - void write_driver_board_address(uint8_t address) const; - void select_mux(uint8_t latch) const; - void select_latch(uint8_t latch) const; - void select_pin(uint8_t pin) const; - void write_data(bool data) const; - void write_pin(uint8_t pin, bool value) const; private: diff --git a/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp b/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp index f59ff6b..b5fa96f 100644 --- a/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp +++ b/FlippR-Driver/src/output/items/detail/DriverBoardItem.cpp @@ -6,8 +6,8 @@ using namespace flippR_driver::output; -items::detail::DriverBoardItem::DriverBoardItem(const uint8_t address) : - address(address) +items::detail::DriverBoardItem::DriverBoardItem(const uint8_t address, const uint8_t pin_base) : + address(pin_base + address) {} uint8_t items::detail::DriverBoardItem::get_address() const diff --git a/FlippR-Driver/src/output/items/detail/DriverBoardItem.h b/FlippR-Driver/src/output/items/detail/DriverBoardItem.h index 40b027a..1ef787f 100644 --- a/FlippR-Driver/src/output/items/detail/DriverBoardItem.h +++ b/FlippR-Driver/src/output/items/detail/DriverBoardItem.h @@ -21,7 +21,7 @@ namespace detail class DriverBoardItem : public output::items::DriverBoardItem { public: - DriverBoardItem(uint8_t address); + DriverBoardItem(const uint8_t address, const uint8_t pin_base); ~DriverBoardItem() override = default; diff --git a/FlippR-Driver/src/output/items/detail/Lamp.cpp b/FlippR-Driver/src/output/items/detail/Lamp.cpp index a922360..2601403 100644 --- a/FlippR-Driver/src/output/items/detail/Lamp.cpp +++ b/FlippR-Driver/src/output/items/detail/Lamp.cpp @@ -19,8 +19,8 @@ namespace items namespace detail { -Lamp::Lamp(std::shared_ptr pin_controller, uint8_t address, std::string name) : -detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), activated(false) +Lamp::Lamp(std::shared_ptr pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name) : +detail::Item(std::move(name)), DriverBoardItem(address, pin_base), pin_controller(std::move(pin_controller)), activated(false) { CLOG(INFO, OUTPUT_LOGGER) << "Created lamp " << name << " with address " << address; } diff --git a/FlippR-Driver/src/output/items/detail/Lamp.h b/FlippR-Driver/src/output/items/detail/Lamp.h index 7afe204..405830f 100644 --- a/FlippR-Driver/src/output/items/detail/Lamp.h +++ b/FlippR-Driver/src/output/items/detail/Lamp.h @@ -27,7 +27,7 @@ namespace detail class Lamp : public detail::DriverBoardItem, public detail::Item, public items::Lamp { public: - Lamp(std::shared_ptr pin_controller, uint8_t address, std::string name); + Lamp(std::shared_ptr pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name); ~Lamp() override = default; void activate() override; diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.cpp b/FlippR-Driver/src/output/items/detail/Solenoid.cpp index 289b380..d1f3ea5 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.cpp +++ b/FlippR-Driver/src/output/items/detail/Solenoid.cpp @@ -18,8 +18,8 @@ namespace items namespace detail { -Solenoid::Solenoid(std::shared_ptr pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time) -: detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time) +Solenoid::Solenoid(std::shared_ptr pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time) +: detail::Item(std::move(name)), DriverBoardItem(address, pin_base), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time) { CLOG(INFO, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << address; } diff --git a/FlippR-Driver/src/output/items/detail/Solenoid.h b/FlippR-Driver/src/output/items/detail/Solenoid.h index 7d8e543..ab3995e 100644 --- a/FlippR-Driver/src/output/items/detail/Solenoid.h +++ b/FlippR-Driver/src/output/items/detail/Solenoid.h @@ -29,7 +29,7 @@ namespace detail class Solenoid : public DriverBoardItem, public detail::Item, public items::Solenoid { public: - Solenoid(std::shared_ptr pin_controller, u_int8_t address, std::string name, std::chrono::milliseconds deactivation_time); + Solenoid(std::shared_ptr pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time); ~Solenoid() override = default; void trigger() override; diff --git a/FlippR-Driver/src/output/items/detail/Sound.cpp b/FlippR-Driver/src/output/items/detail/Sound.cpp index d967d36..0efb8df 100644 --- a/FlippR-Driver/src/output/items/detail/Sound.cpp +++ b/FlippR-Driver/src/output/items/detail/Sound.cpp @@ -20,8 +20,8 @@ namespace items namespace detail { -Sound::Sound(std::shared_ptr pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time, u_int id) -: detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id) +Sound::Sound(std::shared_ptr pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time, u_int id) +: detail::Item(std::move(name)), DriverBoardItem(address, pin_base), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id) { CLOG(INFO, OUTPUT_LOGGER) << "Created sound " << id << " with name " << name << " and address " << address; } diff --git a/FlippR-Driver/src/output/items/detail/Sound.h b/FlippR-Driver/src/output/items/detail/Sound.h index e1096b7..d9950ee 100644 --- a/FlippR-Driver/src/output/items/detail/Sound.h +++ b/FlippR-Driver/src/output/items/detail/Sound.h @@ -35,7 +35,7 @@ public: u_int id; public: - Sound(std::shared_ptr pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time, u_int id); + Sound(std::shared_ptr pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time, u_int id); ~Sound() override = default; void play() override;