return get_accessory_state(addr, MagnetAccessory::TURNOUT);
}
+void CentralStation::add_signal(unsigned addr, const SignalType &)
+{
+ add_accessory(addr, MagnetAccessory::SIGNAL, MagnetAccessory::SEMAPHORE_HOME);
+}
+
+void CentralStation::set_signal(unsigned addr, unsigned state)
+{
+ set_accessory_state(addr, MagnetAccessory::SIGNAL, state);
+}
+
+unsigned CentralStation::get_signal(unsigned addr) const
+{
+ return get_accessory_state(addr, MagnetAccessory::SIGNAL);
+}
+
CentralStation::MagnetAccessory &CentralStation::add_accessory(unsigned addr, MagnetAccessory::Type type, MagnetAccessory::Symbol symbol)
{
unsigned id = map_address(accessories, accessory_addr, addr);
{
if(accessory.type==MagnetAccessory::TURNOUT)
signal_turnout.emit(accessory.address, accessory.state);
+ else if(accessory.type==MagnetAccessory::SIGNAL)
+ signal_signal.emit(accessory.address, accessory.state);
}
void CentralStation::add_sensor(unsigned addr)
if(k!=accessories.end())
{
command(format("request(%d, view, control)", id));
- command(format("set(%d, addr[%d], symbol[%d], name1[\"Switch\"], name2[\"%d\"], name3[\"\"])",
- id, k->second.address, k->second.symbol, k->second.address));
+ const char *label = (k->second.type==MagnetAccessory::SIGNAL ? "Signal" : "Switch");
+ command(format("set(%d, addr[%d], symbol[%d], name1[\"%s\"], name2[\"%d\"], name3[\"\"])",
+ id, k->second.address, k->second.symbol, label, k->second.address));
command(format("set(%d, state[%d])", id, k->second.state&((1<<k->second.bits)-1)));
k->second.synced = true;