TurboTrainer implementation should become observer of InstantaneousRideParameters (wind speed, gradient etc)
PowerModel also an observer of InstantaneousRideParameters
TurboTrainer should advertise the data it provides i.e power and speed. Should prefer power data; from this we can calculate virtual speed and therefore distance. If turbo only provides speed, integrate this for distance.
TurboTrainer could be an obvserver of virtual speed i.e so we can use PID internally. Alternatively, externailze the PID controller (TurboTrainer interface would require a resistance scale 0-100%).
Initial thoughts: