예제 #1
0
        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;
        }
예제 #2
0
        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));
            }
                                                                ));
        }
예제 #3
0
        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));
                }
            );

        }