pinebuds/services/ble_profiles/anc/ancc/ancc.h
2022-08-15 17:20:27 +08:00

175 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_)