102 lines
4.0 KiB
C
Raw Normal View History

2025-11-25 10:21:47 +08:00
#ifndef _CODEC_QOS_H_
#define _CODEC_QOS_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include "ble_audio_def.h"
#include "codec_def.h"
typedef enum
{
CODEC_CFG_ITEM_8_1 = 0,
CODEC_CFG_ITEM_8_2 = 1,
CODEC_CFG_ITEM_16_1 = 2,
CODEC_CFG_ITEM_16_2 = 3,
CODEC_CFG_ITEM_24_1 = 4,
CODEC_CFG_ITEM_24_2 = 5,
CODEC_CFG_ITEM_32_1 = 6,
CODEC_CFG_ITEM_32_2 = 7,
CODEC_CFG_ITEM_441_1 = 8,
CODEC_CFG_ITEM_441_2 = 9,
CODEC_CFG_ITEM_48_1 = 10,
CODEC_CFG_ITEM_48_2 = 11,
CODEC_CFG_ITEM_48_3 = 12,
CODEC_CFG_ITEM_48_4 = 13,
CODEC_CFG_ITEM_48_5 = 14,
CODEC_CFG_ITEM_48_6 = 15,
CODEC_CFG_ITEM_LC3_MAX,
CODEC_CFG_ITEM_VENDOR = 0xff,
} T_CODEC_CFG_ITEM;
#define CODEC_CFG_ITEM_8_1_BIT (1 << CODEC_CFG_ITEM_8_1)
#define CODEC_CFG_ITEM_8_2_BIT (1 << CODEC_CFG_ITEM_8_2)
#define CODEC_CFG_ITEM_16_1_BIT (1 << CODEC_CFG_ITEM_16_1)
#define CODEC_CFG_ITEM_16_2_BIT (1 << CODEC_CFG_ITEM_16_2)
#define CODEC_CFG_ITEM_24_1_BIT (1 << CODEC_CFG_ITEM_24_1)
#define CODEC_CFG_ITEM_24_2_BIT (1 << CODEC_CFG_ITEM_24_2)
#define CODEC_CFG_ITEM_32_1_BIT (1 << CODEC_CFG_ITEM_32_1)
#define CODEC_CFG_ITEM_32_2_BIT (1 << CODEC_CFG_ITEM_32_2)
#define CODEC_CFG_ITEM_441_1_BIT (1 << CODEC_CFG_ITEM_441_1)
#define CODEC_CFG_ITEM_441_2_BIT (1 << CODEC_CFG_ITEM_441_2)
#define CODEC_CFG_ITEM_48_1_BIT (1 << CODEC_CFG_ITEM_48_1)
#define CODEC_CFG_ITEM_48_2_BIT (1 << CODEC_CFG_ITEM_48_2)
#define CODEC_CFG_ITEM_48_3_BIT (1 << CODEC_CFG_ITEM_48_3)
#define CODEC_CFG_ITEM_48_4_BIT (1 << CODEC_CFG_ITEM_48_4)
#define CODEC_CFG_ITEM_48_5_BIT (1 << CODEC_CFG_ITEM_48_5)
#define CODEC_CFG_ITEM_48_6_BIT (1 << CODEC_CFG_ITEM_48_6)
#define SAMPLE_FREQ_8K_TABLE_MASK (CODEC_CFG_ITEM_8_1_BIT|CODEC_CFG_ITEM_8_2_BIT)
#define SAMPLE_FREQ_16K_TABLE_MASK (CODEC_CFG_ITEM_16_1_BIT|CODEC_CFG_ITEM_16_2_BIT)
#define SAMPLE_FREQ_24K_TABLE_MASK (CODEC_CFG_ITEM_24_1_BIT|CODEC_CFG_ITEM_24_2_BIT)
#define SAMPLE_FREQ_32K_TABLE_MASK (CODEC_CFG_ITEM_32_1_BIT|CODEC_CFG_ITEM_32_2_BIT)
#define SAMPLE_FREQ_441K_TABLE_MASK (CODEC_CFG_ITEM_441_1_BIT|CODEC_CFG_ITEM_441_2_BIT)
#define SAMPLE_FREQ_48K_TABLE_MASK (CODEC_CFG_ITEM_48_1_BIT|CODEC_CFG_ITEM_48_2_BIT| \
CODEC_CFG_ITEM_48_3_BIT|CODEC_CFG_ITEM_48_4_BIT| \
CODEC_CFG_ITEM_48_5_BIT|CODEC_CFG_ITEM_48_6_BIT)
#define FREAM_DUIATION_7_5M_TALBLE_MASK (CODEC_CFG_ITEM_8_1_BIT|CODEC_CFG_ITEM_16_1_BIT| \
CODEC_CFG_ITEM_24_1_BIT|CODEC_CFG_ITEM_32_1_BIT| \
CODEC_CFG_ITEM_441_1_BIT|CODEC_CFG_ITEM_48_1_BIT| \
CODEC_CFG_ITEM_48_3_BIT|CODEC_CFG_ITEM_48_5_BIT)
#define FREAM_DUIATION_10M_TALBLE_MASK (CODEC_CFG_ITEM_8_2_BIT|CODEC_CFG_ITEM_16_2_BIT| \
CODEC_CFG_ITEM_24_2_BIT|CODEC_CFG_ITEM_32_2_BIT| \
CODEC_CFG_ITEM_441_2_BIT|CODEC_CFG_ITEM_48_2_BIT| \
CODEC_CFG_ITEM_48_4_BIT|CODEC_CFG_ITEM_48_6_BIT)
typedef enum
{
QOS_CFG_CIS_LOW_LATENCY,
QOS_CFG_CIS_HIG_RELIABILITY,
QOS_CFG_BIS_LOW_LATENCY,
QOS_CFG_BIS_HIG_RELIABILITY,
} T_QOS_CFG_TYPE;
typedef struct
{
uint32_t sdu_interval;
uint8_t framing;
uint16_t max_sdu;
uint8_t retransmission_number;
uint16_t max_transport_latency;
uint32_t presentation_delay;
} T_QOS_CFG_PREFERRED;
bool codec_preferred_cfg_get(T_CODEC_CFG_ITEM item, T_CODEC_CFG *p_cfg);
bool qos_preferred_cfg_get(T_CODEC_CFG_ITEM item, T_QOS_CFG_TYPE type, T_QOS_CFG_PREFERRED *p_qos);
bool qos_cfg_find_by_codec_cfg(T_CODEC_CFG *p_cfg, uint8_t target_latency,
T_QOS_CFG_PREFERRED *p_qos);
bool get_max_sdu_len_by_codec_cfg(T_CODEC_CFG *p_cfg, uint16_t *p_max_len);
bool get_sdu_interval_by_codec_cfg(T_CODEC_CFG *p_cfg, uint32_t *p_sdu_int);
bool codec_cap_get_cfg_bits(uint32_t *p_cfg_bits, T_CODEC_CAP *p_cap);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif