176 lines
4.3 KiB
C
176 lines
4.3 KiB
C
|
/***************************************************************************
|
||
|
*
|
||
|
* Copyright 2015-2019 BES.
|
||
|
* All rights reserved. All unpublished rights reserved.
|
||
|
*
|
||
|
* No part of this work may be used or reproduced in any form or by any
|
||
|
* means, or stored in a database or retrieval system, without prior written
|
||
|
* permission of BES.
|
||
|
*
|
||
|
* Use of this work is governed by a license granted by BES.
|
||
|
* This work contains confidential and proprietary information of
|
||
|
* BES. which is protected by copyright, trade secret,
|
||
|
* trademark and other intellectual property rights.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
|
||
|
|
||
|
#ifndef _ANCC_H_
|
||
|
#define _ANCC_H_
|
||
|
|
||
|
/**
|
||
|
****************************************************************************************
|
||
|
* @addtogroup ANCC.
|
||
|
* @ingroup ANC
|
||
|
* @brief ANCS - Client Role.
|
||
|
* @{
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* INCLUDE FILES
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
#include "anc_common.h"
|
||
|
|
||
|
#if (BLE_ANC_CLIENT)
|
||
|
|
||
|
#include "ke_task.h"
|
||
|
#include "prf_types.h"
|
||
|
#include "prf_utils.h"
|
||
|
#include "prf_utils_128.h"
|
||
|
|
||
|
/*
|
||
|
* DEFINES
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
/// Maximum number of ANCC task instances
|
||
|
#define ANCC_IDX_MAX (BLE_CONNECTION_MAX)
|
||
|
|
||
|
/// Possible states of the ancc task
|
||
|
enum ancc_states
|
||
|
{
|
||
|
/// Idle state
|
||
|
ANCC_FREE,
|
||
|
/// Connected state
|
||
|
ANCC_IDLE,
|
||
|
/// Discovery
|
||
|
ANCC_DISCOVERING,
|
||
|
|
||
|
/// Number of defined states.
|
||
|
ANCC_STATE_MAX
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* ENUMERATIONS
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
/// ANCS Characteristics
|
||
|
enum ancc_anc_chars
|
||
|
{
|
||
|
/// Notification Source
|
||
|
ANCC_CHAR_NTF_SRC,
|
||
|
/// Control Point
|
||
|
ANCC_CHAR_CTRL_PT,
|
||
|
/// Data Source
|
||
|
ANCC_CHAR_DATA_SRC,
|
||
|
|
||
|
ANCC_CHAR_MAX,
|
||
|
};
|
||
|
|
||
|
/// ANCS Characteristic Descriptors
|
||
|
enum ancc_anc_descs
|
||
|
{
|
||
|
/// Notification Source - Client Characteristic Configuration
|
||
|
ANCC_DESC_NTF_SRC_CL_CFG,
|
||
|
/// Data Source - Client Characteristic Configuration
|
||
|
ANCC_DESC_DATA_SRC_CL_CFG,
|
||
|
|
||
|
ANCC_DESC_MAX,
|
||
|
|
||
|
ANCC_DESC_MASK = 0x10,
|
||
|
};
|
||
|
|
||
|
/// Pointer to the connection clean-up function
|
||
|
#define ANCC_CLEANUP_FNCT (ancc_cleanup)
|
||
|
/*
|
||
|
* STRUCTURES
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Structure containing the characteristics handles, value handles and descriptors for
|
||
|
* the Alert Notification Service
|
||
|
*/
|
||
|
struct ancc_anc_content
|
||
|
{
|
||
|
/// Service info
|
||
|
struct prf_svc svc;
|
||
|
|
||
|
/// Characteristic info:
|
||
|
/// - Notification Source
|
||
|
/// - Control Point
|
||
|
/// - Data Source
|
||
|
struct prf_char_inf chars[ANCC_CHAR_MAX];
|
||
|
|
||
|
/// Descriptor handles:
|
||
|
/// - Notification Source Client Char Cfg
|
||
|
/// - Data Source Client Char Cfg
|
||
|
struct prf_char_desc_inf descs[ANCC_DESC_MAX];
|
||
|
};
|
||
|
|
||
|
struct ancc_cnx_env
|
||
|
{
|
||
|
/// Current Operation
|
||
|
void *operation;
|
||
|
|
||
|
/// Provide an indication about the last operation
|
||
|
uint16_t last_req;
|
||
|
/// Last characteristic code discovered
|
||
|
uint8_t last_char_code;
|
||
|
/// Counter used to check service uniqueness
|
||
|
uint8_t nb_svc;
|
||
|
|
||
|
/// ANCS Characteristics
|
||
|
struct ancc_anc_content anc;
|
||
|
};
|
||
|
|
||
|
/// ANCS Client environment variable
|
||
|
struct ancc_env_tag
|
||
|
{
|
||
|
/// profile environment
|
||
|
prf_env_t prf_env;
|
||
|
|
||
|
// TODO(jkessinger): Is this safe? Reliable? WTF?
|
||
|
uint16_t last_write_handle[ANCC_IDX_MAX];
|
||
|
/// Environment variable pointer for each connections
|
||
|
struct ancc_cnx_env* env[ANCC_IDX_MAX];
|
||
|
/// State of different task instances
|
||
|
ke_state_t state[ANCC_IDX_MAX];
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
* GLOBAL VARIABLE DEFINITIONS
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
****************************************************************************************
|
||
|
* @brief Retrieve ANCS client profile interface
|
||
|
*
|
||
|
* @return ANCS client profile interface
|
||
|
****************************************************************************************
|
||
|
*/
|
||
|
const struct prf_task_cbs* ancc_prf_itf_get(void);
|
||
|
void ancc_enable_rsp_send(struct ancc_env_tag *ancc_env, uint8_t conidx, uint8_t status);
|
||
|
void ancc_task_init(struct ke_task_desc *task_desc);
|
||
|
|
||
|
#endif //(BLE_ANC_CLIENT)
|
||
|
|
||
|
/// @} ANCC
|
||
|
|
||
|
#endif //(_ANCC_H_)
|