1 #ifndef __AUDIO_PROMPT_SBC_H__
2 #define __AUDIO_PROMPT_SBC_H__
3 #include "stdint.h"
4 #include "cqueue.h"
5 #include "codec_sbc.h"
6 
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10 
11 #define MIX_WITH_A2DP_STREAMING  0
12 #define MIX_WITH_SCO_STREAMING   1
13 
14 #define PENDING_TO_STOP_A2DP_STREAMING  0
15 #define PENDING_TO_STOP_SCO_STREAMING   1
16 #define PENDING_TO_STOP_STREAM_INVALID  (0xFF)
17 
18 typedef struct
19 {
20     uint8_t    channelCnt;
21     uint8_t    channelMode;
22     uint8_t    bitPool;
23     uint8_t    sizePerSample;
24     uint8_t    sampleRate;
25     uint8_t    numBlocks;
26     uint8_t    numSubBands;
27     uint8_t    mSbcFlag;
28     uint8_t    allocMethod;
29 } AUDIO_PROMPT_SBC_CONFIG_T;
30 
31 #ifdef TWS_PROMPT_SYNC
32 typedef struct {
33     uint16_t promptId;
34     uint32_t sampleRate;
35     uint32_t trigger_time;
36 }APP_TWS_CMD_MIX_PROMPT_SYNC_T;
37 
38 #endif
39 
40 typedef struct
41 {
42     uint8_t                 dev_id;
43     uint16_t                voicePrompt;
44 } app_tws_voice_prompt_to_play_t;
45 
46 #define IS_IGNORME_SBC_FRAME_HEADER             (1)
47 #define AUDIO_PROMPT_SBC_FRAME_HEADER_LEN       (4)
48 
49 #define AUDIO_PROMPT_SBC_CHANNEL_COUNT          (1)
50 #define AUDIO_PROMPT_SBC_CHANNEL_MODE           (BTIF_SBC_CHNL_MODE_MONO)
51 
52 #define AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE     (512)
53 #define AUDIO_PROMPT_TARGET_PCM_BUFFER_SIZE     (AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE*2)
54 #define AUDIO_PROMPT_PCM_BUFFER_SIZE            (AUDIO_PROMPT_SOURCE_PCM_BUFFER_SIZE*4)
55 
56 #define AUDIO_PROMPT_SBC_BLOCK_SIZE             40
57 #define AUDIO_PROMPT_SBC_SIZE_PER_SAMPLE        (2)// 16 bits, 1 channel
58 
59 
60 #define AUDIO_PROMPT_SBC_SAMPLE_RATE_VALUE      16000
61 
62 #define AUDIO_PROMPT_SBC_FRAME_PERIOD_IN_MS     (24)
63 
64 #define AUDIO_PROMPT_SBC_PCM_DATA_SIZE_PER_FRAME        256
65 
66 #define AUDIO_PROMPT_PCM_FILL_UNIT_SIZE                 (AUDIO_PROMPT_SBC_PCM_DATA_SIZE_PER_FRAME*2)
67 
68 #define AUDIO_PROMPT_SBC_ENCODED_DATA_SIZE_PER_FRAME    (AUDIO_PROMPT_SBC_BLOCK_SIZE*4)
69 
70 #define AUDIO_PROMPT_BUF_SIZE_FOR_RESAMPLER             800
71 
72 uint32_t audio_prompt_sbc_get_frame_len(void);
73 void audio_prompt_init_handler(void);
74 bool audio_prompt_is_playing_ongoing(void);
75 void audio_prompt_buffer_config(uint8_t mixType, uint8_t channel_cnt,
76     uint8_t bitNumPerSample, uint8_t* tmpSourcePcmDataBuf, uint8_t* tmpTargetPcmDataBuf,
77     uint8_t* pcmDataBuf, uint32_t pcmBufLen, uint8_t* bufForResampler);
78 
79 bool audio_prompt_start_playing(uint16_t promptId, uint32_t targetSampleRate);
80 
81 void audio_prompt_stop_playing(void);
82 void audio_prompt_processing_handler(uint32_t acquiredPcmDataLen,
83     uint8_t* pcmDataToMerge);
84 bool audio_prompt_check_on_stopping_stream(uint8_t pendingStopOp, uint8_t deviceId);
85 
86 void audio_prompt_forcefully_stop(void);
87 
88 bool audio_prompt_is_allow_update_volume(void);
89 
90 uint16_t audio_prompt_get_prompt_id(void);
91 uint32_t audio_prompt_get_sample_rate(void);
92 
93 #ifdef TWS_PROMPT_SYNC
94 void app_tws_cmd_sync_mix_prompt_req_handler(uint8_t* ptrParam, uint16_t paramLen);
95 #endif
96 void app_tws_cmd_prompt_play_req_handler(uint8_t *ptrParam, uint32_t paramLen);
97 
98 void app_tws_let_peer_device_play_audio_prompt(uint16_t promptId,
99     uint8_t dev_id);
100 
101 bool audio_prompt_clear_pending_stream(uint8_t op);
102 
103 #ifdef __cplusplus
104 }
105 #endif
106 
107 #endif	// __AUDIO_PROMPT_SBC_H__
108 
109