Adapted code to new layout

This commit is contained in:
Johannes Wendel
2019-07-15 13:41:46 +02:00
parent f7e08ed8ba
commit 30095d6cd8
15 changed files with 37 additions and 75 deletions

View File

@@ -21,7 +21,7 @@ DriverBoardPinController::DriverBoardPinController(std::map<std::string, uint8_t
uint8_t i2c_address = pins_driver_board.at("i2c_address");
uint8_t pin_base = pins_driver_board.at("pin_base");
initialize_i2c_address(i2c_address, pin_base);
initialize_pins_output(pin_base, pins_driver_board.begin(), pins_driver_board.end());
CLOG(INFO, OUTPUT_LOGGER) << "Created DriverBoardPinController with i2c_address 0x" << std::hex << i2c_address << " and pin_base " << std::dec << pin_base;
@@ -31,64 +31,14 @@ void DriverBoardPinController::activate(items::DriverBoardItem &driver_board_ite
{
std::lock_guard<std::mutex> guard(*output_item_mutex);
write_driver_board_address(driver_board_item.get_address());
write_data(true);
write_pin(driver_board_item.get_address(), true);
}
void DriverBoardPinController::deactivate(items::DriverBoardItem &driver_board_item)
{
std::lock_guard<std::mutex> guard(*output_item_mutex);
write_driver_board_address(driver_board_item.get_address());
write_data(false);
}
// todo new layout without mux!
void DriverBoardPinController::write_driver_board_address(uint8_t address) const
{
int latch = address / 8;
int pin = address % 8;
select_mux(latch);
select_latch(latch);
select_pin(pin);
}
void DriverBoardPinController::select_mux(uint8_t latch)const
{
bool mux1 = latch / 8;
write_pin(pins_driver_board.at("mux1"), mux1);
write_pin(pins_driver_board.at("mux2"), !mux1);
}
void DriverBoardPinController::select_latch(uint8_t latch) const
{
// todo not nice
if(latch > 8)
latch -= 8;
write_pin(pins_driver_board.at("latch-select-A"), latch & 0b001u);
write_pin(pins_driver_board.at("latch-select-B"), latch & 0b010u);
write_pin(pins_driver_board.at("latch-select-C"), latch & 0b100u);
}
void DriverBoardPinController::write_data(bool data) const
{
write_pin(pins_driver_board.at("data"), data);
}
void DriverBoardPinController::select_pin(uint8_t pin) const
{
write_pin(pins_driver_board.at("pin-select-A"), pin & 0b001u);
write_pin(pins_driver_board.at("pin-select-B"), pin & 0b010u);
write_pin(pins_driver_board.at("pin-select-C"), pin & 0b100u);
write_pin(driver_board_item.get_address(), false);
}
void DriverBoardPinController::write_pin(uint8_t pin, bool value) const