pinebuds/services/ble_profiles/lan/lans/api/lans_task.h

271 lines
6.4 KiB
C

#ifndef _LANS_TASK_H_
#define _LANS_TASK_H_
/**
****************************************************************************************
* @addtogroup LANSTASK Task
* @ingroup LANS
* @brief Location and Navigation Profile Task.
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "lan_common.h"
#include "rwip_task.h" // Task definitions
/*
* DEFINES
****************************************************************************************
*/
/*
* ENUMERATIONS
****************************************************************************************
*/
/// Messages for Location and Navigation Profile Sensor
enum lans_msg_id
{
/// Start the Location and Navigation Profile Server profile
LANS_ENABLE_REQ = TASK_FIRST_MSG(TASK_ID_LANS),
/// Confirm profile
LANS_ENABLE_RSP,
/// Update Position Quality
LANS_UPD_POS_Q_REQ,
/// Update Position Quality
LANS_UPD_POS_Q_RSP,
/// Send a Location and Speed to the peer device (Notification)
LANS_NTF_LOC_SPEED_REQ,
/// Response of Send a Location and Speed request
LANS_NTF_LOC_SPEED_RSP,
/// Send a LN Vector to the peer device (Notification)
LANS_NTF_NAVIGATION_REQ,
/// Response of Send LN Vector request
LANS_NTF_NAVIGATION_RSP,
/// Send a complete event status to the application
LANS_CMP_EVT,
/// Indicate that an attribute value has been written
LANS_CFG_NTFIND_IND,
/// Indicate that Control Point characteristic value has been written
LANS_LN_CTNL_PT_REQ_IND,
/// Application response after receiving a LANS_CTNL_PT_REQ_IND message
LANS_LN_CTNL_PT_CFM,
};
/// Operation Code used in the profile state machine
enum lans_op_code
{
/// Reserved Operation Code
LANS_RESERVED_OP_CODE = 0x00,
/// Enable Profile Operation Code
LANS_ENABLE_REQ_OP_CODE,
/// Send Location and Speed Operation Code
LANS_NTF_LOC_SPEED_OP_CODE,
/// Update Position quality
LANS_UPD_POS_Q_OP_CODE,
/// Send Navigation Operation Code
LANS_NTF_NAVIGATION_OP_CODE,
/**
* Control Point Operation
*/
/// Set Cumulative Value
LANS_SET_CUMUL_VALUE_OP_CODE,
/// Mask Location and Speed Characteristic Content
LANS_MASK_LSPEED_CHAR_CT_OP_CODE,
/// Navigation Control
LANS_NAVIGATION_CONTROL_OP_CODE,
/// Request Number of Routes
LANS_REQ_NUMBER_OF_ROUTES_OP_CODE,
/// Request Name of Route
LANS_REQ_NAME_OF_ROUTE_OP_CODE,
/// Select Route
LANS_SELECT_ROUTE_OP_CODE,
/// Set Fix Rate
LANS_SET_FIX_RATE_OP_CODE,
/// Set Elevation
LANS_SET_ELEVATION_OP_CODE,
/// Error Indication Sent Operation Code
LANS_LN_CTNL_ERR_IND_OP_CODE,
};
/*
* STRUCTURES
****************************************************************************************
*/
/// Parameters of the @ref LANS_CREATE_DB_REQ message
struct lans_db_cfg
{
/**
* LN 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:
*/
uint32_t ln_feature;
/**
* Bit 0 - Enable LN Control Point
* Bit 1 - Enable Navigation Feature
*/
uint8_t prfl_config;
};
/// Parameters of the @ref LANS_ENABLE_REQ message
struct lans_enable_req
{
/// Connection index
uint8_t conidx;
/**
* Profile characteristic configuration:
* Location and speed Characteristic NTF config -- Bit 0
* LN Control Point Characteristic IND config ---- Bit 1
* Navigation Characteristic NTF config ---------- Bit 2
*/
uint16_t prfl_ntf_ind_cfg;
};
/// Parameters of the @ref LANS_ENABLE_RSP message
struct lans_enable_rsp
{
/// Connection index
uint8_t conidx;
/// status
uint8_t status;
};
/// Parameters of the @ref LANS_CMP_EVT message
struct lans_cmp_evt
{
/// Connection index
uint8_t conidx;
/// Operation Code
uint8_t operation;
/// Operation Status
uint8_t status;
};
/// Parameters of the @ref LANS_CFG_NTFIND_IND message
struct lans_cfg_ntfind_ind
{
/// Connection index
uint8_t conidx;
/// Characteristic Code (Location and speed, Control Point or navigation)
uint8_t char_code;
/// Char. Client Characteristic Configuration
uint16_t ntf_cfg;
};
/// Parameters of the @ref LANS_NTF_LOC_SPEED_REQ message
struct lans_ntf_loc_speed_req
{
///Parameters
struct lanp_loc_speed parameters;
};
/// Parameters of the @ref LANS_NTF_LOC_SPEED_RSP message
struct lans_ntf_loc_speed_rsp
{
/// Operation Status
uint8_t status;
};
/// Parameters of the @ref LANS_NTF_NAVIGATION_REQ message
struct lans_ntf_navigation_req
{
///Parameters
struct lanp_navigation parameters;
};
/// Parameters of the @ref LANS_NTF_NAVIGATION_RSP message
struct lans_ntf_navigation_rsp
{
/// Operation Status
uint8_t status;
};
/// Parameters of the @ref LANS_UPD_POS_Q_REQ message
struct lans_upd_pos_q_req
{
///Parameters
struct lanp_posq parameters;
};
/// Parameters of the @ref LANS_UPD_POS_Q_RSP message
struct lans_upd_pos_q_rsp
{
/// Operation Status
uint8_t status;
};
/// Parameters of the @ref LANS_LN_CTNL_PT_REQ_IND message
struct lans_ln_ctnl_pt_req_ind
{
/// Connection index
uint8_t conidx;
/// Operation Code
uint8_t op_code;
/// Value
union lans_ln_ctnl_pt_req_ind_value
{
/// Cumulative Value (24 bits)
uint32_t cumul_val;
/// Mask Content
uint16_t mask_content;
/// Navigation Control
uint8_t control_value;
/// Route number
uint16_t route_number;
/// Fix rate
uint8_t fix_rate;
/// Elevation
int32_t elevation;
} value;
};
/// Parameters of the @ref LANS_CTNL_PT_CFM message
struct lans_ln_ctnl_pt_cfm
{
/// Connection index
uint8_t conidx;
/// Operation Code
uint8_t op_code;
/// Status
uint8_t status;
/// Value
union lans_ln_ctnl_pt_cfm_value
{
/// Number of routes
uint16_t number_of_routes;
/// Mask content
uint16_t mask_lspeed_content;
struct lan_route_name
{
uint8_t length;
/// Name of Route UTF-8
uint8_t name[__ARRAY_EMPTY];
} route;
} value;
};
/// @} LANSTASK
#endif //(_LANS_TASK_H_)