public void BlockingMove(MotorMove mv, TimeSpan timeout) { var config = GetHardwareConfig(); if (config.Simulated) { System.Threading.Thread.Sleep(mv.QuarterNumber * config.SimulatedTime); return; } byte[] m = new byte[2] { 0xFF, 0xFF }; int[] r = new int[2] { 0, 0 }; Motor[] motors; using (var state = GlobalState.GetState()) { motors = state.Motors.Motors.Where((x) => x.Axe == mv.Axe && x.Board == this.Index).Select((x) => (Motor)x.Clone()).ToArray(); } if (motors.Count() == 0) { return; } else if (motors.Count() > 2) { throw new Exception("Il ne peut pas y avoir plus de deux moteurs pas à pas pilotés en même temps pour des questions de performance"); } using (var state = GlobalState.GetState()) { for (int i = 0; i < motors.Length; i++) { m[i] = motors[i].Index; //r[i] = state.HardwareConfigGlobal.ConvertMoveToSteps(mv.GetMoves(motors[i].Courronne), motors[i].Inverted); } } // pas de mouvement, rien ne sert d'envoyer 0 if (r[0] == 0 && r[1] == 0) { return; } AssertConnectedAndConfigured(config); var ret = BlockingMove(timeout, m[0], r[0], m[1], r[1]); if (!ret.Value) { throw new Exception("Impossible d'exécuter le mouvement " + mv.ToString()); } }