[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/ccapp/slic_tool.c b/ap/app/ccapp/slic_tool.c
new file mode 100644
index 0000000..aae8251
--- /dev/null
+++ b/ap/app/ccapp/slic_tool.c
@@ -0,0 +1,796 @@
+#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*/
+