From 48e6507293f406819471bb843fed3e17fd58237c Mon Sep 17 00:00:00 2001 From: Jonas Zeunert Date: Fri, 23 Nov 2018 15:34:38 +0100 Subject: [PATCH] implemented sound logic --- .../src/utility/OutputGPIOInterface.cpp | 26 +++++++++++++++++-- .../src/utility/OutputGPIOInterface.h | 9 ++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/FlippR-Driver/src/utility/OutputGPIOInterface.cpp b/FlippR-Driver/src/utility/OutputGPIOInterface.cpp index f8f516b..802d143 100644 --- a/FlippR-Driver/src/utility/OutputGPIOInterface.cpp +++ b/FlippR-Driver/src/utility/OutputGPIOInterface.cpp @@ -104,9 +104,11 @@ void OutputGPIOInterface::write_display(IDisplay &display) void OutputGPIOInterface::activate(output::items::ISound *sound) { + std::lock_guard guard(output_item_mutex); + write_sound_address(sound->address); - GPIOInterface::write_pin(pins_sound["fire"], 1); + fire_sound(1); } void OutputGPIOInterface::activate(output::items::IDriverBoardItem *driver_board_item) @@ -127,9 +129,13 @@ void OutputGPIOInterface::deactivate(output::items::IDriverBoardItem *driver_boa write_data(0); } -void OutputGPIOInterface::write_sound_address(u_int8_t address) +void OutputGPIOInterface::deactivate(output::items::ISound *sound) { + std::lock_guard guard(output_item_mutex); + write_sound_address(sound->address); + + fire_sound(0); } void OutputGPIOInterface::write_driver_board_address(u_int8_t address) @@ -176,5 +182,21 @@ void OutputGPIOInterface::select_pin(u_int8_t pin) write_pin(pins_driver_board["pin-select-C"], pin & 0b100) } +void OutputGPIOInterface::write_sound_address(u_int8_t address) +{ + write_pin(pins_sound["A"], address & 0b0000001) + write_pin(pins_sound["B"], address & 0b0000010) + write_pin(pins_sound["C"], address & 0b0000100) + write_pin(pins_sound["D"], address & 0b0001000) + write_pin(pins_sound["E"], address & 0b0010000) + write_pin(pins_sound["F"], address & 0b0100000) + write_pin(pins_sound["G"], address & 0b1000000) +} + +void OutputGPIOInterface::fire_sound(bool fire) +{ + GPIOInterface::write_pin(pins_sound["fire"], fire); +} + } } diff --git a/FlippR-Driver/src/utility/OutputGPIOInterface.h b/FlippR-Driver/src/utility/OutputGPIOInterface.h index e59d7c8..fd8f894 100644 --- a/FlippR-Driver/src/utility/OutputGPIOInterface.h +++ b/FlippR-Driver/src/utility/OutputGPIOInterface.h @@ -33,11 +33,11 @@ public: virtual ~OutputGPIOInterface() = default; - void activate(output::items::ISound *sound); void activate(output::items::IDriverBoardItem *driver_board_item); + void activate(output::items::ISound *sound); - void deactivate(output::items::ISound *sound); void deactivate(output::items::IDriverBoardItem *driver_board_item); + void deactivate(output::items::ISound *sound); void write_display(output::items::IDisplay &display); @@ -52,14 +52,15 @@ private: void initialize_pins(); void initialize_all_pins(u_int8_t pin_base); - void write_sound_address(u_int8_t address); void write_driver_board_address(u_int8_t address); - void select_mux(u_int8_t latch); void select_latch(u_int8_t latch); void select_pin(u_int8_t pin); void write_data(bool data); + void write_sound_address(u_int8_t address); + void fire_sound(bool fire); + private: std::mutex output_item_mutex;