12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /*
- This software is subject to the license described in the License.txt file
- included with this software distribution. You may not use this file except in compliance
- with this license.
- Copyright (c) Dynastream Innovations Inc. 2014
- All rights reserved.
- */
- #if !defined (POWER_DECODER_H)
- #define POWER_DECODER_H
- // We will designate the transmitting device type according to the
- // type of message that it sends.
- #define ANT_POWERONLY 0x10
- #define ANT_WHEELTORQUE 0x11
- #define ANT_CRANKTORQUE 0x12
- #define ANT_CRANKFREQ 0x20
- // We define the Torque Efficiency / Pedal Smoothness page here
- // even though it doesn't imply anything regarding the above types.
- #define ANT_TEPS 0x13
- // Calibration definitions
- #define ANT_CALIBRATION_MESSAGE (0x01)
- #define CALIBRATION_ID_BYTE (1)
- #define ANT_CTF_CALIBRATION_ID (0x10)
- #define ANT_CTF_CAL_TYPE_BYTE (2)
- #define ANT_CTF_CAL_ZERO (0x01)
- #define ANT_CTF_CAL_SLOPE (0x02)
- #define ANT_CTF_CAL_ESN (0x03)
- #define ANT_CTF_CAL_ACK (0xAC)
- #define ANT_CTF_CAL_ZERO_MSB_BYTE (6)
- #define ANT_CTF_CAL_ZERO_LSB_BYTE (7)
- #define MAXIMUM_TIME_GAP (240.0) // This is the power-down interval for several power meters...
- typedef struct _BPSAMPLER_t_
- {
- unsigned char ucPedalBalance;
- unsigned char ucCadence;
- unsigned long ulEventTime; // Quantized time of current event
- unsigned long ulLastRecordTime; // Quantized time of last resample output
- unsigned short usRecordInterval; // Quantized recording interval
- unsigned short usTimeBase; // Quantized event interval (for time based data)
- unsigned char ucRecordGapCount; // Number of resample outputs in message gap
- unsigned short usTorqueOffset; // CTF specific parameter
- float fPendingRotation; // Amount of rotation in latest event that will count towards the pending output
- float fGapRotation; // Amount of rotation in message gap
- float fAccumRotation; // Amount of rotation to carry forwards to next message event
- double dTotalRotation; // Total crank or wheel rotation (in rotations)
- float fPendingEnergy; // Amount of rotation in latest event that will count towards the pending output
- float fGapEnergy; // Amount of rotation in message gap
- float fAccumEnergy; // Amount of rotation to carry forwards to next message event
- double dTotalEnergy; // Total crank or wheel rotation (in rotations)
- double dLastRecordTime; // absolute time (in seconds) of last resample output
- double dLastMessageTime; // absolute time (in seconds) of last message
- unsigned short usLastAccumPeriod; // Accumulated period or timestamp in last received message
- unsigned short usLastAccumTorque; // Accumulated torque in last received message
- unsigned char ucLastEventCount; // Message Event count in last received message
- unsigned char ucLastRotationTicks; // Crank or Wheel rotation count in last received messsage
- } BPSAMPLER;
- // Power receiver signature
- typedef void(*PowerRecordReceiver) (double dLastRecordTime_, double dTotalRotation_, double dTotalEnergy_, float fAverageCadence_, float fAveragePower_);
- // Initializes the power decoder library with the record interval (s) and the power meter timebase (s) or event base (0).
- void InitPowerDecoder(double dRecordInterval_, double dTimeBase_, double dReSyncInterval_, PowerRecordReceiver powerRecordReceiverPtr_);
- // Pass Bike Power messages for the power decoder library to process
- void DecodePowerMessage(double dRxTime_, unsigned char messagePayload_[]);
- // 16 = Power Only, 17 = Wheel Torque, 18 = Crank Torque, 32 = Crank Torque Frequency, 255 = Unknown
- void SetPowerMeterType(unsigned char ucPowerMeterType_);
- #endif
|