182 lines
4.4 KiB
C
182 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_)
|