// // Created by rhetenor on 14.12.18. // #ifndef FLIPPR_DRIVER_OUTPUT_IMPL_DRIVERBOARDPINCONTROLLER_H #define FLIPPR_DRIVER_OUTPUT_IMPL_DRIVERBOARDPINCONTROLLER_H #include #include #include "output/DriverBoardPinController.h" #include "output/OutputPinController.h" namespace flippR_driver { namespace output { namespace detail { class DriverBoardPinController : public OutputPinController, public output::DriverBoardPinController { 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; 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: std::shared_ptr output_item_mutex; const std::map pins_driver_board; }; } } } #endif //FLIPPR_DRIVER_DRIVERBOARDPINCONTROLLER_H