Is testing with a kickr core worthwhile?
Or are wahoo trainers using a
different code path?
Hi,I tested the last version with a Elite Suito on Windows along with a HeartRate strap. It worked like a charm!
So the good new is that I can reproduce it here, so hopefully I can debug it. I just need to get the time to set up a working windows development environment for GC.
Just joined GC and tried connecting my FTMS capable Abilica Premium UB BT smart trainer and discovered that (power) control seems to work, but realtime data does not. At least nothing is shown in Cadence/Speed/Power.Thus, I would need to be able to debug a bit. I see in the associated source code from the git patch that there are lots of qDebug() printouts that hopefully end up somewhere... maybe I need to add a flag to the invocation, maybe it just ends up in a file somewhere. I'll dig further while waiting for pointers.
Indeed. Thanks you for your response.
After some trial and error I managed to build GC myself and added some qDebugs leading to the following conclusion:
There are a few things missing to get my trainer running:
1. A request for control mode 7 (start) has to be added in order for real time data to actually be emitted by the trainer.
2. When receiving the notification data, the first two (flag) bytes indicate what fields are present. This is correctly handled in ftms.cpp, reading speed, but not in BT40Device.cpp where the flag is once again read. Thus, speed is always zero.
Point 1 could possibly be a property of my trainer and not required by the standard but point 2 is a bit surprising as I would expect at least someone to be using the FTMS feature already.
While I'm at it, I am having difficulties in getting the rlv video player running when having a .tts file selected. Does it require speed in order to start the video? Video plays flawlessly if I do not select the tts file.
I now have most things up and running, rlv is playing in correlation with speed input from my FTMS BTLE trainer. Great fun!However, when trying the included workouts (which are great by the way), the video keeps restarting every 10s or so.
Manual erg and manual slope mode works fine but not the other workouts.Any idea why?
WRT needing speed for video progress...
There's been some philosophical confusion in the past about where speed comes from. Some argue that we should always trust the speed reported by the machine, and I maintain most will be happiest if speed comes from power and gc's physics model. The difference matters a lot if you're using a non-smart trainer with power reported by cranks. Is much nicer to worry about a given trainer reporting power correctly, than to worry that power is correct and all trainers implement the same model.
Currently the way speed is obtained is controlled by a 'simulated speed' checkbox. Need to make sure that both paths are tested.
WRT your slope fix. There's a bad legacy habit of encoding format (like CRS) as a shorthand for general functionality or even trainer mode. We should try and move away from it and focus on what the data means, not the mode of the trainer. Ideally 'mode' should get disappeared completely and we ask the workout what it means.
WRT your slope fix. There's a bad legacy habit of encoding format (like CRS) as a shorthand for general functionality or even trainer mode. We should try and move away from it and focus on what the data means, not the mode of the trainer. Ideally 'mode' should get disappeared completely and we ask the workout what it means.This case was a data problem: for ERG type workouts Duration is time, not distance as the code treated it.
WRT your slope fix. There's a bad legacy habit of encoding format (like CRS) as a shorthand for general functionality or even trainer mode. We should try and move away from it and focus on what the data means, not the mode of the trainer. Ideally 'mode' should get disappeared completely and we ask the workout what it means.This case was a data problem: for ERG type workouts Duration is time, not distance as the code treated it.
The fix is totally right, just should be habit to create a method to advertise the property (in this case, maybe bool hasDistance() or hasGradient()) from ErgFile instead of testing an ergfile field against CRS. Just style comment.
The case of videosync on a timed workout... its pretty weird case.
No gradient means its not so far removed from just playing video at its standard speed. It might be better than staring at a graph but better yet is if power actually caused correct progress against the gradients in the video.
I think core issue is the train ui. I wish UI let us bucket sim-rides as a triple. Today user is free to mix an erg workout with video A and videosync B - which is not useful. If user could create their own 'simride triple' <gpx/tts, video, videosync> then user could be free to also select an erg workout to do while riding the simride, and workout progress would still track users power. SimRide object would also be a great (runtime) place to hang workout parameters for example rabbits.

I've tested GC 3.6 RC3 on both Linux (a laptop) and Windows (my desktop) with my Kickr Core. Both systems have been used with Zwift and MyWhoosh in the past. This post is for the run on Linux, where Bluetooth capabilities seem to be operating as expected, but communicated power setpoint to the trainer appears not to change.Config:Ubuntu 22.04.1Running as an AppImageGC 3.6 RC3, AppImage downloaded from GitHubLog:Screenshot of power profile in GC:I will make a separate post when I have a chance for the Windows version, where the Kickr seems to work well as a power + cadence sensor, but will either not pair or work as a controlled deviceLet me know if you need any additional info or tests to be run, I'd be happy to help out.-Andrew