228 lines
6.3 KiB
C
Raw Normal View History

2025-11-25 10:21:47 +08:00
/**
*****************************************************************************************
* Copyright(c) 2015, Realtek Semiconductor Corporation. All rights reserved.
*****************************************************************************************
* @file atvv_service.h
* @brief Head file for using ATV voice service.
* @details ATVV data structs and external functions declaration.
* @author Chenjie Jin
* @date 2017-12-8
* @version v0.1
* *************************************************************************************
*/
/* Define to prevent recursive inclusion */
#ifndef _ATVV_H_
#define _ATVV_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Add Includes here */
#include "profile_server.h"
/** @defgroup ATVV ATV Voice Service
* @brief ATV voice service
* @{
*/
/** @defgroup ATVV_Exported_Constants ATVV Exported Constants
* @brief macros that other .c files may use all defined here
* @{
*/
///@cond
#define ATVV_VERSION_1_0 0x0100
#define ATVV_VERSION_0_4 0x0004
#define ATTV_CODEC_MASK_8K_ADPCM 0x0001
#define ATTV_CODEC_MASK_16K_ADPCM 0x0002
#define ATTV_CODEC_MASK_OPUS 0x0004
#define ATVV_CHAR_RX_DATA_LEN 20
#define ATVV_CHAR_CTL_DATA_LEN 20
#define ATVV_CHAR_WRITE_DATA_LEN 20
/** @brief ATVV related services UUIDs */
#define GATT_UUID_ATV_CHAR_TX 0x64, 0xB6, 0x17, 0xF6, 0x01, 0xAF, 0x7D, 0xBC, 0x05, 0x4F, 0x21, 0x5A, 0x02, 0x00, 0x5E, 0xAB
#define GATT_UUID_ATV_CHAR_RX 0x64, 0xB6, 0x17, 0xF6, 0x01, 0xAF, 0x7D, 0xBC, 0x05, 0x4F, 0x21, 0x5A, 0x03, 0x00, 0x5E, 0xAB
#define GATT_UUID_ATV_CHAR_CTL 0x64, 0xB6, 0x17, 0xF6, 0x01, 0xAF, 0x7D, 0xBC, 0x05, 0x4F, 0x21, 0x5A, 0x04, 0x00, 0x5E, 0xAB
/** @brief Index defines for Characteristic's value */
#define GATT_SVC_ATVV_CHAR_TX_VALUE_INDEX 2
#define GATT_SVC_ATVV_CHAR_RX_VALUE_INDEX 4
#define GATT_SVC_ATVV_CHAR_RX_CCCD_INDEX 5
#define GATT_SVC_ATVV_CHAR_CTL_VALUE_INDEX 7
#define GATT_SVC_ATVV_CHAR_CTL_CCCD_INDEX 8
///@endcond
/** @} End of ATVV_Exported_Constants */
/** @defgroup ATVV_Exported_Types IAS Exported Types
* @brief types that other .c files may use all defined here
* @{
*/
/* Add all public types here */
/** @defgroup ATVV_Callback_Data ATTB Callback Data
* @brief ATVV data struct for notification data to application.
* @{
*/
/** @defgroup ATVV_Read_Info ATVV Read Info
* @brief Parameter for read characteristic value.
* @{
*/
#define ATVV_READ_CHAR_RX_INDEX 1
#define ATVV_READ_CHAR_CTL_INDEX 2
/** @} */
/** @defgroup ATVV_Write_Info ATVV Write Info
* @brief Parameter for write characteristic value.
* @{
*/
#define ATVV_WRITE_CHAR_TX_INDEX 1
/** @} */
/** @defgroup ATVV_Notify_Indicate_Info ATVV Notify Indicate Info
* @brief Parameter for enable or disable notification or indication.
* @{
*/
#define ATVV_CHAR_RX_NOTIFY_ENABLE 1
#define ATVV_CHAR_RX_NOTIFY_DISABLE 2
#define ATVV_CHAR_CTL_NOTIFY_ENABLE 3
#define ATVV_CHAR_CTL_NOTIFY_DISABLE 4
/** @defgroup ATT MTU zie and Date length extantion
* @brief GATT client negotiate ATT MTU and send DLE
* @{
*/
#define ATVV_DLE_AND_MTU_UPDATE_DISABLE 0
#define ATVV_DLE_ENABLE_MTU_SIZE_UPDATE 1
/** Message content */
typedef union
{
struct
{
uint8_t len;
uint8_t *report;
} report_data;
} T_ATVV_WRITE_PARAMETER;
/** @struct _TATVV_WRITE_MSG
* @brief write message
*/
typedef struct
{
uint8_t write_type; /**< ref: @ref ATVV_RmC_Write_Info */
T_ATVV_WRITE_PARAMETER write_parameter;
} T_ATVV_WRITE_MSG;
typedef union _TATVV_UPSTREAM_MSG_DATA
{
uint8_t notification_indification_index; /**< ref: @ref ATVV_RmC_Notify_Indicate_Info */
uint8_t read_value_index; /**< ref: @ref ATVV_RmC_Read_Info */
T_ATVV_WRITE_MSG write;
} T_ATVV_UPSTREAM_MSG_DATA;
/** ATVV service data to inform application */
typedef struct
{
uint8_t conn_id;
T_SERVICE_CALLBACK_TYPE msg_type;
T_ATVV_UPSTREAM_MSG_DATA msg_data;
} T_ATVV_CALLBACK_DATA;
/** @} */
typedef enum
{
ATV_TX_OPCODE_GET_CAPS = 0x0A,
ATV_TX_OPCODE_MIC_OPEN = 0x0C,
ATV_TX_OPCODE_MIC_CLOSE = 0x0D,
ATV_TX_OPCODE_EXTEND = 0x0E,
} ATV_CHAR_TX_OPCODE;
#define ATV_TX_OPCODE_GET_CAPS_LEN 5
#define ATV_TX_OPCODE_MIC_OPEN_LEN 5
typedef enum
{
ATV_CTL_OPCODE_AUDIO_STOP = 0x00,
ATV_CTL_OPCODE_AUDIO_START = 0x04,
ATV_CTL_OPCODE_DPAD_SELECT = 0x07,
ATV_CTL_OPCODE_START_SEARCH = 0x08,
ATV_CTL_OPCODE_AUDIO_SYNC = 0x0A,
ATV_CTL_OPCODE_GET_CAPS_RESP = 0x0B,
ATV_CTL_OPCODE_MIC_OPEN_ERROR = 0x0C,
} ATV_CHAR_CTL_CMD_OPCODE;
typedef enum
{
ATV_START_REASON_MIC_OPEN_REQUEST = 0x00,
ATV_START_REASON_PTT = 0x01,
ATV_START_REASON_HTT = 0x03,
ATV_START_REASON_INVALID = 0xFF
} ATV_AUDIO_START_REASON;
typedef enum
{
ATV_STOP_REASON_MIC_CLOSE_MESSAGE = 0x00,
ATV_STOP_REASON_HTT = 0x02,
ATV_STOP_REASON_AUDIO_START_COMMAND = 0x04,
ATV_STOP_REASON_AUDIO_TRANSFER_TIMEOUT = 0x08,
ATV_STOP_REASON_ATVV_CHAR_AUDIO_DISABLE = 0x10,
ATV_STOP_REASON_OTHERS = 0x80,
} ATV_AUDIO_STOP_REASON;
typedef enum
{
ATV_MIC_OPEN_ERROR_RESERVED = 0x0f01,
ATV_MIC_OPEN_ERROR_REMOTE_IS_NOT_ACTIVE = 0x0f02,
ATV_MIC_OPEN_ERROR_ATVV_CHAR_AUDIO_IS_DISABLE = 0x0f03,
ATV_MIC_OPEN_ERROR_PTT_HTT_IS_IN_PROGRESS = 0x0f80,
ATV_MIC_OPEN_ERROR_INTERNAL_ERROR = 0x0fff,
} ATV_MIC_OPEN_ERROR;
typedef enum
{
ATV_ASSISTANT_INTERACTION_MODEL_ON_REQUEST = 0x00,
ATV_ASSISTANT_INTERACTION_MODEL_PRESS_TO_TALK = 0x01,
ATV_ASSISTANT_INTERACTION_MODEL_HOLD_TO_TALK = 0x03,
} ATV_ASSISTANT_INTERACTION_MODEL;
/** @} End of IAS_Exported_Types */
typedef struct
{
uint16_t app_support_version;
uint16_t codec_support;
uint16_t codec_used;
uint8_t atv_start_reason;
uint8_t assistant_interaction_model;
uint8_t audio_consumption_mode;
uint8_t stream_id;
uint8_t char_rx_data_buff[ATVV_CHAR_RX_DATA_LEN];
uint8_t char_ctl_data_buff[ATVV_CHAR_RX_DATA_LEN];
uint8_t char_write_dat_buff[ATVV_CHAR_WRITE_DATA_LEN];
} T_ATVV_GLOBAL_DATA;
extern T_ATVV_GLOBAL_DATA atvv_global_data;
/** @defgroup ATVV_Exported_Functions IAS Exported Functions
* @brief functions that other .c files may use all defined here.
* @{
*/
uint8_t atvv_add_service(void *p_func);
/** @} End of ATVV_Exported_Functions */
/** @} End of ATVV */
#endif /* (VOICE_FLOW_SEL == ATV_GOOGLE_VOICE_FLOW) */
#ifdef __cplusplus
}
#endif /* __cplusplus */