[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit
Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/lib/libtinyalsa/tinyalsa_voice_ref.c b/ap/lib/libtinyalsa/tinyalsa_voice_ref.c
new file mode 100644
index 0000000..3e4923b
--- /dev/null
+++ b/ap/lib/libtinyalsa/tinyalsa_voice_ref.c
@@ -0,0 +1,122 @@
+/*
+ *
+ * Based on 7510_dev.c
+ *
+ */
+
+#include <tinyalsa/audio_mixer_ctrl.h>
+
+
+struct pcm *voicePcmOut = NULL;
+struct pcm *voicePcmIn = NULL;
+
+typedef struct
+{
+ // uint32_t voice_mode;//0, 2/3g;1, volte nb;2 ,volte wb;
+ uint32_t clock_rate; //8000, 2/3g;8000, volte nb;16000 ,volte wb;
+ uint32_t channel_count;
+ uint32_t samples_per_frame;//160, 2/3g;160, volte nb;320 ,volte wb;
+ uint32_t bits_per_sample;
+} T_voiceCfg;
+
+T_voiceCfg cfgParam = {0,8000,1,160,16};
+
+
+
+
+ int voice_PreOpen(T_voiceCfg *cfgParam)
+{
+ struct mixer *voice_mixer = NULL;
+ struct pcm_config config_voice = {0};
+
+ /* open mixer dev for codec control */
+ voice_mixer = mixer_open(0);
+ if(!voice_mixer)
+ {
+ printf("zte voice_mixer open failed!");
+ goto err_ret;
+ }
+
+ /* config mixer dev */
+ mix_set_voice_path(voice_mixer, T_OUTPUT_SPEAKER);
+ mix_set_voice_vol(voice_mixer, T_VOICE_VOL_3_LEVEL);
+
+ /*close mixer */
+ mixer_close(voice_mixer);
+ voice_mixer = NULL;
+
+ /* open pcm dev for data tranf*/
+ config_voice.channels = cfgParam->channel_count;
+ config_voice.rate = cfgParam->clock_rate;
+ /* buffer num */
+ config_voice.period_count = 3;
+ /* buffer size */
+ config_voice.period_size = cfgParam->samples_per_frame * cfgParam->bits_per_sample / 8;
+ /* 16-bit signed */
+ config_voice.format = PCM_FORMAT_S16_LE;
+
+ //card 0 dev 1
+ //23G card 0 dev 2
+ voicePcmOut = pcm_open(0, 1, PCM_OUT, &config_voice);
+ if(!voicePcmOut || !pcm_is_ready(voicePcmOut))
+ {
+ printf( "zte voicePcmOut open failed!");
+ goto err_ret;
+ }
+
+ voicePcmIn = pcm_open(0, 1, PCM_IN, &config_voice);
+ if(!voicePcmIn || !pcm_is_ready(voicePcmIn))
+ {
+ printf( "zte voicePcmIn open failed!");
+ goto err_ret;
+ }
+
+ if(0 != pcm_prepare(voicePcmOut))
+ {
+ printf("zte voicePcmOut pcm_prepare failed!");
+ goto err_ret;
+ }
+
+ if(0 != pcm_prepare(voicePcmIn))
+ {
+ printf("zte voicePcmIn pcm_prepare failed!");
+ goto err_ret;
+ }
+ return 0;
+err_ret:
+ if(voice_mixer)
+ {
+ mixer_close(voice_mixer);
+ voice_mixer = NULL;
+ }
+
+ if(voicePcmOut)
+ {
+ pcm_close(voicePcmOut);
+ voicePcmOut = NULL;
+ }
+ if(voicePcmIn)
+ {
+ pcm_close(voicePcmIn);
+ voicePcmIn = NULL;
+ }
+ return -1;
+
+}
+
+
+ void voice_PreClose(void)
+{
+ if(voicePcmOut)
+ {
+ pcm_close(voicePcmOut);
+ voicePcmOut = NULL;
+ }
+ if(voicePcmIn)
+ {
+ pcm_close(voicePcmIn);
+ voicePcmIn = NULL;
+ }
+}
+
+