protected virtual void Initialize() { // Initialize the port sensorPort = DssEnvironment.ServiceForwarder <analog.AnalogSensorOperations>(new Uri(serviceUri)); }
/// <summary> /// Process Brick State /// </summary> /// <param name="brickState"></param> private IEnumerator <ITask> ProcessBrickState(brick.NxtBrickState brickState) { foreach (string key in brickState.Runtime.Devices.Keys) { brick.AttachRequest device = brickState.Runtime.Devices[key]; if (device.Registration.DeviceType != LegoDeviceType.AnalogSensor && device.Registration.DeviceType != LegoDeviceType.DigitalSensor) { continue; } PortSet <DsspDefaultLookup, DsspDefaultGet> lookupPort = ServiceForwarder <PortSet <DsspDefaultLookup, DsspDefaultGet> >(device.Registration.ServiceUri); DsspDefaultLookup lu = new DsspDefaultLookup(); lookupPort.Post(lu); yield return(Arbiter.Choice(lu.ResponsePort, delegate(LookupResponse luResponse) { foreach (PartnerType pt in luResponse.PartnerList) { // See if this service supports the analog sensor contract if (pt.Contract == analog.Contract.Identifier) { // Check if we have already processed this one. if (_sensorList.ContainsKey(pt.Service)) { break; } string name = device.Registration.Name; string model = device.Registration.DeviceModel; int hardwareIdentifier = NxtCommon.HardwareIdentifier(device.Registration.Connection.Port); LogVerbose(LogGroups.Console, string.Format("Configuring {0}:{1} on {2} with analog service at {3}", model, name, hardwareIdentifier, pt.Service)); analog.AnalogSensorOperations sensorPort = ServiceForwarder <analog.AnalogSensorOperations>(pt.Service); Activate(Arbiter.Choice(sensorPort.Subscribe(_analogSensorNotificationsPort), delegate(SubscribeResponseType response) { // Keep track of the subscription manager response // so that we can unsubscribe later. _sensorList.Add(pt.Service, response); }, delegate(Fault fault) { LogError(LogGroups.Console, string.Format("Failure subscribing to {0} on port {1}.", model, hardwareIdentifier)); })); foreach (SensorConfiguration cfg in _state.SensorConfiguration) { if (cfg.DeviceModel != model) { continue; } SensorRange range = new SensorRange(hardwareIdentifier, model, name, cfg.RangeName); PortConfiguration portConfig = new PortConfiguration(hardwareIdentifier, range.ContactSensorName, cfg.SuccessRangeMin, cfg.SuccessRangeMax); portConfig.AnalogSensorServiceUri = pt.Service; if (portConfig != null) { _state.RuntimeConfiguration.Add(range, portConfig); } } break; } } }, delegate(Fault f) { })); } }