Wiki

Case Status
Log In

Wiki

 
ANT-PC Interface»ANT Plus Profile Notes and Spe…
  • RSS Feed

Last modified on 2/9/2011 12:18 PM by User.

Tags:

ANT Plus Profile Notes and Specifications

Concept2 PM4 Implementation of ANT+

 

Document for Discussion.  Reference also case 1871

This document contains notes related to various options for implementation of ANT+ standard for the PM4 monitor.   For more information on ANT+, refer to documents on www.thisisant.com which may require becoming a member.

 

Discussion notes related to profiles other than ANT-FE...

Discussions with Ross.

 


ANT-FE profile.  Refer to Fitness Provile V 3.0 from Dynastream. Document D00001251.   Fitness Equimpent Profile..

While is is apparent that Dynastream does not want Fitness Equipment vendors to use anything but the FIT1e module, there are many reasons why Concept2 does not wish to use it, such as Cost; Complete package redesign; and lack of available user-channels.  More details by Contacting Scotth(at) concept2.com

Concept2 requests use of Ant FE profile that mirrors the required and optional pages listed on the ANT+ Fitness equipment Device profile with some extensions.

Alternatively, providing a way to 'build own' equivelent of FIT1e using AP2 or TI chip and source code ready to compile is an option to consider, however I do not have any indication from Dynastream that this will be made available.

 

That said....

 

Concept2 Device profile for Sensor Only mode...

Proposal:

  • Start with Document D00001251.
  • Subtract all references to FIT files and their transfer
  • Delete all references to FIT1e requirements; implement with AP1, AP2, or other.
  • Delete all references requiring  proximity pairing
  • Use methods of pairing and general operational modes that are similar to other Sensors.
  • As this is no longer FIT compatible, not able to use the LINK HERE logo
  • Argue that it is compatible with the FIT (Treadmill) logo, or alternately make another Icon for use with ROWER and SKI ERG.

(if used TI C7 module might get better proximity)

I suppose, if this is going to take along time or is unacceptable, that Concept2 has other options such as going on the Public or C2Private key and implement as we see fit, use the “ANT” logo (but not ANT+) and just work with the software vendors to implement something.  As this is targeted mainly for mobile devices instead of embedded devices, making a change at a later date is not that big a deal... everyone needs to get an update and that's that.  This would be along the lines of what is described in http://bugz.c2vt.com/default.asp?W15

 

 

 

An implementation of ANT+FE profile on the Rower/Ski Erg would want to consist of several portions:

1) Common data pages (80, 81, 82) - sent occasionally with equipment information.

2) ANT-FE required pages (16,  17) and the Rower page 22 sent at ~ 4hz in a specific pattern.

3) Ability to deal with watches, to a limited extend for link and real time data.  This requires ANT-FS implementaion for at minimum link layer

4) Ability to deal with watches to a 'full' implementation; this requires ANT-FS transport layer and FIT file interpertiaon.

5) Ability to deal with advanced use cases utilizing ANT-FS

6) Ability to deal with advanced use cases utilizing custom pages

 

 

Summary of pages to be implemented. 

Pages to implement fully (except maybe METS) are listed below.  GREEN highlite indicates it has been implemented.

16 - General FE Data (Time, Distance, Speed/Pace, Heartrate, Fitness Equip State) - sent 2x every second.

17 - General Settings Page (stroke length, drag factor, Fitnes Equipment State) - sent 1x every second

18 - Metabolic Data (METS, Calories) - OPTIONAL; if used sent at rate of 0.2hz. -  Suggest C2 Ignore for now.

22 - Rower Specific Data - (Stroke Count, cadence, Instant Power) sent 1x / second

?? - Ski Erg Specific Data (same as page 22 but for Ski Erg)

80 - Equipment Type - Sent twice in succession every other block of 64 pages

81 - Equipment Data - Sent twice in succession every other block of 64 pages

82 - Battery Data - OPTIONAL: Scott suggests sent only occasionally instead of 80 or 81, maybe every 1min?

70 - Page requests.  See section on Page 70 below.

 

 

Common data pages (Document: ANT_ managed network – common data pages)

Page 80 - Manufacturer and product Information  –

Byte 0: 0x50

Byte 1: ff

Byte 2: ff

Byte 3: Hardware version (we have overlapping hardware versions – what to do?)

Byte 4: mfg id lsb

Byte 5: mfg id msb (Concept2's Mfg ID is 40 or 0x0028)

Byte 6, 7: model number.  - See table under Page 81. 

 

Page 81 – Product Information and Serial #

byte 0: 0x51

Byte 1: ff

Byte 2: ff

Byte 3: SW Revision ( how to deal with the version #? just use major version #?  Maybe Byte-stuff it? or we will have to make a translation table enumeration!)

Product

Model #
Page 80

SW Revision
 

Version Transmitted
Page 81

Dragonball PM3 1 NA  
Dragonball PM4 2 27-??  actual value (so 27..??)
PM3A - Rower 3 NA  
PM4A - Rower 4 313

SW Version minus 300
(313 - 300 = 13)

PM3A - SKI 5 NA  
PM4A - SKI 6  

SW Version minus 700
(708-700 = 08)

PM5 - Future 7   Actual Value

NB: Some of the values above are not valid, but for consistency we will define them all...

Byte 4-7:  4 bytes = Serial #

 

 

Page 82 - Battery Status

Byte 0: 0x52

Byte 1: ff - reserved

Byte 2: ff - reserved

Bytes 3-5: (follow the table...as best can, make best judgement how to implement)

Byte 6: Fractional Battery Voltage - implement as described

Byte 7: Descriptive bit field - implement as best can given Dynastream's sped.

 

Page 83:  - Time And Date --   Scott does not think we need to implement this.

Page 84:  --Subfield Data ---    Do not implement.

 

  

 

 

Details - Page 16 (from page 21 of ANT-FE profile document)

Byte 0: 0x10 (page 16)

Byte 1: 22 - Equipment Type is Rower

Byte 2: Elapsed time; .25 second increments rollover in 64 seconds.

Byte 3: Distance Traveled; in meters; rolls over in 256 meters; should be perfectly matched with the time in Byte 2.

Byte 4, 5: Speed in units of 0.001 m/s

Byte 6: Displayable Heart Rate; FF=Invalid

Byte 7: Upper 4 bits: FE State: see table 7-5    

    Bit 3 lap toggle bit (CAN WE USE THIS TO INDICATE SPLIT DATA?!?)

    Bit 0-2 FE State (0=reserved; 1=Asleep(off); 2=Ready; 3=in use; 4=Finished)

NOTE: Think that at each split we could consider send off the SPLIT statistics a few extra times with this data packet to ensure reception, then continue on with the normal pattern.
NOTE: Think at the end (state = 4 finished) we should continue to send finished data for a period of time, or told to shutup.

(Notes from discussion with Ross, etc.)

Set state bits; when PM4 is on and radio active; have not yet begun a session; to set it to "ready"; content speed = 0, etc. are all 0

first stroke = 3 in use.  For all the data pages.

Pause (sweatshirt mode); go to paused (if rowing = 0); back to inuse if rowing starts coming back.

if cross split; raise LAP Toggle; (should we repeat the SPLIT data a few times?)

end of wokrout OR menu-back button causes state = 4 and then UNPAIR/Disconnect

every time move from ready to inuse it will create a new piece.

when user indicates on pm session is done, user presses button to disconnect, disconnect, the watch will start searching again; if does not detect broadcast back to link state.   On garmin watches all data is saved. 

in event that someone wants to do a 2nd piece; in use to ready; wants to do just row. What is the quickest way to get watch ready to get data again.   PM4 broadcast FINISHED/PAUSED; go to READY; don't disconnect; watch will wait in READY, the display

ant-fs channel until stops; 4 minutes (?); user gets up and leaves, watch will stay beaconing in link mode for 5 min;  30 seconds timeout when FE data dissapears.

 

Seems like the following operational requirements would want to take place; update as needed...

Transition or Event  Watch Non-Watch
(Tablet, etc.)
 
On menu, start rowing (ie Just Row) Ready->InUse immediately    

On menu, press Just Row
   start rowing

Stay in Ready; start sending 0's;
    Ready->In Use
        Time and Distance increment UP

Same  
 Just Row split boundaries Toggle Lap bit every 5 min. Same
Allow for Page 70 request to get accurate split information
 

Just Row - Pause (Sweatshirt mode)
    Then restart...

-> Paused; 
     -> InUse 

 
   
Just Row - Menu-Back pressed to exit -> Finished; then -> Ready    
Just Row - Walk away terminated -> Finished; then terminate link before powering down    
Pre-Defined Distance Workout -> Ready when workout set up; sending 0's
   -> In Use on First Stroke
        Time and Distance Count Up
Same; Time counts up; Distance counts DOWN to match PM  
Pre-Defined Time Workout -> Ready when workout set up; sending 0's
   -> In Use on First Stroke
         Time and Distance Count Up
Same; but Time counts DOWN; distance counts up to match PM  
Time Intervals without Rest      
Time Intervals With Rest      
Time Intervals with undefined rest      
Distance Intervals without rest      
Distance Intervals with rest      
Distance Intervals with undefined rest      
Variable Intervals (same as above behaviors, except...)    
       
Unit powers down from Main Menu (4x MENU or timeout) Disconnect and loose all record of last connection Disconnect and loose all record of last connection  

 

 

 

 

 

Byte 7: Lower 4 bits: Capabilities: See table 7-6;

    Bit 3 = 0

    bit 2 = 1 (FE will transmit distance in Byte 3)

    bit 0-1 = HR Data Source: Use 2 for Polar; use 1 for ANT+(Garmin); use 0 = unknown if Suunto.

 

Details - Page 17 (from page 24 of ANT-FE profile document)

Byte 0: 17 or 0x11

Byte 1: 0xFF reserverd

Byte 2: 0xFF reserved

Byte 3: Cycle length -> Stroke length (0.01 meter units; FF=Invalid or not available)

Byte 4, 5: Incline - 0x7FFF is invalid (no use!)

Byte 6: Resistance Level: Use Drag Factor value; 0xFF = Invalid

Byte 7: upper 4 bits:  FE State (same as on page 16)

Byte 7: Lower 4 bits: Capabilities: - Reserved forr future use by Dynastream.  Set to 0x0.

 

Details -- Page 22 -- Rower Specific Data

Byte 0 - 0x16 Page 22 data page #

Byte 1 - 0xFF Reserved

Byte 2 - 0xFF Reserved

Byte 3 - Stroke Count - incrementing stroke count from beginning of workout; rollover at 256

Byte 4 - Cadence - Instantaneious STROKES/MINUTE;  0xFF if invalid.

Byte 5 - 6: Instant Power - in WATTS.  (0xFFFF = Invalid)

Byte 7 
    upper 4 bits: FE State (same as page 16; refer to 7.3.6)
    Lower 4 bits: Capabilities Field (refer to 7.6.4.4)

Details -- Page 240 -- C2 Specific: Stroke Data

Byte 0 - 0xF0 Page 240 data page #

Byte 1 - Stroke Length - 0.01m LSB

Byte 2 - Stroke Drive Time - 0.01sec LSB

Byte 3 & 4 - Stroke Recover Time  - 0.01sec LSB

Byte 5 & 6 - Stroke Distance - 0.01m LSB

Byte 7 
    upper 4 bits: FE State (same as page 16; refer to 7.3.6)
    Lower 4 bits: Capabilities Field (refer to 7.6.4.4)

Details -- Page 241 -- C2 Specific: Absolute Distance

Byte 0 - 0xF1 Page 241 data page #

Byte 1, 2, 3 & 4 - Absolute Distance - 1m LSB

Byte 5 - Reserved

Byte 6 - Reserved

Byte 7 
    upper 4 bits: FE State (same as page 16; refer to 7.3.6)
    Lower 4 bits: Capabilities Field (refer to 7.6.4.4)

Details -- Page 242 -- C2 Specific: Absolute Time

Byte 0 - 0xF2 Page 242 data page #

Byte 1, 2, 3 & 4 - Absolute Time - 0.25sec LSB

Byte 5 - Reserved

Byte 6 - Reserved

Byte 7 
    upper 4 bits: FE State (same as page 16; refer to 7.3.6)
    Lower 4 bits: Capabilities Field (refer to 7.6.4.4)

Details -- Page 243 -- C2 Specific: Miscellaneous Data

Byte 0 - 0xF3 Page 243 data page #

Byte 1 & 2 - Stroke Count - 1stroke LSB

Byte 3 - Reserved

Byte 4 - Reserved

Byte 5 - Reserved

Byte 6 - Reserved

Byte 7 
    upper 4 bits: FE State (same as page 16; refer to 7.3.6)
    Lower 4 bits: Capabilities Field (refer to 7.6.4.4)

 

Supported and desired ANT-FE Devices to connect to...

Standard ANT-FE profile to attempt to support the following devices:

 

Device  ID Information Status

THISISANT FE Profile
certification Test

  Do not have tests yet; Cannot start on this.
Garmin FR60 Product ID 988 Target platform for Nov 2010; appears as of 11/30 it is just starting to work.  Anomolies are seen in start-time; repairing; and other areas.
Garmin 210 Product ID ___ Not tested but should work when FR60 does;  planned initial testing 12/2 with Judy.
Garmin 310 Product ID ___ Not tested but should work when FR60 does
Sony/Erricson Android

Mfg ID 15(dynastream)

Beacon Device Type 416

Dynastream working on demo.  Send firmware to Dynastream to test.
Augen WiLink6Tablet   Desired; no information or work started.
iOS/Wahoo ANT-FE Profile   Waiting for profile implementation in API; next adapt Andrew's app to use; then consider coaching app.
Timex w/ FE support   Unknown if ANT-FE is supported on any Timex watches
PC running ANT-FE Profile Reception   Not started.

 

Page 70 Extension Proposal.

Reference ANT+ managed Network Document, "Common Data Pages" (section 6.2, Page 70)

Page 70, Command 02: Request ANT-FS session; file payload contains a CSAFE command

70, Command 02: Request ANT-FS session; file request for the CSAFE response

70, Command 02: Request ANT-FS session; try to pull a file that will always contain the last known force curve data.   Use case: Coaching tool - in a round-robin fashion, reqeust the ForceCurve data from a particular unit.

70, Command 01: Request an additional page (such as 18 Mets; 82 battery; or any other that is needed...  )  This would be per how ANT+ specs for Page 70 (see common pages document) intended.

70, Command 01: Request Page F0 w/ additional data: Request start transmission of upgrade from 4hz to 8hz or 16hz with additional statistics interleaved.
- Provide indication if transmission should be change to 8 or 16hz (or more?)
- Indicate what extra page of data is requested
- Indicate what page it shold be returned as
- Indicate how often this data should be sent (or priority level)

Use case: RowPro would likely like to know when a new stroke is available.  So define a new page that includes time/meters, but also includes strokestate.  For example, page 16 but with some byte reallocated to include strokestate.   In same request, ask for transmission to be upgraded to 16 hz.

Use case: Coaching tool (reference http://bugz.c2vt.com/default.asp?W123 ) or individual app would like to know drive/recovery ratio; so define a new page that includes drive time and recovery time (sum should equal strokerate).  Request this get transmitted upon availability on each stroke, and optionally ask for upgrade to 8hz.  

Use case: Coaching tool (reference http://bugz.c2vt.com/default.asp?W123 ) or individual app would like to get force curve data transmitted at the end of each stroke.  Request burst of force curve data ever N strokes (typically 1); upon availability of the data (at the end of the stroke).  Request could ask for this to be on same channel or on a new channel.

Use case: Heartrate analisys functions typically wish to know the beat-to-beat times for every heartbeat.  This demands not just current 'smoothed' heartrate values (as is given in page 16), but at a minimum the 'beat-to-beat' time for the last beat, if not for the last several (reference Suunto protocol).  One method is to have the receiving device (iOS, computer, etc.)  receive this data directly.  This may be the best solution.  However a new page could be determined to re-transmit the beat-to-beat times from a HR belt reception from the Fitness equipment (rower/ski erg) in a new page.

Proposed method:  Issue Page 70, Command 01.

 

Proposed additional pages for POLLING using page 70, or for INTERLEAVING with FE data:

Absolute Data: Sends distance (whole meters) and time (to 1/?? second resolution) without any rollover: This is the complete time without any rollover.  This allows for dealing with paring in the middle of a workout, or after a long disconnection/reconnection.  This page should be allowed to be "requested" on a one-time basis using Page 70, or turned on to be interleaved every N messages (or similar fashion).  If more than 8 bytes are needed, then make into 2 pages.

HeartRate Beat-To-Beat Time.  Used for FirstBeat type analisys.  Since it is critical for every heartbeat to be accounted for, ensure that some redundancy is available, such as providing previous HR data.  (Before implementing, review other dynamic pages and the HR Profile pages to ensure we are not reinventing anything here!).  Contains the beat count and an accurate time stamp between this beat and the previous one (or more) heartbeats.  Use Suunto as a possible example.

Last stroke drive start timestamp. This shall include in the payload an accurate ( what accuracy ??) absolte (??) timestamp of when last drive started along with meters of when this occured).  If possible, also include distance (meters) for last complete stroke.  Used for RowPro.   This should be available as an interleaved page (NB from scott: I am not sure this needs to be an available page-request 70, but ok if it is) (NB: Can this data be added to the below drive/recovery times?)

Drive and Recovery times.  For last stroke, provide the amount of time spent in drive and amount of time spent in recovery.  The sum of these two should be the equivelent to the inverse of the strokes/minute.  Fill in any additional information available in remaining bytes.  These values can be used for A) calulation of current SPM to the fractional amount (instead of integer); B) displaying drive time; C) calculation of drive/recovery ratio.  This should be able to be "polled" using Page 70, or turned on for interleaving.   (discussion about 1/100 increments to 2.5 seconds using bytes; or 1/50 to get up to 5 seconds, or go to 2 bytes and use mS).

Split Information.  Provide information on the summary results for the last split.  This should include: Which split # this is; Avg Stroke Rate; Average HeartRate; Ending Heartrate; Duration in time for the split; Distance for the split.   AKA all the data we would record to a logcard.  This could be turned on to automatically be inserted several times just after a split boundry (to ensure it gets through) or could be requested via a normal Page 70.   We could consider adding to the request for split inforation to indicate which split we are interested in receiving.   Due to the amount of data, the response might have to be a burst, or may have to be relegated to a ANT-FS CSAFE request or something similar??

 

-- (unformed thoughts below)

 

Workout Summary Information: Provide same as split data but for the entire workout.  Could be a special case of the above (ie split # FF or something like that)

Request current workout structure inforimation: Return the current workout structure (maybe this is better CSAFE through ANT-FS)

 

 Question: 

Refresh my memory – in multiple erg environments, how to tell one machine from another??  This may  be implicit with the pairing process or channel selection process, have to dig into this one...

 

 

Side comments:

  1. page 82 has no way to tell device it is operating on either A) generated power (solar, flywheel generated, etc.) or B) Line Power.  Should/Could this be added?
  2. If there is a way to GET time/date, shouldn't there be a way to PUT time and date?
  3. Section 7.3.7 Capabilities Bit Field describes source of HR data.  How shouuld SUUNTO HR data be classified?  “Other/Invalid”?  “ANT”?  It is clear it should not be POLAR or HAND GRIP.
  4. Confirm that it's OK to transmit additional information on pages F0-FF

 

FR60 Testing Notes:

1. FR60 will "timeout" if no rowing data received (ie null data received) after 5 minutes.

2. FR60 seems to "lag" behind PM4 elapsed time in 1 trial of Just Row using beta 001 firmware.

3. Just row splits were properly recognised by the watch with a BEEP.

4. Garmin Connect... (untested)

5. Unrealistic loss of tach (simulator) results in PM stopping time, but watch continues.

6. Ending just row (menu-back) properly indicates STOPPED.

 

FR 60 User Instructions:

  • Ensure your PM4 has the latest firmware.
  • On the WATCH Press the MODE button to go into TRAINING mode.  This should start a little antenna icon blinking. 
  • On the PM4, select More Options, Connect HR
  • Select the "Garmin FR", wait, and confirm.
  • On the back of the PM4, the LED should be rapidly blinking to indicate communications.

 

Garmin 210 User Instrucitons:

  • Ensure your PM4 has the latest firmware.
  • ??? --->  On the WATCH Press the MODE button to go into TRAINING mode.  This should start a little antenna icon blinking. 
  • On the PM4, select More Options, Connect HR
  •  Select the "Garmin FR", wait, and confirm.

Garmin 310XT User Instructions:

  • Ensure your PM4 has the latest firmware.
  • ??? --->  On the WATCH Press the MODE button to go into TRAINING mode.  This should start a little antenna icon blinking. 
  • On the PM4, select More Options, Connect HR
  •  Select the "Garmin FR", wait, and confirm.