blob: de88327a18dd11878b7834154ef2a9b04cb923f5 [file] [log] [blame]
#ifdef USE_CAP_SUPPORT
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include "voice_ipc.h"
#include "voice_lib.h"
#include "linux/rpmsg_zx29.h"
#include "softap_api.h"
#include "pthread.h"
extern int sc_audio_set_voice_device_mode(int dev_mode);
extern int sc_audio_get_voice_device_mode(int *p_dev_mode);
extern int sc_audio_set_rx_voice_vol(int vol);
extern int sc_audio_get_rx_voice_vol(int * p_vol);
extern int sc_audio_set_tx_voice_vol(int vol);
extern int sc_audio_get_tx_voice_vol(int *p_vol);
extern int sc_audio_set_tx_voice_mute_state(int mute );
extern int sc_audio_get_tx_voice_mute_state(int *p_mute);
extern int sc_audio_set_rx_voice_mute_state(int mute);
extern int sc_audio_get_rx_voice_mute_state(int *p_mute);
//extern int sc_audio_set_loopback_enable_state(int enable);
//extern int sc_audio_get_loopback_enable_state(int *p_enable);
int ap_audio_set_loopback_enable(int dev_mode,int enable);
int ap_audio_get_loopback_enable(int *p_enable);
static int voice_ipc_fd = -1;
static voice_ipc_control_msg voice_ctrl_recvmsg[IPC_VOICE_FUNC_MAX] = {0};
int cap_alsa_voice_open(int vmode)
{
int ret = 0;
int msg_handle = 0;
MSG_BUF msg;
LONG msg_size = sizeof(MSG_BUF)-sizeof(LONG);
int module_id = MODULE_ID_VOICE_CLIENT;
int dst_id = MODULE_ID_VOICE_SERVER;
int msg_cmd = MSG_CMD_CAP_VALSA_OPEN;
//´´½¨ÏûÏ¢¶ÓÁÐ
msg_handle = msgget(module_id, IPC_CREAT|0600);
//·¢ËÍÏûÏ¢
ret = ipc_send_message(module_id, dst_id, msg_cmd, sizeof(int), (unsigned char *)(&vmode), 0);
if(0 != ret){
printf("%s: send msg error(%d)!\n", __func__, ret);
msgctl(msg_handle,IPC_RMID,0);
return ret;
}
printf("%s: send msg success(%d)!\n", __func__, ret);
//½ÓÊÕÏûÏ¢
while(1)
{
memset(&msg, 0x00, sizeof(MSG_BUF));
//»ñÈ¡ÏûÏ¢¶ÓÁÐÏûÏ¢²¢´¦Àí
ret = msgrcv(msg_handle, &msg, msg_size, 0, 0);
if(0 > ret){
continue;
}
//Æ¥Åäµ½ÊÇMSG_CMD_CAP_VALSA_OPENʱ²Å´¦Àí
if(msg_cmd == msg.usMsgCmd){
ret = *((int *)msg.aucDataBuf);
msgctl(msg_handle,IPC_RMID,0);
printf("%s: receive msg success(%d)!\n", __func__, ret);
break;
}
}
return ret;
}
int cap_alsa_voice_close(int vmode)
{
int ret = 0;
int msg_handle = 0;
MSG_BUF msg;
LONG msg_size = sizeof(MSG_BUF)-sizeof(LONG);
int module_id = MODULE_ID_VOICE_CLIENT;
int dst_id = MODULE_ID_VOICE_SERVER;
int msg_cmd = MSG_CMD_CAP_VALSA_CLOSE;
//´´½¨ÏûÏ¢¶ÓÁÐ
msg_handle = msgget(module_id, IPC_CREAT|0600);
//·¢ËÍÏûÏ¢
ret = ipc_send_message(module_id, dst_id, msg_cmd, sizeof(int), (unsigned char *)(&vmode), 0);
if(0 != ret){
printf("%s: send msg error(%d)!\n", __func__, ret);
msgctl(msg_handle,IPC_RMID,0);
return ret;
}
printf("%s: send msg success(%d)!\n", __func__, ret);
//½ÓÊÕÏûÏ¢
while(1)
{
memset(&msg, 0x00, sizeof(MSG_BUF));
//»ñÈ¡ÏûÏ¢¶ÓÁÐÏûÏ¢²¢´¦Àí
ret = msgrcv(msg_handle, &msg, msg_size, 0, 0);
if(0 > ret){
continue;
}
//Æ¥Åäµ½ÊÇMSG_CMD_CAP_VALSA_CLOSEʱ²Å´¦Àí
if(msg_cmd == msg.usMsgCmd){
ret = *((int *)msg.aucDataBuf);
msgctl(msg_handle,IPC_RMID,0);
printf("%s: receive msg success(%d)!\n", __func__, ret);
break;
}
}
return ret;
}
int ipc_cap_alsa_voice_open(int vmode)
{
int ret = 0;
int func_id = IPC_CAP_ALSA_VOICE_OPEN;
voice_ctrl_recvmsg[func_id].func_id = VOICE_WAIT_MSG_FROM_CAP;
ret = Voice_Ctrl_Rpmsg_Send(func_id, &vmode);
if (0 >= ret){
printf("%s: Voice_Ctrl_Rpmsg_Send error, return %d!\n", __func__, ret);
return VOICEIPC_ERROR;
}
printf("%s: Voice_Ctrl_Rpmsg_Send success, write_len=%d!\n", __func__, ret);
while(func_id != voice_ctrl_recvmsg[func_id].func_id){
usleep(1);
}
memcpy(&ret, voice_ctrl_recvmsg[func_id].param, voice_ctrl_recvmsg[func_id].param_len);
printf("%s: ipc receive success, ret=%d!\n", __func__, ret);
return ret;
}
int ipc_cap_alsa_voice_close(int vmode)
{
int ret = 0;
int func_id = IPC_CAP_ALSA_VOICE_CLOSE;
voice_ctrl_recvmsg[func_id].func_id = VOICE_WAIT_MSG_FROM_CAP;
ret = Voice_Ctrl_Rpmsg_Send(func_id, &vmode);
if (0 >= ret){
printf("%s: Voice_Ctrl_Rpmsg_Send error, return %d!\n", __func__, ret);
return VOICEIPC_ERROR;
}
printf("%s: Voice_Ctrl_Rpmsg_Send success, write_len=%d!\n", __func__, ret);
while(func_id != voice_ctrl_recvmsg[func_id].func_id){
usleep(1);
}
memcpy(&ret, voice_ctrl_recvmsg[func_id].param, voice_ctrl_recvmsg[func_id].param_len);
printf("%s: ipc receive success, ret=%d!\n", __func__, ret);
return ret;
}
void ipc_set_voice_device_mode_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int dev_mode = 0;
//memcpy(&dev_mode, msg.param, msg.param_len);
dev_mode = *((int *)msg.param);
ret = sc_audio_set_voice_device_mode(dev_mode);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_get_voice_device_mode_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int *p_dev_mode = NULL;
p_dev_mode = (int *)msg.param;
ret = sc_audio_get_voice_device_mode(p_dev_mode);
//msg.func_id不变
msg.param_len = sizeof(int);
if(0 == ret)
memcpy(msg.param, p_dev_mode, msg.param_len);
else
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_set_rx_voice_vol_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int vol = 0;
//memcpy(&dev_mode, msg.param, msg.param_len);
vol = *((int *)msg.param);
ret = sc_audio_set_rx_voice_vol(vol);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_get_rx_voice_vol_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int *p_vol = NULL;
p_vol = (int *)msg.param;
ret = sc_audio_get_rx_voice_vol(p_vol);
//msg.func_id不变
msg.param_len = sizeof(int);
if(0 == ret)
memcpy(msg.param, p_vol, msg.param_len);
else
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_set_tx_voice_vol_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int vol = 0;
//memcpy(&dev_mode, msg.param, msg.param_len);
vol = *((int *)msg.param);
ret = sc_audio_set_tx_voice_vol(vol);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_get_tx_voice_vol_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int *p_vol = NULL;
p_vol = (int *)msg.param;
ret = sc_audio_get_tx_voice_vol(p_vol);
//msg.func_id不变
msg.param_len = sizeof(int);
if(0 == ret)
memcpy(msg.param, p_vol, msg.param_len);
else
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_set_tx_voice_mute_state_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int mute = 0;
//memcpy(&dev_mode, msg.param, msg.param_len);
mute = *((int *)msg.param);
ret = sc_audio_set_tx_voice_mute_state(mute);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_get_tx_voice_mute_state_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int *p_mute = NULL;
p_mute = (int *)msg.param;
ret = sc_audio_get_tx_voice_mute_state(p_mute);
//msg.func_id不变
msg.param_len = sizeof(int);
if(0 == ret)
memcpy(msg.param, p_mute, msg.param_len);
else
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_set_rx_voice_mute_state_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int mute = 0;
//memcpy(&dev_mode, msg.param, msg.param_len);
mute = *((int *)msg.param);
ret = sc_audio_set_rx_voice_mute_state(mute);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_get_rx_voice_mute_state_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int *p_mute = NULL;
p_mute = (int *)msg.param;
ret = sc_audio_get_rx_voice_mute_state(p_mute);
//msg.func_id不变
msg.param_len = sizeof(int);
if(0 == ret)
memcpy(msg.param, p_mute, msg.param_len);
else
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_set_loopback_enable_state_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int dev_mode = 0,enable = 0;
//memcpy(&dev_mode, msg.param, msg.param_len);
//enable = *((int *)msg.param);
memcpy(&dev_mode, msg.param, sizeof(int));
memcpy(&enable, msg.param+sizeof(int), sizeof(int));
//ret = sc_audio_set_loopback_enable_state(enable);
ret = ap_audio_set_loopback_enable(dev_mode,enable);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_get_loopback_enable_state_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int *p_enable = NULL;
p_enable = (int *)msg.param;
//ret = sc_audio_get_loopback_enable_state(p_enable);
ret = ap_audio_get_loopback_enable(p_enable);
//msg.func_id不变
msg.param_len = sizeof(int);
if(0 == ret)
memcpy(msg.param, p_enable, msg.param_len);
else
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
#ifdef _USE_VOICE_ALSA
void ipc_ap_alsa_voice_open_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int vmode = 0;
vmode = *((int *)msg.param);
ret = alsa_voice_open(vmode);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
void ipc_ap_alsa_voice_close_rcv(voice_ipc_control_msg msg)
{
int ret = VOICEIPC_OK;
int msg_len = 0;
int vmode = 0;
vmode = *((int *)msg.param);
ret = alsa_voice_close(vmode);
//msg.func_id不变
msg.param_len = sizeof(int);
memcpy(msg.param, &ret, msg.param_len);
msg_len = VOICE_HEAD_LEN + msg.param_len;
ret = write(voice_ipc_fd, &msg, msg_len);
if (0 >= ret){
printf("%s: write error(%d)!\n", __func__, ret);
}
}
#endif
void voice_ipc_recv_proc(voice_ipc_control_msg msg)
{
switch(msg.func_id){
case IPC_SET_VOICE_DEVICE_MODE:
ipc_set_voice_device_mode_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_GET_VOICE_DEVICE_MODE:
ipc_get_voice_device_mode_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_SET_RX_VOICE_VOL:
ipc_set_rx_voice_vol_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_GET_RX_VOICE_VOL:
ipc_get_rx_voice_vol_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_SET_TX_VOICE_VOL:
ipc_set_tx_voice_vol_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_GET_TX_VOICE_VOL:
ipc_get_tx_voice_vol_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_SET_TX_VOICE_MUTE_STATE:
ipc_set_tx_voice_mute_state_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_GET_TX_VOICE_MUTE_STATE:
ipc_get_tx_voice_mute_state_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_SET_RX_VOICE_MUTE_STATE:
ipc_set_rx_voice_mute_state_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_GET_RX_VOICE_MUTE_STATE:
ipc_get_rx_voice_mute_state_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_SET_LOOPBACK_ENABLE_STATE:
ipc_set_loopback_enable_state_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_GET_LOOPBACK_ENABLE_STATE:
ipc_get_loopback_enable_state_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
#ifdef _USE_VOICE_ALSA
case IPC_AP_ALSA_VOICE_OPEN:
ipc_ap_alsa_voice_open_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
case IPC_AP_ALSA_VOICE_CLOSE:
ipc_ap_alsa_voice_close_rcv(voice_ctrl_recvmsg[msg.func_id]);
break;
#endif
default:
break;
}
}
void Voice_Ctrl_Rpmsg_Recv(void)
{
int read_len = 0;
voice_ipc_control_msg tmpbuf = {0};
while(1){
read_len = 0;
read_len = read(voice_ipc_fd, &tmpbuf, (VOICE_HEAD_LEN + VOICE_CONTROL_MAX_LEN));
if (0 >= read_len){
sleep(1);
continue;
}
printf("%s: voice_ipc_fd=%d, read_len=%d\n", __func__, voice_ipc_fd, read_len);
//Êý¾Ý¶ÁÈ¡ÍêºóÔٸıäfuc_id
if(0 != tmpbuf.param_len){
memcpy(voice_ctrl_recvmsg[tmpbuf.func_id].param, tmpbuf.param, tmpbuf.param_len);
}
voice_ctrl_recvmsg[tmpbuf.func_id].param_len = tmpbuf.param_len;
voice_ctrl_recvmsg[tmpbuf.func_id].func_id = tmpbuf.func_id;
printf("%s: tmpbuf.param_len=%d, tmpbuf.func_id=%d\n", __func__, tmpbuf.param_len, tmpbuf.func_id);
voice_ipc_recv_proc(voice_ctrl_recvmsg[tmpbuf.func_id]);
}
}
int Voice_Ctrl_Rpmsg_Send(int func_id, int *msg)
{
voice_ipc_control_msg tmpbuf = {0};
int tmpbuf_len = 0;
int write_len = 0;
tmpbuf.func_id = func_id;
if(NULL == msg){
tmpbuf.param_len = 0;
}else{
tmpbuf.param_len = sizeof(int);
memcpy(tmpbuf.param, msg, tmpbuf.param_len);
}
tmpbuf_len = VOICE_HEAD_LEN + tmpbuf.param_len;
//printf("Voice_Ctrl_Rpmsg_Send, voice_ipc_fd = %d\n", voice_ipc_fd);
write_len = write(voice_ipc_fd, &tmpbuf, tmpbuf_len);
return write_len;
}
int voice_ipc_init(void) //通道初始åŒ?
{
voice_ipc_fd = open(VOICE_IPC_CONTROL_CHANNEL, O_RDWR);
if(0 > voice_ipc_fd){
printf("%s: open the channel(%s) error!\n", __func__, VOICE_IPC_CONTROL_CHANNEL);
return VOICEIPC_ERROR;
}
if(0 > ioctl(voice_ipc_fd, RPMSG_CREATE_CHANNEL, VOICE_IPC_CONTROL_CHANNEL_SIZE)){
printf("%s: ioctl RPMSG_CREATE_CHANNEL fail!\n", __func__);
close(voice_ipc_fd);
voice_ipc_fd = -1;
return VOICEIPC_ERROR;
}
if(0 > ioctl(voice_ipc_fd, RPMSG_SET_INT_FLAG, NULL)){ //写中æ–?
printf("%s: ioctl RPMSG_SET_INT_FLAG fail!\n", __func__);
close(voice_ipc_fd);
voice_ipc_fd = -1;
return VOICEIPC_ERROR;
}
if(0 > ioctl(voice_ipc_fd, RPMSG_CLEAR_POLL_FLAG, NULL)){ //阻塞方式读数æ?
printf("%s: ioctl RPMSG_CLEAR_POLL_FLAG fail!\n", __func__);
close(voice_ipc_fd);
voice_ipc_fd = -1;
return VOICEIPC_ERROR;
}
printf("voice_ipc_init %s create success! voice_ipc_fd = %d\n", VOICE_IPC_CONTROL_CHANNEL, voice_ipc_fd);
return VOICEIPC_OK;
}
int recv_msg_proc(MSG_BUF msg)
{
int ret = 0;
int vmode = 0;
int module_id = MODULE_ID_VOICE_SERVER;
int dst_id = MODULE_ID_VOICE_CLIENT;
switch(msg.usMsgCmd){
case MSG_CMD_CAP_VALSA_OPEN:
vmode = *((int *)msg.aucDataBuf);
ret = ipc_cap_alsa_voice_open(vmode);
//dst_id = MODULE_ID_CAP_VALSA_OPEN;
ret = ipc_send_message(module_id, dst_id, msg.usMsgCmd, sizeof(int), (unsigned char *)(&ret), 0);
if(0 != ret){
printf("%s: ipc_send_message error, return %d!\n", __func__, ret);
}
break;
case MSG_CMD_CAP_VALSA_CLOSE:
vmode = *((int *)msg.aucDataBuf);
ret = ipc_cap_alsa_voice_close(vmode);
//dst_id = MODULE_ID_CAP_VALSA_CLOSE;
ret = ipc_send_message(module_id, dst_id, msg.usMsgCmd, sizeof(int), (unsigned char *)(&ret), 0);
if(0 != ret){
printf("%s: ipc_send_message error, return %d!\n", __func__, ret);
}
break;
default:
printf("%s: msg.usMsgCmd=%d, not support!\n", __func__, msg.usMsgCmd);
break;
}
return ret;
}
void recv_cap_voice_alsa(void)
{
int ret = 0;
int msg_handle = 0;
MSG_BUF msg;
LONG msg_size = sizeof(MSG_BUF)-sizeof(LONG);
int module_id = MODULE_ID_VOICE_SERVER;
//´´½¨ÏûÏ¢¶ÓÁÐ
msg_handle = msgget(module_id, IPC_CREAT|0600);
//½ÓÊÕÏûÏ¢
while(1)
{
memset(&msg, 0x00, sizeof(MSG_BUF));
//»ñÈ¡ÏûÏ¢¶ÓÁÐÏûÏ¢²¢´¦Àí
ret = msgrcv(msg_handle, &msg, msg_size, 0, 0);
if(0 > ret){
continue;
}
recv_msg_proc(msg);
}
}
int main(int argc, char **argv)
{
int ret = 0;
//ipcͨµÀ³õʼ»¯
ret = voice_ipc_init();
if(0 > ret){
printf("voice_ipc_init %s error!\n", VOICE_IPC_CONTROL_CHANNEL);
return -1;
}
//ipc³õʼ»¯ºó£¬´´½¨msgÏûÏ¢½ÓÊÕÏß³Ì
pthread_t recv_thread_tid;
if(0 != pthread_create(&recv_thread_tid, NULL, (void *)recv_cap_voice_alsa, NULL)){
printf("recv_cap_voice_alsa create error!\n");
}
sleep(4);
Voice_Ctrl_Rpmsg_Recv();
return 0;
}
#endif