public IEnumerator<ITask> SetDrivePowerHandler(SetDrivePower setDrivePower) { ValidateDriveConfiguration(false); _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(setDrivePower.Body.LeftWheelPower); leftPower.ResponsePort = responsePort; leftPower.AddHeader(coordination); _leftMotorPort.Post(leftPower); Motor.SetMotorPower rightPower = new Motor.SetMotorPower(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; } })); yield break; }
public IEnumerator<ITask> AllStopHandler(AllStop allStop) { SetDrivePower zeroPower = new SetDrivePower(); zeroPower.Body = new SetDrivePowerRequest(0.0, 0.0); zeroPower.ResponsePort = allStop.ResponsePort; _mainPort.Post(zeroPower); yield break; }