X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fcentralstation.cpp;h=ee5aaeea4fe573e3b47f948e7154958c69b7f03d;hb=3e3675f8d86b06cdea7df197dfe8866ffb285aec;hp=833560ae727a5839151105b625da6e363a76a662;hpb=4f2b6023dee412373a6a0b13ba4d617ffbb9bb38;p=r2c2.git diff --git a/source/libr2c2/centralstation.cpp b/source/libr2c2/centralstation.cpp index 833560a..ee5aaee 100644 --- a/source/libr2c2/centralstation.cpp +++ b/source/libr2c2/centralstation.cpp @@ -185,6 +185,21 @@ unsigned CentralStation::get_turnout(unsigned addr) const 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); @@ -255,6 +270,8 @@ void CentralStation::accessory_state_changed(const MagnetAccessory &accessory) c { 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) @@ -494,8 +511,9 @@ void CentralStation::process_reply(const Message &msg) 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<second.bits)-1))); k->second.synced = true;