public Model() { CrossingController = new CrossingController { Sensor = new BarrierSensor(), Motor = new BarrierMotor(), Radio = new RadioModule(), Timer = new Timer(), TrainSensor = new TrainSensor() }; TrainController = new TrainController { Brakes = new Brakes(), Odometer = new Odometer(), Radio = new RadioModule() }; Bind(nameof(Barrier.Speed), nameof(CrossingController.Motor.Speed)); Bind(nameof(CrossingController.Sensor.BarrierAngle), nameof(Barrier.Angle)); Bind(nameof(Train.Acceleration), nameof(TrainController.Brakes.Acceleration)); Bind(nameof(CrossingController.TrainSensor.TrainPosition), nameof(Train.Position)); Bind(nameof(TrainController.Radio.RetrieveFromChannel), nameof(Channel.Receive)); Bind(nameof(TrainController.Radio.DeliverToChannel), nameof(Channel.Send)); Bind(nameof(CrossingController.Radio.RetrieveFromChannel), nameof(Channel.Receive)); Bind(nameof(CrossingController.Radio.DeliverToChannel), nameof(Channel.Send)); Bind(nameof(TrainController.Odometer.TrainPosition), nameof(Train.Position)); Bind(nameof(TrainController.Odometer.TrainSpeed), nameof(Train.Speed)); }
public Model() { train = new Train.Train(); tc = new TrainController() { Odometer = new Odometer(), RadioModule = new RadioModule(), Brakes = new EmergencyBrakes() }; commChannel = new BidirectionalCommChannel(); // Bind all of the ports of the odometer Bind(nameof(tc.Odometer.Position), nameof(train.Position)); Bind(nameof(tc.Odometer.Speed), nameof(train.Speed)); // Bind the emergency brakes to the train Bind(nameof(train.Acceleration), nameof(tc.Brakes.Acceleration)); // Bind controller to breaks Bind(nameof(tc.Brakes.ShouldBrake), nameof(tc.ShouldBrake)); Crossing = new Crossing.Crossing(); cc = new CrossingController { CrossingSensor = new CrossingSensor(), CrossingTimer = new CrossingTimer(), Motor = new CrossingMotor(), RadioModule = new RadioModule(), TrainLeftSensor = new TrainLeftSensor() }; Bind(nameof(cc.CrossingSensor.Angle), nameof(cc.Motor.Angle)); Bind(nameof(cc.Motor.ControllerState), nameof(cc.CurrentState)); Bind(nameof(cc.Motor.CrossingSesnsorState), nameof(cc.CrossingSensor.CurrentState)); Bind(nameof(cc.CrossingTimer.controllerState), nameof(cc.CurrentState)); Bind(nameof(cc.TrainLeftSensor.Position), nameof(train.Position)); // Bind the communication channels Bind(nameof(tc.RadioModule.SendChannel), nameof(commChannel.DownChannel)); Bind(nameof(tc.RadioModule.RecvChannel), nameof(commChannel.UpChannel)); Bind(nameof(cc.RadioModule.SendChannel), nameof(commChannel.UpChannel)); Bind(nameof(cc.RadioModule.RecvChannel), nameof(commChannel.DownChannel)); }