示例#1
0
        public virtual IEnumerator <ITask> ReplaceHandler(Replace replace)
        {
            LogInfo("TrackRoamerBrickPowerService:ReplaceHandler()");

            Close();

            _state           = replace.Body;
            _state.Connected = false;
            _state.Connected = ReConnect();
            _state.TimeStamp = DateTime.Now;

            replace.ResponsePort.Post(DefaultReplaceResponseType.Instance);
            yield break;
        }
示例#2
0
        protected override void Start()
        {
            LogInfo("TrackRoamerBrickPowerService:Start() _state=" + _state);

            if (_state == null)
            {
                // we usually don't come here, as the state is already configured by file - TrackRoamer.TrackRoamerBrickPower.Bot.Config.xml

                LogInfo("TrackRoamerBrickPowerService:Start(): _state == null - initializing...");

                _state = new TrackRoamerBrickPowerState();
                _state.PowerControllerConfig          = new PowerControllerConfig();
                _state.PowerControllerConfig.CommPort = DEFAULT_COM_PORT_NUMBER;
                _state.Connected         = false;
                _state.FrameCounter      = 0;
                _state.Whiskers          = new Whiskers();
                _state.MotorSpeed        = new MotorSpeed();
                _state.MotorEncoder      = new MotorEncoder();
                _state.MotorEncoderSpeed = new MotorEncoderSpeed();
                _state.TimeStamp         = DateTime.Now;

                SaveState(_state);
            }
            else
            {
                LogInfo("TrackRoamerBrickPowerService:Start(): _state is supplied by file: " + _configFile);
            }

            if (_state.PowerControllerConfig == null)
            {
                _state.PowerControllerConfig = new PowerControllerConfig();
            }

            _brickConnection = new BrickConnection(_state.PowerControllerConfig, _rbtqDataPort, this);

            // wireup all event handlers to receive AX2850 data:
            _brickConnection.onValueReceived_EncoderLeftAbsolute  += new OnValueReceived(_brickConnection_onValueReceived_EncoderLeftAbsolute);
            _brickConnection.onValueReceived_EncoderRightAbsolute += new OnValueReceived(_brickConnection_onValueReceived_EncoderRightAbsolute);

            _brickConnection.onValueReceived_EncoderSpeed += new OnValueReceived(_brickConnection_onValueReceived_EncoderSpeed);

            _brickConnection.onValueReceived_WhiskerLeft  += new OnValueReceived(onWhiskerLeft);
            _brickConnection.onValueReceived_WhiskerRight += new OnValueReceived(onWhiskerRight);

            _brickConnection.onValueReceived_AnalogInputs        += new OnValueReceived(_brickConnection_onValueReceived_AnalogInputs);
            _brickConnection.onValueReceived_DigitalInputE       += new OnValueReceived(_brickConnection_onValueReceived_DigitalInputE);
            _brickConnection.onValueReceived_Voltage             += new OnValueReceived(_brickConnection_onValueReceived_Voltage);
            _brickConnection.onValueReceived_MotorPower          += new OnValueReceived(_brickConnection_onValueReceived_MotorPower);
            _brickConnection.onValueReceived_MotorAmps           += new OnValueReceived(_brickConnection_onValueReceived_MotorAmps);
            _brickConnection.onValueReceived_HeatsinkTemperature += new OnValueReceived(_brickConnection_onValueReceived_HeatsinkTemperature);

            base.Start();   // start MainPortInterleave; wireup [ServiceHandler] methods

            SpawnIterator(ConnectToPowerController);

            MainPortInterleave.CombineWith(
                Arbiter.Interleave(
                    new TeardownReceiverGroup(),
                    new ExclusiveReceiverGroup(
                        Arbiter.ReceiveWithIterator(true, _controlPort, ControlLoop),
                        Arbiter.Receive <Exception>(true, _rbtqDataPort, ExceptionHandler),
                        Arbiter.Receive <string>(true, _rbtqDataPort, MessageHandler)
                        ),
                    new ConcurrentReceiverGroup()));

            // kick off control loop interval:
            _controlPort.Post(DateTime.UtcNow);
            lastRateSnapshot = DateTime.Now.AddSeconds(frameRateWatchdogDelaySec);     // delay frame rate watchdog
            LogInfo("OK: TrackRoamerBrickPowerService:ControlLoop activated");

            // display HTTP service Uri
            LogInfo("TrackRoamerBrickPowerService: Service uri: ");
        }