123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732 |
- #include "includes.h"
- int g_iCSQ=-1;
- YUNYINGSHANG_DEF thisYunYingShang=CHINA_NONE;
- CODEC_PARAM codec_param;
- unsigned char g_ucModemTaskEn=0;
- unsigned char modemInitStatus=0;
- unsigned char g_ucCardStatus=0;
- unsigned char modemInitReady=0;//0模块没开始初始化 1模块初始化成功 2模块初始化失败
- char SendAT[50];
- char WaitAT1[30];
- char WaitAT2[30];
- typedef enum{
- MINI_WAT_START,
- MINI_CONFIRM_VER,
- MINI_GET_MODULE,
- MINI_GET_MVERSION,
- MINI_GET_POC_VER,
- MINI_GET_POC_CODE,
- MINI_SET_TTS_SPEED1,
- MINI_SET_TTS_SPEED2,
- MINI_SET_SPK_MIC,
- MINI_GET_CARD,
- MINI_GET_IMEI,
- MINI_PLY_ICCID,
- MINI_POC_PARA,
- MINI_SET_POC_SIMPLE,
- MINI_SET_TONES,
- MINI_SET_SPKLV,
- MINI_SET_MICLV,
- }M_INIT_STATUS;
- static unsigned char initStatus;
- static unsigned char timeOut;
- void mInitSwitchStatus(unsigned char status){
- char temp=0;
- timeOut=10;//5秒
- initStatus=status;
-
- snprintf(WaitAT2, sizeof(WaitAT2), "@#@");
- switch(initStatus){
- case MINI_WAT_START:
- timeOut=80;//只有模块启动时时间才要长些这里设置为30秒 /60
- SlwTrace(INF, "WaitModemRun..",1);
- snprintf(SendAT, sizeof(SendAT), "ATE0\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "OK");
- snprintf(WaitAT2, sizeof(WaitAT2), "+POC:START");
- break;
- case MINI_CONFIRM_VER:
- SlwTrace(INF, "Confirm The Ver..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+LSPOCPF?\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "ERROR");
- snprintf(WaitAT2, sizeof(WaitAT2), "+LSPOCPF:");
- break;
-
- case MINI_GET_MODULE:
- SlwTrace(INF, "GetModemModule..",1);
- snprintf(SendAT, sizeof(SendAT), "ATI\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "SV");
- break;
- case MINI_GET_MVERSION:
- SlwTrace(INF, "GetModemVersion..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+LCTSW\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "InnerVersion:");
- break;
- case MINI_GET_POC_VER:
- SlwTrace(INF, "GetPocVersion..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+POC_VER?\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+POC_VER:");
- break;
- case MINI_GET_POC_CODE:
- SlwTrace(INF, "GetPocCode..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+POC=40000000\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+POC:400000000");
- break;
- case MINI_SET_TTS_SPEED1:
- case MINI_SET_TTS_SPEED2:
- SlwTrace(INF, "SetTTSSpeed..",1);
- ModemSendAt("AT+LSHTTSSPEED=-1,7000\r\n");
- snprintf(SendAT, sizeof(SendAT), "AT+LSHTTSSPEED?\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+LSHTTSSPEED:");
- break;
- case MINI_SET_SPK_MIC:
- SlwTrace(INF, "SetSpkMic..",1);
- SetDefaultSpkMic();
- snprintf(SendAT, sizeof(SendAT), "at+syscmd=start_pcm volume\r\n");
- if(1) snprintf(WaitAT1, sizeof(WaitAT1), "7 7");//这里1根据实际参数替换吧
- else snprintf(WaitAT1, sizeof(WaitAT1), "7 5");
- break;
-
- case MINI_GET_CARD:
- SlwTrace(INF, "GetCardStatus..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+CPIN?\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+CPIN: READY");
- break;
- case MINI_GET_IMEI:
- SlwTrace(INF, "GetIMEI..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+LSHIMEI\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+LSHIMEI:");
- break;
- case MINI_PLY_ICCID:
- SlwTrace(INF, "GetICCID..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+ICCID\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "^SCID:");
- break;
- case MINI_POC_PARA:
- SlwTrace(INF, "GetPOCPara..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+POC=020000\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+POC:02");
- break;
- case MINI_SET_POC_SIMPLE:
- SlwTrace(INF, "SetPocSMode..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+POC=10000020\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+POC:10000000");
- break;
- //+TONES:1
- case MINI_SET_TONES:
- SlwTrace(INF, "SetTones..",1);
- snprintf(SendAT, sizeof(SendAT), "AT+TONES=1\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+TONES:1");
- break;
- //MINI_SET_SPKLV
- case MINI_SET_SPKLV:
- timeOut=60;
- SlwTrace(INF, "SetSpklv",1);
- snprintf(SendAT, sizeof(SendAT), "AT+LVL?\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+LVL:");
- break;
- //MINI_SET_MICLV
- case MINI_SET_MICLV:
- timeOut=60;
- SlwTrace(INF, "SetMiclv",1);
- snprintf(SendAT, sizeof(SendAT), "AT+MIC?\r\n");
- snprintf(WaitAT1, sizeof(WaitAT1), "+MIC:");
- break;
-
- }
- }
- short ModemInitAckHandler(unsigned char result){
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- char *msg=(char *)pMsg->MsgData;
- short ret=0;
- char buf[30];
-
- switch(initStatus){
- case MINI_WAT_START:
- if(result==1){
- SlwTrace(INF, "ModemStart...",1);
- ModemSendAt("ATE0\r\n");
- mInitSwitchStatus(MINI_CONFIRM_VER);
- }else ret=-1;
- break;
-
- case MINI_CONFIRM_VER:
- if(result != 1) SlwTrace(INF, "GetLCC fail",1); //
- else {
- if(ModemLCCCheck(msg)) ResetModem();
- }
-
- // //暂停POC
- // ModemSendAt("AT+POC=050000\r\n"); //
- // ret=-1;//天线测试版本
- //mInitSwitchStatus(MINI_GET_MODULE);
- mInitSwitchStatus(MINI_GET_POC_VER);
-
- break;
-
- case MINI_GET_MODULE:
- if(result != 1) SlwTrace(INF, "GetModemModule fail",1);
- else getModemModule(msg);
- mInitSwitchStatus(MINI_GET_POC_VER);
- break;
-
- // case MINI_GET_MVERSION:
- // if(result!=1) SlwTrace(INF, "GetModemVer fail",1);
- // else getModemVersion(msg);
- // mInitSwitchStatus(MINI_GET_POC_VER);
- // break;
- case MINI_GET_POC_VER:
- if(result!=1) SlwTrace(INF, "GetPocVer fail",1);
- else{
- ModemSendAt("AT+POC=050000\r\n");
- getPocVersion(msg);
- CheckPocType();
- //ModemOwnPocSet();
- }
- mInitSwitchStatus(MINI_SET_TTS_SPEED1);//();
- break;
-
- // case MINI_GET_POC_CODE:
- // if(result!=1) SlwTrace(INF, "GetPocCode fail",1);
- // else getPocCode(msg);
- // mInitSwitchStatus(MINI_SET_TTS_SPEED1);
- // break;
-
- case MINI_SET_TTS_SPEED1:
- if(result!=1) SlwTrace(INF, "Set TTs fail",1);
- else{
- if(7000 != atoi(&msg[13])){
- mInitSwitchStatus(MINI_SET_TTS_SPEED2);
- break;
- }else SlwTrace(INF, "SetTTSSpeed Ok",1);
- }
-
- mInitSwitchStatus(MINI_SET_SPKLV);
- break;
-
- case MINI_SET_SPKLV:
- if(result != 1) SlwTrace(INF, "SetSPKlv fail",1);
- else {
- SetSpkLvProcess(2);
- if(newPara.Spklv!=atoi(&msg[7])){
- snprintf(buf,sizeof(buf),"AT+LVL=4,%d\r\n",newPara.Spklv);//num
- printf(buf);
- ModemSendAt(buf);
- }
-
- SlwTrace(INF, "SetSPKlv OK",1);
- }
- // snprintf(buf,sizeof(buf),"AT+MIC=2,%d\r\n",newPara.Miclv);//num
- // printf(buf);
- // ModemSendAt(buf);
- //mInitSwitchStatus(MINI_SET_MICLV);
- mInitSwitchStatus(MINI_GET_CARD);
- break;
-
- case MINI_SET_MICLV:
- if(result != 1) SlwTrace(INF, "SetMiclv fail",1);
- else {
- if(newPara.Miclv!=atoi(&msg[5])){
- snprintf(buf,sizeof(buf),"AT+MIC=2,%d\r\n",newPara.Miclv);//num
- printf(buf);
- ModemSendAt(buf);
- }
- SlwTrace(INF, "SetMiclv OK",1);
- }
- mInitSwitchStatus(MINI_GET_CARD);
- break;
- case MINI_GET_CARD:
- if(result != 1){
- ret=-2;
- break;
- }else{
- //SpeakTTSVoice();
- SlwTrace(INF, "Card Ready",1);
- mInitSwitchStatus(MINI_PLY_ICCID);
- }
- break;
- // case MINI_GET_IMEI:
- // if(result != 1) SlwTrace(INF, "GetIMEI fail",1);
- // else{
- // ModemGetIMEI(msg);
- // }
- // mInitSwitchStatus(MINI_PLY_ICCID);
- // break;
-
- case MINI_PLY_ICCID:
- if(result != 1) SlwTrace(INF, "GetICCID fail",1);
- else{
- ModemGetICCID(msg);
- CodecFileInit();
- GetMododexWithCard();//后面加上去
- }
- mInitSwitchStatus(MINI_POC_PARA);
- break;
-
- case MINI_POC_PARA:
- if(result != 1) SlwTrace(INF, "GetPocPara fail",1);
- else ModemSetPocPara(msg,pMsg->MsgLen);
- ModemApnConfig();
- mInitSwitchStatus(MINI_SET_POC_SIMPLE);
- break;
- case MINI_SET_POC_SIMPLE:
- if(result != 1) SlwTrace(INF, "SetPocSMode fail",1);
- else SlwTrace(INF, "SetPocSMode Ok",1);
- snprintf(buf,sizeof(buf),"AT+MIC=2,%d\r\n",newPara.Miclv);//
- printf(buf);
- ModemSendAt(buf);
- ModemSendAt("AT+POC=030000\r\n");
- ret=1;
- break;
- }
- return ret;
- }
- PT_THREAD (ptModemInitTask(struct pt *pt))
- {
- static timer_t ptTimer;
- static unsigned char intCmd;
- static unsigned char status;
- static short i,t;
- short ret;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- PT_BEGIN(pt);
-
- while(1){
- M_RESTART:
- SlwTrace(INF,"ModemInit...",1);
- memset((unsigned char *)&sutPocStatus, 0, sizeof(SUT_POC_STATUS));
- SetLedIndicator(IndNoNet);
- modemInitReady=0;
- modemInitStatus=0;
- g_iPocVer=0;
- MsgQueueSet();
- MODEM_RESET_HIGH;
- PTTimerStart(&pt_timerPool, &ptTimer, 200);
- PT_WAIT_UNTIL(pt, PTTimerIsExpired(&ptTimer));
- MODEM_RESET_LOW;
- // MODEM_PWRKEY_HIGH;
- MODEM_PWREN_HIGH;
- PTTimerStart(&pt_timerPool, &ptTimer, 120);
- PT_WAIT_UNTIL(pt, PTTimerIsExpired(&ptTimer));
- //MODEM_PWRKEY_LOW;
- MODEM_PWREN_LOW;
- //goto SEND_GET_RET;
- mInitSwitchStatus(MINI_WAT_START);
- modemInitReady=1;
-
- SEND_WAIT_PRO:
- status=0;
- for(i=0;i<timeOut;i++){//共等60*500=30000ms
- ModemSendAt(SendAT);
- t=25;//以下等20*25=500ms
- while(t--){
- if(g_ucEnterGTNow!=0) goto INIT_DONE;//使得GT可以直接跳出初始化过程
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))){
- //printf("Ack:%s",pMsg->MsgData);调试
- if(0==ModemStrCmp((char *)pMsg->MsgData,WaitAT1) ||
- 0==ModemStrCmp((char *)pMsg->MsgData,WaitAT2)){
- //if(sutPocStatus.modemRstFlag !=0) goto M_RESTART;//用于3合一切换版本
- status=1;
- goto SEND_GET_RET;
- }
- }else{
- PTTimerStart(&pt_timerPool, &ptTimer, 2);
- PT_WAIT_UNTIL(pt, PTTimerIsExpired(&ptTimer));
- }
- }
- }
- SEND_GET_RET:
- ret=ModemInitAckHandler(status);
- //ret=-1;
- if(ret ==0) goto SEND_WAIT_PRO;
- else if(ret<0){//模块启动失败/卡不在
- if(ret==-1){
- SlwTrace(INF, "ModemInitTimeout GT Mode",1);
- EnterGTMode();
- }else if(ret==-2){
- SlwTrace(INF, "insert card error----",1);
- sutPocStatus.loginResult=4;
- }
- }
- INIT_DONE:
- //初始化完成
- modemInitStatus=1;//可以消耗模块消息队列了
- g_ucModemTaskEn=1;
-
- PTTimerStart(&pt_timerPool, &ptTimer, 200);
- PT_WAIT_UNTIL(pt, PTTimerIsExpired(&ptTimer));
- SpeakTTSVoice();//cat4 配置完音量需要延时方可播报,实属无奈
- //ModemSendAt("AT+AUDCH=1\r\n");
- while(1){
- if(sutPocStatus.modemRstFlag !=0) goto M_RESTART;
- sutPocStatus.ModemInactiveCt=0;
- PTTimerStart(&pt_timerPool, &ptTimer, 100);//100
- PT_WAIT_UNTIL(pt, PTTimerIsExpired(&ptTimer));
- }
- }
- PT_END(pt);
- }
- void InfoTick(void){
- static unsigned int tick;
- if(g_ucEnterGTNow) return;
- if(uTimerExpired(&tick)){
- uTimerStart(&tick, 500);
- printf("Info:Auth[%d],GT[%d],MI[%d],UI[%d]\r\n",sutGpsInfo.isGpsAuthOk,g_ucEnterGTNow,modemInitStatus,sutUIstatus.Status);
- }
- }
- static void AtHandle(char *msg);
- void ModemATProcess(void){
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- if(modemInitStatus==0) return;
- while(1){
- pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData));
- if(pMsg->MsgLen>0){
- if(g_ucEnterGTNow!=0) continue;//如果进入GT模式,不需要处理模块消息了
- SlwTrace(INF, (char *)pMsg->MsgData,0);
- sutPocStatus.ModemInactiveCt=0;
- if(pMsg->MsgData[0]=='+' || pMsg->MsgData[0] == '^'){
- if(1 == PocHandle((char *)pMsg->MsgData)) continue;
- AtHandle((char *)pMsg->MsgData);
- }
- continue;
- }else if(pMsg->MsgLen<0){
- SlwTrace(INF, "QueueF1",1);
- continue;
- }
- break;
- }
- }
- void ModemLedCtl(void){
-
- if(g_ucModemTaskEn==0||g_ucEnterGTNow!=0) return;
- if(0==sutPocStatus.Logined)SetLedIndicator(IndNoNet);
- else if(sutPocStatus.Speaker>0)SetLedIndicator(IndRX);
- else if(sutPocStatus.Mic>0 && sutPocStatus.PPTpress>0)SetLedIndicator(IndTX);
- else SetLedIndicator(IndStandby);
- }
- static void AtHandle(char *pMsg)
- {
- int csq;
- short targetIndex;
- unsigned char tempSocket,i,temp;
- unsigned short tempLen;
- char buf[80]="\r\n";
- char bufTemp[3];
- char buf3[40];
- STATUE ipStatus;
- if(0==ModemStrCmp(pMsg,"^SYSINFO:")){
- if(pMsg[15]!=','){
- netshowvalue=atoi(&pMsg[15]);
- }else{
- netshowvalue=atoi(&pMsg[16]);
- }
- }else if(0==ModemStrCmp(pMsg,"+CSQ:"))
- {
- g_iCSQ=atoi(&pMsg[6]);
- }else if(0==ModemStrCmp(pMsg,"+MODODREX:")){
- Mododrex_Net=atoi(&pMsg[11]);
- snprintf(buf3,sizeof(buf3),"Mododrex_Netvalue=%d\r\n",Mododrex_Net);
- SlwTrace(INF, buf3,1);
- }else if(0==ModemStrCmp(pMsg,"+POC_PPP:")){
- if(pMsg[9]=='1') netPPP=OPEN;
- else netPPP=CLOSE;
- }else if(0==ModemStrCmp(pMsg,"+TCPSTATUS:")){
- tcpSocketStatusUpdate(pMsg[11],pMsg[13],0);
- }else if(0==ModemStrCmp(pMsg,"+TCPRECV:")){//+TCPRECV:0,2,31
- if(-1 != (targetIndex=FindTargetIndex(pMsg, '\r', ":", 1,1))){
- tempSocket = atoi(&pMsg[targetIndex]);//找到socket
- if(-1 != (targetIndex=FindTargetIndex(pMsg, '\r', ",",1,1))){
- tempLen = atoi(&pMsg[targetIndex]);
- if(-1 != (targetIndex=FindTargetIndex(pMsg, '\r', ",",1,2))){
- tcpSocketRecv(tempSocket, &pMsg[targetIndex], tempLen);
- }
- }
- }
- }else if(0==ModemStrCmp(pMsg,"+TCPOPEN:")){
- tcpSocketStatusUpdate(pMsg[9],pMsg[11],0);
- }else if(0==ModemStrCmp(pMsg, "+TCPCLOSE:")){//主动关掉或者服务器关掉都是这样
- tcpSocketStatusUpdate(pMsg[10],NULL,1);
- }else if(0==ModemStrCmp(pMsg, "+CCLK:"))
- {//+CCLK: "17/09/28,04:48:35"
- //+CCLK: "80/01/06,00:10:44"
- //+CCLK: "17/10/19,07:22:35"
- // g_usModeYTime=atoi(&pMsg[8]);
- // g_usModemTime=atoi(&pMsg[11]);
- // g_usModeDTime=atoi(&pMsg[14]);
- // g_usModeHTime=atoi(&pMsg[17])+8;
- // if(g_usModeHTime >= 24) g_usModeHTime -= 24;
- // g_usModeMTime=atoi(&pMsg[20]);
- // g_usModeSTime=atoi(&pMsg[23]);
- // SetTime(g_usModeHTime, g_usModeMTime, g_usModeSTime);//保存下来,以便下次启动,没登陆前可以使用本地时间显示
- // SlwTrace(INF, "UpdateTime",1);
- }else if(0==ModemStrCmp(pMsg, "^MODE:"))
- {//^MODE: 9 与下面位置不一,模块问题
- //^MODE:2 与上面位置不一,模块问题
- if(pMsg[6] == ' ') bufTemp[0]=pMsg[7];
- else bufTemp[0]=pMsg[6];
- snprintf(buf, sizeof(buf), "[Mode %c]", bufTemp[0]);
- switch(bufTemp[0])
- {
- case 0x30:strcat(buf, "No server");break;
- case 0x32:strcat(buf, "CDMA Mode");break;
- case 0x33:strcat(buf, "GSM");break;
- case 0x34:strcat(buf, "TD-SCDMA/EVDO");break;
- case 0x35:strcat(buf, "WCDMA");break;
- case 0x39:strcat(buf, "LTE");break;
- default:strcat(buf, "Unknow");break;
- }
- SlwTrace(INF, buf, 1);
- }else if(0==ModemStrCmp(pMsg, "+POC:START"))
- {
- sutPocStatus.modemRstFlag=1;
- sutPocStatus.ModemInactiveCt=0;//当模块重启后重新计数串口通讯异常计数器
- }
- else if(0==ModemStrCmp(pMsg, "+GGIP:"))
- { //GSPIP返回
-
- if(newPara.serList.defaultuse==SER_JIQUN||newPara.serList.defaultuse==SER_IP)chekPipGip(pMsg,1);
- }else if(0==ModemStrCmp(pMsg, "+GPIP:"))
- {
- if(newPara.serList.defaultuse==SER_JIQUN||newPara.serList.defaultuse==SER_IP)chekPipGip(pMsg,0);
-
- }else if(0==ModemStrCmp(pMsg, "+FOTA:")){
- FotaStatusProcess(pMsg+6);
- uTimerStart(&fotaTick,10);
- }else if(0==ModemStrCmp(pMsg, "+POC:WAKEUP")){
- enableDataSend();
- }else if(0==ModemStrCmp(pMsg, "+UDP:")){
- GetPwrMode(pMsg+5);
- }else if(0==ModemStrCmp(pMsg, "+AUDCH"))//
- {
-
- }else if(0==ModemStrCmp(pMsg,"+CTEC:"))
- {
- tempnetshowvalue=atoi(&pMsg[7]);
- if(newPara.netMode!=tempnetshowvalue){
- snprintf(buf,sizeof(buf),"AT+CTEC=%d,%d\r\n",tempnetshowvalue,newPara.netMode);
- ModemSendAt(buf);
- }
- }else if(0==ModemStrCmp(pMsg,"+COPS")){
- netshowvalue=atoi(FindContentByChar(pMsg,',',3,buf));
- }
- }
- ////+COPS: 0,2,"46011",7
- //char FindContentByChar( char *src,char c, char index)
- //{
- // char i;
- // char j=0;
- // for(i=0;i<strlen(src);i++)
- // {
- // if(src[i]==c)j++;
- // if(j==index)
- // return i+1;
- // }
- //}
- char *FindContentByChar( char *src,char c, char index,char *dest)
- {
- char i;
- char j=0;
- char *p=dest;
- for(i=0;i<strlen(src);i++)
- {
- if(src[i]==c)j++;
- if(j==index){
- p=&src[i+1];
- return p;
- }
- }
- }
- void chekPipGip(char *src,char type)
- {
- char buf[40];
- char *p;
- p=src+6;
- if(!type)snprintf(buf,sizeof(buf),"+GPIP:%s\r\n",showPIP);
- else snprintf(buf,sizeof(buf),"+GGIP:%s\r\n",showGIP);
- if(strlen(src)<9||(0==ModemStrCmp(src, "+GGIP:0.0.0.0"))||(0==strcmp(src,buf))||(0==ModemStrCmp(src, "+GPIP:0.0.0.0")))return ;
- sutGpsInfo.isGpsAuthOk=0;// 重新鉴权
- if(!type){
- memcpy(showPIP,p,strlen(p)-2);
- showPIP[strlen(p)-2]=0;
- printf("get new PIP====%s\r\n",showPIP);
- }else{
- memcpy(showGIP,p,strlen(p)-2);
- showGIP[strlen(p)-2]=0;
- printf("get new GIP====%s\r\n",showGIP);
- strcpy(gSocket.socketList[0].Ip,showGIP);
- }
- }
- void SpeakTTSVoice(void)
- {
- int len,timeout,i;
- char ttsMessage[20*4];
- //SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- unsigned char codeType=ENCODE_UNICODE;
- if(newPara.ttsMessage[0]==0) return;
- len=strlen(newPara.ttsMessage);
- len = len+(8-len%8);//8倍数
- if(newPara.ttsCodeType==TTS_UNICODE)
- {
- codeType=ENCODE_UNICODEBigend;
- for(i=0;i<len;i+=4){
- ttsMessage[i]=newPara.ttsMessage[i+2];
- ttsMessage[i+1]=newPara.ttsMessage[i+3];
- ttsMessage[i+2]=newPara.ttsMessage[i];
- ttsMessage[i+3]=newPara.ttsMessage[i+1];
- printf("%c",ttsMessage[i]);
- printf("%c",ttsMessage[i+1]);
- printf("%c",ttsMessage[i+2]);
- printf("%c",ttsMessage[i+3]);
- }
- ttsMessage[len-1]=0;
- printf("\r\n");
- }else if(newPara.ttsCodeType==TTS_GBK) codeType=ENCODE_ASCII;
- MeSpeak(codeType,ttsMessage);
- }
- char GetCodecFromSrc(char *src, char index,char *name, char *pass)
- {
- char target[15];
- char finalData[62];
- char buf[30];
- unsigned char tempLen,i,j;
- j=0;
- index +=1;
-
- snprintf(target, sizeof(target), "CODEC%03d", index);
- SlwTrace(INF,target,0);
- tempLen=GetParaFromStr(src, target, finalData);
- // printf("tempLen==%d\r\n",tempLen);
- // SlwTrace(INF,finalData,1);
- if(tempLen == 0) return 0;
-
- for(i=0;i<tempLen;i++)
- {
- if(finalData[i]==',')
- {
- j=i+1;
- finalData[i]=0;
- i=tempLen;
- }
- }
- tempLen=strlen(finalData);
- if(tempLen>30) tempLen=30;
- memcpy(name, finalData, tempLen);
- name[tempLen]=0;
- sprintf(buf,"===%s",name);
- SlwTrace(INF,buf,0);
- //
- tempLen=strlen(finalData+j);
- if(tempLen>30) tempLen=30;
- memcpy(pass, finalData+j, tempLen);
- pass[tempLen]=0;
- sprintf(buf,"===%s",pass);
- SlwTrace(INF,buf,1);
- return 1;
- }
- int CodecFileInit(void)
- {
- int len;
- char tempData[40];
- char name[10];
- char pass[10];
- char buf[40];
- char CodecFileIndex=0;
- int tempLen,i;
- char ret=0;
-
- CodecFileIndex=GetFileIndex("codec.ini");
-
- if(CodecFileIndex == -1)
- {
- printf("No codec.ini file\r\n");
- codec_param.CodecNum=0;
- return -1;
- }
-
- len=GetFileLen(CodecFileIndex);
-
- if(len==0)
- {
- printf("codec.ini empty\r\n");
- return-2;
- }
- // //读出数据
- // if(HgsApnLen > sizeof(tempData))
- // {
- // printf("codec.ini len=%d,should <=%d\r\n",HgsApnLen,sizeof(tempData));
- // HgsApnLen=sizeof(tempData);
- // }
- //REG_NUM=005;
- tempLen=ReadFileData(CodecFileIndex,0,14,(u8*)tempData); //文件,start地址,长度 ,返回数据
- tempLen=GetParaFromStr(tempData, "REG_NUM", name);
-
- if(tempLen==0)
- {
- printf("No 'REG_NUM'\r\n");
- return -2;
- }else{
- codec_param.CodecNum=atoi(name);
- if(codec_param.CodecNum>CODEC_NUM){
-
- printf("REG_NUM OVER:%d\r\n", codec_param.CodecNum);
- codec_param.CodecNum=0;
- return -3;
- }
- }
- printf("REG_NUM:%d\r\n", codec_param.CodecNum);
- //读出数据
- for(i=0;i<codec_param.CodecNum;i++)
- {
- tempLen=ReadFileData(CodecFileIndex,14+21*i,21,(u8*)tempData);
- //printf("temp====%d\r\n",tempLen);
- memcpy(buf,tempData,tempLen);
- buf[tempLen]=0;
- //SlwTrace(INF,buf,1);
-
- if(0==GetCodecFromSrc(buf, i, name,pass))//tempData
- {
- //获取失败,恢复默认
- SlwTrace(INF,"cant find index\r\n",1);
- codec_param.CodecNum=0;
- return -4;
- }else{
- // ret=ModemSetCodec(atoi(name),atoi(pass));
- // if(ret!=0)printf("SET CodecErroAddr=%02x\r\n",ret);
-
- sprintf(buf,"AT+CODEC=3,%2x,%4x\r\n",atoi(name),atoi(pass));
- ModemSendAt(buf);
- }
- uTimerHardDly(50);
- IWDG_ReloadCounter();
- }
-
- return 0;
- }
|