update outputcontroller
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);
|
||||
|
||||
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)
|
||||
{
|
||||
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
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user