X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fcentralstation.cpp;h=ac553ab4ea5b94abc0f5b9a6515ca024c08ffa9f;hb=59bae8acd679127602cf35d22bcd37e316a5a056;hp=833560ae727a5839151105b625da6e363a76a662;hpb=4f2b6023dee412373a6a0b13ba4d617ffbb9bb38;p=r2c2.git diff --git a/source/libr2c2/centralstation.cpp b/source/libr2c2/centralstation.cpp index 833560a..ac553ab 100644 --- a/source/libr2c2/centralstation.cpp +++ b/source/libr2c2/centralstation.cpp @@ -152,12 +152,12 @@ void CentralStation::add_turnout(unsigned addr, const TrackType &type) { TrackPoint start = i->get_point(0); TrackPoint end = i->get_point(i->get_length()); - if(end.dir>start.dir+0.01 || end.dirstart.dir ? left : right) = true; straight &= ~(1<get_path()); } - else if(start.dir<-0.01 || start.dir>0.01) + else if(abs(start.dir).radians()>0.01) cross = true; } @@ -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;