Esempio n. 1
0
        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());
            }
        }