The GetVersion() function implemented in the SDK (Connecting to PM via USB) seems to reveal the type of the PM (3 for PM3, 4 for PM4 and 5 for PM5).
But is it also possible to obtain the Type of the physical device (Rower/Bike/Ski) to which the Performance Monitor is connected/configured?
It would be valuable information in order to use the unit (RPM for a bike) og (SPM for a Rower) and probably also for tweeking other parts of UI.
Identifying physical device type as Rower/Bike/Ski
-
- Paddler
- Posts: 2
- Joined: April 28th, 2022, 7:23 am
- Citroen
- SpamTeam
- Posts: 8010
- Joined: March 16th, 2006, 3:28 pm
- Location: A small cave in deepest darkest Basingstoke, UK
Re: Identifying physical device type as Rower/Bike/Ski
Can you get the product ID, hardware ID or firmware version?
Paste the frame you get from "GetVersion()" here.
Paste the frame you get from "GetVersion()" here.
-
- Paddler
- Posts: 2
- Joined: April 28th, 2022, 7:23 am
Re: Identifying physical device type as Rower/Bike/Ski
On a PM4 on a rower I get:
13:32:20.120 PM3.GetVersion: Rsp: Length=9: 0x91 0x7 0x16 0x2 0x4 0xF2 0x0 0xDA 0x2
This I interpret as
ID=22="Concept2"
CID=2
Model=4="PM4"
HwVWesion=242
SwVersion=730
On a PM5 on a bike I get:
13:17:20.891 PM3.GetVersion: Rsp: Length=9: 0x91 0x7 0x16 0x2 0x5 0x6D 0x2 0x40 0x1
This I interpret as
ID=22="Concept2"
CID=2
Model=5="PM5"
HwVersion=621
SwVersion=320
13:32:20.120 PM3.GetVersion: Rsp: Length=9: 0x91 0x7 0x16 0x2 0x4 0xF2 0x0 0xDA 0x2
This I interpret as
ID=22="Concept2"
CID=2
Model=4="PM4"
HwVWesion=242
SwVersion=730
On a PM5 on a bike I get:
13:17:20.891 PM3.GetVersion: Rsp: Length=9: 0x91 0x7 0x16 0x2 0x5 0x6D 0x2 0x40 0x1
This I interpret as
ID=22="Concept2"
CID=2
Model=5="PM5"
HwVersion=621
SwVersion=320
- Citroen
- SpamTeam
- Posts: 8010
- Joined: March 16th, 2006, 3:28 pm
- Location: A small cave in deepest darkest Basingstoke, UK
Re: Identifying physical device type as Rower/Bike/Ski
I know it's crude (and not the ideal programming technique), but a look-up table where you select based on PM type (3, 4 or 5), swversion and hwversion may be your best option.
I guess you could fire an email at info@concept2.com and ask them how they're doing it and whether they have a published list of plausible values.
I guess you could fire an email at info@concept2.com and ask them how they're doing it and whether they have a published list of plausible values.
Re: Identifying physical device type as Rower/Bike/Ski
There is a way. Look in the C2 CSAFE Bluetooth definition and you'll find that it is sent across as an enumerated value under "Erg Machine Type":
typedef enum {
ERGMACHINE_TYPE_STATIC_D, ERGMACHINE_TYPE_STATIC_C, ERGMACHINE_TYPE_STATIC_A, ERGMACHINE_TYPE_STATIC_B, ERGMACHINE_TYPE_STATIC_E = 5, ERGMACHINE_TYPE_STATIC_SIMULATOR = 7, ERGMACHINE_TYPE_STATIC_DYNAMIC = 8, ERGMACHINE_TYPE_SLIDES_A = 16, ERGMACHINE_TYPE_SLIDES_B, ERGMACHINE_TYPE_SLIDES_C, ERGMACHINE_TYPE_SLIDES_D, ERGMACHINE_TYPE_SLIDES_E, ERGMACHINE_TYPE_LINKED_DYNAMIC = 32, ERGMACHINE_TYPE_STATIC_DYNO = 64, ERGMACHINE_TYPE_STATIC_SKI = 128, ERGMACHINE_TYPE_STATIC_SKI_SIMULATOR = 143, ERGMACHINE_TYPE_BIKE = 192, ERGMACHINE_TYPE_BIKE_ARMS, ERGMACHINE_TYPE_BIKE_NOARMS, ERGMACHINE_TYPE_BIKE_SIMULATOR = 207, ERGMACHINE_TYPE_MULTIERG_ROW = 224, ERGMACHINE_TYPE_MULTIERG_SKI, ERGMACHINE_TYPE_MULTIERG_BIKE, ERGMACHINE_TYPE_NUM,
} OBJ_ERGMACHINETYPE_T;
typedef enum {
ERGMACHINE_TYPE_STATIC_D, ERGMACHINE_TYPE_STATIC_C, ERGMACHINE_TYPE_STATIC_A, ERGMACHINE_TYPE_STATIC_B, ERGMACHINE_TYPE_STATIC_E = 5, ERGMACHINE_TYPE_STATIC_SIMULATOR = 7, ERGMACHINE_TYPE_STATIC_DYNAMIC = 8, ERGMACHINE_TYPE_SLIDES_A = 16, ERGMACHINE_TYPE_SLIDES_B, ERGMACHINE_TYPE_SLIDES_C, ERGMACHINE_TYPE_SLIDES_D, ERGMACHINE_TYPE_SLIDES_E, ERGMACHINE_TYPE_LINKED_DYNAMIC = 32, ERGMACHINE_TYPE_STATIC_DYNO = 64, ERGMACHINE_TYPE_STATIC_SKI = 128, ERGMACHINE_TYPE_STATIC_SKI_SIMULATOR = 143, ERGMACHINE_TYPE_BIKE = 192, ERGMACHINE_TYPE_BIKE_ARMS, ERGMACHINE_TYPE_BIKE_NOARMS, ERGMACHINE_TYPE_BIKE_SIMULATOR = 207, ERGMACHINE_TYPE_MULTIERG_ROW = 224, ERGMACHINE_TYPE_MULTIERG_SKI, ERGMACHINE_TYPE_MULTIERG_BIKE, ERGMACHINE_TYPE_NUM,
} OBJ_ERGMACHINETYPE_T;
Re: Identifying physical device type as Rower/Bike/Ski
An additional one I noticed.
I'm developing OpenRowingMonitor, and we mimic a PM5 as most apps support it. As I also have a PM5 active, I noticed that the PM5 name bluetooth identification (the one broadcasted before subscription) ends with 'Row'. So ORM identifies itself with 'PM5 123456789 Row' as name. It might be they use the same trick over USB.
In ergdata 2, that is the difference between a general C2 logo and a RowErg symbol (for bluetooth).
I'm developing OpenRowingMonitor, and we mimic a PM5 as most apps support it. As I also have a PM5 active, I noticed that the PM5 name bluetooth identification (the one broadcasted before subscription) ends with 'Row'. So ORM identifies itself with 'PM5 123456789 Row' as name. It might be they use the same trick over USB.
In ergdata 2, that is the difference between a general C2 logo and a RowErg symbol (for bluetooth).