228 lines
6 KiB
C
228 lines
6 KiB
C
#ifndef PROXM_H_
|
|
#define PROXM_H_
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup PROX Proximity Profile
|
|
* @ingroup PROFILE
|
|
* @brief Proximity Profile
|
|
*
|
|
* The PROX module is the responsible block for implementing the proximity profile
|
|
* functionalities in the BLE Host.
|
|
*
|
|
* The Proximity Profile defines the functionality required in a device that can
|
|
* alert the user when the user's personal device moves further away or closer together
|
|
* to another communicating device.
|
|
*****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup PROXM Proximity Monitor
|
|
* @ingroup PROX
|
|
* @brief Proximity Profile Monitor
|
|
*
|
|
* The PROXM is responsible for providing proximity profile monitor functionalities to
|
|
* upper layer module or application. The device using this profile takes the role
|
|
* of a proximity monitor role.
|
|
*
|
|
* Proximity Monitor (PM): A PM (e.g. PC, phone, electronic door entry system, etc)
|
|
* is the term used by this profile to describe a device that monitors the distance
|
|
* between itself and the connected PR device. The profile on the PM device constantly
|
|
* monitors the path loss between itself and the communicating Proximity Reporter
|
|
* device. The profile provides indications to an application which can cause an alert
|
|
* to the user.
|
|
*
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/*
|
|
* INCLUDE FILES
|
|
****************************************************************************************
|
|
*/
|
|
#include "rwip_config.h"
|
|
#if (BLE_PROX_MONITOR)
|
|
|
|
#include "proxm_task.h"
|
|
#include "ke_task.h"
|
|
#include "prf_types.h"
|
|
#include "prf_utils.h"
|
|
|
|
/*
|
|
* DEFINES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/// Maximum number of Proximity Monitor task instances
|
|
#define PROXM_IDX_MAX (BLE_CONNECTION_MAX)
|
|
|
|
|
|
/*
|
|
* ENUMERATIONS
|
|
****************************************************************************************
|
|
*/
|
|
/// Possible states of the PROXM task
|
|
enum proxm_state
|
|
{
|
|
/// FREE state
|
|
PROXM_FREE,
|
|
/// IDLE state
|
|
PROXM_IDLE,
|
|
/// Busy state
|
|
PROXM_BUSY,
|
|
///Discovering
|
|
PROXM_DISCOVERING,
|
|
|
|
/// Number of defined states.
|
|
PROXM_STATE_MAX
|
|
};
|
|
|
|
|
|
/// Characteristics Link loss
|
|
enum
|
|
{
|
|
PROXM_LK_LOSS_CHAR,
|
|
|
|
PROXM_LK_LOSS_CHAR_MAX,
|
|
};
|
|
|
|
/// Characteristics IAS
|
|
enum
|
|
{
|
|
PROXM_IAS_CHAR,
|
|
|
|
PROXM_IAS_CHAR_MAX,
|
|
};
|
|
|
|
/// Characteristics Tx power
|
|
enum
|
|
{
|
|
PROXM_TX_POWER_CHAR,
|
|
|
|
PROXM_TX_POWER_CHAR_MAX,
|
|
};
|
|
|
|
/// Max characteristic number on services
|
|
enum
|
|
{
|
|
PROXM_SVCS_CHAR_NB = 1
|
|
};
|
|
|
|
///Link Loss or Immediate Alert code for setting alert through one message
|
|
enum
|
|
{
|
|
///Code for LLS Alert Level Char.
|
|
PROXM_SET_LK_LOSS_ALERT = 0x00,
|
|
///Code for IAS Alert Level Char.
|
|
PROXM_SET_IMMDT_ALERT,
|
|
};
|
|
|
|
/// Read Characteristic Code
|
|
enum
|
|
{
|
|
/// Read Link Loss Service Alert Level Characteristic Value
|
|
PROXM_RD_LL_ALERT_LVL = 0x00,
|
|
/// Read TX Power Service TX Power Level Characteristic Value
|
|
PROXM_RD_TX_POWER_LVL,
|
|
};
|
|
|
|
///Alert Level Values
|
|
enum
|
|
{
|
|
PROXM_ALERT_NONE = 0x00,
|
|
PROXM_ALERT_MILD,
|
|
PROXM_ALERT_HIGH,
|
|
};
|
|
|
|
/*
|
|
* STRUCTURES
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
/// Proximity Monitor environment variable per connection
|
|
struct proxm_cnx_env
|
|
{
|
|
/// Last service for which something was discovered
|
|
uint8_t last_svc_req;
|
|
/// counter used to check service uniqueness
|
|
uint8_t nb_svc;
|
|
/// used to store if measurement context
|
|
uint8_t meas_ctx_en;
|
|
|
|
struct svc_content prox[PROXM_SVC_NB];
|
|
};
|
|
|
|
/// Proximity monitor environment variable
|
|
struct proxm_env_tag
|
|
{
|
|
/// profile environment
|
|
prf_env_t prf_env;
|
|
/// Environment variable pointer for each connections
|
|
struct proxm_cnx_env* env[PROXM_IDX_MAX];
|
|
/// State of different task instances
|
|
ke_state_t state[PROXM_IDX_MAX];
|
|
};
|
|
|
|
|
|
/*
|
|
* GLOBAL VARIABLE DEFINITIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
/*
|
|
* FUNCTION DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Retrieve Proximity service profile interface
|
|
*
|
|
* @return Proximity service profile interface
|
|
****************************************************************************************
|
|
*/
|
|
const struct prf_task_cbs* proxm_prf_itf_get(void);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Send enable confirmation to application.
|
|
* @param status Status of the enable: either OK or error encountered while discovery.
|
|
****************************************************************************************
|
|
*/
|
|
void proxm_enable_rsp_send(struct proxm_env_tag *proxm_env, uint8_t conidx, uint8_t status);
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @brief Check if collector request is possible or not
|
|
*
|
|
* @param[in] proxm_env Client environment.
|
|
* @param[in] conidx Connection Index.
|
|
* @param[in] char_code Characteristic number.
|
|
*
|
|
* @return GAP_ERR_NO_ERROR if request can be performed, error code else.
|
|
****************************************************************************************
|
|
*/
|
|
uint8_t proxm_validate_request(struct proxm_env_tag *proxm_env, uint8_t conidx, uint8_t char_code);
|
|
|
|
/*
|
|
* GLOBAL VARIABLE DECLARATIONS
|
|
****************************************************************************************
|
|
*/
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* Initialize task handler
|
|
*
|
|
* @param task_desc Task descriptor to fill
|
|
****************************************************************************************
|
|
*/
|
|
void proxm_task_init(struct ke_task_desc *task_desc);
|
|
|
|
#endif //BLE_PROX_MONITOR
|
|
|
|
/// @} PROXM
|
|
|
|
#endif // PROXM_H_
|