public bool MoveAbsolute(PolarizerPaddlePositions positions) { try { int encodedPosition = GetEncodedPosition(positions, false); UpdateOutput(string.Format("Move paddles to {0},{1},{2}...", positions.Paddle1, positions.Paddle2, positions.Paddle3)); ELLDevicePort.SendStringI32(Address, "ma", encodedPosition); return(WaitForPositions()); } catch (OverflowException) { UpdateOutput(string.Format("Parameter out of range {0},{1},{2}...", positions.Paddle1, positions.Paddle2, positions.Paddle3)); } return(false); }
public bool MoveRelative(PolarizerPaddlePositions displacements) { try { int encodedPosition = GetEncodedPosition(displacements, true); UpdateOutput(string.Format("Move paddles by {0},{1},{2}...", displacements.Paddle1, displacements.Paddle2, displacements.Paddle3)); ELLDevicePort.SendStringI32(Address, "mr", encodedPosition); return(WaitForPositions()); } catch (OverflowException) { UpdateOutput(string.Format("Parameter out of range {0},{1},{2}...", displacements.Paddle1, displacements.Paddle2, displacements.Paddle3)); } return(false); }
private int GetEncodedPosition(PolarizerPaddlePositions position, bool signed) { int i1, i2, i3; if (signed) { i1 = UnitToPulse(position.Paddle1, -0x200, 0x1FF) & paddleMask; i2 = (UnitToPulse(position.Paddle2, -0x200, 0x1FF) & paddleMask) << 10; i3 = (UnitToPulse(position.Paddle3, -0x200, 0x1FF) & paddleMask) << 20; } else { i1 = UnitToPulse(position.Paddle1, 0, 0x3FF) & paddleMask; i2 = (UnitToPulse(position.Paddle2, 0, 0x3FF) & paddleMask) << 10; i3 = (UnitToPulse(position.Paddle3, 0, 0x3FF) & paddleMask) << 20; } return((i1 | i2) | i3); }
private bool WaitForPositions(int msTimeout = MoveTimeout) { try { List <string> responses = new List <string> { "GS", "PO" }; int counter = 10; while (true) { string msg = ELLDevicePort.WaitForResponse(Address, responses, msTimeout); if (!string.IsNullOrEmpty(msg)) { bool returnValue; if (TestStatus(msg, "gp", true, ref counter, out returnValue)) { return(returnValue); } if (msg.Substring(1, 2) == "PO") { if (msg.Length != 11) { return(false); } PolarizerPaddlePositions polarizerPaddlePositions = GetPositions(msg.Substring(3).ToBytes(8).ToInt(true)); UpdateParameter(MessageUpdater.UpdateTypes.PolarizerPositions, Address, polarizerPaddlePositions); return(true); } } } } catch (ELLException ex) { UpdateOutput($"Get Device Status: {ex.Message}", true); } return(false); }