implemented sound logic

This commit is contained in:
Jonas Zeunert
2018-11-23 15:34:38 +01:00
parent 76cc3f40aa
commit 48e6507293
2 changed files with 29 additions and 6 deletions

View File

@@ -104,9 +104,11 @@ void OutputGPIOInterface::write_display(IDisplay &display)
void OutputGPIOInterface::activate(output::items::ISound *sound)
{
std::lock_guard<std::mutex> 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<std::mutex> 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);
}
}
}

View File

@@ -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;