@startuml /' Objects '/ namespace flippR_driver::output::items { class Display > { +Display(int address, int id) +~Display() -address : int +content : std::array -fit_string(std::string& score_string) : std::string +get_content() : std::vector +write_content(std::array content) : void +write_score(int score) : void } } namespace flippR_driver::output { class DisplayController { +DisplayController(std::vector > displays, std::shared_ptr pin_controller) +~DisplayController() -is_running : bool -pin_controller : std::shared_ptr -display_cycle_thread : std::thread -displays : std::vector > -cycle_displays() : void } } namespace flippR_driver::output::items { class DriverBoardItem { +DriverBoardItem(std::shared_ptr pin_controller, uint8_t address, std::string name) +~DriverBoardItem() } } namespace flippR_driver::output::items { abstract class IDisplay { +~IDisplay() +{abstract} get_content() : std::vector } } namespace flippR_driver::output { class IDisplayController { +~IDisplayController() } } namespace flippR_driver::output::items { abstract class IItem { +~IItem() +{abstract} get_name() : std::string +{abstract} get_address() : uint8_t } } namespace flippR_driver::output { abstract class IOutputGPIOInterface { +~IOutputGPIOInterface() +{abstract} activate(items::DriverBoardItem* driver_board_item) : void +{abstract} activate(items::SoundItem* sound) : void +{abstract} deactivate(items::DriverBoardItem* driver_board_item) : void +{abstract} deactivate(items::SoundItem* sound) : void +{abstract} write_display(std::shared_ptr display) : void } } namespace flippR_driver::output::items { class Item { +Item(std::shared_ptr pin_controller, uint8_t address, std::string name) +~Item() #gpio_interface : const std::shared_ptr #name : const std::string #address : const uint8_t +get_name() : std::string +get_address() : uint8_t } } namespace flippR_driver::output::items { class Lamp { +Lamp(std::shared_ptr pin_controller, uint8_t address, std::string name) +~Lamp() -activated : bool +is_activated() : bool +activate() : void +deactivate() : void } } namespace flippR_driver::output { class OutputDriver { +OutputDriver(std::map > solenoids, std::map > lamps, std::map > sounds, std::map > displays) +~OutputDriver() +get_display(char number) : boost::optional > +get_lamp(std::string name) : boost::optional > +get_solenoid(std::string name) : boost::optional > +get_sound(std::string name) : boost::optional > -displays : const std::map > -lamps : const std::map > -solenoids : const std::map > -sounds : const std::map > +get_displays() : std::vector > +get_lamps() : std::vector > +get_solenoids() : std::vector > +get_sounds() : std::vector > } } namespace flippR_driver::output { class OutputGPIOInterface { +OutputGPIOInterface(std::map pins_driver_board, std::map pins_sound, std::map pins_display) +~OutputGPIOInterface() -pins_display : const std::map -pins_driver_board : const std::map -pins_sound : const std::map -output_item_mutex : std::mutex +activate(items::DriverBoardItem* driver_board_item) : void +activate(items::SoundItem* sound) : void +deactivate(items::DriverBoardItem* driver_board_item) : void +deactivate(items::SoundItem* sound) : void -fire_sound(bool fire) : void -initialize_all_pins(uint8_t pin_base) : void -initialize_i2c_addresses() : void -initialize_pins() : void -select_latch(uint8_t latch) : void -select_mux(uint8_t latch) : void -select_pin(uint8_t pin) : void -write_data(bool data) : void +write_display(std::shared_ptr display) : void -write_driver_board_address(uint8_t address) : void -write_sound_address(uint8_t address) : void } } namespace flippR_driver::output::items { class Solenoid { +Solenoid(std::shared_ptr pin_controller, u_int8_t address, std::string name, std::chrono::milliseconds deactivation_time) +~Solenoid() -deactivation_time : std::chrono::milliseconds -trigger_task : std::future +trigger() : void -triggerTask() : void } } namespace flippR_driver::output::items { class Sound { +Sound(std::shared_ptr pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time, u_int id) +~Sound() -deactivation_time : std::chrono::milliseconds -play_task : std::future +id : u_int +play() : void -playTask() : void } } namespace flippR_driver::output::items { class SoundItem { +SoundItem(std::shared_ptr pin_controller, uint8_t address, std::string name) +~SoundItem() } } /' Inheritance relationships '/ namespace flippR_driver::output::items { DriverBoardItem <|-- Lamp } namespace flippR_driver::output::items { DriverBoardItem <|-- Solenoid } namespace flippR_driver::output::items { IDisplay <|-- Display } namespace flippR_driver::output { IDisplayController <|-- DisplayController } namespace flippR_driver::output::items { IItem <|-- Item } namespace flippR_driver::output { IOutputGPIOInterface <|-- OutputGPIOInterface } namespace flippR_driver::output::items { Item <|-- DriverBoardItem } namespace flippR_driver::output::items { Item <|-- SoundItem } namespace flippR_driver::output::items { SoundItem <|-- Sound } /' Aggregation relationships '/ flippR_driver::output.DisplayController o-- flippR_driver::output::items.IDisplay namespace flippR_driver::output { DisplayController o-- IOutputGPIOInterface } flippR_driver::output::items.Item o-- flippR_driver::output.IOutputGPIOInterface flippR_driver::output.OutputDriver o-- flippR_driver::output::items.IDisplay @enduml