Adapted code to new layout
This commit is contained in:
@@ -1,4 +1,10 @@
|
|||||||
{
|
{
|
||||||
|
"port_extender" :
|
||||||
|
[
|
||||||
|
"name" : "extender_1",
|
||||||
|
"i2c_address" : 33,
|
||||||
|
"pin_base" : 82
|
||||||
|
],
|
||||||
"lamps" :
|
"lamps" :
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
{
|
{
|
||||||
|
"port_extender" :
|
||||||
|
[
|
||||||
|
"name" : "extender_0",
|
||||||
|
"i2c_address" : 32,
|
||||||
|
"pin_base" : 65
|
||||||
|
],
|
||||||
"deactivation_time_milliseconds" : 10,
|
"deactivation_time_milliseconds" : 10,
|
||||||
"flippers" :
|
"flippers" :
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ void PinController::initialize_input_pin(uint8_t address)
|
|||||||
pinMode(address, INPUT);
|
pinMode(address, INPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PinController::initialize_output_pin(uint8_t address)
|
void PinController::initialize_output_pin(const uint8_t address)
|
||||||
{
|
{
|
||||||
pinMode(address, OUTPUT);
|
pinMode(address, OUTPUT);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
static void initialize_input_pin(uint8_t address);
|
static void initialize_input_pin(uint8_t address);
|
||||||
|
|
||||||
static void initialize_output_pin(uint8_t address);
|
static void initialize_output_pin(const uint8_t address);
|
||||||
|
|
||||||
static void write_pin(uint8_t address, bool value);
|
static void write_pin(uint8_t address, bool value);
|
||||||
|
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ std::shared_ptr<OutputDriver> get_OutputDriver(std::istream& output_pin_config,
|
|||||||
json output_config;
|
json output_config;
|
||||||
output_pin_config >> output_config;
|
output_pin_config >> output_config;
|
||||||
|
|
||||||
|
|
||||||
|
//TODO new board layout
|
||||||
json driver_board_config = output_config.at("driver_board");
|
json driver_board_config = output_config.at("driver_board");
|
||||||
std::shared_ptr<DriverBoardPinController> driver_board_pin_controller(new detail::DriverBoardPinController(parse_pins_driver_board(driver_board_config), output_pin_mutex));
|
std::shared_ptr<DriverBoardPinController> driver_board_pin_controller(new detail::DriverBoardPinController(parse_pins_driver_board(driver_board_config), output_pin_mutex));
|
||||||
auto solenoids = create_solenoids(solenoid_config, driver_board_pin_controller);
|
auto solenoids = create_solenoids(solenoid_config, driver_board_pin_controller);
|
||||||
@@ -232,6 +234,7 @@ std::shared_ptr<items::detail::Flipper> create_flipper(nlohmann::json &flipper_j
|
|||||||
|
|
||||||
std::map<std::string, std::shared_ptr<items::Lamp>> create_lamps(std::istream &lamp_config, std::shared_ptr<DriverBoardPinController> &output_gpio_interface)
|
std::map<std::string, std::shared_ptr<items::Lamp>> create_lamps(std::istream &lamp_config, std::shared_ptr<DriverBoardPinController> &output_gpio_interface)
|
||||||
{
|
{
|
||||||
|
//TODO initialize portextender
|
||||||
std::map<std::string, std::shared_ptr<items::Lamp>> lamps;
|
std::map<std::string, std::shared_ptr<items::Lamp>> lamps;
|
||||||
|
|
||||||
json lamp_config_json;
|
json lamp_config_json;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ DriverBoardPinController::DriverBoardPinController(std::map<std::string, uint8_t
|
|||||||
uint8_t i2c_address = pins_driver_board.at("i2c_address");
|
uint8_t i2c_address = pins_driver_board.at("i2c_address");
|
||||||
uint8_t pin_base = pins_driver_board.at("pin_base");
|
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());
|
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;
|
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);
|
std::lock_guard<std::mutex> guard(*output_item_mutex);
|
||||||
|
|
||||||
write_driver_board_address(driver_board_item.get_address());
|
write_pin(driver_board_item.get_address(), true);
|
||||||
|
|
||||||
write_data(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_driver_board_address(driver_board_item.get_address());
|
write_pin(driver_board_item.get_address(), false);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DriverBoardPinController::write_pin(uint8_t pin, bool value) const
|
void DriverBoardPinController::write_pin(uint8_t pin, bool value) const
|
||||||
|
|||||||
@@ -24,16 +24,13 @@ public:
|
|||||||
DriverBoardPinController(std::map<std::string, uint8_t> pins_driver_board, std::shared_ptr<std::mutex> output_item_mutex);
|
DriverBoardPinController(std::map<std::string, uint8_t> pins_driver_board, std::shared_ptr<std::mutex> output_item_mutex);
|
||||||
~DriverBoardPinController() override = default;
|
~DriverBoardPinController() override = default;
|
||||||
|
|
||||||
void activate(items::DriverBoardItem &driver_board_item) override;
|
void activate(items::DriverBoardItem & driver_board_item) override;
|
||||||
void deactivate(items::DriverBoardItem &driver_board_item) override;
|
void deactivate(items::DriverBoardItem & driver_board_item) override;
|
||||||
|
|
||||||
|
void initialize_port_expander(const uint8_t i2c_address, const uint8_t pin_base);
|
||||||
|
void initialize_pin(const uint8_t address);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void write_driver_board_address(uint8_t address) const;
|
|
||||||
void select_mux(uint8_t latch) const;
|
|
||||||
void select_latch(uint8_t latch) const;
|
|
||||||
void select_pin(uint8_t pin) const;
|
|
||||||
void write_data(bool data) const;
|
|
||||||
|
|
||||||
void write_pin(uint8_t pin, bool value) const;
|
void write_pin(uint8_t pin, bool value) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
using namespace flippR_driver::output;
|
using namespace flippR_driver::output;
|
||||||
|
|
||||||
items::detail::DriverBoardItem::DriverBoardItem(const uint8_t address) :
|
items::detail::DriverBoardItem::DriverBoardItem(const uint8_t address, const uint8_t pin_base) :
|
||||||
address(address)
|
address(pin_base + address)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
uint8_t items::detail::DriverBoardItem::get_address() const
|
uint8_t items::detail::DriverBoardItem::get_address() const
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace detail
|
|||||||
class DriverBoardItem : public output::items::DriverBoardItem
|
class DriverBoardItem : public output::items::DriverBoardItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DriverBoardItem(uint8_t address);
|
DriverBoardItem(const uint8_t address, const uint8_t pin_base);
|
||||||
|
|
||||||
~DriverBoardItem() override = default;
|
~DriverBoardItem() override = default;
|
||||||
|
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ namespace items
|
|||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
|
||||||
Lamp::Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, uint8_t address, std::string name) :
|
Lamp::Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name) :
|
||||||
detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), activated(false)
|
detail::Item(std::move(name)), DriverBoardItem(address, pin_base), pin_controller(std::move(pin_controller)), activated(false)
|
||||||
{
|
{
|
||||||
CLOG(INFO, OUTPUT_LOGGER) << "Created lamp " << name << " with address " << address;
|
CLOG(INFO, OUTPUT_LOGGER) << "Created lamp " << name << " with address " << address;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace detail
|
|||||||
class Lamp : public detail::DriverBoardItem, public detail::Item, public items::Lamp
|
class Lamp : public detail::DriverBoardItem, public detail::Item, public items::Lamp
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, uint8_t address, std::string name);
|
Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name);
|
||||||
~Lamp() override = default;
|
~Lamp() override = default;
|
||||||
|
|
||||||
void activate() override;
|
void activate() override;
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ namespace items
|
|||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
|
||||||
Solenoid::Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time)
|
Solenoid::Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time)
|
||||||
: detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time)
|
: detail::Item(std::move(name)), DriverBoardItem(address, pin_base), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time)
|
||||||
{
|
{
|
||||||
CLOG(INFO, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << address;
|
CLOG(INFO, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << address;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace detail
|
|||||||
class Solenoid : public DriverBoardItem, public detail::Item, public items::Solenoid
|
class Solenoid : public DriverBoardItem, public detail::Item, public items::Solenoid
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, u_int8_t address, std::string name, std::chrono::milliseconds deactivation_time);
|
Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time);
|
||||||
~Solenoid() override = default;
|
~Solenoid() override = default;
|
||||||
|
|
||||||
void trigger() override;
|
void trigger() override;
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ namespace items
|
|||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
|
||||||
Sound::Sound(std::shared_ptr<SoundBoardPinController> pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time, u_int id)
|
Sound::Sound(std::shared_ptr<SoundBoardPinController> pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time, u_int id)
|
||||||
: detail::Item(std::move(name)), DriverBoardItem(address), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id)
|
: detail::Item(std::move(name)), DriverBoardItem(address, pin_base), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id)
|
||||||
{
|
{
|
||||||
CLOG(INFO, OUTPUT_LOGGER) << "Created sound " << id << " with name " << name << " and address " << address;
|
CLOG(INFO, OUTPUT_LOGGER) << "Created sound " << id << " with name " << name << " and address " << address;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public:
|
|||||||
u_int id;
|
u_int id;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Sound(std::shared_ptr<SoundBoardPinController> pin_controller, uint8_t address, std::string name, std::chrono::milliseconds deactivation_time, u_int id);
|
Sound(std::shared_ptr<SoundBoardPinController> pin_controller, const uint8_t address, const uint8_t pin_base, const std::string name, std::chrono::milliseconds deactivation_time, u_int id);
|
||||||
~Sound() override = default;
|
~Sound() override = default;
|
||||||
|
|
||||||
void play() override;
|
void play() override;
|
||||||
|
|||||||
Reference in New Issue
Block a user