diff --git a/ap/lib/libvoice/voice.c b/ap/lib/libvoice/voice.c
index 61b9c1e..6af0fa6 100755
--- a/ap/lib/libvoice/voice.c
+++ b/ap/lib/libvoice/voice.c
@@ -167,7 +167,7 @@
 	}
 	ret = ioctl(fd, VOICE_IOCTL_VPLOOP, path);
 	if (ret) {
-		printf("voice_Vploop:  ret=%d,path=%p.\n", ret, path);
+		printf("voice_Vploop:  ret=%d,path=%d.\n", ret, *path);
 		close(fd);
 		return  -1;
 	}
@@ -224,18 +224,20 @@
 		}
 	}
 #if defined(_VBUFF_IN_SINGLE_CORE) || defined(_VBUFF_IN_MULTI_CORE)
-	printf("%s: use voice buffer,return!\n",__func__); 
+	printf("%s: ap use voice buffer,return!\n",__func__); 
 	return 0;
 
 #endif	
 #if defined(_ALSA_CODEC_IN_CAP) && defined(_USE_ALSA_AT_INTF)
+	   printf("%s:_ALSA_CODEC_IN_CAP and at intf!\n",__func__);
 
    
-	   printf("%s: i2s and codec not need config,return!\n",__func__); 
+	   printf("%s:ap i2s and codec not need config,return!\n",__func__); 
 	   return 0;
 
 #elif defined(_ALSA_CODEC_IN_CAP)
 
+	   printf("%s:_ALSA_CODEC_IN_CAP!\n",__func__);
 
 	   if(cfgParam->clock_rate == 8000){
 
@@ -261,6 +263,7 @@
     
 #endif
 
+	printf("%s:ap do mixer and pcm opt!\n",__func__); 
 
 	//open mixer dev for codec control
 	voice_mixer = mixer_open(0);
@@ -390,6 +393,93 @@
 }
 
 
+int voice_SetVoiceProcess(int *vp)
+{
+	int ret = 0;
+	int fd = -1;
+	printf("%s:   start vp=%d!\n",__func__,*vp);
+	fd = open(VOICE_DEV_NAME, O_RDONLY);
+	if (fd < 0) {
+		printf("%s: open voice device error.\n",__func__);
+		return  -1;
+	}
+	ret = ioctl(fd, VOICE_IOCTL_SET_VP, vp);
+	if (ret) {
+		printf("%s:  ret=%d,vp=%d.\n",__func__, ret, *vp);
+		close(fd);
+		return  -1;
+	}
+	close(fd);
+	return 0;
+
+}
+int voice_GetVoiceProcess(void)
+{
+	int ret = 0;
+	int fd = -1;
+	int vp = 0;
+	fd = open(VOICE_DEV_NAME, O_RDONLY);
+	if (fd < 0) {
+		printf("%s: open voice device error.\n",__func__);
+		return  -1;
+	}
+	ret = ioctl(fd, VOICE_IOCTL_GET_VP, &vp);
+	if (ret) {
+		printf("%s:  ret=%d,vp=%d.\n",__func__, ret, vp);
+		close(fd);
+		return  -1;
+	}
+	close(fd);
+	printf("%s:  vp=%d!\n",__func__,vp);
+	
+	return vp;
+
+}
 
 
 
+
+int voice_SetVoiceBuffer(T_VoiceBuf_Para *vb)
+{
+	int ret = 0;
+	int fd = -1;
+	printf("%s:   start enable=%d,type=%d!\n",__func__,vb->enable,vb->type);
+	fd = open(VOICE_DEV_NAME, O_RDONLY);
+	if (fd < 0) {
+		printf("%s: open voice device error.\n",__func__);
+		return  -1;
+	}
+	ret = ioctl(fd, VOICE_IOCTL_SET_VBUF, vb);
+	if (ret) {
+		printf("%s:  ret=%d.\n",__func__, ret);
+		close(fd);
+		return  -1;
+	}
+	close(fd);
+	return 0;
+
+}
+
+int voice_GetVoiceBuffer(T_VoiceBuf_Para *vb)
+{
+	int ret = 0;
+	int fd = -1;
+	fd = open(VOICE_DEV_NAME, O_RDONLY);
+	if (fd < 0) {
+		printf("%s: open voice device error.\n",__func__);
+		return  -1;
+	}
+	ret = ioctl(fd, VOICE_IOCTL_GET_VBUF, vb);
+	if (ret) {
+		printf("%s: ret=%d.\n",__func__, ret);
+		close(fd);
+		return  -1;
+	}
+	close(fd);
+	printf("%s:   start fs=%d enable=%d,type=%d!\n",__func__,vb->fs,vb->enable,vb->type);
+	
+	
+	return ret;
+
+}
+
