345 lines
8.7 KiB
C
345 lines
8.7 KiB
C
|
#ifndef _CPPS_TASK_H_
|
||
|
#define _CPPS_TASK_H_
|
||
|
|
||
|
/**
|
||
|
****************************************************************************************
|
||
|
* @addtogroup CPPSTASK Task
|
||
|
* @ingroup CPPS
|
||
|
* @brief Cycling Power Profile Task.
|
||
|
* @{
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* INCLUDE FILES
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
#include "cpp_common.h"
|
||
|
|
||
|
|
||
|
#include <stdint.h>
|
||
|
#include "rwip_task.h" // Task definitions
|
||
|
|
||
|
/*
|
||
|
* DEFINES
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ENUMERATIONS
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
|
||
|
/// Messages for Cycling Power Profile Sensor
|
||
|
enum cpps_msg_id
|
||
|
{
|
||
|
/// Start the Cycling Power Profile Server profile
|
||
|
CPPS_ENABLE_REQ = TASK_FIRST_MSG(TASK_ID_CPPS),
|
||
|
/// Confirm profile
|
||
|
CPPS_ENABLE_RSP,
|
||
|
|
||
|
/// Gets packed data for advertising
|
||
|
CPPS_GET_ADV_DATA_REQ,
|
||
|
/// Response with packed data for advertising
|
||
|
CPPS_GET_ADV_DATA_RSP,
|
||
|
|
||
|
/// Send a CP Measurement to the peer device (Notification)
|
||
|
CPPS_NTF_CP_MEAS_REQ,
|
||
|
/// CP Measurement response
|
||
|
CPPS_NTF_CP_MEAS_RSP,
|
||
|
|
||
|
/// Send a CP Vector to the peer device (Notification)
|
||
|
CPPS_NTF_CP_VECTOR_REQ,
|
||
|
/// CP Vector response
|
||
|
CPPS_NTF_CP_VECTOR_RSP,
|
||
|
|
||
|
/// Send a complete event status to the application
|
||
|
CPPS_CMP_EVT,
|
||
|
|
||
|
/// Indicate that an attribute value has been written
|
||
|
CPPS_CFG_NTFIND_IND,
|
||
|
|
||
|
/// Request to change vector client configuration
|
||
|
CPPS_VECTOR_CFG_REQ_IND,
|
||
|
/// Confirmation to change vector client configuration
|
||
|
CPPS_VECTOR_CFG_CFM,
|
||
|
|
||
|
/// Indicate that Control Point characteristic value has been written
|
||
|
CPPS_CTNL_PT_REQ_IND,
|
||
|
/// Application response after receiving a CPPS_CTNL_PT_REQ_IND message
|
||
|
CPPS_CTNL_PT_CFM,
|
||
|
};
|
||
|
|
||
|
/// Operation Code used in the profile state machine
|
||
|
enum cpps_op_code
|
||
|
{
|
||
|
/// Reserved Operation Code
|
||
|
CPPS_RESERVED_OP_CODE = 0x00,
|
||
|
|
||
|
/// Enable Profile Operation Code
|
||
|
CPPS_ENABLE_REQ_OP_CODE,
|
||
|
|
||
|
/// Send CP Measurement Operation Code
|
||
|
CPPS_NTF_MEAS_OP_CODE,
|
||
|
|
||
|
/// Send Vector Operation Code
|
||
|
CPPS_NTF_VECTOR_OP_CODE,
|
||
|
|
||
|
/**
|
||
|
* Control Point Operation
|
||
|
*/
|
||
|
/// Set Cumulative Value
|
||
|
CPPS_CTNL_PT_SET_CUMUL_VAL_OP_CODE,
|
||
|
/// Update Sensor Location
|
||
|
CPPS_CTNL_PT_UPD_SENSOR_LOC_OP_CODE,
|
||
|
/// Request Supported Sensor Locations
|
||
|
CPPS_CTNL_PT_REQ_SUPP_SENSOR_LOC_OP_CODE,
|
||
|
/// Set Crank Length
|
||
|
CPPS_CTNL_PT_SET_CRANK_LENGTH_OP_CODE,
|
||
|
/// Request Crank Length
|
||
|
CPPS_CTNL_PT_REQ_CRANK_LENGTH_OP_CODE,
|
||
|
/// Set Chain Length
|
||
|
CPPS_CTNL_PT_SET_CHAIN_LENGTH_OP_CODE,
|
||
|
/// Request Chain Length
|
||
|
CPPS_CTNL_PT_REQ_CHAIN_LENGTH_OP_CODE,
|
||
|
/// Set Chain Weight
|
||
|
CPPS_CTNL_PT_SET_CHAIN_WEIGHT_OP_CODE,
|
||
|
/// Request Chain Weight
|
||
|
CPPS_CTNL_PT_REQ_CHAIN_WEIGHT_OP_CODE,
|
||
|
/// Set Span Length
|
||
|
CPPS_CTNL_PT_SET_SPAN_LENGTH_OP_CODE,
|
||
|
/// Request Span Length
|
||
|
CPPS_CTNL_PT_REQ_SPAN_LENGTH_OP_CODE,
|
||
|
/// Start Offset Compensation
|
||
|
CPPS_CTNL_PT_START_OFFSET_COMP_OP_CODE,
|
||
|
/// Mask CP Measurement Characteristic Content
|
||
|
CPPS_CTNL_MASK_CP_MEAS_CH_CONTENT_OP_CODE,
|
||
|
/// Request Sampling Rate
|
||
|
CPPS_CTNL_REQ_SAMPLING_RATE_OP_CODE,
|
||
|
/// Request Factory Calibration Date
|
||
|
CPPS_CTNL_REQ_FACTORY_CALIBRATION_DATE_OP_CODE,
|
||
|
|
||
|
/// Error Indication Sent Operation Code
|
||
|
CPPS_CTNL_ERR_IND_OP_CODE,
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* STRUCTURES
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
/// Parameters of the @ref CPPS_CREATE_DB_REQ message
|
||
|
struct cpps_db_cfg
|
||
|
{
|
||
|
/**
|
||
|
* CP Feature Value - Not supposed to be modified during the lifetime of the device
|
||
|
* This bit field is set in order to decide which features are supported:
|
||
|
* Supported features (specification) ---------------- Bits 0 to 18
|
||
|
*/
|
||
|
uint32_t cp_feature;
|
||
|
/// Initial count for wheel revolutions
|
||
|
uint32_t wheel_rev;
|
||
|
/**
|
||
|
* Profile characteristic configuration:
|
||
|
* Enable broadcaster mode in Measurement Characteristic --- Bit 0
|
||
|
* Enable Control Point Characteristic (*) ----------------- Bit 1
|
||
|
*
|
||
|
* (*) Note this characteristic is mandatory if server supports:
|
||
|
* - Wheel Revolution Data
|
||
|
* - Multiple Sensor Locations
|
||
|
* - Configurable Settings
|
||
|
* - Offset Compensation
|
||
|
* - Server allows to be requested for parameters (CPP_CTNL_PT_REQ... codes)
|
||
|
*/
|
||
|
uint8_t prfl_config;
|
||
|
/**
|
||
|
* Indicate the sensor location.
|
||
|
*/
|
||
|
uint8_t sensor_loc;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_ENABLE_REQ message
|
||
|
struct cpps_enable_req
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/**
|
||
|
* Profile characteristic configuration:
|
||
|
* Measurement Characteristic notification config --- Bit 0
|
||
|
* Measurement Characteristic broadcast config ------ Bit 1
|
||
|
* Vector Characteristic notification config -------- Bit 2
|
||
|
* Control Point Characteristic indication config --- Bit 3
|
||
|
*/
|
||
|
uint16_t prfl_ntf_ind_cfg;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_ENABLE_RSP message
|
||
|
struct cpps_enable_rsp
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/// status
|
||
|
uint8_t status;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_GET_ADV_DATA_REQ message
|
||
|
struct cpps_get_adv_data_req
|
||
|
{
|
||
|
///Parameters
|
||
|
struct cpp_cp_meas parameters;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_GET_ADV_DATA_RSP message
|
||
|
struct cpps_get_adv_data_rsp
|
||
|
{
|
||
|
uint8_t status;
|
||
|
/// Data length
|
||
|
uint8_t data_len;
|
||
|
/// Data to advertise
|
||
|
uint8_t adv_data[__ARRAY_EMPTY];
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_NTF_CP_MEAS_REQ message
|
||
|
struct cpps_ntf_cp_meas_req
|
||
|
{
|
||
|
///Parameters
|
||
|
struct cpp_cp_meas parameters;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_NTF_CP_MEAS_RSP message
|
||
|
struct cpps_ntf_cp_meas_rsp
|
||
|
{
|
||
|
/// Status
|
||
|
uint8_t status;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_NTF_CP_VECTOR_REQ message
|
||
|
struct cpps_ntf_cp_vector_req
|
||
|
{
|
||
|
///Parameters
|
||
|
struct cpp_cp_vector parameters;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_NTF_CP_VECTOR_RSP message
|
||
|
struct cpps_ntf_cp_vector_rsp
|
||
|
{
|
||
|
/// Status
|
||
|
uint8_t status;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_CTNL_PT_REQ_IND message
|
||
|
struct cpps_ctnl_pt_req_ind
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/// Operation Code
|
||
|
uint8_t op_code;
|
||
|
/// Value
|
||
|
union cpps_ctnl_pt_req_ind_value
|
||
|
{
|
||
|
/// 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;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_CTNL_PT_CFM message
|
||
|
struct cpps_ctnl_pt_cfm
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/// Operation Code
|
||
|
uint8_t op_code;
|
||
|
/// Status
|
||
|
uint8_t status;
|
||
|
/// Value
|
||
|
union cpps_sc_ctnl_pt_cfm_value
|
||
|
{
|
||
|
/// Supported sensor locations (up to 17)
|
||
|
uint32_t supp_sensor_loc;
|
||
|
/// New Cumulative Wheel revolution Value
|
||
|
uint32_t cumul_wheel_rev;
|
||
|
/// Crank Length
|
||
|
uint16_t crank_length;
|
||
|
/// Chain Length
|
||
|
uint16_t chain_length;
|
||
|
/// Chain Weight
|
||
|
uint16_t chain_weight;
|
||
|
/// Span Length
|
||
|
uint16_t span_length;
|
||
|
/// Offset compensation
|
||
|
int16_t offset_comp;
|
||
|
/// Mask Measurement content
|
||
|
uint16_t mask_meas_content;
|
||
|
///Sampling rate
|
||
|
uint8_t sampling_rate;
|
||
|
/// New Sensor Location
|
||
|
uint8_t sensor_loc;
|
||
|
/// Calibration date
|
||
|
struct prf_date_time factory_calibration;
|
||
|
|
||
|
} value;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_CFG_NTFIND_IND message
|
||
|
struct cpps_cfg_ntfind_ind
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/// Characteristic Code (CP Measurement or Control Point)
|
||
|
uint8_t char_code;
|
||
|
/// Char. Client Characteristic Configuration
|
||
|
uint16_t ntf_cfg;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_VECTOR_CFG_REQ_IND message
|
||
|
struct cpps_vector_cfg_req_ind
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/// Characteristic Code
|
||
|
uint8_t char_code;
|
||
|
/// Char. Client Characteristic Configuration
|
||
|
uint16_t ntf_cfg;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_VECTOR_CFG_CFM message
|
||
|
struct cpps_vector_cfg_cfm
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/// Status
|
||
|
uint8_t status;
|
||
|
/// Char. Client Characteristic Configuration
|
||
|
uint16_t ntf_cfg;
|
||
|
};
|
||
|
|
||
|
/// Parameters of the @ref CPPS_CMP_EVT message
|
||
|
struct cpps_cmp_evt
|
||
|
{
|
||
|
/// Connection index
|
||
|
uint8_t conidx;
|
||
|
/// Operation Code
|
||
|
uint8_t operation;
|
||
|
/// Operation Status
|
||
|
uint8_t status;
|
||
|
};
|
||
|
|
||
|
/// @} CPPSTASK
|
||
|
|
||
|
#endif //(_CPPS_TASK_H_)
|