442 lines
13 KiB
C
442 lines
13 KiB
C
#ifndef _CPP_COMMON_H_
|
|
#define _CPP_COMMON_H_
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup CPP Cycling Power Profile
|
|
* @ingroup PROFILE
|
|
* @brief Cycling Power Profile
|
|
*
|
|
* The Cycling Power Profile is used to enable a collector device in order to obtain
|
|
* data from a Cycling Power Sensor (CP Sensor) that exposes the Cycling Power Service
|
|
* in sports and fitness applications.
|
|
*
|
|
* This file contains all definitions that are common for the server and the client parts
|
|
* of the profile.
|
|
*****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
#include "prf_types.h"
|
|
#include <stdint.h>
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
/// Procedure Already in Progress Error Code
|
|
#define CPP_ERROR_PROC_IN_PROGRESS (0x80)
|
|
|
|
/// CP Measurement Notification Value Max Length
|
|
#define CPP_CP_MEAS_NTF_MAX_LEN (35)
|
|
/// CP Measurement Value Min Length
|
|
#define CPP_CP_MEAS_NTF_MIN_LEN (4)
|
|
|
|
/// ADV Header size
|
|
#define CPP_CP_ADV_HEADER_LEN (3)
|
|
/// ADV Length size
|
|
#define CPP_CP_ADV_LENGTH_LEN (1)
|
|
|
|
/// CP Measurement Advertisement Value Max Length
|
|
#define CPP_CP_MEAS_ADV_MAX_LEN (CPP_CP_MEAS_NTF_MAX_LEN + CPP_CP_ADV_HEADER_LEN)
|
|
/// CP Measurement Value Min Length
|
|
#define CPP_CP_MEAS_ADV_MIN_LEN (CPP_CP_MEAS_NTF_MIN_LEN + CPP_CP_ADV_HEADER_LEN)
|
|
|
|
/// CP Vector Value Max Length
|
|
#define CPP_CP_VECTOR_MAX_LEN (19)
|
|
/// CP Vector Value Min Length
|
|
#define CPP_CP_VECTOR_MIN_LEN (1)
|
|
|
|
/// CP Control Point Value Max Length
|
|
#define CPP_CP_CNTL_PT_REQ_MAX_LEN (9)
|
|
/// CP Control Point Value Min Length
|
|
#define CPP_CP_CNTL_PT_REQ_MIN_LEN (1)
|
|
|
|
/// CP Control Point Value Max Length
|
|
#define CPP_CP_CNTL_PT_RSP_MAX_LEN (20)
|
|
/// CP Control Point Value Min Length
|
|
#define CPP_CP_CNTL_PT_RSP_MIN_LEN (3)
|
|
|
|
/*
|
|
* ENUMERATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// CPP Service Characteristics
|
|
enum cpp_cpps_char
|
|
{
|
|
/// CPP Measurement
|
|
CPP_CPS_MEAS_CHAR,
|
|
/// CPP Feature
|
|
CPP_CPS_FEAT_CHAR,
|
|
/// Sensor Location
|
|
CPP_CPS_SENSOR_LOC_CHAR,
|
|
///Cycling Power Vector
|
|
CPP_CPS_VECTOR_CHAR,
|
|
/// CP Control Point
|
|
CPP_CPS_CTNL_PT_CHAR,
|
|
|
|
CPP_CPS_CHAR_MAX,
|
|
};
|
|
|
|
/// CPP Measurement Flags
|
|
enum cpp_meas_flags
|
|
{
|
|
/// Pedal Power Balance Present
|
|
CPP_MEAS_PEDAL_POWER_BALANCE_PRESENT = 0x0001,
|
|
/// Pedal Power Balance Reference
|
|
CPP_MEAS_PEDAL_POWER_BALANCE_REFERENCE = 0x0002,
|
|
/// Accumulated Torque Present
|
|
CPP_MEAS_ACCUM_TORQUE_PRESENT = 0x0004,
|
|
/// Accumulated Torque Source
|
|
CPP_MEAS_ACCUM_TORQUE_SOURCE = 0x0008,
|
|
/// Wheel Revolution Data Present
|
|
CPP_MEAS_WHEEL_REV_DATA_PRESENT = 0x0010,
|
|
/// Crank Revolution Data Present
|
|
CPP_MEAS_CRANK_REV_DATA_PRESENT = 0x0020,
|
|
/// Extreme Force Magnitudes Present
|
|
CPP_MEAS_EXTREME_FORCE_MAGNITUDES_PRESENT = 0x0040,
|
|
/// Extreme Torque Magnitudes Present
|
|
CPP_MEAS_EXTREME_TORQUE_MAGNITUDES_PRESENT = 0x0080,
|
|
/// Extreme Angles Present
|
|
CPP_MEAS_EXTREME_ANGLES_PRESENT = 0x0100,
|
|
/// Top Dead Spot Angle Present
|
|
CPP_MEAS_TOP_DEAD_SPOT_ANGLE_PRESENT = 0x0200,
|
|
/// Bottom Dead Spot Angle Present
|
|
CPP_MEAS_BOTTOM_DEAD_SPOT_ANGLE_PRESENT = 0x0400,
|
|
/// Accumulated Energy Present
|
|
CPP_MEAS_ACCUM_ENERGY_PRESENT = 0x0800,
|
|
/// Offset Compensation Indicator
|
|
CPP_MEAS_OFFSET_COMPENSATION_INDICATOR = 0x1000,
|
|
|
|
/// All Supported
|
|
CPP_MEAS_ALL_SUPP = 0x1FFF,
|
|
};
|
|
|
|
/// CPP Feature Flags
|
|
enum cpp_feat_flags
|
|
{
|
|
/// Pedal Power Balance Supported
|
|
CPP_FEAT_PEDAL_POWER_BALANCE_SUPP = 0x00000001,
|
|
/// Accumulated Torque Supported
|
|
CPP_FEAT_ACCUM_TORQUE_SUPP = 0x00000002,
|
|
/// Wheel Revolution Data Supported
|
|
CPP_FEAT_WHEEL_REV_DATA_SUPP = 0x00000004,
|
|
/// Crank Revolution Data Supported
|
|
CPP_FEAT_CRANK_REV_DATA_SUPP = 0x00000008,
|
|
/// Extreme Magnitudes Supported
|
|
CPP_FEAT_EXTREME_MAGNITUDES_SUPP = 0x00000010,
|
|
/// Extreme Angles Supported
|
|
CPP_FEAT_EXTREME_ANGLES_SUPP = 0x00000020,
|
|
/// Top and Bottom Dead Spot Angles Supported
|
|
CPP_FEAT_TOPBOT_DEAD_SPOT_ANGLES_SUPP = 0x00000040,
|
|
/// Accumulated Energy Supported
|
|
CPP_FEAT_ACCUM_ENERGY_SUPP = 0x00000080,
|
|
/// Offset Compensation Indicator Supported
|
|
CPP_FEAT_OFFSET_COMP_IND_SUPP = 0x00000100,
|
|
/// Offset Compensation Supported
|
|
CPP_FEAT_OFFSET_COMP_SUPP = 0x00000200,
|
|
/// CP Measurement CH Content Masking Supported
|
|
CPP_FEAT_CP_MEAS_CH_CONTENT_MASKING_SUPP = 0x00000400,
|
|
/// Multiple Sensor Locations Supported
|
|
CPP_FEAT_MULT_SENSOR_LOC_SUPP = 0x00000800,
|
|
/// Crank Length Adjustment Supported
|
|
CPP_FEAT_CRANK_LENGTH_ADJ_SUPP = 0x00001000,
|
|
/// Chain Length Adjustment Supported
|
|
CPP_FEAT_CHAIN_LENGTH_ADJ_SUPP = 0x00002000,
|
|
/// Chain Weight Adjustment Supported
|
|
CPP_FEAT_CHAIN_WEIGHT_ADJ_SUPP = 0x00004000,
|
|
/// Span Length Adjustment Supported
|
|
CPP_FEAT_SPAN_LENGTH_ADJ_SUPP = 0x00008000,
|
|
/// Sensor Measurement Context
|
|
CPP_FEAT_SENSOR_MEAS_CONTEXT = 0x00010000,
|
|
/// Instantaneous Measurement Direction Supported
|
|
CPP_FEAT_INSTANT_MEAS_DIRECTION_SUPP = 0x00020000,
|
|
/// Factory Calibration Date Supported
|
|
CPP_FEAT_FACTORY_CALIBRATION_DATE_SUPP = 0x00040000,
|
|
|
|
/// All supported
|
|
CPP_FEAT_ALL_SUPP = 0x0007FFFF,
|
|
};
|
|
|
|
/// CPP Sensor Locations Keys
|
|
enum cpp_sensor_loc
|
|
{
|
|
/// Other (0)
|
|
CPP_LOC_OTHER = 0,
|
|
/// Top of shoe (1)
|
|
CPP_LOC_TOP_SHOE,
|
|
/// In shoe (2)
|
|
CPP_LOC_IN_SHOE,
|
|
/// Hip (3)
|
|
CPP_LOC_HIP,
|
|
/// Front Wheel (4)
|
|
CPP_LOC_FRONT_WHEEL,
|
|
/// Left Crank (5)
|
|
CPP_LOC_LEFT_CRANK,
|
|
/// Right Crank (6)
|
|
CPP_LOC_RIGHT_CRANK,
|
|
/// Left Pedal (7)
|
|
CPP_LOC_LEFT_PEDAL,
|
|
/// Right Pedal (8)
|
|
CPP_LOC_RIGHT_PEDAL,
|
|
/// Front Hub (9)
|
|
CPP_LOC_FRONT_HUB,
|
|
/// Rear Dropout (10)
|
|
CPP_LOC_REAR_DROPOUT,
|
|
/// Chainstay (11)
|
|
CPP_LOC_CHAINSTAY,
|
|
/// Rear Wheel (12)
|
|
CPP_LOC_REAR_WHEEL,
|
|
/// Rear Hub (13)
|
|
CPP_LOC_REAR_HUB,
|
|
/// Chest (14)
|
|
CPP_LOC_CHEST,
|
|
|
|
CPP_LOC_MAX,
|
|
};
|
|
|
|
/// CPP Vector Flags
|
|
enum cpp_vector_flags
|
|
{
|
|
/// Crank Revolution Data Present
|
|
CPP_VECTOR_CRANK_REV_DATA_PRESENT = 0x01,
|
|
/// First Crank Measurement Angle Present
|
|
CPP_VECTOR_FIRST_CRANK_MEAS_ANGLE_PRESENT = 0x02,
|
|
/// Instantaneous Force Magnitude Array Present
|
|
CPP_VECTOR_INST_FORCE_MAGNITUDE_ARRAY_PRESENT = 0x04,
|
|
/// Instantaneous Torque Magnitude Array Present
|
|
CPP_VECTOR_INST_TORQUE_MAGNITUDE_ARRAY_PRESENT = 0x08,
|
|
/// Instantaneous Measurement Direction LSB
|
|
CPP_VECTOR_INST_MEAS_DIRECTION_LSB = 0x10,
|
|
/// Instantaneous Measurement Direction MSB
|
|
CPP_VECTOR_INST_MEAS_DIRECTION_MSB = 0x20,
|
|
|
|
///All suported
|
|
CPP_VECTOR_ALL_SUPP = 0x3F,
|
|
};
|
|
|
|
/// CPP Control Point Code Keys
|
|
enum cpp_ctnl_pt_code
|
|
{
|
|
/// Reserved value
|
|
CPP_CTNL_PT_RESERVED = 0,
|
|
|
|
/// Set Cumulative Value
|
|
CPP_CTNL_PT_SET_CUMUL_VAL,
|
|
/// Update Sensor Location
|
|
CPP_CTNL_PT_UPD_SENSOR_LOC,
|
|
/// Request Supported Sensor Locations
|
|
CPP_CTNL_PT_REQ_SUPP_SENSOR_LOC,
|
|
/// Set Crank Length
|
|
CPP_CTNL_PT_SET_CRANK_LENGTH,
|
|
/// Request Crank Length
|
|
CPP_CTNL_PT_REQ_CRANK_LENGTH,
|
|
/// Set Chain Length
|
|
CPP_CTNL_PT_SET_CHAIN_LENGTH,
|
|
/// Request Chain Length
|
|
CPP_CTNL_PT_REQ_CHAIN_LENGTH,
|
|
/// Set Chain Weight
|
|
CPP_CTNL_PT_SET_CHAIN_WEIGHT,
|
|
/// Request Chain Weight
|
|
CPP_CTNL_PT_REQ_CHAIN_WEIGHT,
|
|
/// Set Span Length
|
|
CPP_CTNL_PT_SET_SPAN_LENGTH,
|
|
/// Request Span Length
|
|
CPP_CTNL_PT_REQ_SPAN_LENGTH,
|
|
/// Start Offset Compensation
|
|
CPP_CTNL_PT_START_OFFSET_COMP,
|
|
/// Mask CP Measurement Characteristic Content
|
|
CPP_CTNL_MASK_CP_MEAS_CH_CONTENT,
|
|
/// Request Sampling Rate
|
|
CPP_CTNL_REQ_SAMPLING_RATE,
|
|
/// Request Factory Calibration Date
|
|
CPP_CTNL_REQ_FACTORY_CALIBRATION_DATE,
|
|
|
|
/// Response Code
|
|
CPP_CTNL_PT_RSP_CODE = 32,
|
|
};
|
|
|
|
/// CPP Control Point Response Value
|
|
enum cpp_ctnl_pt_resp_val
|
|
{
|
|
/// Reserved value
|
|
CPP_CTNL_PT_RESP_RESERVED = 0,
|
|
|
|
/// Success
|
|
CPP_CTNL_PT_RESP_SUCCESS,
|
|
/// Operation Code Not Supported
|
|
CPP_CTNL_PT_RESP_NOT_SUPP,
|
|
/// Invalid Parameter
|
|
CPP_CTNL_PT_RESP_INV_PARAM,
|
|
/// Operation Failed
|
|
CPP_CTNL_PT_RESP_FAILED,
|
|
};
|
|
|
|
/*
|
|
* STRUCTURES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// CP Measurement
|
|
struct cpp_cp_meas
|
|
{
|
|
/// Flags
|
|
uint16_t flags;
|
|
/// Instantaneous Power
|
|
int16_t inst_power;
|
|
/// Pedal Power Balance
|
|
uint8_t pedal_power_balance;
|
|
/// Accumulated torque
|
|
uint16_t accum_torque;
|
|
/// Cumulative Wheel Revolutions
|
|
int16_t cumul_wheel_rev;
|
|
/// Last Wheel Event Time
|
|
uint16_t last_wheel_evt_time;
|
|
/// Cumulative Crank Revolution
|
|
uint16_t cumul_crank_rev;
|
|
/// Last Crank Event Time
|
|
uint16_t last_crank_evt_time;
|
|
/// Maximum Force Magnitude
|
|
int16_t max_force_magnitude;
|
|
/// Minimum Force Magnitude
|
|
int16_t min_force_magnitude;
|
|
/// Maximum Torque Magnitude
|
|
int16_t max_torque_magnitude;
|
|
/// Minimum Torque Magnitude
|
|
int16_t min_torque_magnitude;
|
|
/// Maximum Angle (12 bits)
|
|
uint16_t max_angle;
|
|
/// Minimum Angle (12bits)
|
|
uint16_t min_angle;
|
|
/// Top Dead Spot Angle
|
|
uint16_t top_dead_spot_angle;
|
|
/// Bottom Dead Spot Angle
|
|
uint16_t bot_dead_spot_angle;
|
|
///Accumulated energy
|
|
uint16_t accum_energy;
|
|
|
|
};
|
|
|
|
/// CP Measurement
|
|
struct cpp_cp_meas_ind
|
|
{
|
|
/// Flags
|
|
uint16_t flags;
|
|
/// Instantaneous Power
|
|
int16_t inst_power;
|
|
/// Pedal Power Balance
|
|
uint8_t pedal_power_balance;
|
|
/// Accumulated torque
|
|
uint16_t accum_torque;
|
|
/// Cumulative Wheel Revolutions
|
|
uint32_t cumul_wheel_rev;
|
|
/// Last Wheel Event Time
|
|
uint16_t last_wheel_evt_time;
|
|
/// Cumulative Crank Revolution
|
|
uint16_t cumul_crank_rev;
|
|
/// Last Crank Event Time
|
|
uint16_t last_crank_evt_time;
|
|
/// Maximum Force Magnitude
|
|
int16_t max_force_magnitude;
|
|
/// Minimum Force Magnitude
|
|
int16_t min_force_magnitude;
|
|
/// Maximum Torque Magnitude
|
|
int16_t max_torque_magnitude;
|
|
/// Minimum Torque Magnitude
|
|
int16_t min_torque_magnitude;
|
|
/// Maximum Angle (12 bits)
|
|
uint16_t max_angle;
|
|
/// Minimum Angle (12bits)
|
|
uint16_t min_angle;
|
|
/// Top Dead Spot Angle
|
|
uint16_t top_dead_spot_angle;
|
|
/// Bottom Dead Spot Angle
|
|
uint16_t bot_dead_spot_angle;
|
|
///Accumulated energy
|
|
uint16_t accum_energy;
|
|
|
|
};
|
|
|
|
|
|
///CP Vector
|
|
struct cpp_cp_vector
|
|
{
|
|
/// Flags
|
|
uint8_t flags;
|
|
/// Force-Torque Magnitude Array Length
|
|
uint8_t nb;
|
|
/// Cumulative Crank Revolutions
|
|
uint16_t cumul_crank_rev;
|
|
/// Last Crank Event Time
|
|
uint16_t last_crank_evt_time;
|
|
/// First Crank Measurement Angle
|
|
uint16_t first_crank_meas_angle;
|
|
///Mutually excluded Force and Torque Magnitude Arrays
|
|
int16_t force_torque_magnitude[__ARRAY_EMPTY];
|
|
};
|
|
|
|
/// CP Control Point Request
|
|
struct cpp_ctnl_pt_req
|
|
{
|
|
/// Operation Code
|
|
uint8_t op_code;
|
|
/// Value
|
|
union cpp_ctnl_pt_req_val
|
|
{
|
|
/// Cumulative Value
|
|
uint32_t cumul_val;
|
|
/// Sensor Location
|
|
uint8_t sensor_loc;
|
|
/// Crank Length
|
|
uint16_t crank_length;
|
|
/// Chain Length
|
|
uint16_t chain_length;
|
|
/// Chain Weight
|
|
uint16_t chain_weight;
|
|
/// Span Length
|
|
uint16_t span_length;
|
|
/// Mask Content
|
|
uint16_t mask_content;
|
|
} value;
|
|
};
|
|
|
|
/// CP Control Point Response
|
|
struct cpp_ctnl_pt_rsp
|
|
{
|
|
/// Requested Operation Code
|
|
uint8_t req_op_code;
|
|
/// Response Value
|
|
uint8_t resp_value;
|
|
|
|
///Value
|
|
union cpp_ctnl_pt_rsp_val
|
|
{
|
|
/// List of supported locations
|
|
uint32_t supp_loc;
|
|
/// Crank Length
|
|
uint16_t crank_length;
|
|
/// Chain Length
|
|
uint16_t chain_length;
|
|
/// Chain Weight
|
|
uint16_t chain_weight;
|
|
/// Span Length
|
|
uint16_t span_length;
|
|
/// Start Offset Compensation
|
|
int16_t offset_comp;
|
|
/// Sampling Rate Procedure
|
|
uint8_t sampling_rate;
|
|
/// Calibration date
|
|
struct prf_date_time factory_calibration;
|
|
} value;
|
|
};
|
|
|
|
/// @} cpp_common
|
|
|
|
#endif //(_CPP_COMMON_H_)
|