PM5 CSAFECommunicationDefinition
PM5 CSAFECommunicationDefinition
Performance Monitor
CSAFE Communication Definition
Filename: Concept2 PM CSAFE Communication Definition.doc
Revision: 0.25
3/23/2023 3:42:00 PM
Concept2
105 Industrial Park Drive
Morrisville, VT 05661
802-888-5226 (Voice)
802-888-6331 (Fax)
[email protected]
Revision 0.25
Concept2 PM CSAFE Communication Definition
Table of Contents
LIST OF FIGURES ..................................................................................................................................................... 4
INTERFACES ............................................................................................................................................................. 7
Revision 0.25 2
Concept2 PM CSAFE Communication Definition
Fixed Distance.................................................................................................................................................... 78
2000m/500m splits, power goal of 200 watts.................................................................................. 78
Fixed Time ......................................................................................................................................................... 78
20:00/4:00 splits, power goal of 100 watts ..................................................................................... 78
Predefined .......................................................................................................................................................... 79
Standard List Workouut #3 ............................................................................................................. 79
PROPRIETARY CSAFE WORKOUT CONFIGURATION................................................................................................. 79
JustRow .............................................................................................................................................................. 79
Fixed Distance.................................................................................................................................................... 80
2000m/500m splits ......................................................................................................................... 80
Fixed Time ......................................................................................................................................................... 80
20:00/4:00 splits .............................................................................................................................. 80
Fixed Calories .................................................................................................................................................... 81
100 Cals/20 Cal splits ..................................................................................................................... 81
Fixed Distance Interval ...................................................................................................................................... 82
500m/:30 rest .................................................................................................................................. 82
Fixed Time Interval ............................................................................................................................................ 82
2:00/:30 rest .................................................................................................................................... 82
Fixed Calorie Interval ........................................................................................................................................ 83
25c/1:00 rest .................................................................................................................................... 83
Variable Interval ................................................................................................................................................ 84
v500m/1:00r…4 .............................................................................................................................. 84
Variable Interval Undefined Rest ....................................................................................................................... 86
v100m…2 ....................................................................................................................................... 86
Fixed Interval Undefined Rest ........................................................................................................................... 88
CSAFE MISCELLANEOUS ......................................................................................................................................... 88
Terminate Workout ............................................................................................................................................ 88
Get Force Curve ................................................................................................................................................. 88
APPENDIX A............................................................................................................................................................. 93
ENUMERATED VALUES ............................................................................................................................................. 93
Operational State ................................................................................................................................................ 93
Erg Model Type ................................................................................................................................................. 93
Erg Machine Type .............................................................................................................................................. 93
Workout Type .................................................................................................................................................... 94
Interval Type ...................................................................................................................................................... 94
Workout State .................................................................................................................................................... 94
Rowing State ...................................................................................................................................................... 95
Stroke State ........................................................................................................................................................ 95
Workout Duration Type ..................................................................................................................................... 95
Display Units Type ............................................................................................................................................ 95
Display Format Type ......................................................................................................................................... 95
Workout Number ............................................................................................................................................... 95
Workout Programming Mode ............................................................................................................................ 96
Stroke Rate State ................................................................................................................................................ 96
Start Type ........................................................................................................................................................... 96
Race Operation Type ......................................................................................................................................... 96
Race State........................................................................................................................................................... 96
Race Type .......................................................................................................................................................... 97
Race Start State .................................................................................................................................................. 98
Screen Type ....................................................................................................................................................... 98
Screen Value (Workout Type) ........................................................................................................................... 98
Screen Value (Race Type) ................................................................................................................................. 99
Screen Value (CSAFE Type) ...........................................................................................................................100
Screen Status .................................................................................................................................................... 100
Status Type....................................................................................................................................................... 100
Revision 0.25 3
Concept2 PM CSAFE Communication Definition
List of Figures
FIGURE 1 - STANDARD FRAME FORMAT ......................................................................................................................... 8
FIGURE 2 - EXTENDED FRAME FORMAT .........................................................................................................................8
FIGURE 3 - LONG COMMAND FORMAT .........................................................................................................................10
FIGURE 4 - SHORT COMMAND FORMAT ........................................................................................................................ 10
FIGURE 5 - RESPONSE FRAME CONTENTS FORMAT ...................................................................................................... 10
FIGURE 6 - INDIVIDUAL COMMAND RESPONSE FORMAT .............................................................................................. 10
FIGURE 7 – PUBLIC CSAFE STATE MACHINE DIAGRAM .............................................................................................. 47
FIGURE 8 – EXAMPLE PUBLIC CSAFE PM WORKOUT SETUP AND PROGRESS MONITORING ....................................... 55
FIGURE 9 – EXAMPLE PUBLIC CSAFE PM SUCCESSIVE JUSTROW WORKOUTS ........................................................... 56
FIGURE 10 – MAXIMUM BLOCK SIZE COMMANDS........................................................................................................ 57
FIGURE 11 – FIXED BLOCK SIZED COMMAND RESPONSES ........................................................................................... 57
Revision 0.25 4
Concept2 PM CSAFE Communication Definition
FIGURE 12 – EXAMPLE PROPRIETARY CSAFE PM WORKOUT SETUP AND PROGRESS MONITORING ........................... 76
List of Tables
TABLE 1 - DOCUMENT MODIFICATION HISTORY ............................................................................................................ 6
TABLE 2 - RELATED DOCUMENTS .................................................................................................................................. 6
TABLE 3 – COMMUNICATION INTERFACE VERSUS FUNCTIONALITY ............................................................................... 7
TABLE 4 - EXTENDED FRAME ADDRESSING.................................................................................................................... 9
TABLE 5 - UNIQUE FRAME FLAGS ..................................................................................................................................9
TABLE 6 - BYTE STUFFING VALUES ...............................................................................................................................9
TABLE 7 - COMMAND FIELD TYPES .............................................................................................................................. 10
TABLE 8 - RESPONSE FIELD TYPES ............................................................................................................................... 11
TABLE 9 – RESPONSE STATUS BYTE BIT-MAPPING ...................................................................................................... 11
TABLE 10 - CSAFE CONCEPT2 PM INFORMATION ....................................................................................................... 11
TABLE 11 - PM-SPECIFIC CSAFE COMMAND WRAPPERS ............................................................................................ 11
TABLE 12 - PM PROPRIETARY CSAFE COMMAND WRAPPERS .................................................................................... 12
TABLE 13 - PM USB DEFINITIONS ............................................................................................................................... 12
TABLE 14 – C2 PM BTS PERIPHERAL : ATTRIBUTE TABLE .......................................................................................... 13
TABLE 15 – C2 MULTIPLEXED INFORMATION: DATA DEFINITIONS .............................................................................. 30
TABLE 16 – PM PUBLIC CSAFE PROTOCOL DEFAULTS ............................................................................................... 46
TABLE 17 - PM UNSUPPORTED PUBLIC CSAFE PROTOCOL FEATURES ........................................................................ 47
TABLE 18 – PM3/PM4 WORKOUT CONFIGURATION PARAMETER LIMITS .................................................................... 48
TABLE 19 – PM5 WORKOUT CONFIGURATION PARAMETER LIMITS ............................................................................. 48
Revision 0.25 5
Concept2 PM CSAFE Communication Definition
Document History
Table 1 - Document Modification History
Edit Date Engineer Description of Modification
3/11/19 Mark Lyons Initial outline created. V0.01
4/2/19 Mark Lyons Numerous updates including list of errors. V0.02
4/5/19 Mark Lyons Numerous updates including more sample functionality. V0.03
4/10/19 Mark Lyons Numerous updates including more sample functionality. V0.04
4/10/19 Mark Lyons Add appendix items on construction/deconstruction of multi-byte
values. V0.05
4/16/19 Mark Lyons More sample functionality. V0.06
8/16/19 Mark Lyons More sample functionality (Public CSAFE). V0.07
6/8/20 Mark Lyons Added definition for Fixed Interval Undefined Rest workouts V0.08
8/25/20 Mark Lyons Added screen value definitions and new command V0.09
9/3/20 Mark Lyons Added 2 additional Device Info characteristics V0.10
9/11/20 Mark Lyons Added CPU speed/tick rate enumeration V0.11
2/15/21 Mark Lyons Added explanation of setting SplitDurationDistance in Variable
Interval Workouts with Undefined Rest V0.12
2/23/21 Mark Lyons Added Appendix E with PM state transitions,V0.13
3/22/21 Mark Lyons Minor updates, V0.14
7/28/21 Mark Lyons Added get force curve sample, V0.15
12/13/21 Mark Lyons Updated CSAFE_PM_GET_PRODUCTCONFIGURATION response
definition, V0.16
1/6/22 Mark Lyons Added not that Force Curve is not supported in PM5v1, V0.17
2/15/22 Mark Lyons Removed Wi-Fi parameters (unused) from Set_RaceIdleModeParams,
V0.18
4/13/22 Mark Lyons Added new BLE notifications and CSAFE command, V0.19
9/13/22 Mark Lyons Updated GATT Server properties for Rowing characteristics to
NOTIFY, V0.20
10/24/22 Mark Lyons Updated BLE characteristic table to indicate which values are
firmware version specific, V0.21
10/26/22 Mark Lyons Added notes to indicate that any RaceOperationType other than
Disable requires CSAFE extended frame addressing
12/14/22 Mark Lyons Added game score CSAFE command and BT notification, V0.22
12/15/22 Mark Lyons Updated game score description and added Erg model type, V0.23
12/16/22 Mark Lyons Added missing OBJ_ERGMODELTYPE_T definition, V0.24
03/23/23 Mark Lyons Changed C2_PM_HEARTRATE_SERVICE_UUID from READ to
WRITE, V0.25
Related Documents
Table 2 - Related Documents
Revision 0.25 6
Concept2 PM CSAFE Communication Definition
Overview
Communication with the Performance Monitor (PM) is based on the CSAFE protocol. The CSAFE protocol was
created to facilitate communication between fitness equipment and a host computer. The “public” CSAFE protocol
implementation provides a basic framework for configuring workouts, and monitoring progress of those workouts,
through a “state machine” style mechanism. So in order to be compatible with existing fitness equipment controllers,
a public CSAFE implementation has been included with the PM.
Since the PM is substantially more programmable then the public CSAFE protocol can accommodate, a more
expansive Concept2 proprietary CSAFE protocol implementation has also been included. It’s important to
understand that a developer must use either the public CSAFE protocol or the full proprietary CSAFE protocol (e.g.,
simultaneous use of both protocols is not supported). Note that the public CSAFE protocol does include some very
limited proprietary commands deemed necessary for basic operation. The full proprietary protocol has limited
availability on some interfaces without special authenticating information that is made available by Concept2 to
qualified developers.
Interfaces
There are as many as three communications interfaces available depending on which generation Performance
Monitor (PM). All performance monitor models (PM3/PM4/PM5) support a USB device interface, typically used
for connecting to host computers. The PM4 and PM5 also support an RS485 interface typically used when
interconnecting two or more monitors for racing or multi-machine workouts. The PM5 supports a Bluetooth Smart
interface typically used when connecting to mobile device applications.
Revision 0.25 7
Concept2 PM CSAFE Communication Definition
All three interfaces utilize the CSAFE protocol to exchange commands and responses intended to configure and
monitor PM operations. Each interface transports the CSAFE protocol using different link layer protocols.
Adherence to these link layer protocols is equally as important as the CSAFE protocol in achieving successful
communication with the PM.
The standard frame is defined as a stream of bytes with the structure shown in Figure 1. No explicit addressing
information is present in the standard frame and its use is appropriate for a primary communicating with a single
secondary. The frame components (start flag, checksum, stop flag) provide a structure that allows unambiguously
locating, validating, and interpreting a frame within a stream of bytes. The start flags and stop flag are unique values
used to delineate the frame and, therefore, cannot appear in the frame contents or the checksum. A byte-stuffing
technique is employed to ensure that these unique bytes do not occur elsewhere in the frame. A checksum is
included in the frame to allow both the master and slave devices to verify the integrity of the “Frame Contents”.
Neither an acknowledgement (ACK) nor negative acknowledgement (NAK) at the frame level is an integral part of
the protocol.
Note that if RaceOperationType is set to anything other than RACEOPERATIONTYPE_DISABLE, extended frame
addressing is required.
Figure 1 - Standard Frame Format
The extended frame is defined as stream of bytes with the structure shown in Figure 2. Note that the standard and
extended frames are identical with the exception of the frame-unique start flag and the device address information.
The extended frame is appropriate for a primary communicating with two or more secondary PMs.
Frame Structure
The frame structure is a stream of bytes with a unique start byte, optional addressing, frame contents (e.g.,
commands and responses), a checksum and a unique stop byte. The unique start and stop byte values are shown in
Table 5. In order to ensure that these start and stop values do not appear anywhere in the frame, the primary and
secondary devices perform “byte-stuffing” and “byte-unstuffing” on the byte stream (i.e., frame contents including
extended frame addresses and checksum). This technique can be performed “on the fly” without impacting the data
stream buffering requirements, since the extra bytes only exist on the data link.
Revision 0.25 8
Concept2 PM CSAFE Communication Definition
The “byte-stuffing” algorithm simply substitutes two bytes for each of the unique bytes listed in Table 5. The
unique Byte Stuffing Flag is followed by a 0x00, 0x01, 0x02, or 0x03 as shown in Table 6 depending on the byte
being replaced. The impact of this technique on the data link is that the frame size could increase in size by a factor
of two in the worst case.
The frame beginning and end are designated by the unique Start and Stop bytes. If a Start or Stop byte is missed, the
frame is discarded and frame resynchronization occurs at the beginning of the next frame. Once a full frame is
received and all “byte-unstuffing” is performed, a one-byte checksum is computed with byte-by-byte XORing of the
frame contents (e.g., excluding start/stop flags and addresses) to verify frame integrity. The frame definition does
not explicitly place any limits on the frame length. Because the entire frame contents must be buffered before
computing the checksum, memory resources on the secondary devices typically establish the restrictions on frame
length. For CSAFE protocol compatibility, the following frame length restrictions are invoked for the PM physical
link:
1. A maximum frame size of 120 bytes including start/stop flags, checksum and byte stuffing
2. All flow control handled natively as part of physical link
Frame Contents
The CSAFE protocol transports frame content data consisting of both commands and responses. The only
restrictions on the frame contents relate to length of frame and the requirement that individual commands/ responses
do not straddle a frame boundary (i.e., no partial commands/responses within a frame). The following sections
detail the command and response formats.
Revision 0.25 9
Concept2 PM CSAFE Communication Definition
Command Format
All commands have one of two basic formats: long command or short command. Long commands are those
including command data while short commands are command only. The command is represented by a single byte
with the command address space partitioned equally (i.e., long commands have MS bit clear and short commands
have MS bit set). Figure 3 and Figure 4 illustrate the long and short command formats, respectively.
Short Command
In the long command format, the Long Command and Data Byte Count fields are single bytes. The Data Byte
Count field determines the Data field size. The short command format consists solely of the single byte Short
Command. Table 7 summarizes the command field types for both the long and short commands. Note that the
command formats allows a long command with a Data Byte Count of 0 and no bytes in the Data field. The virtue of
the Data Byte Count field in the long command is to allow slave devices to handle unrecognized commands by
merely disregarding the command and its data, while continuing to process succeeding commands within the same
frame.
Multiple complete commands can be included in a single frame, but no partial commands or responses are allowed.
When sending a frame consisting of multiple commands to a secondary device, the resulting response frame consists
of multiple command responses.
Response Format
All responses have the same Frame Contents format as shown in Figure 5. The status byte is bit-mapped in order to
indicate frame count, status and state machine state within the single byte. See Table 9 for status byte bit-mapping
definitions.
Figure 5 - Response Frame Contents Format
Revision 0.25 10
Concept2 PM CSAFE Communication Definition
PM Manufacturer Information
Table 10 summarizes the Concept2 PM product-specific information CSAFE information.
PM Extensions
The PM extensions to the frame protocol involve utilizing one pre-defined custom command that serves as a
“wrapper” for additional PM-specific commands. The one command is defined in Table 11. The one custom
command wrapper is used to expand the CSAFE command set for additional configuration and data operations. See
Public CSAFE section for a detailed explanation of the command wrapper implementation.
Revision 0.25 11
Concept2 PM CSAFE Communication Definition
Additional PM proprietary extensions to the frame protocol involve utilizing four commands added to the existing
public CSAFE protocol command set that serve as “wrappers” for the Concept2 proprietary command set. The four
commands are defined in Table 12. The four command wrappers are used to functionally partition the PM
command set space into “push” (i.e., set) and “pull” (i.e., get) operations for configuration and data. The use of
these command wrappers allow the PM to support existing CSAFE protocol commands while introducing PM
proprietary commands only accessible via the command set extension. Note that any wrapper can be used to access
any proprietary command (e.g., there is no requirement to use the “set PM configuration” wrapper to access a
configuration command).
Table 12 - PM Proprietary CSAFE Command Wrappers
Command Name Command
Identifier
CSAFE_SETPMCFG_CMD 0x76
CSAFE_SETPMDATA_CMD 0x77
CSAFE_GETPMCFG_CMD 0x7E
CSAFE_GETPMDATA_CMD 0x7F
USB
The PM support USB Version 1.10, operating at full speed (12 Mb/s). Specifically, the PM enumerates itself as a
Human Interface Device (HID) with a control endpoint and two interrupt endpoints (IN/OUT).
The report ID is always the first byte in the USB packet followed by the CSAFE frame.
Revision 0.25 12
Smart Bluetooth
Table 14 – C2 PM BTS Peripheral : Attribute Table
Revision 0.25
[Type text] 14
14
Concept2 PM CSAFE Communication Definition 14
1
See Appendix for enumerated values
Revision 0.25 14
[Type text] 15
15
Concept2 PM CSAFE Communication Definition 15
2
See Appendix for additional information on CSAFE commands
Revision 0.25 15
Concept2 PM CSAFE Communication Definition
3
See Appendix for enumerated values definitions
4
For reference - The named CSAFE command returns the same value
5
This value will change depending on where you are in the interval (work, rest, etc). Use workout type to determine whether the intervals are time or distance
intervals.
6
For reference - The named CSAFE command returns the same value
7
See Appendix for enumerated values definitions. For MultiErg workouts, this will be the Machine Type of the current interval, which may not be the same as
the connected Machine.
Revision 0.25 17
[Type text] 18
18
Concept2 PM CSAFE Communication Definition 18
8
For reference - The named CSAFE command returns the same value
Revision 0.25 18
Concept2 PM CSAFE Communication Definition
Revision 0.25 19
[Type text] 20
20
Concept2 PM CSAFE Communication Definition 20
9
For reference - The named CSAFE command returns the same value
Revision 0.25 20
Concept2 PM CSAFE Communication Definition
Revision 0.25 21
[Type text] 22
22
Concept2 PM CSAFE Communication Definition 22
10
This value will change depending on where you are in the interval (work, rest, etc). Use workout type to determine whether the intervals are time or distance
intervals
Revision 0.25 22
[Type text] 23
23
Concept2 PM CSAFE Communication Definition 23
11
See Appendix for enumerated values definitions. For MultiErg workouts, this will be the Machine Type of the current interval, which may not be the same as
the connected Machine.
Revision 0.25 23
Concept2 PM CSAFE Communication Definition
Revision 0.25 24
[Type text] 25
25
Concept2 PM CSAFE Communication Definition 25
12
This value will change depending on where you are in the interval when the workout is terminated. Use workout type to determine whether the intervals are
time or distance intervals.
Revision 0.25 25
[Type text] 26
26
Concept2 PM CSAFE Communication Definition 26
13
PM5v1 does not support this feature
14
MS Nibble = Total number of characteristics for this force curve, LS Nibble = Number of 16-bit data points in the current characteristic
Revision 0.25 26
Concept2 PM CSAFE Communication Definition
Revision 0.25 27
Concept2 PM CSAFE Communication Definition
Revision 0.25 28
Concept2 PM CSAFE Communication Definition
Revision 0.25 29
Concept2 PM CSAFE Communication Definition
Revision 0.25 30
Concept2 PM CSAFE Communication Definition
15
See Appendix for enumerated values definitions
16
For reference - The named CSAFE command returns the same value
17
This value will change depending on where you are in the interval (work, rest, etc). Use workout type to determine whether the intervals are time or distance
intervals.
18
For reference - The named CSAFE command returns the same value
Revision 0.25 32
[Type text] 33
33
Concept2 PM CSAFE Communication Definition 33
19
For reference - The named CSAFE command returns the same value
Revision 0.25 33
[Type text] 34
34
Concept2 PM CSAFE Communication Definition 34
20
For reference - The named CSAFE command returns the same value
Revision 0.25 34
Concept2 PM CSAFE Communication Definition
Revision 0.25 35
[Type text] 36
36
Concept2 PM CSAFE Communication Definition 36
21
This value will change depending on where you are in the interval (work, rest, etc). Use workout type to determine whether the intervals are time or distance
intervals
Revision 0.25 36
[Type text] 37
37
Concept2 PM CSAFE Communication Definition 37
22
See Appendix for enumerated values definitions. For MultiErg workouts, this will be the machine type of the current interval, which will not be the same as the
connected Machine
Revision 0.25 37
Concept2 PM CSAFE Communication Definition
Revision 0.25 38
Concept2 PM CSAFE Communication Definition
Revision 0.25 39
[Type text] 40
40
Concept2 PM CSAFE Communication Definition 40
23
See Appendix for enumerated values definitions. For MultiErg workouts, this will be the one of the MultiErg Machine Types, which may not be the same as
the connected Machine.
Revision 0.25 40
[Type text] 41
41
Concept2 PM CSAFE Communication Definition 41
24
PM5v1 does not support this feature
25
MS Nibble = Total number of characteristics for this force curve, LS Nibble = Number of 16-bit data points in the current characteristic
Revision 0.25 41
Concept2 PM CSAFE Communication Definition
Revision 0.25 42
Concept2 PM CSAFE Communication Definition
Revision 0.25 43
Concept2 PM CSAFE Communication Definition
C2 PM Heart Rate
0x0040 C2_PM_HEARTRATE_SERVICE_UUID WRITE
primary service
Revision 0.25 44
Concept2 PM CSAFE Communication Definition
Revision 0.25 45
Concept2 PM CSAFE Communication Definition
Public CSAFE
Features
Revision 0.25 46
Concept2 PM CSAFE Communication Definition
Set User Information Not setting user weight, age and gender
Get User Information User weight is fixed at 175 lbs, age and gender not supported
Finished State Timeout No Finished state timeout is employed to cause a transition back to the
Idle state; when a user hits the MENU/BACK to conclude viewing a
finished workout result or terminate a workout in progress, the Ready
state is entered instead of the Idle state. Instead a Finished state
timeout is employed to return to the Ready state.
Paused State Timeout A timeout is employed to enter the Finished state in the event a
configured workout is never started or re-started.
Manual State Timeout A timeout is employed to return to the Idle state in the event a manual
user ID override is performed and a workout is never configured
InUse State Entry In addition to allowing entry into the InUse state from the Idle and
HaveID states, entry from the Ready state is also allowed
Set Calories Goal Since the PM3/PM4 allows the user to select display units (either
time/meters, watts or calories), setting the workout goal using power is
sufficient to define a target pace for the pace boat display for all
display units.
There are several parameters which have minimum and maximum values when configuring a workout. These
parameter limits are imposed by the user interface when configuring the workout during typical usage, but will be
imposed somewhat differently when configuring workouts via the public CSAFE interface. When the
SetProgramCmd is issued by the Master to program the previously configured workout, all pertinent workout
parameters are checked against their respective limits. If any parameter violates its limits, the entire workout
configuration operation is aborted resulting in a “PrevReject” frame status. The Master must issue a PM-specific
GetErrorType command to determine the specific error information. Table 18 lists the workout configuration
parameter limits which should be adhered to during programming.
Revision 0.25 48
Concept2 PM CSAFE Communication Definition
Command List
the last read will be returned. The first byte of the response will indicate how many valid data bytes are
returned.
Revision 0.25 54
Concept2 PM CSAFE Communication Definition
Revision 0.25 55
Concept2 PM CSAFE Communication Definition
Performing a simple successive use of JustRow workouts to meet a series of workout goals can be achieved as
illustrated in the following figure.
Revision 0.25 56
Concept2 PM CSAFE Communication Definition
Proprietary CSAFE
Special Consideration
ScreenType Commands
The ScreenType command is unique in that it is initially processed by the communication task and “posted” for
processing by the UI task. The CSAFE frame response is sent immediately by the communications task. Since the
UI task only runs periodically (e.g., 2 - 5 Hz) there is some delay before the full effect of the command is realized.
The options are to delay sufficiently long for the command to complete (e.g., 1 second or more), or to poll for the
status of ScreenType commands. Using the CSAFE_PM_GET_SCREENSTATESTATUS, the status will be set to
APGLOBALS_SCREENPENDINGFLG_PENDING when the command is received. The status will change to
APGLOBALS_SCREENPENDINGFLG_INPROGRESS while processing and set to
APGLOBALS_SCREENPENDINGFLG_INACTIVE when complete. Note that depending on the polling rate, one
or more status values may not be visible.
Command List
.
.
.
Byte 15: FW Exe Version # (LSB)
CSAFE_PM_GET_HW_VERSION 0x81 Byte 0: HW Version # (MSB)
Byte 1: HW Version #
Byte 2: HW Version #
.
.
.
Byte 15: HW Version # (LSB)
CSAFE_PM_GET_HW_ADDRESS 0x82 Byte 0: HW address (MSB)
Byte 1: HW address
Byte 2: HW address
Byte 3: HW address (LSB)
CSAFE_PM_GET_TICK_TIMEBASE 0x83 Byte 0: Tick timebase (Float MSB)
Byte 1: Tick timebase
Byte 2: Tick timebase
Byte 3: Tick timebase (Float LSB)
CSAFE_PM_GET_HRM 0x84 Byte 0: Channel Status
0 – Inactive
1 - Discovery
2 – Paired
If paired then:
Byte 1: Device Manufacture ID
Byte 2: Device Type
Byte 3: Device Num (MSB)
Byte 4: Device Num (LSB)
Else
Bytes 1 - 4: 0
CSAFE_PM_GET_DATETIME 0x85 Byte 0: Time Hours (1 – 12)
Byte 1: Time Minutes (0 – 59)
Byte 2: Time Meridiem (0 – AM, 1 – PM)
Byte 3: Date Month (1 – 12)
Byte 4: Date Day (1 – 31)
Byte 5: Date Year (MSB)
Byte 6: Date Year (LSB)
CSAFE_PM_GET_SCREENSTATESTATUS 0x86 Byte 0: Screen type
Byte 1: Screen value
Byte 2: Screen status
CSAFE_PM_GET_RACE_LANE_REQUEST 0x87 Byte 0: Erg Physical Address
CSAFE_PM_GET_RACE_ENTRY_REQUEST 0x88 Byte 0: Erg Logical Address
CSAFE_PM_GET_WORKOUTTYPE 0x89 Byte 0: Workout type
CSAFE_PM_GET_DISPLAYTYPE 0x8A Byte 0: Display type
CSAFE_PM_GET_DISPLAYUNITS 0x8B Byte 0: Display units
CSAFE_PM_GET_LANGUAGETYPE 0x8C Byte 0: Language type
CSAFE_PM_GET_WORKOUTSTATE 0x8D Byte 0: Workout state
CSAFE_PM_GET_INTERVALTYPE 0x8E Byte 0: Interval type
CSAFE_PM_GET_OPERATIONALSTATE 0x8F Byte 0: Operational state
CSAFE_PM_GET_LOGCARDSTATE 0x90 Byte 0: Log card state
CSAFE_PM_GET_LOGCARDSTATUS 0x91 Byte 0: Log card status
CSAFE_PM_GET_POWERUPSTATE 0x92 Byte 0: Power-up state
CSAFE_PM_GET_ROWINGSTATE 0x93 Byte 0: Rowing state
CSAFE_PM_GET_SCREENCONTENT_VERSION 0x94 Byte 0: Screen Content Version # (MSB)
Revision 0.25 58
Concept2 PM CSAFE Communication Definition
Revision 0.25 59
Concept2 PM CSAFE Communication Definition
0x80: Distance)
Byte 1: Duration (MSB)
Byte 2: Duration
Byte 3: Duration
Byte 4: Duration (LSB)
CSAFE_PM_GET_WORKOTHER 0xE9 Byte 0: Work Other (MSB)
Byte 1: Work Other
Byte 2: Work Other
Byte 3: Work Other (LSB)
CSAFE_PM_GET_EXTENDED_HRM 0xEA Byte 0: HRM Channel Status
Byte 1: HRM manufacturer ID
Byte 2: HRM device type
Byte 3: HRM device number (MSB)
Byte 4: HRM device number
Byte 5: HRM device number
Byte 6: HRM device number (LSB)
CSAFE_PM_GET_DEFCALIBRATIONVERFIED 0xEB Byte 0: DF Calibration Verified Status
CSAFE_PM_GET_FLYWHEELSPEED 0xEC Byte 0: Flywheel speed, rpm (MSB)
Byte 1: Flywheel speed, rpm (LSB)
CSAFE_PM_GET_ERGMACHINETYPE 0xED Byte 0: Erg machine type
CSAFE_PM_GET_RACE_BEGINEND_TICKCOUNT 0xEE Byte 0: Race begin tick time, (MSB)
Byte 1: Race begin tick time
Byte 2: Race begin tick time
Byte 3: Race begin tick time (LSB)
Byte 4: Race end tick time (MSB)
Byte 5: Race end tick time
Byte 6: Race end tick time
Byte 7: Race end tick time (LSB)
CSAFE_PM_GET_PM5_FWUPDATESTATUS 0xEF Byte 0: Update info type (MSB)
Byte 1: Update info type (LSB)
Byte 2: Update status (MSB)
Byte 3: Update status (LSB)
.
.
Byte 9: User ID (LSB)
CSAFE_PM_GET_LOCALRACEPARTICIP 0x53 Byte 0: Race Type Byte 0: HW address
ANT
Byte 1: Race Length (MSB) (MSB)
Byte 2: Race Length Byte 1: HW address
Byte 3: Race Length Byte 2: HW address
Byte 4: Race Length (LSB) Byte 3: HW address
Byte 5: Race Participants (LSB)
Byte 6: Race State Byte 4: UserID String
(MSB)
Byte 5: UserID String
Byte 6: UserID String
Byte 7: UserID String
Byte 8: UserID String
Byte 9: UserID String
(LSB)
Byte 10: Machine type
CSAFE_PM_GET_USER_ID 0x54 Byte 0: User Number Byte 0: User Number
Byte 1: User ID (MSB)
Byte 2: User ID
Byte 3: User ID
Byte 4: User ID (LSB)
CSAFE_PM_GET_USER_PROFILE 0x55 Byte 0: User Number Byte 0: User Number
Byte 1: User Weight
(MSB)
Byte 2: User Weight
(LSB)
Byte 3: User DOB Day
Byte 4: User DOB
Month
Byte 5: User DOB Year
(MSB)
Byte 6: User DOB Year
(LSB)
Byte 7: User Gender
CSAFE_PM_GET_HRBELT_INFO 0x56 Byte 0: User Number Byte 0: User Number
Byte 1: Mfg ID
Byte 2: Device Type
Byte 3: Belt ID (MSB)
Byte 4: Belt ID (LSB)
CSAFE_PM_GET_EXTENDED_HRBELT_ 0x57 Byte 0: User Number Byte 0: User Number
INFO
Byte 1: Mfg ID
Byte 2: Device Type
Byte 3: Belt ID (MSB)
Byte 4: Belt ID
Byte 5: Belt ID
Byte 6: Belt ID (LSB)
CSAFE_PM_GET_CURRENT_LOG_STRU 0x58 Byte 0: Structure ID Byte 0: Structure ID
CTURE
enumeration enumeration
Byte 1: Split/interval Byte 1: Split/interval
number (1 – M) number
Byte 2: Bytes read
Byte 3: 1st data read
Byte 4: 2nd data read
Revision 0.25 61
Concept2 PM CSAFE Communication Definition
.
.
.
Byte N + 2: Nth data
read
Notes:
The hardware address is the unit serial # as stored in MFG EEPROM and accessible by command
CSAFE_PM_GET_HW_ADDRESS.
The CSAFE_PM_GET_LOCALRACEPARTICIPANT command is only available for firmware that supports PCless
racing.
Revision 0.25 64
Concept2 PM CSAFE Communication Definition
Notes:
1. A maximum block length of 64 bytes can be read. Fewer bytes can be read by specifying the block length
accordingly, but a complete 65 bytes of response data will be returned.
2. A maximum block length of 32 bytes (16 words) can be read. Fewer words can be read by specifying the
block length accordingly, but a complete 33 bytes of response data will be returned.
3. A maximum block length of 32 bytes (16 words) can be read. Fewer words can be read by specifying the
block length accordingly, but a complete 33 bytes of response data will be returned. Only data samples
recorded since the last read will be returned. The first byte of the response will indicate how many valid
data bytes are returned.
Revision 0.25 69
Concept2 PM CSAFE Communication Definition
Revision 0.25 70
Concept2 PM CSAFE Communication Definition
(LSB)
CSAFE_PM_SET_RACEDATASAMPLETI 0x1D Byte 0: Sample Tick (MSB) N/A
CKS
Byte 1: Sample Tick
Byte 2: Sample Tick
Byte 3: Sample Tick (LSB)
CSAFE_PM_SET_RACEOPERATIONTYP 0x1E Byte 0: Type2 N/A
E
CSAFE_PM_SET_RACESTATUSDISPLA 0x1F Byte 0:Display Tick (MSB) N/A
YTICKS
Byte 1: Display Tick
Byte 2: Display Tick
Byte 3: Display Tick (LSB)
CSAFE_PM_SET_RACESTATUSWARNIN 0x20 Byte 0: Warning Tick MSB) N/A
GTICKS
Byte 1: Warning Tick
Byte 2: Warning Tick
Byte 3: Warning Tick (LSB)
CSAFE_PM_SET_RACEIDLEMODEPARA 0x21 Byte 0: Doze Sec (MSB) N/A
MS
Byte 1: Doze Sec (LSB)
Byte 2: Sleep Sec (MSB)
Byte 3: Sleep Sec (LSB)
Byte 4: Unused
Byte 5: Unused
Byte 6: Unused
Byte 7: Unused
CSAFE_PM_SET_DATETIME 0x22 Byte 0: Time Hours (1 – 12) N/A
Byte 1: Time Minutes (0 –
59)
Byte 2: Time Meridiem (0 –
AM, 1 – PM)
Byte 3: Date Month (1 – 12)
Byte 4: Date Day (1 – 31)
Byte 5: Date Year (MSB)
Byte 6: Date Year (LSB)
CSAFE_PM_SET_LANGUAGETYPE 0x23 Byte 0: Language Type N/A
CSAFE_PM_SET_WIFICONFIG 0x24 Byte 0: Config Index N/A
Byte 1: WEP Mode
CSAFE_PM_SET_CPUTICKRATE 0x25 Byte 0: CPU/Tick Rate N/A
CSAFE_PM_SET_LOGCARDUSER 0x26 Byte 0: Logcard User # N/A
CSAFE_PM_SET_SCREENERRORMODE 0x27 Byte 0: Mode N/A
(disable/enable)
CSAFE_PM_SET_CABLETEST3 0x28 Byte 0: Mode N/A
(disable/enable)
Byte 1: Dummy Data
.
.
.
Byte 79: Dummy Data
CSAFE_PM_SET_USER_ID 0x29 Byte 0: User Number N/A
Byte 1: User ID (MSB)
Byte 2: User ID
Byte 3: User ID
Byte 4: User ID (LSB)
CSAFE_PM_SET_USER_PROFILE 0x2A Byte 0: User Number N/A
Byte 1: User Weight (MSB)
Byte 2: User Weight (LSB)
Byte 3: User DOB Day
Revision 0.25 71
Concept2 PM CSAFE Communication Definition
Notes:
1. The hardware address is the unit serial # as stored in MFG EEPROM and accessible by command
CSAFE_PM_GET_HW_ADDRESS.
2. If RaceOperationType is set to anything other than RACEOPERATIONTYPE_DISABLE, then extended
frame addressing is required.
3. This command is used by the PM3/PM4 only and not to be used by the PC
Revision 0.25 72
Concept2 PM CSAFE Communication Definition
Revision 0.25 73
Concept2 PM CSAFE Communication Definition
Hour
Byte 20: Target Cals Per
Hour (LSB)
Byte 21: Target Stroke Rate
CSAFE_PM_SET_EXTENDED_HRBELT_I 0x39 Byte 0: <unused> N/A
NFO
Byte 1: HRM mfg id
Byte 2: HRM device type
Byte 3: HRM belt id (MSB)
Byte 4: HRM belt id
Byte 5: HRM belt id
Byte 6: HRM belt id (LSB)
CSAFE_PM_SET_EXTENDED_HRM 0x3A Byte 0: HRM mfg id N/A
Byte 1: HRM device type
Byte 2: HRM belt id (MSB)
Byte 3: HRM belt id
Byte 4: HRM belt id
Byte 5: HRM belt id (LSB)
CSAFE_PM_SET_LEDBACKLIGHT 0x3B Byte 0: State N/A
(enable/disable)
Byte 1: Intensity (0 – 100%)
CSAFE_PM_SET_DIAGLOG_RECORD_A 0x3C Byte 0: Record Type N/A
RCHIVE
(Enum)
Byte 1: Record Index (MSB)
Byte 2: Record Index (LSB)
(65535 archives all)
CSAFE_PM_SET_WIRELESS_CHANNEL 0x3D Byte 0: Wireless channel bit N/A
_CONFIG
mask (MSB)
Byte 1: Wireless channel bit
mask
Byte 2: Wireless channel bit
mask
Byte 3: Wireless channel bit
mask (LSB)
CSAFE_PM_SET_RACECONTROLPARA 0x3E Byte 0: Undefined rest to
MS
work transition time, 1sec
LSB (MSB)
Byte 1: Undefined rest to
work transition time (LSB)
Byte 2: Undefined rest
interval, 1sec LSB (MSB)
Byte 3: Undefined rest
interval, (LSB)
Byte 4: Race prompt bitmap
display duration, 1sec LSB
(MSB)
Byte 5: Race prompt bitmap
display duration
Byte 6: Race prompt bitmap
display duration
Byte 7: Race prompt bitmap
display duration (LSB)
Byte 8: Time Cap duration,
1 sec LSB (MSB)
Byte 9: Time Cap duration,
Byte 10: Time Cap duration,
Revision 0.25 75
Concept2 PM CSAFE Communication Definition
Notes:
A maximum block length of 64 bytes can be set. Fewer bytes can be set by specifying the block length
accordingly, but a complete 69 bytes of command data will be sent.
The race participant name is a null-terminated string limited to 16 characters.
The CSAFE_PM_SET_LOCALRACEPARTICIPANT command is only available for firmware that supports PCless
racing.
Note that the Smart Bluetooth notifications provide a good baseline for collecting general status data, stroke data,
split data, and completed workout data.
Revision 0.25 76
Concept2 PM CSAFE Communication Definition
Revision 0.25 77
Concept2 PM CSAFE Communication Definition
Sample Functionality
Fixed Distance
Fixed Time
Revision 0.25 78
Concept2 PM CSAFE Communication Definition
Predefined
JustRow
F1 76 07 01 01 01 13 02 01 01 61 F2
Revision 0.25 79
Concept2 PM CSAFE Communication Definition
Fixed Distance
2000m/500m splits
F1 76 18 01 01 03 03 05 80 00 00 07 D0 05 05 80 00 00 01 90 14 01 01 13 02 01 01 28 F2
Fixed Time
20:00/4:00 splits
F1 76 18 01 01 05 03 05 00 00 01 D4 C0 05 05 00 00 00 5D C0 14 01 01 13 02 01 01 E0 F2
Fixed Calories
F1 76 18 01 01 0A 03 05 C0 00 00 00 64 05 05 0 00 00 00 14 14 01 01 13 02 01 01 17 F2
500m/:30 rest
F1 76 15 01 01 07 03 05 80 00 00 01 F4 04 02 00 1E 14 01 01 13 02 01 01 0A F2
2:00/:30 rest
06 WORKOUTTYPE_FIXEDTIME_INTERVAL 03 CSAFE_PM_SET_WORKOUTDURATIO
N
03 CSAFE_PM_SET_WORKOUTDURATION 04 CSAFE_PM_SET_RESTDURATION
05 Command byte count 14 CSAFE_PM_CONFIGURE_WORKOUT
00 WORKOUT_DURATION_IDENTIFIER_TIME 13 CSAFE_PM_SET_SCREENSTATE
00 2:00 (duration time MS Byte, .01sec LSB) F3 or 73 Stuff byte flag (checksum = F3) or
checksum
00 03 or F2 Stuff byte value or stop flag
2E F2 Standard frame stop flag or nothing
E0 (duration time LS Byte)
04 CSAFE_PM_SET_RESTDURATION
02 Command byte count
00 :30 (rest duration time MSB, 1sec LSB)
1E (rest duration time LS Byte)
14 CSAFE_PM_CONFIGURE_WORKOUT
01 Command byte count
01 Programming mode enable
13 CSAFE_PM_SET_SCREENSTATE
02 Command byte count
01 SCREENTYPE_WORKOUT
01 SCREENVALUEWORKOUT_PREPARETOROWWORKOUT
0A Checksum
F2 Standard frame stop flag
F1 76 15 01 01 06 03 05 00 00 00 2E E0 04 02 00 1E 14 01 01 13 02 01 01 0A F2
25c/1:00 rest
Revision 0.25 83
Concept2 PM CSAFE Communication Definition
01 SCREENVALUEWORKOUT_PREPARETOROWWORKOUT
0A Checksum
F2 Standard frame stop flag
F1 76 15 01 01 0C 03 05 40 00 00 00 19 04 02 00 0C 14 01 01 13 02 01 01 3F F2
Variable Interval
v500m/1:00r…4
Revision 0.25 84
Concept2 PM CSAFE Communication Definition
00 INTERVALTYPE_TIME
03 CSAFE_PM_SET_WORKOUTDURATION
05 Command byte count
00 WORKOUT_DURATION_IDENTIFIER_TIME
00 5:00 (duration time MS Byte, .01sec LSB)
00
75
30 (duration time LS Byte)
04 CSAFE_PM_SET_RESTDURATION
02 Command byte count
00 2:00 (rest duration time MSB, 1sec LSB)
78 (rest duration time LS Byte)
06 CSAFE_PM_SET_TARGETPACETIME
04 Command byte count
00 1:40 (pace time MS Byte, .01sec LSB)
00
27
10 (pace time LS Byte)
14 CSAFE_PM_CONFIGURE_WORKOUT
01 Command byte count
01 Programming mode enable
13 CSAFE_PM_SET_SCREENSTATE
02 Command byte count
01 SCREENTYPE_WORKOUT
01 SCREENVALUEWORKOUT_PREPARETOROWWORKO
UT
C6 Checksum
F2 Standard frame stop flag
F1 76 6F 18 01 00 01 01 08 17 01 01 03 05 80 00 00 01 F4 04 02 00 3C 06 04 00 00 27 10 14 01 01 18 01 01 17 01
00 03 05 00 00 00 46 50 04 02 00 00 06 04 00 00 27 10 14 01 01 18 01 02 17 01 01 03 05 80 00 00 03 E8 04 02 00
00 06 04 00 00 27 10 14 01 01 18 01 03 17 01 00 03 05 00 00 00 75 30 04 02 00 78 06 04 00 00 27 10 14 01 01 13
02 01 01 C6 F2
The additional configuration command setting SplitDurationDistance to 0 is necessary so that "Biathlon" workout
specific logic is not triggered. A Biathlon workout is a form of variable interval workout with undefined rest that
uses a non-zero SplitDurationDistance to assess a penalty distance to force the user to perform extra work. This is a
special case workout, and in order to "fit it into the workout paradigm" it was necessary to employ the
SplitDurationDistance.
Setting the SplitDurationDistance to 0 is necessary when at least one undefined rest interval is configured in a
variable interval workout.
v100m…2
Revision 0.25 86
Concept2 PM CSAFE Communication Definition
Revision 0.25 87
Concept2 PM CSAFE Communication Definition
01 CSAFE_PM_SET_WORKOUTTYPE
01 Command byte count
09 WORKOUTTYPE_VARIABLE_UNDEFINEDREST_INTE
RVAL
05 CSAFE_PM_SET_SPLITDURATION
05 Command byte count
80 WORKOUT_DURATION_IDENTIFIER_DISTANCE
00 0m (split duration distance MS Byte)
00
00
00 (split duration distance LS Byte)
13 CSAFE_PM_SET_SCREENSTATE
02 Command byte count
01 SCREENTYPE_WORKOUT
01 SCREENVALUEWORKOUT_PREPARETOROWWORKO
UT
46 Checksum
F2 Standard frame stop flag
F1 76 45 18 01 00 01 01 08 17 01 04 03 05 80 00 00 00 64 04 02 00 00 06 04 00 00 32 C8 14 01 01 18 01 01 17 01
03 03 05 00 00 00 2E E0 04 02 00 00 06 04 00 00 32 C8 14 01 01 01 01 09 05 05 80 00 00 00 00 13 02 01 01 8F F2
All fixed interval workouts using undefined rest should be programmed as variable interval workouts with undefined
rest up to a maximum of 50 intervals. When terminated the fixed interval workouts will be logged with only the
intervals completed.
CSAFE Miscellaneous
Terminate Workout
F1 76 04 13 02 01 02 62 F2
Frame Frame
F1 Standard frame start flag F1 Standard frame start flag
1A PM-specific wrapper 09 Status
01 Wrapper command byte count 1A PM-specific wrapper
BF CSAFE_PM_GET_STROKESTATE 03 Wrapper command byte count
A4 Checksum BF CSAFE_PM_GET_STROKESTATE
F2 Standard frame stop flag 01 Command byte count
04 StrokeState: Recovery
AA Checksum
F2 Standard frame stop flag
Revision 0.25 89
Concept2 PM CSAFE Communication Definition
Revision 0.25 90
Concept2 PM CSAFE Communication Definition
20 Value (LS)
00 Value (MS)
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
00 Don’t care
xx Checksum
F2 Standard frame stop flag
Revision 0.25 91
Concept2 PM CSAFE Communication Definition
Revision 0.25 92
Concept2 PM CSAFE Communication Definition
Appendix A
Enumerated Values
Operational State
typedef enum {
} OBJ_ERGMODELTYPE_T;
Workout Type
typedef enum {
WORKOUTTYPE_JUSTROW_NOSPLITS, /**< JustRow, no splits (0). */
WORKOUTTYPE_JUSTROW_SPLITS, /**< JustRow, splits (1). */
WORKOUTTYPE_FIXEDDIST_NOSPLITS, /**< Fixed distance, no splits (2). */
WORKOUTTYPE_FIXEDDIST_SPLITS, /**< Fixed distance, splits (3). */
WORKOUTTYPE_FIXEDTIME_NOSPLITS, /**< Fixed time, no splits (4). */
WORKOUTTYPE_FIXEDTIME_SPLITS, /**< Fixed time, splits (5). */
WORKOUTTYPE_FIXEDTIME_INTERVAL, /**< Fixed time interval (6). */
WORKOUTTYPE_FIXEDDIST_INTERVAL, /**< Fixed distance interval (7). */
WORKOUTTYPE_VARIABLE_INTERVAL, /**< Variable interval (8). */
WORKOUTTYPE_VARIABLE_UNDEFINEDREST_INTERVAL, /**< Variable interval, undefined rest (9).
WORKOUTTYPE_FIXEDCALORIE_SPLITS, /**< Fixed calorie, splits (10). */
WORKOUTTYPE_FIXEDWATTMINUTE_SPLITS, /**< Fixed watt-minute, splits (11). */
WORKOUTTYPE_FIXEDCALS_INTERVAL, /**< Fixed calorie interval (12). */
WORKOUTTYPE_NUM /**< Number of workout types (13). */
} OBJ_WORKOUTTYPE_T;
Interval Type
typedef enum {
INTERVALTYPE_TIME, /**< Time interval type (0). */
INTERVALTYPE_DIST, /**< Distance interval type (1). */
INTERVALTYPE_REST, /**< Rest interval type (2). */
INTERVALTYPE_TIMERESTUNDEFINED, /**< Time undefined rest interval type (3). */
INTERVALTYPE_DISTANCERESTUNDEFINED, /**< Distance undefined rest interval type (4). */
INTERVALTYPE_RESTUNDEFINED, /**< Undefined rest interval type (5). */
INTERVALTYPE_CALORIE, /**< Calorie interval type (6). */
INTERVALTYPE_CALORIERESTUNDEFINED , /**< Calorie undefined rest interval type (7). */
INTERVALTYPE_WATTMINUTE, /**< Watt-minute interval type (8). */
INTERVALTYPE_WATTMINUTERESTUNDEFINED, /**< Watt-minute undefined rest interval type (9). */
INTERVALTYPE_NONE = 255 /**< No interval type (255 ). */
} OBJ_INTERVALTYPE_T;
Workout State
typedef enum {
WORKOUTSTATE_WAITTOBEGIN, /**< Wait to begin state (0). */
WORKOUTSTATE_WORKOUTROW, /**< Workout row state (1). */
WORKOUTSTATE_COUNTDOWNPAUSE, /**< Countdown pause state (2). */
WORKOUTSTATE_INTERVALREST, /**< Interval rest state (3). */
WORKOUTSTATE_INTERVALWORKTIME, /**< Interval work time state (4). */
WORKOUTSTATE_INTERVALWORKDISTANCE, /**< Interval work distance state (5). */
WORKOUTSTATE_INTERVALRESTENDTOWORKTIME, /**< Interval rest end to work time state (6). */
WORKOUTSTATE_INTERVALRESTENDTOWORKDISTANCE, /**< Interval rest end to work distance state (7). */
WORKOUTSTATE_INTERVALWORKTIMETOREST, /**< Interval work time to rest state (8). */
WORKOUTSTATE_INTERVALWORKDISTANCETOREST, /**< Interval work distance to rest state (9). */
WORKOUTSTATE_WORKOUTEND, /**< Workout end state (10). */
WORKOUTSTATE_TERMINATE, /**< Workout terminate state (11). */
WORKOUTSTATE_WORKOUTLOGGED, /**< Workout logged state (12). */
WORKOUTSTATE_REARM, /**< Workout rearm state (13). */
} OBJ_WORKOUTSTATE_T;
Revision 0.25 94
Concept2 PM CSAFE Communication Definition
Rowing State
typedef enum {
ROWINGSTATE_INACTIVE, /**< Inactive (0). */
ROWINGSTATE_ACTIVE, /**< Active (1). */
} OBJ_ROWINGSTATE_T;
Stroke State
typedef enum {
STROKESTATE_WAITING_FOR_WHEEL_TO_REACH_MIN_SPEED_STATE, /**< FW to reach min speed state (0). */
STROKESTATE_WAITING_FOR_WHEEL_TO_ACCELERATE_STATE, /**< FW to accelerate state (1). */
STROKESTATE_DRIVING_STATE, /**< Driving state (2). */
STROKESTATE_DWELLING_AFTER_DRIVE_STATE, /**< Dwelling after drive state (3). */
STROKESTATE_RECOVERY_STATE /**< Recovery state (4). */
} OBJ_STROKESTATE_T;
Workout Number
typedef enum {
WORKOUTNUMBER_PROGRAMMED, /**< Programmed (0). */
WORKOUTNUMBER_DEFAULT_1, /**< Standard list 1 (1). */
WORKOUTNUMBER_DEFAULT_2, /**< Standard list 2 (2). */
WORKOUTNUMBER_DEFAULT_3, /**< Standard list 3 (3). */
WORKOUTNUMBER_DEFAULT_4, /**< Standard list 4 (4). */
WORKOUTNUMBER_DEFAULT_5, /**< Standard list 5 (5). */
WORKOUTNUMBER_CUSTOM_1, /**< Custom list 1 (6). */
WORKOUTNUMBER_CUSTOM_2, /**< Custom list 2 (7). */
WORKOUTNUMBER_CUSTOM_3, /**< Custom list 3 (8). */
Revision 0.25 95
Concept2 PM CSAFE Communication Definition
Start Type
typedef enum {
STARTTYPE_RANDOM, /**< Random type (0). */
STARTTYPE_COUNTDOWN, /**< Countdown type (1). */
STARTTYPE_RANDOMMODIFIED, /**< Random modified type (2). */
STARTTYPE_IMMEDIATE, /**< Immediate type (3). */
STARTTYPE_WAITFORFLYWHEEL /**< Wait for flywheel type (4). */
} OBJ_STARTTYPE_T;
Race State
typedef enum {
RACESTATE_IDLE, /**< Race idle state (0). */
Revision 0.25 96
Concept2 PM CSAFE Communication Definition
Race Type
typedef enum {
RACETYPE_FIXEDDIST_SINGLEERG, /**< Fixed distance, individual type (0). */
RACETYPE_FIXEDTIME_SINGLEERG, /**< Fixed time, individual type (1). */
RACETYPE_FIXEDDIST_TEAMERG, /**< Fixed distance, team type (2). */
RACETYPE_FIXEDTIME_TEAMERG, /**< Fixed time, team type (3). */
RACETYPE_WORKOUTRACESTART, /**< Workout race start type (4). */
RACETYPE_FIXEDCAL_SINGLEERG, /**< Fixed calorie, individual type (5). */
RACETYPE_FIXEDCAL_TEAMERG, /**< Fixed calorie, team type (6). */
RACETYPE_FIXEDDIST_RELAY_SINGLEERG, /**< Fixed distance, relay individual type (7). */
RACETYPE_FIXEDTIME_RELAY_SINGLEERG, /**< Fixed time, relay individual type (8). */
RACETYPE_FIXEDCAL_RELAY_SINGLEERG, /**< Fixed calorie, relay individual type (9). */
RACETYPE_FIXEDDIST_RELAY_TEAMERG, /**< Fixed distance, relay team type (10). */
RACETYPE_FIXEDTIME_RELAY_TEAMERG, /**< Fixed time, relay team type (11). */
RACETYPE_FIXEDCAL_RELAY_TEAMERG, /**< Fixed calorie, relay team type (12). */
RACETYPE_FIXEDDIST_MULTIACTIVITY_SEQUENTIAL_SINGLEERG, /**< Fixed distance, multiactivity
individual type, sequential use (13). */
RACETYPE_FIXEDTIME_MULTIACTIVITY_SEQUENTIAL_SINGLEERG, /**< Fixed time, multiactivity
individual type, sequential use (14). */
RACETYPE_FIXEDCAL_MULTIACTIVITY_SEQUENTIAL_SINGLEERG, /**< Fixed calorie, multiactivity
individual type, sequential use (15). */
RACETYPE_FIXEDDIST_MULTIACTIVITY_SEQUENTIAL_TEAMERG, /**< Fixed distance, multiactivity team
type, sequential use (16). */
RACETYPE_FIXEDTIME_MULTIACTIVITY_SEQUENTIAL_TEAMERG, /**< Fixed time, multiactivity team
type, sequential use (17). */
RACETYPE_FIXEDCAL_MULTIACTIVITY_SEQUENTIAL_TEAMERG, /**< Fixed calorie, multiactivity team
type, sequential use (18). */
RACETYPE_FIXEDDIST_ERGATHLON, /**< Fixed distance, Ergathlon type (19). */
RACETYPE_FIXEDTIME_ERGATHLON, /**< Fixed time, Ergathlon type (20). */
RACETYPE_FIXEDCAL_ERGATHLON, /**< Fixed calorie, Ergathlon type (21). */
RACETYPE_FIXEDDIST_MULTIACTIVITY_SIMULTANEOUS_SINGLEERG, /**< Fixed distance, multiactivity
individual type, simultaneous use (22). */
RACETYPE_FIXEDTIME_MULTIACTIVITY_SIMULTANEOUS_SINGLEERG, /**< Fixed time, multiactivity individual
type, simultaneous use (23). */
RACETYPE_FIXEDCAL_MULTIACTIVITY_SIMULTANEOUS_SINGLEERG, /**< Fixed calorie, multiactivity
individual type, simultaneous use (24). */
RACETYPE_FIXEDDIST_MULTIACTIVITY_SIMULTANEOUS_TEAMERG, /**< Fixed distance, multiactivity team
type, simultaneous use (25). */
RACETYPE_FIXEDTIME_MULTIACTIVITY_SIMULTANEOUS_TEAMERG, /**< Fixed time, multiactivity team type,
simultaneous use (26). */
RACETYPE_FIXEDCAL_MULTIACTIVITY_SIMULTANEOUS_TEAMERG /**< Fixed calorie, multiactivity team type,
simultaneous use (27). */
RACETYPE_FIXEDDIST_BIATHLON, /**< Fixed distance, Biathlon type (28). */
RACETYPE_FIXEDCAL_BIATHLON, /**< Fixed calorie, Biathlon type (29). */
RACETYPE_FIXEDDIST_RELAY_NOCHANGE_SINGLEERG, /**< Fixed distance, no change prompt, relay individual
type (30). */
RACETYPE_FIXEDTIME_RELAY_NOCHANGE_SINGLEERG, /**< Fixed time, no change prompt, relay individual type
(31). */
Revision 0.25 97
Concept2 PM CSAFE Communication Definition
Screen Type
typedef enum {
SCREENTYPE_NONE,
SCREENTYPE_WORKOUT, /**< Workout type (0). */
SCREENTYPE_RACE, /**< Race type (1). */
SCREENTYPE_CSAFE, /**< CSAFE type (2). */
SCREENTYPE_DIAG, /**< Diagnostic type (3). */
SCREENTYPE_MFG, /**< Manufacturing type (4). */
} OBJ_SCREENTYPE_T;
Revision 0.25 98
Concept2 PM CSAFE Communication Definition
Revision 0.25 99
Concept2 PM CSAFE Communication Definition
Screen Status
enum
{
APGLOBALS_SCREENPENDINGFLG_INACTIVE = 0,
APGLOBALS_SCREENPENDINGFLG_PENDING,
APGLOBALS_SCREENPENDINGFLG_INPROGRESS,
};
Status Type
typedef enum {
} OBJ_STATUSTYPE_T;
LOGMAP_RECIDENT_PM5_LOGHEADER = 21
LOGMAP_RECIDENT_PM5_LOGFIXEDHEADERDATA = 22
LOGMAP_RECIDENT_PM5_LOGSPLITDATA = 23
LOGMAP_RECIDENT_PM5_LOGFIXEDINTERVALHEADER = 24
LOGMAP_RECIDENT_PM5_LOGFIXEDINTERVALDATA = 25
LOGMAP_RECIDENT_PM5_LOGVARIABLEINTERVALHEADER = 26
LOGMAP_RECIDENT_PM5_LOGVARIABLEINTERVALDATA = 27
LOGMAP_RECIDENT_PM5_COMBINED_LOGHEADER_LOGFIXEDHEADERDATA = 128
LOGMAP_RECIDENT_PM5_COMBINED_LOGHEADER_LOGFIXEDINTERVALHEADER = 129
LOGMAP_RECIDENT_PM5_COMBINED_LOGHEADER_LOGVARIABLEINTERVALHEADER = 13 0
Game ID
enum {
APGLOBALS_GAMEID_NONE,
APGLOBALS_GAMEID_FISH,
APGLOBALS_GAMEID_DART,
APGLOBALS_GAMEID_TARGET_BASIC,
APGLOBALS_GAMEID_TARGET_ADVANCED,
APGLOBALS_GAMEID_CROSSTRAINING};
#define LOGMAP_GET_GAMETYPEIDENT_M(gameid) \
((UINT8_T)(gameid & LOGMAP_GAMETYPEIDENT_PM5_MSK))
#define LOGMAP_GET_WORKOUTVERIFIED_M(gameid) \
((UINT8_T)(( gameid & LOGMAP_LOGHEADER_STRUCT_VERIFIED_MSK) >> 4))
Appendix B
Data Representation
Data Calculation
Display
1. Workout Summary:
a. Floating point elapsed time is truncated to 0.1sec resolution.
b. Total distance at 1m resolution.
2. Stroke Pace:
a. Floating point distance and time used to compute stroke pace, result is rounded to 1sec resolution.
3. Avg Pace:
a. Floating point distance and time used to compute avg pace, result is rounded to 0.1sec resolution.
4. Split Pace:
a. Floating point distance and time used to compute split pace, result is rounded to 0.1sec resolution.
5. Stroke Rate:
a. Floating point stroke duration (time) rounded to 1spm resolution.
6. Avg Stroke Rate:
a. Stroke count and floating point elapsed time truncated to 1spm resolution.
Workout Log
1. Workout summary:
a. Stroke rate for each interval/split is added (1spm resolution) and average taken. Result is truncated
to 1spm resolution.
b. Floating point elapsed time rounded from 0.01sec resolution to 0.1sec resolution.
c. Total distance at 1m resolution.
d. Average pace is computed using b. and c. above and truncated to 0.1sec resolution.
Pace Conversions
Data Construction
Multi-byte data ordering varies between Smart Bluetooth notifications and CSAFE command so be aware. Note that
all calculations are integer.
Data[8] = {4, 3, 2, 1, 1, 2, 3, 4}
Data Deconstruction
Multi-byte data ordering varies between Smarth Bluetooth notifications and CSAFE command so be aware. Note
that all calculations are integer.
data0 = src0/256
data1= src0 – (data0 * 256)
data2 = (src1/256)
data3 = src1 – (data1 * 256)
data4 = (src2/256)
data5 = src2 – (data2 * 256)
data6 = (src3/256)
data7 = src3 – (data3 * 256)
data0 = 257/256 = 1
data1= 257 – (1 * 256) = 1
data2 = (32767/256) = 127
data3 = 32767– (127 * 256) = 255
data4 = (63/256) = 0
data5 = 63– (0 * 256) = 63
data6 = (60000/256) = 234
Revision 0.25 106
Concept2 PM CSAFE Communication Definition
data2 = (src0/65536)
data1= (src0 – (data2 * 65536))/256
data0= src0 – (data2 * 65536) – (data1 * 256)
data5 = (src1/65536)
data4= (src1 – (data5 * 65536))/256
data3= src1– (data5 * 65536) – (data4 * 256)
data8 = (src2/65536)
data7= (src2 – (data8 * 65536))/256
data6= src2– (data8 * 65536) – (data7 * 256)
Data[9] = {data0, data1, data2, data3, data4, data5, data6, data7, data8}
data2 = (65537/65536) = 1
data1= (65537– (1 * 65536))/256 = 0
data0= 65537– (1 * 65536) – (0 * 256) = 1
data5 = (150000/65536) = 2
data4= (150000– (2 * 65536))/256 = 73
data3= 150000– (2 * 65536) – (73 * 256) = 240
data8 = (57/65536) = 0
data7= (src2 – (0 * 65536))/256 = 0
data6= src2– (0 * 65536) – (0 * 256) = 57
data3 = (src0/16777216)
data2 = (src0 – (data3 * 16777216))/65536
data1= (src0 – (data3 * 16777216) – (data2 * 65536))/256
data0= src0 – (data3 * 16777216) – (data2 * 65536) - (data1 * 256)
data3 = (16909060/16777216) = 1
data2 = (16909060– (1 * 16777216))/65536 = 2
data1= (16909060– (1 * 16777216) – (2 * 65536))/256 = 3
data0= 16909060– (1 * 16777216) – (2 * 65536) - (3 * 256) = 4
data3 = (67305985/16777216) = 4
data2 = (67305985– (4 * 16777216))/65536 = 3
data1= (67305985– (4 * 16777216) – (3 * 65536))/256 = 2
data0= 67305985– (4 * 16777216) – (3 * 65536) - (2 * 256) = 1
Data[8] = {4, 3, 2, 1, 1, 2, 3, 4}
Appendix C
Pre-programmed workout definitions for standard list and custom list are defined below. Note that the "Custom
List" and "Favorites" workouts can vary from PM to PM depending on actions taken by the user.
Program # / Description
1 - 2000m Fixed Distance with 500m splits
2 - 5000m Fixed Distance with 1000m splits
3 - 10000m Fixed Distance with 2000m splits
4 - 30:00 Fixed Time w/ 6:00 splits
5 - 500m Fixed Distance Interval with 1:00 rest between intervals (500m/1:00r)
Program # / Description
6 - 00:30 Fixed Time Interval w/ 00:30 rest between intervals (:30/:30r)
7 - 7 Interval Variable (1:00/1:00r, 2:00/2:00r, 3:00/3:00r, 4:00/4:00r, 3:00/3:00r, 2:00/2:00r, 1:00/1:00r)
8 - 4 Interval Variable (2000m/3:00r, 1500m/3:00r, 1000m/3:00r, 500m/3:00r)
9 - 9 Interval Variable (1:40/:20r, 1:40/:20r, 1:40/:20r, 1:40/:20r, 1:40/2:00r, 1:40/:20r, 1:40/:20r, 1:40/:20r,
1:40/:20r)
10 - 42195 Fixed Distance with 2000m splits
Program # / Description
1 - 1000m Fixed Distance with 250m splits
2 - 5000m Fixed Distance with 500m splits
3 - 30:00 Fixed Time w/ 5:00 splits
4 – 50cal Fixed Calorie with 10cal splits
5 – 1:00 Fixed Time Interval with 1:00 rest between intervals (1:00/1:00r)
Program # / Description
6 - 00:20 Fixed Time Interval w/ 00:10 rest between intervals (:20/:10r)
7 – 1:00:00 Fixed Time w/ 10:00 splits
8 – 40,000m Fixed Distance w/ 5000m splits
9 - 9 Interval Variable (1:40/:20r, 1:40/:20r, 1:40/:20r, 1:40/:20r, 1:40/2:00r, 1:40/:20r, 1:40/:20r, 1:40/:20r,
1:40/:20r)
10 – 100,000m Fixed Distance w/ 10,000m splits
Appendix D
The PM error display format is a combination of error code and screen number as defined below:
APMAIN_TASKCREATE_ERR 1
APMAIN_TASKDELETE_ERR 2
APMAIN_VOLTSUPPLY_ERR 3
APMAIN_USERKEY_STUCK_ERR 4
A button is stuck in the 'down' (pressed) position, or possibly corrosion or liquids on the circuit board.
Proposed Error Text:"Button Stuck? Did you hold the button down while resetting or putting batteries in? Is the PM wet or
damaged?"
APMAIN_TASK_INVALID_ERR 5
APMAIN_MFGINFO_INVALID_ERR 6
APMAIN_CIPHERKEY_INVALID_ERR 7
APMAIN_FAILEDFLASHVERIFY_ERR 8
APCOMM_INIT_ERR 10
APCOMM_INVALIDPW_ERR 11
APLOG_INIT_ERR 20
APLOG_INVALIDUSER_ERR 21
APLOG_USERSTATINFO_STORAGE_ERR 22
APLOG_USERSTATINFO_RETRIEVE_ERR 23
APLOG_USERDELETE_ERR 24
APLOG_USERDYNAMINFO_STORAGE_ERR 25
APLOG_USERDYNAMINFO_RETRIEVE_ERR 26
APLOG_CUSTOMWORKOUT_STORAGE_ERR 27
APLOG_CUSTOMWORKOUT_RETRIEVE_ERR 28
APLOG_CUSTOMWORKOUT_INSUFFMEM_ERR 29
APLOG_CUSTOMWORKOUT_INVALID_ERR 30
APLOG_INVALIDCARDOPERATION_ERR 31
APLOG_COPYTOCARD_INSUFFMEM_ERR 32
APLOG_INVALIDCUSTOMWORKOUT_ERR 33
APLOG_INVALIDWORKOUTIDENT_ERR 34
APLOG_INVALIDLISTLENGTH_ERR 35
APLOG_INVALIDINPUTPARAM_ERR 36
APLOG_INVALIDWORKOUTNUM_ERR 37
APLOG_CARDNOTPRESENT_ERR 38
APLOG_INVALIDINTLOGADDR_ERR 39
APLOG_INVALIDLOGHDRPTR_ERR 40
APLOG_MAXSPLITSEXCEEDED_ERR 41
APLOG_INVALIDCARDSTRUCTREV_ERR 43
APLOG_CARDOPERATIONTIMEOUT_ERR 44
APLOG_INVALIDLOGSIZE_ERR 45
APLOG_LOGENTRYVALIDATE_ERR 46
APLOG_USERDYNAMICVALIDATE_ERR 47
APLOG_CARDINFOVALIDATE_ERR 48
APLOG_CARDACCESS_ERR 49
APLOG_CORRUPT_INTERNALLOGMEM_ERR 95
APROWXX_INVALID_DF_ERR 50
APROWXX_INVALID_DF_TACHDURATION_ERR 51
APROWXX_INVALID_DF_STROKEDURATION_ERR 52
APROWXX_INVALID_DF_RECOVERYDURATION_ERR 53
APROWXX_INVALID_DF_STROKEDURATION1_ERR 54
APPM3_INVALIDWORKOUTNUM_ERR 60
APPM3_NOPLOTDATA_ERR 61
APPM3_INVALIDMFGINFO_ERR 62
APPM3_INVALIDCALINFO_ERR 63
APPM3_INVALIDWORKOUTDURATION_ERR 64
APPM3_INVALIDSPLITDURATION_ERR 65
APPM3_INVALIDRESTDURATION_ERR' 66
More than likely, a software application like RowPro etc. has created a workout that is causing the splits to be too small or
too large; or too many splits (more than 30). This shouldn't happen with a PM5 just by itself.
APPM3_INVALIDINTERVALCNT_ERR 67
APPM3_INVALIDWORKOUTTYPE_ERR 68
APPM3_INVALIDDBMFGINFO_ERR 69
APMEM_CALEEPROM_ERR 75
APMEM_MFGEEPROM_ERR 76
APMEM_USREEPROM_ERR 77
APMEM_DBEEPROM_ERR 78
APHEADER_INVALIDFONTHDR_ERR 80
APHEADER_INVALIDSCRNHDR_ERR 81
APHEADER_INVALIDLDRHDR_ERR 82
APHEADER_INVALIDAPPHDR_ERR 83
APHEADER_INVALIDMFGHDR_ERR 84
APHEADER_INVALIDEXPMFGHDR_ERR 85
APHEADER_INVALIDDBMFGHDR_ERR 86
APHEADER_INVALID_UPDATETYPE_ERR 87
APHEADER_IMAGE_PROGRAMMING_ERR 88
APHEADER_UPDATEINFO_PROGRAMMING_ERR 89
APRACE_INVALIDWORKOUTTYPE_ERR 1700
APRACE_INVALID_RACECONFIG_ERR 1701
APRACE_FLYWHEELS_MOVING_ERR 1702
APFILE_FWUPDBUNDLE_INVALID_ERR 1960
APFILE_INTERNALBUNDLE_INVALID_ERR 1961
APFILE_SPIIMAGE_INVALID_ERR 1962
APFILE_SPECIALTOKEN_INVALID_ERR 1963
APFILE_FWUPDATE_ABORTED_ERR 1964
TKCMDPR_INVALID_CMD_ERR 121
TKCMDPR_INVALID_CMD_ADDR_ERR 122
TKCMDPR_INVALID_DEST_ADDR_ERR 123
TKCMDPR_INVALID_DEST_INTF_ERR 124
TKCMDPR_INVALID_INTF_ERR 125
TKCMDPR_ROUTE_TABLE_FULL_ERR 126
TKCMDPR_NO_DATA_AVAILABLE_ERR 127
TKCMDPR_UNAUTHORIZED_CMD_ERR 128
TKCMDPR_REFUSE_CMD_ERR 129
TKDATALOG_INIT_ERR 130
DUPLICATE
ERR CODE
TKDATALOG_DEVICE_INVALID_ERR 131
TKDATALOG_CARD_INIT_ERR 132
TKDATALOG_DEVICE_SIZE_ERR 133
TKDATALOG_MULTI_STRUCT_ERR 134
TKDATALOG_READ_ERR 135
TKDATALOG_WRITE_ERR 136
TKDATALOG_RECORDIDENTIFIER_ERR 137
TKDATALOG_INSUFFMEM_ERR 138
TKDATALOG_CARD_CORRUPT_ERR 139
TKDISP_INVALID_CHAR_ERR 140
TKDISP_INVALIDPARAM_ERR 141
TKDISP_STRING_TOO_LONG_ERR 142
TKDISP_STRING_TOO_HIGH_ERR 143
TKDISP_INVALID_LANG_ERR 144
TKDISP_UPDATE_TIMEOUT_ERR 145
TKEEPROM_INIT_ERR 150
TKEEPROM_ACK_ERR 151
TKEEPROM_STOP_ERR 152
TKEEPROM_INVALID_END_ADDR 153
TKEEPROM_WRITE_TIMEOUT_ERR 154
TKEEPROM_WRITE_READ_ERR 155
TKEEPROM_WRITE_VERIFY_ERR 156
TKEEPROM_CHKSM_READ_ERR 157
TKFRAME_CSAFE_FRAME_STUFF_ERR 160
TKFRAME_CSAFE_FRAME_CHKSM_ERR 161
Some device plugged into the USB or RJ45 Jack is not sending data correctly... ref case 3317 and also the PM3/4 error code
wiki.
Proposed Error Text, No Translations:"Checksum Error in USB connection to computer. Contact tech support for the
software."
TKFRAME_NO_SCI_FRAME_ERR 162
TKFRAME_NO_USB_FRAME_ERR 163
Proposed Error Text, No Translations:"Checksum Error in USB connection to computer. Contact tech support for the
software."
TKFRAME_CSAFE_INVALID_SHORT_CMD_ERR 164
Proposed Error Text, No Translations:"Invalid Short Command Error in USB connection to computer. Contact tech support
for the software."
TKFRAME_CSAFE_INVALID_LONG_CMD_ERR 165
Proposed Error Text, No Translations:"Invalid Long Command Error in USB connection to computer. Contact tech support
for the software."
TKFRAME_CSAFE_FRAME_TOO_LONG_ERR 166
Proposed Error Text, No Translations:"Frame To Long Error in USB connection to computer. Contact tech support for the
software."
TKFRAME_NO_EXPRF_FRAME_ERR 167
TKFRAME_CSAFE_INVALID_LONG_RSP_ERR 168
Proposed Error Text, No Translations:"Invalid Long Response Error in USB connection to computer. Contact tech support
for the software."
TKFRAME_NO_LPBCK_FRAME_ERR 169
TKHDW_EVENT_BURST_STACK_OVF_ERR 170
TKHDW_EVENT_BURST_STACK_UNF_ERR 171
TKHDW_INVALIDLEDCOLOR_ERR 172
TKHDW_INVALIDLEDMODE_ERR 173
TKHDW_WORKOUT_LOG_ERR 174
TKHDW_FLYWHEEL_SPINDOWN_ERR 175
TKHDW_BATTFILT_INIT_ERR 176
TKHRTMON_INVALID_NUM_MEAS_ERR 180
TKHRTMON_TOO_FEW_MEAS_ERR 181
TKMEM_INVALID_MEMTYPE_ERR 200
TKMEM_INVALID_START_ADDR_ERR 201
TKMEM_INVALID_END_ADDR_ERR 202
TKMEM_FLASH_WRITE_ERR 203
TKMEM_FLASH_ERASE_ERR 204
TKRTTIMER_INVALID_MONTH_ERR 210
TKRTTIMER_INVALID_DAY_ERR 211
TKRTTIMER_INVALID_TIMER_NUM_ERR 212
TKRTTIMER_INVALID_TIMER_MODE_ERR 213
TKSCI_INVALID_PORT_ERR 220
TKSCI_TX_SEND_ERR 221
TKSCI_RX_TIMEOUT_ERR 222
TKSCRN_INVALID_SPECFUNCTYPE 230
TKSCRN_ILLEGAL_SPLITDURATION 231
TKSMCD_ACK_ERR 240
TKSMCD_STOP_ERR 241
TKSMCD_INVALID_END_ADDR 242
TKSMCD_WRITE_TIMEOUT_ERR 243
TKSMCD_WRITE_READ_ERR 244
TKSMCD_WRITE_VERIFY_ERR 245
TKSMCD_CHKSM_READ_ERR 246
TKSMCD_ACK_ERR_WRITE 247
TKTACH_INVALID_NUM_MEAS_ERR 250
TKTACH_TOO_FEW_MEAS_ERR 251
TKTIME_INVALID_MONTH_ERR 260
TKTIME_INVALID_DAY_ERR 261
TKUSER_INIT_ERR 260 .
TKCRC_ERR 300
TKCRC_LENGTH_ERR 301
TKCIPHER_NOT_BLOCK_MULT_ERR 320
TKUSB_BAD_DESC_RQT_ERR 330
TKUSB_INVALID_EPNUM_ERR 331
TKUSB_RX_TIMEOUT_ERR 332
TKUSB_EPNUM_RX_OVERRUN 333
TKUSB_INIT_EPNUM_ERR 334
TKUSB_GET_RX_CHAR_ERR 335
TKUSB_BUS_DISABLE_ERR 336
TKUSB_BUS_RESET_ERR 337
TKUSB_NO_FEATURE_REPORT_ERR 338
TKUSB_INVALID_STRING_ID_ERR 339
TKUSB_EP_TX_OVERRUN_ERR 340
TKUSB_INVALID_TX_LEN_ERR 341
TKUSB_HOST_CURRFAULT_ERR 342
TKUSB_HOST_UNSUPPORTEDDEV_ERR 343
TKUSB_DEVICE_VOLTFAULT_ERR 344
TKUSB_HOST_INVALIDPWRCTLMODE_ERR 345
TKCSAFE_INVALID_CMD_ERR 380
TKCSAFE_INVALID_WORKOUTNUM_ERR 381
TKCSAFE_INVALID_PRECISION_ERR 382
TKCSAFE_INVALID_FRAMETYPE_ERR 383
TKCSAFE_INVALID_FRAMESIZE_ERR 384
TKRF_ILLEGAL_MSG_ERR 390
TKRF_INVALID_CHAN_OPEN_ERR 391
TKRF_MSG_OVERRUN_ERR 392
TKRF_CHKSUM_ERR 393
TKRF_ANT_RESPONSE_ERR 394
TKRF_NO_FRAME_ERR 395
TKRF_FRAME_OVERRUN_ERR 396
TKRF_INVALID_CNT_ERR 397
TKRF_BROADCAST_ERR 398
TKRF_MSG_NOT_COMPLETE_ERR 399
TKRF_NEXT_SENSOR_PACKET_ERR 400
TKRF_ILLEGAL_PACKET_ENTRY_ERR 401
TKLCD_WRITE_SPI_TIMEOUT_ERR 410
TKSLIP_INVALID_PORT_ERR 430
TKSLIP_NOT_FOUND_ERR 431
TKSLIP_INVALID_ADDR_ERR 432
TKHCI_INVALID_ADDR_ERR 440
TKHCI_NOT_FOUND_ERR 442
TKNRF422_NOT_FOUND_ERR 443
TKNRF422_RSP_TIMEOUT_ERR 444
TKNRF422_RADIO_SOC_ERR - DUPLICATE ENTRY 445
TKNRF422_RADIO_BASE_ERR 446
TKNRF422_RADIO_SDM_ERR 447
TKNRF422_RADIO_SOC_ERR 448
TKNRF422_RADIO_STK_ERR 449
ALL of the above 443-449 errors indicate some problem with one of the wireless chips. Either this is an annoyance
(comes up once) or indicates a hardware problem (replace monitor). Updating firmware won't hurt but not known to
fix this.
TKNRF422_NOT_FOUND_ERR 450
TKNRF422_RSP_TIMEOUT_ERR 451
TKNRF422_INIT_ERR 452
TKNRF422_RADIO_BASE_ERR 453
TKNRF422_RADIO_SDM_ERR 454
TKNRF422_RADIO_SOC_ERR 455
TKNRF422_RADIO_STK_ERR 456
TKNRF422_RADIO_ANT_ERR 457
TKNRF422_LDR_VER_ERR 458
TKNRF422_APP_VER_ERR 459
TKNRF822_NOT_FOUND_ERR 460
TKNRF822_RSP_TIMEOUT_ERR 461
TKNRF822_INIT_ERR 462
TKNRF822_RADIO_BASE_ERR 463
TKNRF822_RADIO_SDM_ERR 464
TKNRF822_RADIO_SOC_ERR 465
TKNRF822_RADIO_STK_ERR 466
TKNRF822_RADIO_ANT_ERR 467
TKNRF822_LDR_VER_ERR 468
TKNRF822_APP_VER_ERR 469
TKNRF822_LIST_FULL_ERR 470
TKNRF822_CONNECT_TIMEOUT_ERR 471
TKNRF822_DISCONNECT_ERR 472
TKRFPKT_NOT_FOUND_ERR 480
TKRFPKT_RSP_TIMEOUT_ERR 481
TKRFPKT_INVALID_INTF_ERR 482
TKRFPKT_RXOVERRUN_ERR 483
TKRFPKT_INVALID_CNT_ERR 484
TKRFPKT_INIT_PORT_ERR 485
TKRFPKT_ANT422_RSP_TIMEOUT_ERR 486
TKRFPKT_BLE422_RSP_TIMEOUT_ERR 487
TKRFPKT_BLE822_RSP_TIMEOUT_ERR 488
TKDIAG_DIAGFAIL_ERR 500
TKDIAG_FLSHFONTDIAG_BADHDRCRC_ERR 501
TKDIAG_FLSHFONTDIAG_CRCCALC_ERR 502
TKDIAG_FLSHFONTDIAG_BADFONTCRC_ERR 503
TKDIAG_FLSHSCRNDIAG_BADHDRCRC_ERR 510
TKDIAG_FLSHSCRNDIAG_CRCCALC_ERR 511
TKDIAG_FLSHSCRNDIAG_BADSCRNCRC_ERR 512
TKDIAG_FLSHAPPDIAG_BADHDRCRC_ERR 520
TKDIAG_FLSHAPPDIAG_CRCCALC_ERR 521
TKDIAG_FLSHAPPDIAG_BADAPPCRC_ERR 522
TKDIAG_UARTDIAG_UART1_INIT_ERR 530
TKDIAG_UARTDIAG_UART1_WRITE_ERR 531
TKDIAG_UARTDIAG_UART1_READ_ERR 532
TKDIAG_UARTDIAG_UART2_INIT_ERR 533
TKDIAG_UARTDIAG_UART2_WRITE_ERR 534
TKDIAG_UARTDIAG_UART2_READ_ERR 535
TKDIAG_ADCONVDIAG_INIT_ERR 540
TKDIAG_ADCONVDIAG_NOTREADY_ERR 541
TKDIAG_ADCONVDIAG_ADCINPUT_ERR 542
TKDIAG_SWUSERCONFIRM_ERR 550
TKDIAG_SWSHORT_ERR 551
TKDIAG_SW0_ERR 552
TKDIAG_SW1_ERR 553
TKDIAG_SW2_ERR 554
TKDIAG_SW3_ERR 555
TKDIAG_SW4_ERR 556
TKDIAG_SW5_ERR 557
TKDIAG_SW6_ERR 558
TKDIAG_SW7_ERR 559
TKDIAG_AMUXDIAG_NOTREADY_ERR 560
TKDIAG_AMUXDIAG_ANALOGVREFCHAN_ERR 561
TKDIAG_AMUXDIAG_ANALOGGNDCHAN_ERR 562
Backlight voltage not proper. Firmware v15 may report this just after test rowing exits, in this case this can be ignored. If
backlight is operating fine, this could be ignored.
See case 3513. USB Flash Drive (host) port has experienced a Current Limit (overload) condition.
- Is the usb device a flash drive? If it is, maybe it draws too much current, try another
- Is the user conecting ANYTHING other than a USB flash drive to the "A" (rectangular) port on the monitor? Using an A-A
cable to connect to a computer is WRONG.
The monitor is trying to make 5V for the USB Flash Drive port, and the 5v is not within specifications.
TKDIAG_HRTMONDIAG_USERCONFIRM_ERR 600
TKDIAG_HRTMONDIAG_HRTUNPLUG_ERR 601
TKDIAG_HRTMONDIAG_HRTPLUG_ERR 602
TKDIAG_HRTMONDIAG_HRTACTIVE_ERR 603
TKDIAG_HRTMONDIAG_USERABORT_ERR 604
TKDIAG_GENINPUTDIAG_USERCONFIRM_ERR 610
TKDIAG_GENINPUTDIAG_THRESHMAX_ERR 611
TKDIAG_GENINPUTDIAG_THRESHMIN_ERR 612
TKDIAG_GENINPUTDIAG_USERABORT_ERR 613
TKDIAG_STSLED_NOTPRESENT_ERR 750
TKDIAG_RS485DIAG_NOTPRESENT_ERR 770
TKDIAG_RS485DIAG_CONFIG_ERR 771
TKDIAG_RS485DIAG_FORMATFRAME_ERR 772
TKDIAG_RS485DIAG_SENDCMD_ERR 773
TKDIAG_RS485DIAG_UNFORMATFRAME_ERR 774
TKDIAG_RS485DIAG_USERCONFIRM_ERR 775
TKDIAG_RS485DIAG_USERABORT_ERR 776
TKDIAG_RS485DIAG_NORESPONSE_ERR 777
TKDIAG_RS485DIAG_TXCHAR_ERR 778
TKDIAG_RS485DIAG_LOOPBACK_TO_ERR 779
Some of the pins in one or more of the RJ45 jacks are bent and touching each other. Inspect with a flashlight, and carefully
separate the pins with tiny screwdriver or blade. Recommend that this PM5 not be used for racing!
TKDIAG_RS4852DIAG_LOOPBACK_DATA_ERR 780
TKDIAG_RS4852DIAG_NOCABLECONNECT_ERR 781
Cannot create folders on the USB Flash drive. Try another USB Stick. See if the drive is 'write protected' by using it in a PC
and checking properties (mac: info)
PM5 is trying to access a file on the USB flash driveand for some reason cannot read it. Could be bad flash drive; bad
connection; low batteries; or any number of things. Try another stick; fresh batteries; reset the monitor; or update firmware.
Or there could be a hardware problem.
Could occur if the files or folders on the USB Flash Drive are corrupted.
Scott has seen this once when the Concept2/Logbook folder was converted to a file (so the Logbook entry is now a 'file'
instead of the expected 'folder'). In this case, send a zip file with the contents of the /Concept2 folder to [email protected]
along with the firmware version in use. Update the firmware; delete the /Concept2/Logbook filereinsert into the PM5 and it
will create new Logbook files. Yes, the data is probably gone...
Something is messed up in the internal "memory", so you can try the C2 Utility to 'transfer memory to logbook' and it may
offer to repair it. If this does not work and solve the problem, advise Factory Reset.
It means that the Concept2\Logbook\DeviceLogInfo.bin file header structure is invalid. You should just be able to delete that
single file (using a PC), and it should be replaced by the default values (which is fine) and no other log files should be
affected.
TKMSDLOG_LOGACCTBL_RECORDNUM_ERR 1908
APFILE_FWUPDATE_ABORTED_ERR 1964 PM5 only
Firmware update failed to copy files from USB Stick to the internal memory. Try again, or use USB Cable to udpate the
monitor.
APFILE_FILEBACKUP_INVALIDID_ERR 1965
APFILE_FILEIMAGE_INVALID_ERR 1966
APFILE_FAVORITES_INVALID_ERR 1967
APFWUPDATE_INTBUNDLE_IMAGECNT_ERR 1980
APFWUPDATE_FONT_PROGRAMMING_ERR 1981
APFWUPDATE_LOADER_PROGRAMMING_ERR 1982
APFWUPDATE_LDRUPD_PROGRAMMING_ERR 1983
APFWUPDATE_SCREEN_PROGRAMMING_ERR 1984
Revision 0.25 145
Concept2 PM CSAFE Communication Definition
APFWUPDATE_APPINT_PROGRAMMING_ERR 1985
APFWUPDATE_APPEXT_PROGRAMMING_ERR 1986
APFWUPDATE_BUNDLE_PROGRAMMING_ERR 1987
APFWUPDATE_APPANT_PROGRAMMING_ERR 1989
APFWUPDATE_APPBLE_PROGRAMMING_ERR 1990
APFWUPDATE_INTBUNDLE_INVALID_ERR 1991
APFWUPDATE_UPDATEINFO_INVALID_ERR 1992
APFWUPDATE_UPDATEINFOAPP_INVALID_ERR 1993
APFWUPDATE_APPNRF_PROGRAMMING_ERR 1994
APFWUPDATE_SOFTDEVNRF_PROGRAMMING_ERR 1995
APFWUPDATE_LDRNRF_PROGRAMMING_ERR 1996
APFWUPDATE_LUPNRF_PROGRAMMING_ERR 1997
APFWUPDATE_LDRSFE_PROGRAMMING_ERR 1998
APFWUPDATE_LUPSFE_PROGRAMMING_ERR 1999
APFWUPDATE_APPSFE_PROGRAMMING_ERR 2000
APFWUPDATE_DFDATA_PROGRAMMING_ERR 2001
TKDEBUG_INIT_ERR 2020
TKDIAGLOG_VIRTUALADDR_ERR 2100
TKDIAG_TACHDIAG_ADCRESULT_NOTREADY_ERR 2500
TKDIAG_TACHDIAG_TACHDETECT_ERR 2501
TKDIAG_TACHDIAG_TACHTEST_ERR 2502
IOADCONV_BG_TIMEOUT_ERR 810
IOADCONV_RESET_TIMEOUT_ERR 811
IOADCONV_INVALID_CHAN_ERR 812
IOADCONV_NOT_RDY_ERR 813
IOADCONV_INVALID_REF_ERR 814
IOADCONV_INIT_ADC_ERR 815
IODMA_INVALID_MEM_CHAN_ERR 820
IODMA_INVALID_IO_RQST_CHAN_ERR 821
IODMA_INIT_DMA_ERR 822
IODMA_QUEUE_FULL_ERR 823
IODMA_INVALID_DMA_TYPE 824
IODMA_DISABLE_TIMEOUT_ERR 825
IOHDW_MEM_INVALID_CS_ERR 830
IOHDW_INVALID_DMACLK_ERR 831
IOHDW_INVALID_SYSCLK_ERR 832
IOHDW_INVALID_PWRMODE_ERR 833
IOHDW_MCUCLK_STARTUP_ERR 834
IOHDW_BKUP_REG_ON_ERR 835
IOI2C_NOACK_ERR 840
IOI2C_INIT_WDR_TIMOUT_ERR 841
IOI2C_INIT_XMIT_TIMOUT_ERR 842
IOI2C_SEND_XMIT_TIMOUT_ERR 843
IOI2C_GET_RECV_TIMOUT_ERR 844
IOI2C_STOP_TIMEOUT_ERR 845
IOI2C_WDR_TIMOUT_ERR 846
IOI2C_INVALID_BAUD 847
IOI2C_INVALID_CHANNEL_ERR 848
IOI2C_BUSY_ERR 849
IOLCD_DISPINIT_ERR 860
IOLCD_INVALIDPARAM_ERR 861
IOLCD_WRITE_SPI_TIMEOUT_ERR 862
IOLCD_INVALID_ID_ERR 863
IOMEM_FLASH_ERASE_TIMEOUT_ERR 870
IOMEM_FLASH_WRITE_TIMEOUT_ERR 871
IORTCLOCK_WRITE_TIME_ERR 880
IORTCLOCK_CRC_ERR 881
IORTCLOCK_OSC_TIMEOUT_ERR 882
IORTCLOCK_INIT_ERR 883
IORTCLOCK_INIT_TIME_ERR 884
IORTCLOCK_INIT_DATE_ERR 885
IORTCLOCK_RTCSTOPPED_ERR 886
IORTCLOCK_LSIOSC_TIMEOUT_ERR 887
IORTCLOCK_HSEOSC_ERR 888
IORTCLOCK_RTCUPDATE_TIMEOUT_ERR 889
IOSCI_INVALID_PORT_ERR 890
IOSCI_INVALID_BAUD_ERR 891
IOSCI_INVALID_CNT_ERR 892
IOSCI_INIT_PORT_ERR 893
IOSCI_TXOVERRUN_ERR 894
IOSCI_RXOVERRUN_ERR 895
IOSCI_RXFRAME_ERR 896
IOSCI_RXPARITY_ERR 897
IOSCI_RXBREAK_ERR 898
IOSCI_PDC_OVERRUN_ERR 899
IOSCI_INVALID_MODE_ERR 900
IOTIMER_INVALID_TIMERID_ERR 910
IOTIMER_INVALID_TIMERRATE_ERR 911
IOUSER_SEMAPHORE_PEND_ERR 920
IOUSER_SEMAPHORE_POST_ERR 921
IOUSB_RST_TIMOUT_ERR 930
IOUSB_CFG_TIMOUT_ERR 931
IOUSB_CFG_ENDPT_ERR 932
IOUSB_SETUP_ERR 933
IOUSB_FIFO_RD_ERR 934
IOUSB_NULL_PTR_ERR 935
IOUSB_BUS_INIT_ERR 936
IOUSB_TX_BUFFER_ERR 937
IOUSB_EP_BUSY_ERR 938
IOUSB_EP_INVALID_ERR 939
IOUSB_WAKEUP_DISABLE_ERR 940
IOUSB_BAD_FRAMENUM_ERR 941
IOUSB_CFG_DEV_ERR 942
IOUSB_BAD_IFCNUM_ERR 943
IODIG_INVALID_IN_ERR 950
IOSPI_WRITE_TIMEOUT_ERR 960
IOSPI_WRITE_FULL_TIMEOUT_ERR 961
IOSPI_INVALID_CHANNEL_ERR 962
IONORFLASH_INIT_ERR 970
IONORFLASH_WRITE_ERR 971
IONORFLASH_ERASE_ERR 972
IONORFLASH_QUERY_ERR 973
exceeded
Appendix E
PM State Transitions
For any fixed duration workout or JustRow (no defined end) that is terminated prior to reaching its defined end:
For any fixed duration workout (defined end) that reaches its defined end:
WaitToBegin->WorkoutRow->WorkoutEnd->WorkoutLogged->[Menu button]->WorkoutRearm->WaitToBegin
WaitToBegin->WorkoutRow->WorkoutEnd->WorkoutLogged->[Terminate command]->WaitToBegin
For a fixed distance or fixed calorie interval workout (no defined end) when terminated:
For a fixed time interval workout (no defined end) when terminated:
For a variable interval workout, with distance and time intervals (defined end), that reaches its defined end: