/// <summary> /// Send the loc direction and F1-F4 of the given loc towards the railway. /// </summary> /// <return>True on success</return> public bool SendLocDirectionAndFunctions(ILocState loc) { log.Trace("SendLocDirectionAndFunctions: {0}", loc); var slot = RequestSlot(loc); if (slot == null) { log.Error("No slot available for {0}", loc); return(false); } // Send loc direction log.Trace("Send: LocoDirFuncRequest: slot={0}, direction={1}", slot.SlotNumber, loc.Direction.Requested); var forward = (loc.Direction.Requested == LocDirection.Forward); var f1 = loc.GetFunctionRequestedState(LocFunction.F1); var f2 = loc.GetFunctionRequestedState(LocFunction.F2); var f3 = loc.GetFunctionRequestedState(LocFunction.F3); var f4 = loc.GetFunctionRequestedState(LocFunction.F4); var dirMsg = new LocoDirFuncRequest(slot.SlotNumber, forward, loc.F0.Requested, f1, f2, f3, f4); dirMsg.Execute(lb); slot.Touch(); return(true); }
/// <summary> /// Send the speed and direction of the given loc towards the railway. /// </summary> protected override void OnSendLocSpeedAndDirection(ILocState loc) { Log.Trace("OnSendLocSpeedAndDirection: {0}", loc); try { var forward = (loc.Direction.Requested == LocDirection.Forward); var f1 = loc.GetFunctionRequestedState(LocFunction.F1); var f2 = loc.GetFunctionRequestedState(LocFunction.F2); var f3 = loc.GetFunctionRequestedState(LocFunction.F3); var f4 = loc.GetFunctionRequestedState(LocFunction.F4); client.LocCommand(loc.Address.ValueAsInt, loc.SpeedInSteps.Requested, forward, loc.F0.Requested, f1, f2, f3, f4); loc.Direction.Actual = loc.Direction.Requested; loc.Speed.Actual = loc.Speed.Requested; loc.F0.Actual = loc.F0.Requested; loc.SetFunctionActualState(LocFunction.F1, f1); loc.SetFunctionActualState(LocFunction.F2, f2); loc.SetFunctionActualState(LocFunction.F3, f3); loc.SetFunctionActualState(LocFunction.F4, f4); var f5 = loc.GetFunctionRequestedState(LocFunction.F5); var f6 = loc.GetFunctionRequestedState(LocFunction.F6); var f7 = loc.GetFunctionRequestedState(LocFunction.F7); var f8 = loc.GetFunctionRequestedState(LocFunction.F8); client.LocFunctions(loc.Address.ValueAsInt, f1, f2, f3, f4, f5, f6, f7, f8); loc.SetFunctionActualState(LocFunction.F1, f1); loc.SetFunctionActualState(LocFunction.F2, f2); loc.SetFunctionActualState(LocFunction.F3, f3); loc.SetFunctionActualState(LocFunction.F4, f4); loc.SetFunctionActualState(LocFunction.F5, f5); loc.SetFunctionActualState(LocFunction.F6, f6); loc.SetFunctionActualState(LocFunction.F7, f7); loc.SetFunctionActualState(LocFunction.F8, f8); var f9 = loc.GetFunctionRequestedState(LocFunction.F9); var f10 = loc.GetFunctionRequestedState(LocFunction.F10); var f11 = loc.GetFunctionRequestedState(LocFunction.F11); var f12 = loc.GetFunctionRequestedState(LocFunction.F12); var f13 = loc.GetFunctionRequestedState(LocFunction.F13); var f14 = loc.GetFunctionRequestedState(LocFunction.F14); var f15 = loc.GetFunctionRequestedState(LocFunction.F15); var f16 = loc.GetFunctionRequestedState(LocFunction.F16); client.LocFunctions2(loc.Address.ValueAsInt, f9, f10, f11, f12, f13, f14, f15, f16); loc.SetFunctionActualState(LocFunction.F9, f9); loc.SetFunctionActualState(LocFunction.F10, f10); loc.SetFunctionActualState(LocFunction.F11, f11); loc.SetFunctionActualState(LocFunction.F12, f12); loc.SetFunctionActualState(LocFunction.F13, f13); loc.SetFunctionActualState(LocFunction.F14, f14); loc.SetFunctionActualState(LocFunction.F15, f15); loc.SetFunctionActualState(LocFunction.F16, f16); } catch (Exception ex) { Log.Warn("Loc command failed: " + ex); } }