Fixes some issues with sounds and the appropriate factory. Further moved the calculation of pin addresses with pin base into the factories

This commit is contained in:
Johannes Wendel
2020-01-07 00:47:59 +01:00
parent 02709e650f
commit ee5a87ae15
18 changed files with 145 additions and 141 deletions

View File

@@ -59,10 +59,9 @@ std::map<std::string, std::shared_ptr<ItemType>> get_items(const std::string &co
nlohmann::json config_json;
config_stream >> config_json;
FactoryType factory{config_json, std::static_pointer_cast<ControllerType>(pin_controller)};
std::map<std::string, std::shared_ptr<ItemType>> map;
try{
FactoryType factory{config_json, std::static_pointer_cast<ControllerType>(pin_controller)};
map = factory.getItemMap();
}
catch(json::exception & e)

View File

@@ -158,6 +158,8 @@ void OutputDriver::shut_down_driver() const
this->deactivate_all_flipper_relays();
this->deactivate_all_lamps();
this->deactivate_displays();
CLOG(INFO, OUTPUT_LOGGER) << "Deactivated all output items.";
}

View File

@@ -71,18 +71,28 @@ void SoundBoardPinController::write_pin(const uint8_t &pin, const bool &value) c
{
PinController::write_pin(pin, value);
PinController::write_pin(this->fire_address, true);
PinController::write_pin(this->fire_address, false);
}
void SoundBoardPinController::set_address_pins(std::vector<uint8_t> address_pins)
{
this->address_pins = address_pins;
//print string in a nice manner
std::stringstream ss;
for (auto & p : address_pins)
{
ss << int{p} << ", ";
}
ss << std::string(2, 0x08);
CLOG(DEBUG, OUTPUT_LOGGER) << "Pin addresses for sounds set to: [" << ss.str() << "]";
}
void SoundBoardPinController::set_fire_address(const uint8_t &fire_address)
{
this->fire_address = fire_address;
CLOG(DEBUG, OUTPUT_LOGGER) << "Fire-pin address for sounds set to: " << int{fire_address};
}
}

View File

@@ -29,7 +29,7 @@ std::map<std::string, std::shared_ptr<items::Flipper>> FlipperFactory::getItemMa
auto extender = flipper.at(config_path::item_extender).get<std::string>();
auto pin_base = this->get_extender_pin_base(extender);
auto flipper_item = std::make_shared<items::detail::Flipper>(std::static_pointer_cast<DriverBoardPinController>(this->pin_controller), address, pin_base, name);
auto flipper_item = std::make_shared<items::detail::Flipper>(std::static_pointer_cast<DriverBoardPinController>(this->pin_controller), address + pin_base, name);
flipper_map.emplace(name, flipper_item);
}
return flipper_map;

View File

@@ -28,7 +28,8 @@ std::map<std::string, std::shared_ptr<items::Lamp>> LampFactory::getItemMap()
auto address = lamp.at(config_path::item_address).get<uint8_t >();
auto extender = lamp.at(config_path::item_extender).get<std::string>();
auto pin_base = this->get_extender_pin_base(extender);
auto lamp_item = std::make_shared<items::detail::Lamp>(std::static_pointer_cast<DriverBoardPinController>(this->pin_controller), address, pin_base, name);
auto lamp_item = std::make_shared<items::detail::Lamp>(std::static_pointer_cast<DriverBoardPinController>(this->pin_controller), address + pin_base, name);
lamp_map.emplace(name, lamp_item);
}
return lamp_map;

View File

@@ -40,7 +40,7 @@ std::map<std::string, std::shared_ptr<items::Solenoid>> SolenoidFactory::getItem
deactivation_time_chrono = std::chrono::milliseconds{solenoid.at(config_path::deactivation_time).get<uint8_t>()};
}
auto solenoid_item = std::make_shared<items::detail::Solenoid>(std::static_pointer_cast<DriverBoardPinController>(this->pin_controller), address, pin_base, name, deactivation_time_chrono);
auto solenoid_item = std::make_shared<items::detail::Solenoid>(std::static_pointer_cast<DriverBoardPinController>(this->pin_controller), address + pin_base, name, deactivation_time_chrono);
solenoid_map.emplace(name, solenoid_item);
}
return solenoid_map;

View File

@@ -33,8 +33,6 @@ std::map<std::string, std::shared_ptr<items::Sound>> SoundFactory::getItemMap()
{
auto name = sound.at(config_path::item_name).get<std::string>();
auto address = sound.at(config_path::item_address).get<uint8_t >();
auto extender = sound.at(config_path::item_extender).get<std::string>();
auto pin_base = this->get_extender_pin_base(extender);
auto id = sound.at(config_path::item_identifier).get<uint>();
std::chrono::milliseconds deactivation_time_chrono{this->deactivation_time};
@@ -42,7 +40,7 @@ std::map<std::string, std::shared_ptr<items::Sound>> SoundFactory::getItemMap()
{
deactivation_time_chrono = std::chrono::milliseconds{sound.at(config_path::deactivation_time).get<uint8_t>()};
}
auto sound_item = std::make_shared<items::detail::Sound>(std::static_pointer_cast<SoundBoardPinController>(this->pin_controller), address, pin_base, name, deactivation_time_chrono, id);
auto sound_item = std::make_shared<items::detail::Sound>(std::static_pointer_cast<SoundBoardPinController>(this->pin_controller), address, name, deactivation_time_chrono, id);
sound_map.emplace(name, sound_item);
}
@@ -67,9 +65,21 @@ void SoundFactory::set_address_pins()
std::vector<uint8_t> pins;
for (auto & pin : address_pins)
for (auto & pin_json : address_pins)
{
pins.push_back(pin.get<uint8_t>());
pins.push_back(0);
}
for (auto & pin_json : address_pins)
{
uint8_t pin = pin_json.at(config_path::item_address).get<uint8_t>();
if (pin_json.find(config_path::item_extender) != pin_json.end())
{
auto extender_name = pin_json.at(config_path::item_extender).get<std::string>();
pin += this->get_extender_pin_base(extender_name);
}
uint8_t id = pin_json.at(config_path::item_identifier).get<uint8_t>();
pins[id] = pin;
}
std::dynamic_pointer_cast<detail::SoundBoardPinController>(this->pin_controller)->set_address_pins(pins);

View File

@@ -6,8 +6,8 @@
using namespace flippR_driver::output;
items::detail::DriverBoardItem::DriverBoardItem(std::shared_ptr<PinController> pin_controller, const uint8_t & address, const uint8_t & pin_base) :
address(pin_base + address)
items::detail::DriverBoardItem::DriverBoardItem(std::shared_ptr<PinController> pin_controller, const uint8_t & address) :
address(address)
{
pin_controller->initialize_output_pin(this->address);
}

View File

@@ -21,7 +21,7 @@ namespace detail
class DriverBoardItem : public output::items::DriverBoardItem
{
public:
DriverBoardItem(std::shared_ptr<PinController> pin_controller, const uint8_t & address, const uint8_t & pin_base);
DriverBoardItem(std::shared_ptr<PinController> pin_controller, const uint8_t & address);
~DriverBoardItem() override = default;

View File

@@ -20,10 +20,10 @@ namespace items
namespace detail
{
Flipper::Flipper(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name) :
Item(std::move(name)), DriverBoardItem(pin_controller, address, pin_base), pin_controller(std::move(pin_controller))
Flipper::Flipper(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name) :
Item(std::move(name)), DriverBoardItem(pin_controller, address), pin_controller(std::move(pin_controller))
{
CLOG(DEBUG, OUTPUT_LOGGER) << "Created flipper \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address);
CLOG(DEBUG, OUTPUT_LOGGER) << "Created flipper \"" << name << "\" with address " << int(address);
}
Flipper::~Flipper()

View File

@@ -23,7 +23,7 @@ namespace detail
class Flipper : public detail::Item, public items::Flipper, public detail::DriverBoardItem
{
public:
Flipper(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name);
Flipper(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name);
~Flipper() override;
void activate() override;

View File

@@ -19,14 +19,14 @@ namespace items
namespace detail
{
Lamp::Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name) :
Lamp::Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name) :
detail::Item(std::move(name)),
DriverBoardItem(pin_controller, address, pin_base),
DriverBoardItem(pin_controller, address),
pin_controller(std::move(pin_controller)),
activated(false),
activation_time(10)
{
CLOG(DEBUG, OUTPUT_LOGGER) << "Created lamp \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address);
CLOG(DEBUG, OUTPUT_LOGGER) << "Created lamp \"" << name << "\" with address " << int(address);
}
void Lamp::activate()

View File

@@ -27,7 +27,7 @@ namespace detail
class Lamp : public detail::DriverBoardItem, public detail::Item, public items::Lamp
{
public:
Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name);
Lamp(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name);
~Lamp() override = default;
void activate() override;

View File

@@ -18,8 +18,8 @@ namespace items
namespace detail
{
Solenoid::Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name, const std::chrono::milliseconds & deactivation_time)
: detail::Item(std::move(name)), DriverBoardItem(pin_controller, address, pin_base), pin_controller(pin_controller), deactivation_time(deactivation_time)
Solenoid::Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name, const std::chrono::milliseconds & deactivation_time)
: detail::Item(std::move(name)), DriverBoardItem(pin_controller, address), pin_controller(pin_controller), deactivation_time(deactivation_time)
{
CLOG(DEBUG, OUTPUT_LOGGER) << "Created solenoid " << name << " with address " << int{address} << " and deactivation-time: " << deactivation_time.count();
}

View File

@@ -29,7 +29,7 @@ namespace detail
class Solenoid : public DriverBoardItem, public detail::Item, public items::Solenoid
{
public:
Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name, const std::chrono::milliseconds & deactivation_time);
Solenoid(std::shared_ptr<DriverBoardPinController> pin_controller, const uint8_t & address, const std::string & name, const std::chrono::milliseconds & deactivation_time);
~Solenoid() override = default;
void trigger() override;

View File

@@ -20,10 +20,10 @@ namespace items
namespace detail
{
Sound::Sound(std::shared_ptr<SoundBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name, const std::chrono::milliseconds & deactivation_time, const u_int id)
: detail::Item(std::move(name)), DriverBoardItem(pin_controller, address, pin_base), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id)
Sound::Sound(std::shared_ptr<SoundBoardPinController> pin_controller, const uint8_t & address, const std::string & name, const std::chrono::milliseconds & deactivation_time, const u_int id)
: detail::Item(std::move(name)), DriverBoardItem(pin_controller, address), pin_controller(std::move(pin_controller)), deactivation_time(deactivation_time), id(id)
{
CLOG(DEBUG, OUTPUT_LOGGER) << "Created sound " << id << " \"" << name << "\" with pin-base " << int(pin_base) << " and address " << int(address) << ". Deactivation time is: " << deactivation_time.count();
CLOG(DEBUG, OUTPUT_LOGGER) << "Created sound " << id << " \"" << name << "\" with address " << int(address) << ". Deactivation time is: " << deactivation_time.count();
}
void Sound::play()

View File

@@ -35,7 +35,7 @@ public:
u_int id;
public:
Sound(std::shared_ptr<SoundBoardPinController> pin_controller, const uint8_t & address, const uint8_t & pin_base, const std::string & name, const std::chrono::milliseconds & deactivation_time, const u_int id);
Sound(std::shared_ptr<SoundBoardPinController> pin_controller, const uint8_t & address, const std::string & name, const std::chrono::milliseconds & deactivation_time, const u_int id);
~Sound() override = default;
void play() override;