blob: 22a7d677221a9d927e29cf37e548405a1246d6ec [file] [log] [blame]
/************************************************************************
*¹¦ÄܽéÉÜ£ºÆ½Ì¨ÄÚ²¿À©Õ¹at¿Í»§¶ËºÍ·þÎñ¶Ë×¢²á£¬ËùÓÐ×¢²á¾ùÔÚext_regist_init½Ó¿ÚÖÐÍê³É£¬ÓÉat_ctlÔÚÆô¶¯Ê±µ÷ÓÃ
*¸ºÔðÈË£º
*±¸·ÝÈË£º
*ÐÞ¸ÄÈÕ£º
*ÐÞ¸ÄÄÚÈÝ£º
*°æ±¾ºÅ£º
************************************************************************/
#if (APP_OS_TYPE == APP_OS_LINUX)
#include "at_msg.h"
#include "at_com.h"
#include "at_context.h"
#include "ext_dev_func.h"
#include "ext_cmux_func.h"
#ifdef _USE_VOICE_ALSA
#include "tinyalsa/audio_mixer_ctrl.h"
//#include "voice_lib.h"
#include "voice_ipc.h"
#endif
#if (defined _USE_VOICE_ALSA) || (defined _VBUFF_IN_SINGLE_CORE)
#include "voice_lib.h"
#endif
//#include "ext_regist.h"
//#include "softap_api.h"
//#include "at_utils.h"
//#include "pub/drvs_ret.h"
//#include "earpiece_api.h"
#define DRV_SUCCESS 0
/*
typedef enum
{
VP_PATH_HANDSET =0,
VP_PATH_SPEAKER,
VP_PATH_HEADSET,
VP_PATH_BLUETOOTH,
VP_PATH_BLUETOOTH_NO_NR,
VP_PATH_HSANDSPK,
VP_PATH_OFF = 255,
MAX_VP_PATH = VP_PATH_OFF
}T_ZDrv_VpPath;
*/
/* Voice input channel selection. */
typedef enum
{
CODEC_INPUT_MICPHONE =0, /*input path in earphone mic*/
CODEC_INPUT_HEADSET, /*input path in headset*/
CODEC_INPUT_BLUETOOTH, /*input path in bluetooth*/
CODEC_INPUT_HANDSFREE, /*input path in mic(handsfree)*/
MAX_CODEC_INPUT_PATH
} T_ZDrv_CodecInputPath;
/* Voice output channel selection. */
typedef enum
{
CODEC_OUTPUT_RECEIVER =0, /*output path in receiver*/
CODEC_OUTPUT_SPEAKER, /*output path in speaker*/
CODEC_OUTPUT_HEADSET, /*output path in headset*/
CODEC_OUTPUT_BLUETOOTH, /*output path in bluetooth*/
CODEC_OUTPUT_HSANDSPK, /*output path in both headset and speaker*/
MAX_CODEC_OUTPUT_PATH
}T_ZDrv_CodecOutputPath;
#ifdef _VBUFF_IN_SINGLE_CORE
extern int vbuffer_stream_start(void);
extern int vbuffer_stream_stop(void);
#endif
#ifdef _USE_VOICE_AT
extern int voice_SetVoiceBuffer(T_VoiceBuf_Para *vb);
extern int voice_GetVoiceBuffer(T_VoiceBuf_Para *vb);
#endif
#ifdef _CONFIG_USE_CODEC_EARPIECE_DETECT
extern SINT32 halEarp_Open(VOID);
extern SINT32 halEarp_Close(VOID);
extern SINT32 halEarp_GetPlugStatus(T_ZDrvEarp_State* plug_status);
#endif
#ifdef _CONFIG_USE_CODEC
extern SINT32 halAudioConfig_ReadReg (UINT16 regPage, UINT16 regAddress, UINT16 *regValue);
extern SINT32 halAudioConfig_WriteReg (UINT16 regPage, UINT16 regAddress, UINT16 regValue, UINT16 regMask);
extern SINT32 halAudioConfig_DumpReg (VOID);
int codecWrite_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
UINT8 pPtr[40] = {0};
int a[4] = {0};
//CHAR b[6] = {0};
//CHAR c[6] = {0};
//CHAR d[6] = {0};
UINT16 reg_page = 0;
UINT16 reg_index = 0;
UINT16 write_value = 0;
UINT16 write_mask = 0;
at_str = at_paras;
at_print(AT_DEBUG,"codecWrite_act_func, at_paras:%s \n", at_paras);
//ret = sscanf (at_str, "%[0-9],%[0-9],%[0-9],%[0-9]", a, b, c, d);
ret = sscanf (at_str, "%d,%d,%d,%d", &a[0], &a[1], &a[2], &a[3]);
reg_page = a[0];
reg_index = a[1];
write_value = a[2];
write_mask = a[3];
at_print(AT_DEBUG,"zCtrm_ExtAT_WRCODEC reg_page=0x%x, reg_index=0x%x, write_value=0x%x, write_mask=0x%x\n", reg_page, reg_index, write_value, write_mask);
if (ret == 4) {
ret = halAudioConfig_WriteReg (reg_page, reg_index, write_value, write_mask);
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
int codecRead_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
at_str = at_paras;
UINT32 ret = DRV_SUCCESS;
int a[2] = {0};
//CHAR b[6] = {0};
CHAR re_str[30] = {'\0'};
UINT16 reg_page = 0;
UINT16 reg_index = 0;
UINT16 read_value = 0;
at_print(AT_DEBUG,"codecRead_act_func, at_paras:%s \n", at_paras);
//ret = sscanf (at_str, "%[0-9],%[0-9]", a, b);
ret = sscanf (at_str, "%d,%d", &a[0], &a[1]);
reg_page = a[0];
reg_index = a[1];
at_print(AT_DEBUG,"codecRead_act_func reg_page=0x%x, reg_index=0x%x \n", reg_page, reg_index);
if (ret == 2) {
ret = halAudioConfig_ReadReg (reg_page, reg_index, &read_value);
if (ret == DRV_SUCCESS) {
sprintf(re_str, "0x%x=0x%x\r\n" , reg_index,read_value);
*res_msg = at_query_result_build("reg",re_str);
//*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
int codecDump_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
at_str = at_paras;
UINT32 ret = DRV_SUCCESS;
at_print(AT_DEBUG,"codecDump_act_func, at_paras:%s \n", at_paras);
if (*at_str == '1') {
at_print(AT_DEBUG,"codecDump_act_func is ok. \n");
ret = halAudioConfig_DumpReg();
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
//ƽ̨ÄÚ²¿À©Õ¹atÃüÁ·¢£¬ËùÓÐÀ©Õ¹µÄ¿Í»§¶ËºÍ·þÎñ¶ËatÃüÁ¾ùÐèÒªÔڸú¯ÊýÖУ¬¸Ãº¯Êý»áÔÚat_ctlÓ¦Óóõʼ»¯Ê±£¬Íê³ÉÉÏÊöatÃüÁîµÄ×¢²á
int extAtSdev_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
T_ZDrv_VpPath path;
UINT8 pPtr[40] = {0};
int a = 0;
//CHAR b[6] = {0};
UINT16 dev_num = 0;
at_str = at_paras;
at_print(AT_DEBUG,"extAtSdev_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d", &a);
dev_num = a;
at_print(AT_DEBUG,"extAtSdev_act_func dev_num=0x%d\n", dev_num);
if (ret == 1) {
if(dev_num == 0)
{
path = VP_PATH_HANDSET;
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else if(dev_num == 1)
{
path = VP_PATH_SPEAKER;
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else if(dev_num == 2)
{
path = VP_PATH_HEADSET;
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else
{
sprintf ( (char *) pPtr, "\r\n%s\r\n", "+CME ERROR: 6004");
path = VP_PATH_HANDSET;
*res_msg = at_err_build ("pPtr");
*res_msglen = strlen (*res_msg);
return AT_END;
}
ret = zDrvVp_SetPath(path);
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
return AT_END;
}
int extAtRxPath_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
T_ZDrv_CodecOutputPath path;
UINT8 pPtr[40] = {0};
int a[2] = {0};
//CHAR b[6] = {0};
UINT16 dev_num = 0;
UINT16 isenable = 0;
at_str = at_paras;
at_print(AT_DEBUG,"extAtSdev_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d %d", &a[0], &a[1]);
dev_num = a[0];
isenable = a[1];
at_print(AT_DEBUG,"extAtSdev_act_func dev_num=0x%d\n", dev_num);
if (ret == 2) {
if(dev_num == 0)
{
path = CODEC_OUTPUT_RECEIVER;
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else if(dev_num == 1)
{
path = CODEC_OUTPUT_SPEAKER;
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else if(dev_num == 2)
{
path = CODEC_OUTPUT_HEADSET;
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else
{
sprintf ( (char *) pPtr, "\r\n%s\r\n", "+CME ERROR: 6004");
path = CODEC_OUTPUT_RECEIVER;
*res_msg = at_err_build ("pPtr");
*res_msglen = strlen (*res_msg);
return AT_END;
}
//ret = zDrvVp_SetTxPath(CODEC_INPUT_MICPHONE, TRUE);
ret = zDrvVp_SetRxPath(path, isenable);
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
return AT_END;
}
int extAtTxPath_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
T_ZDrv_VpPath path;
UINT8 pPtr[40] = {0};
int a[2] = {0};
//CHAR b[6] = {0};
UINT16 dev_num = 0;
UINT16 isenable = 0;
at_str = at_paras;
at_print(AT_DEBUG,"extAtSdev_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d %d", &a[0], &a[1]);
dev_num = a[0];
isenable = a[1];
at_print(AT_DEBUG,"extAtSdev_act_func dev_num=0x%d\n", dev_num);
if (ret == 2) {
if(dev_num == 0)
{
path = CODEC_INPUT_MICPHONE; //IN2P
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else if(dev_num == 1)
{
path = CODEC_INPUT_HANDSFREE; //CODEC_INPUT_HEADSET IN2P
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else if(dev_num == 2)
{
path = CODEC_INPUT_HEADSET; //CODEC_INPUT_HANDSFREE IN1P
at_print(AT_DEBUG, "[MDL] extAtSdev_act_func output channel=%d\r",dev_num);
}
else
{
sprintf ( (char *) pPtr, "\r\n%s\r\n", "+CME ERROR: 6004");
path = VP_PATH_HANDSET;
*res_msg = at_err_build ("pPtr");
*res_msglen = strlen (*res_msg);
return AT_END;
}
ret = zDrvVp_SetTxPath(path, isenable);
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
return AT_END;
}
#endif
#ifdef _CONFIG_USE_CODEC_EARPIECE_DETECT
int extAtEarp_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
T_ZDrv_VpPath path;
UINT8 pPtr[40] = {0};
int a = 0;
//CHAR b[6] = {0};
UINT16 onOff = 0;
at_str = at_paras;
at_print(AT_DEBUG,"extAtSdev_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d", &a);
onOff = a;
at_print(AT_DEBUG,"extAtSdev_act_func dev_num=0x%d\n", onOff);
if (ret == 1) {
if(onOff == 1)
{
ret = halEarp_Open();
}
else
{
ret = halEarp_Close();
}
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
#endif
#ifdef _USE_VOICE_ALSA
int extAt_VPATH_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
int path;
int a = 0;
//CHAR b[6] = {0};
UINT16 onOff = 0;
at_str = at_paras;
at_print(AT_DEBUG,"extAt_VPATH_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d,%d",&path,&a);
onOff = a;
at_print(AT_DEBUG,"extAt_VPATH_act_func path =%d,onOff=0x%d\n",path, onOff);
if (ret == 2) {
if(onOff == 1)
{
ret = set_voice_device_mode(path);
printf("extAt_VPATH_act_func on vpath,ret=%d\n",ret);
}
else
{
//ret = set_voice_device_mode(path);
printf("extAt_VPATH_act_func off vpath not support\n");
}
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
int extAt_VALSA_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
int mode = 0;
int enable = 0;
UINT16 onOff = 0;
at_str = at_paras;
printf("extAt_VALSA_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d,%d", &mode,&enable);
onOff = enable;
printf("extAt_VALSA_act_func mode=%d,enable=%d,ret=%d\n",mode,enable,ret);
if (ret == 2) {
if(onOff == 1)
{
ret = alsa_voice_open(mode);
printf("extAt_voice_act_func alsa_voice_open,ret=%d\n",ret);
}
else
{
ret = alsa_voice_close(mode);
printf("extAt_voice_act_func alsa_voice_close,ret=%d\n",ret);
}
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
int extAt_CAP_VALSA_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
int mode = 0;
int enable = 0;
UINT16 onOff = 0;
at_str = at_paras;
printf("extAt_CAP_VALSA_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d,%d", &mode,&enable);
onOff = enable;
printf("extAt_CAP_VALSA_act_func mode=%d,enable=%d,ret=%d\n",mode,enable,ret);
if (ret == 2) {
if(onOff == 1)
{
ret = cap_alsa_voice_open(mode);
printf("extAt_CAP_VALSA_act_func alsa_voice_open,ret=%d\n",ret);
}
else
{
ret = cap_alsa_voice_close(mode);
printf("extAt_CAP_VALSA_act_func alsa_voice_close,ret=%d\n",ret);
}
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
#endif
#ifdef _USE_VOICE_AT
int extAt_Voice_Process_set (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
int mode = 0;
int vp = 0;
UINT16 onOff = 0;
at_str = at_paras;
printf("%s, at_paras:%s \n",__func__, at_paras);
ret = sscanf (at_str, "%d", &vp);
printf("%s: vp=%d,ret=%d\n",__func__,vp,ret);
if (ret == 1) {
ret = voice_SetVoiceProcess(&vp);
printf("%s: alsa_voice_open,ret=%d\n",__func__,ret);
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
int extAt_Voice_Process_get(int at_fd,char * at_paras,void **res_msg,int * res_msglen)
{
char vp_str[32] = {0};
printf("%s: %s\n",__func__,at_paras);
int vp = voice_GetVoiceProcess();
if( vp < 0)
{
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen(*res_msg);
return AT_END;
}
printf("%s: vp=%d",__func__,vp);
snprintf(vp_str, 32,"%d\r\n",vp);
*res_msg = at_query_result_build("AT+VOICEPROCESS",vp_str);
*res_msglen = strlen(*res_msg);
return AT_END;
}
int extAt_VoiceBuffer_Set (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
int enable = 0;
int type = 0;
T_VoiceBuf_Para vb;
at_str = at_paras;
printf("%s, at_paras:%s \n",__func__, at_paras);
//ret = sscanf (at_str, "%d", &vp);
ret = sscanf (at_str, "%d,%d", &enable,&type);
printf("%s: enable=%d type=%d,ret=%d\n",__func__,enable,type,ret);
if (ret == 2) {
vb.enable = enable;
vb.type = type;
ret = voice_SetVoiceBuffer(&vb);
printf("%s: voice_SetVoiceBuffer,ret=%d\n",__func__,ret);
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
int extAt_VoiceBuffer_Get(int at_fd,char * at_paras,void **res_msg,int * res_msglen)
{
UINT32 ret = DRV_SUCCESS;
T_VoiceBuf_Para vb;
char vp_str[32] = {0};
printf("%s: %s\n",__func__,at_paras);
ret = voice_GetVoiceBuffer(&vb);
if( ret < 0)
{
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen(*res_msg);
return AT_END;
}
printf("%s: fs=%d enable=%d type=%d",__func__,vb.fs,vb.enable,vb.type);
snprintf(vp_str, 32,"%d %d %d\r\n",vb.fs,vb.enable,vb.type);
*res_msg = at_query_result_build("AT+VOICE_BUFFER",vp_str);
*res_msglen = strlen(*res_msg);
return AT_END;
}
#endif
#ifdef _VBUFF_IN_SINGLE_CORE
int extAt_VBUFFER_act_func (int at_fd, char * at_paras, void * *res_msg, int * res_msglen)
{
char *at_str = NULL;
UINT32 ret = DRV_SUCCESS;
int mode = 0;
int enable = 0;
UINT16 onOff = 0;
at_str = at_paras;
printf("extAt_VBUFFER_act_func, at_paras:%s \n", at_paras);
ret = sscanf (at_str, "%d", &enable);
onOff = enable;
printf("extAt_VBUFFER_act_func enable=%d,ret=%d\n",enable,ret);
if (ret == 1) {
if(onOff == 1)
{
ret = vbuffer_stream_start();
printf("extAt_VBUFFER_act_func vbuffer_stream_start,ret=%d\n",ret);
}
else
{
ret = vbuffer_stream_stop();
printf("extAt_VBUFFER_act_func vbuffer_stream_stop,ret=%d\n",ret);
}
if (ret == DRV_SUCCESS) {
*res_msg = at_ok_build();
*res_msglen = strlen (*res_msg);
return AT_END;
}
}
*res_msg = at_err_build(ATERR_PROC_FAILED);
*res_msglen = strlen (*res_msg);
return AT_END;
}
#endif
void ext_audio_regist_init(void)
{
printf("ext_audio_regist_init! \n");
#ifdef _CONFIG_USE_CODEC
register_serv_func2("WRCODEC=", 0, 0, 0, codecWrite_act_func, NULL);
register_serv_func2("RDCODEC=", 0, 0, 0, codecRead_act_func, NULL);
register_serv_func2("DUMPCODECREG=", 0, 0, 0, codecDump_act_func, NULL);
register_serv_func2("ExtAT_SDEV=", 0, 0, 0, extAtSdev_act_func, NULL);
register_serv_func2("ExtAT_RXPATH=", 0, 0, 0, extAtRxPath_act_func, NULL);
register_serv_func2("ExtAT_TXPATH=", 0, 0, 0, extAtTxPath_act_func, NULL);
#endif
#ifdef _CONFIG_USE_CODEC_EARPIECE_DETECT
register_serv_func2("ExtAT_EARP=", 0, 0, 0, extAtEarp_act_func, NULL);
#endif
#ifdef _USE_VOICE_ALSA
register_serv_func2("VALSA=", 0, 0, 0, extAt_VALSA_act_func, NULL);
register_serv_func2("VPATH=", 0, 0, 0, extAt_VPATH_act_func, NULL);
register_serv_func2("CAP_VALSA=", 0, 0, 0, extAt_CAP_VALSA_act_func, NULL);
#endif
#ifdef _VBUFF_IN_SINGLE_CORE
register_serv_func2("VBUFFER=", 0, 0, 0, extAt_VBUFFER_act_func, NULL);
#endif
#ifdef _USE_VOICE_AT
register_serv_func2("VOICE_PROCESS=",0,0,0,extAt_Voice_Process_set, NULL);
register_serv_func2("VOICE_PROCESS?",0,0,0,extAt_Voice_Process_get, NULL);
register_serv_func2("VOICE_BUFFER=",0,0,0,extAt_VoiceBuffer_Set, NULL);
register_serv_func2("VOICE_BUFFER?",0,0,0,extAt_VoiceBuffer_Get, NULL);
#endif
}
#endif