internal static AccelerationInstruction[] CreateAcceleration(int speed, int desiredSpeed)
        {
            var canSkipAcceleration = speed == desiredSpeed;

            canSkipAcceleration |= Math.Abs(speed) >= Configuration.StartDeltaT && Math.Abs(desiredSpeed) >= Configuration.StartDeltaT;
            if (canSkipAcceleration)
            {
                //no acceleration is required
                return(new AccelerationInstruction[0]);
            }

            if (Math.Abs(Math.Sign(speed) - Math.Sign(desiredSpeed)) > 1)
            {
                throw new NotImplementedException("Stop and run in other direction");
            }

            var stepCount = desiredSpeed > 0 ? (Int16)5000 : (Int16)(-5000);

            if (desiredSpeed == 0)
            {
                stepCount = speed > 0 ? (Int16)5000 : (Int16)(-5000);
            }

            speed        = Math.Abs(speed);
            desiredSpeed = Math.Abs(desiredSpeed);
            if (speed == 0)
            {
                speed = Configuration.StartDeltaT;
            }

            if (desiredSpeed == 0)
            {
                desiredSpeed = Configuration.StartDeltaT;
            }

            var acceleration = PlanBuilder.CalculateBoundedAcceleration((UInt16)speed, (UInt16)desiredSpeed, stepCount);

            return(new AccelerationInstruction[] { acceleration });
        }