示例#1
0
 public virtual IEnumerator <ITask> AlternateGetHandler(analogArray.Get get)
 {
     _alternateState         = new analogArray.AnalogSensorArrayState();
     _alternateState.Sensors = new List <Microsoft.Robotics.Services.AnalogSensor.Proxy.AnalogSensorState>();
     _alternateState.Sensors.Add(_state.LeftSensor);
     _alternateState.Sensors.Add(_state.CenterSensor);
     _alternateState.Sensors.Add(_state.RightSensor);
     get.ResponsePort.Post(_alternateState);
     yield break;
 }
示例#2
0
        public virtual IEnumerator <ITask> HttpGetAnalogSensorHandler(dssphttp.HttpGet httpGet)
        {
            analogarray.Get get = new analogarray.Get();
            this.mainPort.Post(get);
            yield return(get.ResponsePort.Choice());

            analogarray.AnalogSensorArrayState analogState = get.ResponsePort;
            httpGet.ResponsePort.Post(new dssphttp.HttpResponseType(analogState));
            yield break;
        }
示例#3
0
 public virtual IEnumerator <ITask> AlternateGetHandler(analogarray.Get get)
 {
     _alternateState         = new analogarray.AnalogSensorArrayState();
     _alternateState.Sensors = new List <analog.AnalogSensorState>();
     analog.AnalogSensorState sens = new analog.AnalogSensorState();
     sens.RawMeasurement = _state.Sensors[0].value;
     _alternateState.Sensors.Add(sens);
     sens = new analog.AnalogSensorState();
     sens.RawMeasurement = _state.Sensors[1].value;
     _alternateState.Sensors.Add(sens);
     sens = new analog.AnalogSensorState();
     sens.RawMeasurement = _state.Sensors[2].value;
     _alternateState.Sensors.Add(sens);
     sens = new analog.AnalogSensorState();
     sens.RawMeasurement = _state.Sensors[3].value;
     _alternateState.Sensors.Add(sens);
     get.ResponsePort.Post(_alternateState);
     yield break;
 }
        public IEnumerator <ITask> GetHandler(analogarray.Get get)
        {
            var state = new analogarray.AnalogSensorArrayState();

            state.Sensors = new List <analogsensor.AnalogSensorState>(this.sensorPorts.Length);

            // compose state on the fly by issuing N parallel GET requests to partners
            var getSensorState = new analogsensor.Get();

            foreach (var port in this.sensorPorts)
            {
                state.Sensors.Add(null);
                port.Post(getSensorState);
            }

            ICollection <analogsensor.AnalogSensorState> sensorStates = null;
            ICollection <Fault> faults = null;

            yield return(getSensorState.ResponsePort.MultipleItemReceive(
                             this.sensorPorts.Length,
                             (s, f) =>
            {
                sensorStates = s;
                faults = f;
            }));

            if (faults != null && faults.Count > 0)
            {
                get.ResponsePort.Post(Fault.FromCodeSubcode(FaultCodes.Receiver, DsspFaultCodes.OperationFailed));
                yield break;
            }

            foreach (var sensorState in sensorStates)
            {
                state.Sensors[sensorState.HardwareIdentifier] = sensorState;
            }

            var stateClone = state.Clone() as analogarray.AnalogSensorArrayState;

            get.ResponsePort.Post(stateClone);
            yield break;
        }
示例#5
0
        public IEnumerator <ITask> GetHandler(analogarray.Get get)
        {
            var state = new analogarray.AnalogSensorArrayState();

            state.Sensors = new List <analogsensor.AnalogSensorState>(this.sensorPorts.Length);

            // compose state on the fly by issuing N parallel GET requests to partners
            var getSensorState = new sonar.Get();

            foreach (var port in this.sensorPorts)
            {
                state.Sensors.Add(null);
                port.Post(getSensorState);
            }

            ICollection <sonar.SonarState> sensorStates = null;
            ICollection <Fault>            faults       = null;

            yield return(getSensorState.ResponsePort.MultipleItemReceive(
                             this.sensorPorts.Length,
                             (s, f) =>
            {
                sensorStates = s;
                faults = f;
            }));

            if (faults != null && faults.Count > 0)
            {
                get.ResponsePort.Post(Fault.FromCodeSubcode(FaultCodes.Receiver, DsspFaultCodes.OperationFailed));
                yield break;
            }

            foreach (var sensorState in sensorStates)
            {
                state.Sensors[sensorState.HardwareIdentifier] = new analogsensor.AnalogSensorState()
                {
                    HardwareIdentifier    = sensorState.HardwareIdentifier,
                    NormalizedMeasurement = sensorState.DistanceMeasurement,
                    RawMeasurement        = sensorState.DistanceMeasurement,
                    RawMeasurementRange   = sensorState.MaxDistance,
                    Pose = new PhysicalModel.Proxy.Pose
                    {
                        Orientation = new PhysicalModel.Proxy.Quaternion(
                            sensorState.Pose.Orientation.X,
                            sensorState.Pose.Orientation.Y,
                            sensorState.Pose.Orientation.Z,
                            sensorState.Pose.Orientation.W),
                        Position = new PhysicalModel.Proxy.Vector3(
                            sensorState.Pose.Position.X,
                            sensorState.Pose.Position.Y,
                            sensorState.Pose.Position.Z),
                    },
                    TimeStamp = sensorState.TimeStamp,
                };
            }

            var stateClone = state.Clone() as analogarray.AnalogSensorArrayState;

            get.ResponsePort.Post(stateClone);
            yield break;
        }