merge
This commit is contained in:
@@ -25,19 +25,68 @@ void DriverBoardPinController::activate(items::DriverBoardItem &driver_board_ite
|
|||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> guard(*output_item_mutex);
|
std::lock_guard<std::mutex> guard(*output_item_mutex);
|
||||||
|
|
||||||
write_pin(driver_board_item.get_address(), true);
|
uint8_t address = driver_board_item.get_address();
|
||||||
|
|
||||||
|
this->select_mux(address/8);
|
||||||
|
this->select_adress(address);
|
||||||
|
|
||||||
|
write_pin(this->data_pin, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DriverBoardPinController::deactivate(items::DriverBoardItem &driver_board_item)
|
void DriverBoardPinController::deactivate(items::DriverBoardItem &driver_board_item)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> guard(*output_item_mutex);
|
std::lock_guard<std::mutex> guard(*output_item_mutex);
|
||||||
|
|
||||||
write_pin(driver_board_item.get_address(), false);
|
uint8_t address = driver_board_item.get_address();
|
||||||
|
|
||||||
|
this->select_mux(address/8);
|
||||||
|
this->select_adress(address);
|
||||||
|
|
||||||
|
write_pin(this->data_pin, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DriverBoardPinController::write_pin(uint8_t pin, bool value) const
|
void DriverBoardPinController::write_pin(uint8_t pin, bool value) const
|
||||||
{
|
{
|
||||||
PinController::write_pin(pin, value);
|
this->write_pin(pin, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DriverBoardPinController::select_adress(uint8_t address)
|
||||||
|
{
|
||||||
|
address = address / 8;
|
||||||
|
this->write_pin(this->address_pins[0], address & 0b001);
|
||||||
|
this->write_pin(this->address_pins[1], address & 0b010);
|
||||||
|
this->write_pin(this->address_pins[2], address & 0b100);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DriverBoardPinController::set_address_pins(std::array<uint8_t, 3> address_pins)
|
||||||
|
{
|
||||||
|
this->address_pins = address_pins;
|
||||||
|
}
|
||||||
|
void DriverBoardPinController::set_mux_pins(std::array<uint8_t, 13> mux_enable_pins)
|
||||||
|
{
|
||||||
|
this->mux_enable_pins = mux_enable_pins;
|
||||||
|
}
|
||||||
|
void DriverBoardPinController::set_data_pin(uint8_t data_pin)
|
||||||
|
{
|
||||||
|
this->data_pin = data_pin;
|
||||||
|
}
|
||||||
|
void DriverBoardPinController::set_run_pin(uint8_t run_pin)
|
||||||
|
{
|
||||||
|
this->run_pin = run_pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DriverBoardPinController::select_mux(uint8_t mux)
|
||||||
|
{
|
||||||
|
this->deselect_all_muxes();
|
||||||
|
this->write_pin(this->mux_enable_pins[mux], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DriverBoardPinController::deselect_all_muxes()
|
||||||
|
{
|
||||||
|
for(auto pin : mux_enable_pins)
|
||||||
|
{
|
||||||
|
this->write_pin(pin, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,11 +28,24 @@ public:
|
|||||||
void activate(items::DriverBoardItem & driver_board_item);
|
void activate(items::DriverBoardItem & driver_board_item);
|
||||||
void deactivate(items::DriverBoardItem & driver_board_item);
|
void deactivate(items::DriverBoardItem & driver_board_item);
|
||||||
|
|
||||||
|
void set_address_pins(std::array<uint8_t, 3> address_pins);
|
||||||
|
void set_mux_pins(std::array<uint8_t, 13> mux_enable_pins);
|
||||||
|
void set_data_pin(uint8_t data_pin);
|
||||||
|
void set_run_pin(uint8_t run_pin);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void deselect_all_muxes();
|
||||||
|
void select_mux(uint8_t mux);
|
||||||
|
void select_adress(uint8_t address);
|
||||||
void write_pin(uint8_t pin, bool value) const;
|
void write_pin(uint8_t pin, bool value) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<std::mutex> output_item_mutex;
|
std::shared_ptr<std::mutex> output_item_mutex;
|
||||||
|
|
||||||
|
std::array<uint8_t, 3> address_pins;
|
||||||
|
std::array<uint8_t, 13> mux_enable_pins;
|
||||||
|
uint8_t data_pin;
|
||||||
|
uint8_t run_pin;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace detail
|
|||||||
|
|
||||||
SoundBoardPinController::SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex,
|
SoundBoardPinController::SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex,
|
||||||
uint8_t fire_address,
|
uint8_t fire_address,
|
||||||
const std::vector<uint8_t> address_pins) :
|
const std::array<uint8_t, 7> address_pins) :
|
||||||
output_item_mutex{output_item_mutex},
|
output_item_mutex{output_item_mutex},
|
||||||
fire_address{fire_address},
|
fire_address{fire_address},
|
||||||
address_pins{address_pins}
|
address_pins{address_pins}
|
||||||
@@ -71,7 +71,7 @@ void SoundBoardPinController::write_pin(const uint8_t &pin, const bool &value) c
|
|||||||
PinController::write_pin(pin, value);
|
PinController::write_pin(pin, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundBoardPinController::set_address_pins(std::vector<uint8_t> address_pins)
|
void SoundBoardPinController::set_address_pins(std::array<uint8_t, 7> address_pins)
|
||||||
{
|
{
|
||||||
this->address_pins = address_pins;
|
this->address_pins = address_pins;
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace detail
|
|||||||
class SoundBoardPinController : public output::SoundBoardPinController
|
class SoundBoardPinController : public output::SoundBoardPinController
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex, uint8_t fire_address, const std::vector<uint8_t> address_pins);
|
explicit SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex, uint8_t fire_address, const std::array<uint8_t, 7> address_pins);
|
||||||
explicit SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex);
|
explicit SoundBoardPinController(std::shared_ptr<std::mutex> output_item_mutex);
|
||||||
~SoundBoardPinController() override = default;
|
~SoundBoardPinController() override = default;
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ public:
|
|||||||
void deactivate(const items::detail::Sound &sound);
|
void deactivate(const items::detail::Sound &sound);
|
||||||
|
|
||||||
void set_fire_address(const uint8_t & fire_address);
|
void set_fire_address(const uint8_t & fire_address);
|
||||||
void set_address_pins(const std::vector<uint8_t> address_pins);
|
void set_address_pins(const std::array<uint8_t, 7> address_pins);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void write_sound_address(const uint8_t & address) const;
|
void write_sound_address(const uint8_t & address) const;
|
||||||
@@ -40,7 +40,7 @@ private:
|
|||||||
|
|
||||||
uint8_t pin_base;
|
uint8_t pin_base;
|
||||||
uint8_t fire_address;
|
uint8_t fire_address;
|
||||||
std::vector<uint8_t> address_pins;
|
std::array<uint8_t, 7> address_pins;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,13 +52,7 @@ void SoundFactory::set_address_pins()
|
|||||||
{
|
{
|
||||||
auto address_pins = object.at(config_path::address_pins);
|
auto address_pins = object.at(config_path::address_pins);
|
||||||
|
|
||||||
std::vector<uint8_t> pins;
|
std::array<uint8_t, 7> pins;
|
||||||
|
|
||||||
//todo mach nen array draus
|
|
||||||
for (auto & pin_json : address_pins)
|
|
||||||
{
|
|
||||||
pins.push_back(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (auto & pin_json : address_pins)
|
for (auto & pin_json : address_pins)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user