blob: aae8251c40a17a17e098f113d96936683df71b23 [file] [log] [blame]
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include "slic_type.h"
#include "slic_inf.h"
#include <linux/volte_drv.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include "voice_lib.h"
typedef struct
{
WORD wToneId;
WORD wCadenceCount;
WORD wCadence1_rptcnt;
WORD wCadence1_on;
WORD wCadence1_off;
WORD wCadence1_Freq;
WORD wCadence1_2ndFreq;
WORD wCadence1_Amp;
WORD wCadence2_rptcnt;
WORD wCadence2_on;
WORD wCadence2_off;
WORD wCadence2_Freq;
WORD wCadence2_2ndFreq;
WORD wCadence2_Amp;
WORD wCadence3_rptcnt;
WORD wCadence3_on;
WORD wCadence3_off;
WORD wCadence3_Freq;
WORD wCadence3_2ndFreq;
WORD wCadence3_Amp;
WORD wCadence4_rptcnt;
WORD wCadence4_on;
WORD wCadence4_off;
WORD wCadence4_Freq;
WORD wCadence4_2ndFreq;
WORD wCadence4_Amp;
WORD wDura;
BYTE bRowStatus;
BYTE bReserve;
}TONE_ATTR;
/*TONE ID*/
#define SIGNAL_RING (WORD)0x8100 /* ÕñÁå */
#define SIGNAL_RING_TWO (WORD)0x8101 /* 2¶ÎÕñÁå */
#define SIGNAL_RING_THREE (WORD)0x8102 /* 3¶ÎÕñÁå */
#define SIGNAL_RING_FOUR (WORD)0x8103 /* 4¶ÎÕñÁå */
#define SIGNAL_RING_LONG (WORD)0x8104 /* ³¤Ê±¼äÕñÁå */
#define SIGNAL_TONE (WORD)0x8200 /* ·ÅÒô */
#define SIGNAL_TONE_TWO (WORD)0x8201 /* 2¶Î·ÅÒô */
#define SIGNAL_TONE_THREE (WORD)0x8202 /* 3¶Î·ÅÒô */
#define SIGNAL_TONE_FOUR (WORD)0x8203 /* 4¶Î·ÅÒô */
#define SIGNAL_TONE_LONG (WORD)0x8204 /* ³¤Ê±¼ä·ÅÒô */
TONE_ATTR ToneAttr[] = {
/*
ToneId Cadence Cadence1 Cadence2 Cadence3 Cadence4 Dura RowStatus Rese*/
{SIGNAL_RING, 1, 1,200,800,25,0,100, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 12000, 1, 0},
{SIGNAL_RING_TWO, 2, 1,100,800,25,0,100, 1,200,800,25,0,100, 0,0,0,0,0,0, 0,0,0,0,0,0, 12000, 1, 0},
{SIGNAL_RING_THREE, 3, 1,100,800,25,0,100, 1,400,800,25,0,100, 1,200,800,25,0,100, 0,0,0,0,0,0, 12000, 1, 0},
{SIGNAL_RING_FOUR, 4, 1,100,800,25,0,100, 1,400,800,25,0,100, 1,300,300,25,0,100, 1,200,800,25,0,100, 12000, 1, 0},
{SIGNAL_RING_LONG, 1, 1,6000,0,25,0,100, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 12000, 1, 0},
{SIGNAL_TONE, 1, 1,40,400,450,0,100, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 12000, 1, 0},
{SIGNAL_TONE_TWO, 2, 1,40,400,450,0,100, 1,100,800,450,0,100, 0,0,0,0,0,0, 0,0,0,0,0,0, 12000, 1, 0},
{SIGNAL_TONE_THREE, 3, 1,40,400,450,0,100, 1,100,800,450,0,100, 1,200,800,450,0,100, 0,0,0,0,0,0, 12000, 1, 0},
{SIGNAL_TONE_FOUR, 4, 1,40,400,450,0,100, 1,100,800,450,0,100, 1,300,300,450,0,100, 1,200,800,450,0,100, 12000, 1, 0},
{SIGNAL_TONE_LONG, 1, 1,6000,0,450,0,100, 0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0, 12000, 1, 0},
};
#define VOICE_TEST_CALL_DRV
#ifdef VOICE_TEST_CALL_DRV
static int voice_fd = -1;
static int volte_fd = -1;
#else
T_Voice_Para gsmhwpara = {
8000, //8000;16000
0, //// 0 gsm;1 td;2 wcdma;3 lte
0//0 hardware dsp;1 soft amr lib
};
T_Voice_Para tdnbhwpara = {
8000, //8000;16000
1, //// 0 gsm;1 td;2 wcdma;3 lte
0,//0 amr-nb;1 amr-wb
0//0 hardware dsp;1 soft amr lib
};
T_Voice_Para tdnbsfpara = {
8000, //8000;16000
1, //// 0 gsm;1 td;2 wcdma;3 lte
0,//0 amr-nb;1 amr-wb
1//0 hardware dsp;1 soft amr lib
};
T_Voice_Para tdwbsfpara = {
8000, //8000;16000
1, //// 0 gsm;1 td;2 wcdma;3 lte
1,//0 amr-nb;1 amr-wb
1//0 hardware dsp;1 soft amr lib
};
#endif
static VOID DataFormat(SIGNAL_DATA *pSig, TONE_ATTR *pAttr)
{
#if 0
pSig->wDura = pAttr->wDura;
pSig->bCadenceNum = pAttr->wCadenceCount;
pSig->wSignalID = pAttr->wToneId;
pSig->Cadence[0].wCadenceRptCnt = pAttr->wCadence1_rptcnt;
pSig->Cadence[0].wCadenceOn = pAttr->wCadence1_on;
pSig->Cadence[0].wCadenceOff = pAttr->wCadence1_off;
pSig->Cadence[0].wFreq1 = pAttr->wCadence1_Freq;
pSig->Cadence[0].wFreq2 = pAttr->wCadence1_2ndFreq;
pSig->Cadence[0].wAmp = pAttr->wCadence1_Amp;
pSig->Cadence[1].wCadenceRptCnt = pAttr->wCadence2_rptcnt;
pSig->Cadence[1].wCadenceOn = pAttr->wCadence2_on;
pSig->Cadence[1].wCadenceOff = pAttr->wCadence2_off;
pSig->Cadence[1].wFreq1 = pAttr->wCadence2_Freq;
pSig->Cadence[1].wFreq2 = pAttr->wCadence2_2ndFreq;
pSig->Cadence[1].wAmp = pAttr->wCadence2_Amp;
pSig->Cadence[2].wCadenceRptCnt = pAttr->wCadence3_rptcnt;
pSig->Cadence[2].wCadenceOn = pAttr->wCadence3_on;
pSig->Cadence[2].wCadenceOff = pAttr->wCadence3_off;
pSig->Cadence[2].wFreq1 = pAttr->wCadence3_Freq;
pSig->Cadence[2].wFreq2 = pAttr->wCadence3_2ndFreq;
pSig->Cadence[2].wAmp = pAttr->wCadence3_Amp;
pSig->Cadence[3].wCadenceRptCnt = pAttr->wCadence4_rptcnt;
pSig->Cadence[3].wCadenceOn = pAttr->wCadence4_on;
pSig->Cadence[3].wCadenceOff = pAttr->wCadence4_off;
pSig->Cadence[3].wFreq1 = pAttr->wCadence4_Freq;
pSig->Cadence[3].wFreq2 = pAttr->wCadence4_2ndFreq;
pSig->Cadence[3].wAmp = pAttr->wCadence4_Amp;
#endif
}
static TONE_ATTR* GetToneData(WORD wTid)
{
WORD i;
for (i = 0; i < sizeof(ToneAttr)/sizeof(TONE_ATTR); i++)
{
if (wTid == ToneAttr[i].wToneId)
{
return &ToneAttr[i];
}
}
return NULL;
}
static void SLIC_SelfTest(void)
{
BYTE bBuf[16] = {0,};
WORD wSize = 0;
SIGNAL_DATA tSig;
DWORD dC = 0;
#if 0
tSig.wDura = 6000; /*60s */
tSig.bCadenceNum = 1;
tSig.wSignalType = USL_RING_SIGNAL;
tSig.wSignalID = 0x8100;
tSig.Cadence[0].wCadenceOn = 100; /* 1s */
tSig.Cadence[0].wCadenceOff = 0; /* no off */
tSig.Cadence[0].wFreq1 = 25;
tSig.Cadence[0].wFreq2 = 0;
tSig.Cadence[0].wAmp = 100;
#endif
/* chip test */
printf("\n check legerity chip");
bBuf[0] = 0x73;
wSize = 2;
SLIC_Read_Codec(bBuf);
if ((bBuf[0] != 0x2) && (bBuf[1] != 0xb2))
{
printf("\n read legerity ID error");
} else {
printf("\n read legerity ID success ID:0x%x 0x%x", bBuf[0], bBuf[1]);
}
/* ring test -self test mode */
printf("\n control port 1 ringing ");
SLIC_Play_Signal(0, 0, &tSig);
printf("\n press any key to stop port 1 ring");
while(!(dC = getchar())) { ;}
SLIC_Stop_Signal(0, 0);
printf("\n control port 2 ringing ");
SLIC_Play_Signal(1, 0, &tSig);
printf("\n press any key to stop port 2 ring");
while(!(dC = getchar())) { ;}
SLIC_Stop_Signal(1, 0);
SLIC_MsgClr();
SLIC_DebugLevel(0);
return;
}
/*lint -restore*/
/*lint -save -e14*/
int main(int argc, char** argv)
{
SIGNAL_DATA tSig = {0};
DWORD wRev = 0;
WORD wPort = 0;
WORD wPort_type = 0;
WORD wTimeSlot = 0;
DWORD wTid = 0;
WORD wTime = 0;
WORD wLevel = 0;
TONE_ATTR *pToneAttr = NULL;
wRev = SLIC_Initial();
if (wRev == SLIC_FAIL)
{
printf("\n SLIC initial failed!");
exit(1);
}
if (argc < 2)
{
printf("\n Usage:%s cmd parm...", argv[0]);
exit(1);
}
if (0 == strcmp("reset", argv[1])) /* port reset */
{
if (argc != 4)
{
printf("\n Usage:%s reset port type", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wPort_type = atoi(argv[3]);
wRev = SLIC_ResetPort(wPort, wPort_type);
} else if (0 == strcmp("slotset", argv[1])) /*time slot set */
{
if (argc != 5)
{
printf("\n Usage:%s slotset port type timeslot\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wPort_type = atoi(argv[3]);
wTimeSlot = atoi(argv[4]);
wRev = SLIC_SelectTimeSlot(wPort, wPort_type, wTimeSlot, wTimeSlot);
} else if (0 == strcmp("reverse", argv[1])) /* polarity reverse */
{
if (argc != 3)
{
printf("\n Usage:%s reverse port\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wRev = SLIC_FXS_PolarityReverse(wPort);
} else if (0 == strcmp("startring", argv[1])) /* start ring */
{
tSig.signal_type= RING_SIGNAL;
memcpy(tSig.cid, argv[2], 11);
printf("slictool startring cid %s", tSig.cid);
wRev = SLIC_Play_Signal(wPort, SLIC_PORT_TYPE, &tSig);
} else if (0 == strcmp("stopring", argv[1])) /* stop ring */
{
wRev = SLIC_Stop_Signal(0, SLIC_PORT_TYPE);
} else if (0 == strcmp("playtone", argv[1])) /* play tone */
{
tSig.signal_type = TONE_SIGNAL;
if(NULL != argv[2])
{
tSig.tone_type = atoi(argv[2]);
}
else
{
tSig.tone_type = TONE_DIAL;
}
printf("tone_type %d\n", tSig.tone_type);
wRev = SLIC_Play_Signal(0, wPort_type, &tSig);
}
else if (0 == strcmp("rcvmsg", argv[1])) /* rcvmsg */
{
while(1)
{
BYTE bEvent = 0;
DWORD pPayLoad = 0;
if (SLIC_FAIL == SLIC_MsgRev(&bEvent, &pPayLoad))
{
printf("SLIC: Error-->>SLIC_MsgRev Failed\n");
continue;
}
printf("SLIC: SLIC_MsgRev Event %d, payload %x\n", bEvent, pPayLoad);
}
}
else if (0 == strcmp("stoptone", argv[1])) /* stop tone */
{
wRev = SLIC_Stop_Signal(wPort, wPort_type);
}else if (0 == strcmp("startpcm", argv[1])) /* stop tone */
{
wRev = SLIC_Start_PCM();
} else if (0 == strcmp("stoppcm", argv[1])) /* stop tone */
{
wRev = SLIC_Stop_PCM();
} else if (0 == strcmp("pcmnb", argv[1])) /* stop tone */
{
wRev = SLIC_PCM_Set_NB();
} else if (0 == strcmp("pcmwb", argv[1])) /* stop tone */
{
wRev = SLIC_PCM_Set_WB();
} else if (0 == strcmp("lock", argv[1])) /* lock port */
{
if (argc != 4)
{
printf("\n Usage:%s lock port type\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wPort_type = atoi(argv[3]);
wRev = SLIC_Port_Lock(wPort, wPort_type);
} else if (0 == strcmp("unlock", argv[1])) /* unlock port */
{
if (argc != 4)
{
printf("\n Usage:%s unlock port type\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wPort_type = atoi(argv[3]);
wRev = SLIC_Port_UnLock(wPort, wPort_type);
} else if (0 == strcmp("codecset", argv[1])) /* codecset */
{
BYTE bBuf[256];
BYTE bTmp = 0;
BYTE bSize = 0;
DWORD bParm;
if (argc != 3)
{
printf("\n Usage:%s codecset parmstring\n", argv[0]);
exit(1);
}
sscanf(&(argv[2][bTmp]), "%x", &bParm);
bBuf[bSize++] = bParm;
printf("\n codecset addr %x\n", bBuf[0]);
for (bTmp = 0; argv[2][bTmp]!= 0; bTmp++)
{
if (argv[2][bTmp] != ' ')
{
printf("\n codecset argv[2][%d] %x\n", bTmp, argv[2][bTmp]);
continue;
}
sscanf(&(argv[2][bTmp]), "%x", &bParm);
bBuf[bSize++] = bParm;
}
printf("\n codecset value %x\n", bBuf[1]);
wRev = SLIC_Cfg_Codec(bBuf);
} else if (0 == strcmp("codecget", argv[1])) /* codecget */
{
BYTE bBuf[256];
BYTE bSize = 0;
DWORD bParm;
if (argc != 3)
{
printf("\n Usage:%s codecget address\n", argv[0]);
exit(1);
}
sscanf(&(argv[2][0]), "%x", &bParm);
bBuf[0] = bParm;
wRev = SLIC_Read_Codec(bBuf);
} else if (0 == strcmp("ramset", argv[1])) //ramset
{
BYTE bBuf[256];
BYTE bTmp = 0;
BYTE bSize = 0;
DWORD bParm;
if (argc != 3)
{
printf("\n Usage:%s ramset parmstring\n", argv[0]);
exit(1);
}
sscanf(&(argv[2][bTmp]), "%x", &bParm);
bBuf[bSize++] = (BYTE)bParm;
bBuf[bSize++] = (bParm>>8)&(0x07);
for (bTmp = 0; argv[2][bTmp]!= 0; bTmp++)
{
if (argv[2][bTmp] != ' ')
{
continue;
}
sscanf(&(argv[2][bTmp]), "%x", &bParm);
bBuf[bSize++] = (BYTE)bParm;
bBuf[bSize++] = (bParm>>8)&(0xff);
bBuf[bSize++] = (bParm>>16)&(0xff);
bBuf[bSize++] = (bParm>>24)&(0xff);
}
wRev = SLIC_Cfg_Ram(bBuf);
}else if (0 == strcmp("ramget", argv[1])) //ramget
{
BYTE bBuf[256];
BYTE bSize = 0;
DWORD dwParm;
WORD *pAddr = (WORD *)&bBuf[0];
if (argc != 3)
{
printf("\n Usage:%s ramget address\n", argv[0]);
exit(1);
}
sscanf(&(argv[2][0]), "%x", &dwParm);
*pAddr = (WORD)dwParm;
printf("read ram %d \n", (int)bBuf);
wRev = SLIC_Read_Ram(bBuf);
} else if (0 == strcmp("hooklow", argv[1])) /* config hook low time */
{
if (argc != 4)
{
printf("\n Usage:%s hooklow port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_HookLowTime(wPort, wTime);
} else if (0 == strcmp("hookhigh", argv[1])) /* config hook high time */
{
if (argc != 4)
{
printf("\n Usage:%s hookhigh port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_HookHighTime(wPort, wTime);
} else if (0 == strcmp("prehookhigh", argv[1])) /* config prehook time */
{
if (argc != 4)
{
printf("\n Usage:%s prehookhigh port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_PreHookHighTime(wPort, wTime);
} else if (0 == strcmp("flashlowmin", argv[1])) /* config flash low min */
{
if (argc != 4)
{
printf("\n Usage:%s flashlowmin port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_FlashLowMinTime(wPort, wTime);
} else if (0 == strcmp("flashlowmax", argv[1])) /* config flash low max */
{
if (argc != 4)
{
printf("\n Usage:%s flashlowmax port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_FlashLowMaxTime(wPort, wTime);
} else if (0 == strcmp("flashfix", argv[1])) /* config flash high fix */
{
if (argc != 4)
{
printf("\n Usage:%s flashfix port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_FlashHighFixTime(wPort, wTime);
} else if (0 == strcmp("diallowmin", argv[1])) /* config pulse low min */
{
if (argc != 4)
{
printf("\n Usage:%s diallowmin port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_DialLowMinTime(wPort, wTime);
} else if (0 == strcmp("diallowmax", argv[1])) /* config pulse low max */
{
if (argc != 4)
{
printf("\n Usage:%s diallowmax port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_DialLowMaxTime(wPort, wTime);
} else if (0 == strcmp("dialhighmin", argv[1])) /* config pulse high min */
{
if (argc != 4)
{
printf("\n Usage:%s dialhighmin port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_DialHighMinTime(wPort, wTime);
} else if (0 == strcmp("dialhighfix", argv[1])) /* config pulse high fix */
{
if (argc != 4)
{
printf("\n Usage:%s dialhighfix port time\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wTime = atoi(argv[3]);
wRev = SLIC_Cfg_DialHighFixTime(wPort, wTime);
} else if (0 == strcmp("debuglvl", argv[1])) /* config debug level */
{
if (argc != 3)
{
printf("\n Usage:%s debuglvl level\n", argv[0]);
exit(1);
}
wLevel = atoi(argv[2]);
SLIC_DebugLevel(wLevel);
} else if (0 == strcmp("selftest", argv[1])) /* self test */
{
if (argc != 2)
{
printf("\n Usage:%s selftest\n", argv[0]);
exit(1);
}
SLIC_SelfTest();
}
else if (0 == strcmp("leg", argv[1])) /* chip initial */
{
if (argc != 3)
{
printf("\n Usage:%s leg num(1:init,other num :no init)\n", argv[0]);
exit(1);
}
wPort=atoi(argv[2]);
if(wPort==1)
{
wRev = SLIC_Dev_Init();
if(wRev==SLIC_FAIL)
printf("leg init fail!!\n");
else
printf("leg init success!\n");
}
else
exit(1);
}
else if (0 == strcmp("test", argv[1])) /* 112 test start */
{
WriteCmd_t Cmd = {0};
if (argc != 6)
{
printf("\n Usage:%s test port type item\n", argv[0]);
exit(1);
}
Cmd.port = atoi(argv[2]);
Cmd.port_type = atoi(argv[3]);
Cmd.item = atoi(argv[4]);
Cmd.obligate = atoi(argv[5]);
wRev = SLIC_112TestStart((WriteCmd_t *)&Cmd);
}
else if (0 == strcmp("readreg", argv[1])) /* codecget */
{
BYTE bBuf[256];
BYTE bSize = 1;
BYTE loopi;
if (argc != 4)
{
printf("\n Usage:%s codecget port type address size\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wPort_type = atoi(argv[3]);
for(loopi=0; loopi<=126; loopi++)
{
bBuf[0] = loopi;
wRev = SLIC_Read_Codec(bBuf);
if (wRev != SLIC_SUCCESS)
break;
}
}
else if (0 == strcmp("readram", argv[1]))
{
BYTE bSize = 4; //siliconlab 32176 readram 28bit once
WORD loopi;
union
{
DWORD wReturnvalue;
WORD wAddress_on10;
} xchange;
if (argc != 4)
{
printf("\n Usage:%s readram port port_type reg_10\n", argv[0]);
exit(1);
}
wPort = atoi(argv[2]);
wPort_type = atoi(argv[3]);
printf("____show all rams_____ \n");
for(loopi=0; loopi<=1565; loopi++)
{
xchange.wAddress_on10 = loopi;
wRev = SLIC_Read_Ram((BYTE *) &xchange.wAddress_on10);
if (wRev != SLIC_SUCCESS)
break;
}
}
else if (0 == strcmp("voice_test", argv[1])) /* rcvmsg */
{
#ifdef VOICE_TEST_CALL_DRV
int ret = 0;
// WORD codecpath = 0;
// WORD onoff = 0;
T_Voice_Para para = {0};
int slicflag = 0;
T_ZDrvVoice_Cfg cfg = {8000,1,160,16,0};
T_ZDrvVoice_Cfg cfgwb = {16000,1,320,16,0};
para.codec_path = atoi(argv[2]);//0 dsp ;1 soft
para.mode = atoi(argv[3]); // 0gsm,1 td;2 wcdma
para.codec_type = atoi(argv[3]); // 0 amr-nb;1 amr-wb
// onoff = atoi(argv[4]); // 0 off;1 on
printf("slctool: voice_test codec_path=%d,mode=%d!\n",para.codec_path,para.mode);
voice_fd = open("/dev/voice_device", O_RDONLY);
if(voice_fd < 0)
{
printf("slctool: open voice device error.\n");
exit(1); //cov m
}
//open volte
volte_fd = open("/dev/volte_device", O_RDONLY);
if(volte_fd < 0)
{
printf("slctool: open volte device error.\n");
exit(1); //cov m
}
//ret = ioctl(volte_fd,VOLTE_IOCTL_SET_CFG,&cfg);
// printf("slctool: volte set cfg fd=%d,ret=%d.\n",volte_fd,ret);
ret = ioctl(volte_fd,VOLTE_IOCTL_GET_SLIC_USE_FLAG,&slicflag);
printf("slctool: volte get slic flag=%d fd=%d,ret=%d.\n",slicflag,volte_fd,ret);
ret = ioctl(volte_fd,VOLTE_IOCTL_SET_CFG,&cfg);
close(volte_fd);
volte_fd = open("/dev/volte_device", O_RDONLY);
if(volte_fd < 0)
{
printf("slctool: open volte device error.\n");
exit(1); //cov m
}
//ret = ioctl(volte_fd,VOLTE_IOCTL_SET_CFG,&cfg);
// printf("slctool: volte set cfg fd=%d,ret=%d.\n",volte_fd,ret);
ret = ioctl(volte_fd,VOLTE_IOCTL_GET_SLIC_USE_FLAG,&slicflag);
printf("slctool: volte get slic flag=%d fd=%d,ret=%d.\n",slicflag,volte_fd,ret);
ret = ioctl(volte_fd,VOLTE_IOCTL_SET_CFG,&cfgwb);
close(volte_fd);
ret = ioctl(voice_fd,VOICE_IOCTL_START,&para);
printf("slctool: voice start fd=%d,ret=%d.\n",voice_fd,ret);
usleep(1000000);
printf("slctool: bef voice stop fd=%d,ret=%d.\n",voice_fd,ret);
ret = ioctl(voice_fd,VOICE_IOCTL_STOP,&para);
printf("slctool: voice stop fd=%d,ret=%d.\n",voice_fd,ret);
close(voice_fd);
printf("voice test !\n");
#else
int ret = 0;
int sel;
T_Voice_Para *para;
sel = atoi(argv[2]);//0 gsm ;1 tdnbhw;2tdnbsf ;3tdwbsf
if (sel == 0){
para = &gsmhwpara;
}
else if(sel == 1){
para = &tdnbhwpara;
}
else if(sel == 2){
para = &tdnbsfpara;
}
else if(sel == 3){
para = &tdwbsfpara;
}
else{
printf("voice lib test invalid para\n");
exit(1);
}
ret = voice_open(para);
printf("slctool: voice_open,ret=%d.\n",ret);
usleep(1000000);
ret = voice_close(para);
#endif
}
else if (0 == strcmp("vploop", argv[1]))
{
int ret = 0;
int path = 0;
path = atoi(argv[2]);//0 hanset ;1 sp;2 headset;255 off
printf("slictool vploop path=%d \n",path);
if((path >=0)&&(path <=2)){
ret = SLIC_PCM_Set_NB();
if (ret != 0)
{
printf("SLIC_PCM_Set_NB Error ret=%d!\n",ret);
exit(1);
}
ret = SLIC_Start_PCM();
if (ret != 0)
{
printf("SLIC_Start_PCM Error ret=%d!\n",ret);
exit(1);
}
}
else if(path == 255){
ret = SLIC_Stop_PCM();
if (ret != 0)
{
printf("SLIC_Stop_PCM Error ret=%d!\n",ret);
exit(1);
}
SLIC_Release();
}
ret = voice_Vploop(&path);
if (ret != 0)
{
printf("vploop Error ret=%d!\n",ret);
exit(1);
}
}
else
{
printf("not support!\n");
}
if (wRev != SLIC_SUCCESS)
{
printf("\n Run Error!\n");
exit(1);
}
SLIC_Release();
return 0;
}
/*lint -restore*/