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

181 lines
4.4 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 _AMSC_H_
#define _AMSC_H_
/**
****************************************************************************************
* @addtogroup AMSC.
* @ingroup AMS
* @brief AMS - Client Role.
* @{
****************************************************************************************
*/
/*
* INCLUDE FILES
****************************************************************************************
*/
#include "ams_common.h"
#if (BLE_AMS_CLIENT)
#include "ke_task.h"
#include "prf_types.h"
#include "prf_utils.h"
#include "prf_utils_128.h"
/*
* DEFINES
****************************************************************************************
*/
/// Maximum number of AMSC task instances
#define AMSC_IDX_MAX (BLE_CONNECTION_MAX)
/*
* ENUMERATIONS
****************************************************************************************
*/
/// Possible states of the amsc task
enum amsc_states
{
/// Idle state
AMSC_FREE,
/// Connected state
AMSC_IDLE,
/// Discovery
AMSC_DISCOVERING,
/// Number of defined states.
AMSC_STATE_MAX
};
/// AMS Characteristics
enum amsc_chars
{
/// Remote Command
AMSC_REMOTE_COMMAND_CHAR = 0,
/// Entity Update
AMSC_ENTITY_UPDATE_CHAR,
/// Entity Attribute
AMSC_ENTITY_ATTRIBUTE_CHAR,
/// Number of defined states.
AMSC_CHAR_MAX,
};
/// AMS Characteristic Descriptors
enum amsc_descs
{
/// Remote Command - Client Characteristic Configuration
AMSC_DESC_REMOTE_CMD_CL_CFG,
/// Entity Update - Client Characteristic Configuration
AMSC_DESC_ENTITY_UPDATE_CL_CFG,
AMSC_DESC_MAX,
AMSC_DESC_MASK = 0x10,
};
/// Pointer to the connection clean-up function
#define AMSC_CLEANUP_FNCT (amsc_cleanup)
#define AMSC_INVALID_STATE 0xA0
#define AMSC_INVALID_COMMAND 0xA1
#define AMSC_ABSENT_ATTRIBUTE 0xA2
/*
* STRUCTURES
****************************************************************************************
*/
/**
* Structure containing the characteristics handles, value handles and descriptors for
* the Apple Media Service
*/
struct amsc_ams_content
{
/// Service info
struct prf_svc svc;
/// Characteristic info:
/// - Remote Command
/// - Entity Update
/// - Entity Attribute
struct prf_char_inf chars[AMSC_CHAR_MAX];
/// Descriptor handles:
/// - Remote Command Client Char Cfg
/// - Entity Update Client Char Cfg
struct prf_char_desc_inf descs[AMSC_DESC_MAX];
};
struct amsc_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;
/// AMS Characteristics
struct amsc_ams_content ams;
};
/// AMS Client environment variable
struct amsc_env_tag
{
/// profile environment
prf_env_t prf_env;
// TODO(jkessinger): Verify this will work).
uint16_t last_write_handle[AMSC_IDX_MAX];
/// Environment variable pointer for each connections
struct amsc_cnx_env* env[AMSC_IDX_MAX];
/// State of different task instances
ke_state_t state[AMSC_IDX_MAX];
};
/*
* GLOBAL VARIABLE DEFINITIONS
****************************************************************************************
*/
/**
****************************************************************************************
* @brief Retrieve AMS client profile interface
*
* @return AMS client profile interface
****************************************************************************************
*/
const struct prf_task_cbs* amsc_prf_itf_get(void);
void amsc_enable_rsp_send(struct amsc_env_tag *amsc_env, uint8_t conidx, uint8_t status);
void amsc_task_init(struct ke_task_desc *task_desc);
#endif //(BLE_AMS_CLIENT)
/// @} AMSC
#endif //(_AMSC_H_)