public virtual IEnumerator <ITask> PlayToneHandler(tone.PlayTone request) { if (request.Body.Frequency < 0 || request.Body.Duration < 0) { LogError("Improper PlayTone Frequency or Duration"); request.ResponsePort.Post(new Fault()); yield break; } brick.PlayToneBody play = new brick.PlayToneBody(); play.Frequency1 = request.Body.Frequency; play.Frequency2 = 0; play.Duration = request.Body.Duration; Activate(Arbiter.Choice(_scribblerPort.PlayTone(play), delegate(DefaultUpdateResponseType response) { request.ResponsePort.Post(DefaultUpdateResponseType.Instance); }, delegate(Fault fault) { request.ResponsePort.Post(new Fault()); } )); yield break; }
IEnumerator <ITask> ToneHandler() { beeping = true; brick.PlayToneBody tone = new brick.PlayToneBody(); tone.Duration = _state.PlayDuration; tone.Frequency1 = _state.Frequency1; tone.Frequency2 = _state.Frequency2; _scribblerPort.PlayTone(tone); //wait play time + pause time yield return(Arbiter.Receive(false, TimeoutPort(_state.PlayDuration + _state.PauseDuration), delegate(DateTime t) { })); beeping = false; //get state and call handler again because we still might be backing up yield return(Arbiter.Receive <brick.ScribblerState>(false, _scribblerPort.Get(new GetRequestType()), delegate(brick.ScribblerState scribblerState) { MotorNotificationHandler(new brick.Replace(scribblerState)); } )); }