1 #ifndef _MCU_AUDIO_H_
2 #define _MCU_AUDIO_H_
3 
4 #include "aud_dump.h"
5 
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 
10 #define NON_EXP_ALIGN(val, exp)         (((val) + ((exp) - 1)) / (exp) * (exp))
11 
12 #define AF_DMA_LIST_CNT                 4
13 
14 #ifndef MIC_SAMPLERATE
15 #define MIC_SAMPLERATE                  16000//AUD_SAMPRATE_16000
16 #endif
17 #ifndef MIC_PERIOD_MS
18 #define MIC_PERIOD_MS                   64
19 #endif
20 #ifndef MIC_BITS
21 #define MIC_BITS                        16
22 #endif
23 
24 #ifndef CHAN_NUM_CAPTURE
25 #define CHAN_NUM_CAPTURE                3//2
26 #define CHAN_CAPTURE_MIC1               1
27 #define CHAN_CAPTURE_MIC2               2
28 #define CHAN_CAPTURE_REF1               0
29 #define CHAN_CAPTURE_NULL               -1
30 #endif
31 
32 #define CHAN_SEP_BUF_CAPTURE            false//true
33 
34 #define STREAM_DEVICE                   AUD_STREAM_USE_INT_CODEC
35 
36 #define TX_BUFF_ALIGN                   (4 * AF_DMA_LIST_CNT)
37 #define RX_BURST_NUM                    4
38 #define RX_ALL_CH_DMA_BURST_SIZE        (RX_BURST_NUM * 2 * CHAN_NUM_CAPTURE)
39 #define RX_BUFF_ALIGN                   (RX_ALL_CH_DMA_BURST_SIZE * AF_DMA_LIST_CNT)
40 
41 #define PLAYBACK_FRAME_SIZE             ((MIC_SAMPLERATE/1000) * 2 * 1) //16bit, 1ch per ms
42 #define CAPTURE_FRAME_SIZE              ((MIC_SAMPLERATE/1000) * 2 * CHAN_NUM_CAPTURE) //16bit, CHAN_NUM_CAPTURE per ms
43 
44 #define PLAYBACK_SIZE                   NON_EXP_ALIGN(PLAYBACK_FRAME_SIZE * MIC_PERIOD_MS, TX_BUFF_ALIGN)
45 #define _CAPTURE_SIZE                   NON_EXP_ALIGN(CAPTURE_FRAME_SIZE * MIC_PERIOD_MS, RX_BUFF_ALIGN)
46 
47 #define KFIFO_CAPTURE_SIZE              (128*1024)
48 
49 
50 #define _MULTI_RECORD_SUPPORT // external algorithm, so just keep recording
51 /* 1:before m33->a7, 2:a7 received */
52 #ifdef RTOS
53 #define _MULTI_RECORD_DUMP_POINT        1
54 #endif
55 
56 #if !defined(DSP_RAM_SHARE_SIZE) && !defined(DSP_SRAM_SOLO)
57 #define A7_ALLOC_TRANSQ_BUF
58 #endif
59 
60 #ifdef __ARM_ARCH_ISA_ARM
61 #define A7_RECORD_DIRECT_CB // mic irq to cb directly
62 #endif
63 
64 extern unsigned char *_a7_dsp_heap_alloc(char *func, int line, int size);
65 #define a7_dsp_heap_alloc(size) _a7_dsp_heap_alloc((char *)__FUNCTION__, __LINE__, size)
66 
67 void aud_record_subscribe(aud_dump_cb_t cbf, void *param);
68 void aud_record_unsubscribe(aud_dump_cb_t cbf, void *param);
69 
70 void mcu_cmd_send(A7_CMD_T *cmd);
71 
72 typedef void (*mcu_audiodump_cb_t)(aud_dump_cb_t cbf, void *param);
73 void mcu_audiodump_register(char *pattern, mcu_audiodump_cb_t register_cb, mcu_audiodump_cb_t unregister_cb, int channels, int buf_KB, int timeout);
74 void mcu_audiodump_unregister(char *pattern);
75 
76 void mcu_audio_task_init(void);
77 
78 void mic_set_samplerate(int mic_samplerate);
79 int mic_get_samplerate();
80 #define MIC_BITRATE mic_get_samplerate()
81 void mic_set_period(int mic_period_ms);
82 int mic_get_period();
83 #define CAPTURE_PERIOD_MS mic_get_period()
84 #define CAPTURE_SIZE NON_EXP_ALIGN(((MIC_BITRATE/1000) * 2 * CHAN_NUM_CAPTURE) * CAPTURE_PERIOD_MS, RX_BUFF_ALIGN)
85 #define RECORD_CHAN_SIZE (CAPTURE_SIZE>>1)
86 
87 void audio_dump_a7_cb_register(aud_dump_cb_t cbf, void *param);
88 void audio_dump_a7_cb_unregister(aud_dump_cb_t cbf, void *param);
89 
90 typedef void (*mcu_record_pre_handler)(uint8_t *buf, uint32_t len);
91 void mcu_record_pre_handler_set(mcu_record_pre_handler handler);
92 void enable_a7_kws(int enable);
93 
94 void a7_to_m33_aud_subscribe(aud_dump_cb_t cbf, void *param);
95 void a7_to_m33_aud_unsubscribe(aud_dump_cb_t cbf, void *param);
96 
97 #ifdef __cplusplus
98 }
99 #endif
100 
101 #endif /* _MCU_AUDIO_H_ */
102