Example #1
0
 public IEnumerator <ITask> UpdateHandler(drive.Update update)
 {
     _state           = update.Body;
     _state.TimeStamp = DateTime.Now;
     update.ResponsePort.Post(new DefaultUpdateResponseType());
     yield break;
 }
Example #2
0
 public virtual IEnumerator <ITask> UpdateHandler(drive.Update update)
 {
     _state = update.Body;
     SaveState(_state);
     update.ResponsePort.Post(DefaultUpdateResponseType.Instance);
     yield break;
 }
Example #3
0
        private void NotifyDriveUpdate(drive.Update update)
        {
            LegoMazeDriverState state = new LegoMazeDriverState();

            state.MotorEnabled = update.Body.IsEnabled;

            _mainPort.Post(new Replace(state));
        }
        private void NotifyDriveUpdate(drive.Update update)
        {
            RoboticsTutorial4State state = new RoboticsTutorial4State();

            state.MotorEnabled = update.Body.IsEnabled;

            _mainPort.Post(new Replace(state));
        }
        IEnumerator <ITask> OnDriveUpdateNotificationHandler(drive.Update notification)
        {
            if (_driveControl != null)
            {
                WinFormsServicePort.FormInvoke(
                    delegate()
                {
                    _driveControl.UpdateMotorData(notification.Body);
                }
                    );
            }

            LogObject(notification.Body);
            yield break;
        }
 /// <summary>
 /// DriveUpdateHandler - Prevents Update messages from filling the queue
 /// </summary>
 /// <param name="update"></param>
 /// <returns></returns>
 IEnumerator <ITask> DriveUpdateHandler(drive.Update update)
 {
     // Ignore update messages because we are not interested
     yield break;
 }
Example #7
0
 protected void NotifyDriveUpdate(drive.Update notification)
 {
     motorsOn = notification.Body.IsEnabled;
 }
Example #8
0
 /// <summary>
 /// Handles Update notification from the Drive partner
 /// </summary>
 /// <remarks>Posts a <typeparamref name="DriveUpdate"/> request to itself.</remarks>
 /// <param name="update">notification</param>
 void DriveUpdateNotification(drive.Update update)
 {
     _mainPort.Post(new DriveUpdate(update.Body));
 }
 public IEnumerator<ITask> SubscribeHandler(drive.Subscribe subscribe)
 {
     yield return Arbiter.Choice(
         SubscribeHelper(_subMgrPort, subscribe.Body, subscribe.ResponsePort),
         delegate(SuccessResult success)
         {
             drive.Update update = new drive.Update(_state);
             SendNotificationToTarget<drive.Update>(subscribe.Body.Subscriber, _subMgrPort, update);
         },
         delegate(Exception ex)
         {
             LogError(ex);
             throw ex;
         }
     );
 }
        public IEnumerator<ITask> SetDrivePowerHandler(drive.SetDrivePower setDrivePower)
        {
            ValidateDriveConfiguration(false);

            #if TRACELOG
            Tracer.Trace("TR Drive: SetDrivePowerHandler()  =============================== TR handler ====================================     left=" + setDrivePower.Body.LeftWheelPower + "   right=" + setDrivePower.Body.RightWheelPower);
            #endif
            cancelCurrentOperation();

            _state.TimeStamp = DateTime.Now;

            PortSet<DefaultUpdateResponseType, Fault> responsePort = new PortSet<DefaultUpdateResponseType, Fault>();

            // Add a coordination header to our motor requests
            // so that advanced motor implementations can
            // coordinate the individual motor reqests.
            coord.ActuatorCoordination coordination = new coord.ActuatorCoordination(2);

            motor.SetMotorPower leftPower = new motor.SetMotorPower(new motor.SetMotorPowerRequest() { TargetPower = setDrivePower.Body.LeftWheelPower });
            leftPower.ResponsePort = responsePort;
            leftPower.AddHeader(coordination);
            _leftMotorPort.Post(leftPower);

            motor.SetMotorPower rightPower = new motor.SetMotorPower(new motor.SetMotorPowerRequest() { TargetPower = setDrivePower.Body.RightWheelPower });
            rightPower.ResponsePort = responsePort;
            rightPower.AddHeader(coordination);
            _rightMotorPort.Post(rightPower);

            // send notification to subscription manager
            drive.Update update = new drive.Update(_state);
            SendNotification<drive.Update>(_subMgrPort, update);

            Activate(Arbiter.MultipleItemReceive<DefaultUpdateResponseType, Fault>(responsePort, 2,
                delegate(ICollection<DefaultUpdateResponseType> successList, ICollection<Fault> failureList)
                {
                    if (successList.Count == 2)
                        setDrivePower.ResponsePort.Post(new DefaultUpdateResponseType());

                    foreach (Fault fault in failureList)
                    {
                        setDrivePower.ResponsePort.Post(fault);
                        break;
                    }
                }));

            pollEncoderState();

            yield break;
        }
        public IEnumerator<ITask> EnableDriveHandler(drive.EnableDrive enableDrive)
        {
            _state.IsEnabled = enableDrive.Body.Enable;
            _state.TimeStamp = DateTime.Now;

            #if TRACELOG
            LogInfo("TrackRoamerDriveService:EnableDriveHandler() - enable=" + _state.IsEnabled);
            #endif

            // if we are enabling the drive, validate that the motors are configured.
            if (enableDrive.Body.Enable)
            {
                try
                {
                    ValidateDriveConfiguration(true);   // we must have encoders for the drive to work properly
                }
                catch (InvalidOperationException)
                {
                    // If validation fails,
                    // force the state to not be enabled.
                    _state.IsEnabled = false;

                    // rethrow the fault
                    throw;
                }
            }

            // send notification to subscription manager
            drive.Update update = new drive.Update(_state);
            SendNotification<drive.Update>(_subMgrPort, update);

            enableDrive.ResponsePort.Post(DefaultUpdateResponseType.Instance);
            yield break;
        }
 /// <summary>
 /// Handles Update notification from the Drive partner
 /// </summary>
 /// <remarks>Posts a <typeparamref name="DriveUpdate"/> request to itself.</remarks>
 /// <param name="update">notification</param>
 void DriveUpdateNotification(drive.Update update)
 {
     //LogInfo("****************************** DriveBehaviorServiceBase:: DriveUpdateNotification: state.IsEnabled=" + update.Body.IsEnabled);
     _mainPort.Post(new DriveUpdate(update.Body));
 }