12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430 |
- /**********************************************************************************
- * File Name: Modem.c
- * Function Describe:device for modem
- * Relate Module:
- * Explain: the modem must be using ZTE MC8332
- * Writer: ShiLiangWen
- * Date: 2015.1.20
- ***********************************************************************************/
- #define THIS_FILE_ID 2
- /* Includes ------------------------------------------------------------------*/
- #include "includes.h"
- //os_mbx_declare (PocMsgBox, 5); /* Declare an RTX mailbox */
- //_declare_box(PocMpool,sizeof(SUT_MODEM_POC_MSG),5);
- //SUT_SMS_PARA sutSMSpara;
- //os_mbx_declare (AtMsgBox, 7); /* Declare an RTX mailbox */
- //_declare_box(AtMpool,sizeof(SUT_MODEM_AT_MSG),7);
- SUT_MODEM_AT_MSG sutAtm,sutAtmPro;
- unsigned char Modem_TypeSetFlag;
- unsigned char g_ucModemSentTcpCt;//TCP 发送计数器
- unsigned char g_usModeMTime=0x00;
- unsigned char g_usModeSTime=0x00;
- unsigned char g_usModeHTime=0x00;
- unsigned char g_usModeYTime=0x00;//年
- unsigned char g_usModemTime=0x00;//月
- unsigned char g_usModeDTime=0x00;//日
- //MODEM_TYPE MODEM_TYPE;
- /************************************************************************************
- *
- *************************************************************************************/
- void ModemSendAT(char *p)
- {
- unsigned short len;
- len=strlen(p);
- RunMake(THIS_FILE_ID);
- #if UART2_TX_USE_DMA==0
- Uart2Send(p,len);
- #else
- USART2_Send(p,len);
- #endif
-
- }
- /************************************************************************************
- *
- *************************************************************************************/
- void ModemSendData(unsigned char *pData,unsigned short datalen)
- {
-
- #if UART2_TX_USE_DMA==0
- Uart2Send(pData,datalen);
- #else
- USART2_Send((char *)pData,datalen);
- #endif
- }
- /**********************************************************************************
- 等待模块启动完成
- 0:成功 -1:超时
- ***********************************************************************************/
- int WaitModemIsOpened(void)
- {
-
- int i;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- RunMake(THIS_FILE_ID);
- for(i=0;i<100;i++){
- SlwTrace(INF,"AT",1);
- ModemSendAT("AT\r\n");
- //if(OS_R_TMO!=os_mbx_wait(AtMsgBox,(void **)&pMsg,50)){
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))){
- if('O'==pMsg->MsgData[0] && 'K'==pMsg->MsgData[1]){
- return 0;
- }
- //free(pMsg);
- }else os_dly_wait(1);
- }
- return -1;
- }
- /*************************************************************************
- *ModemWaitAtReady
- **************************************************************************/
- int ModemWaitAtReady(void)
- {
- int i;
- SUT_MODEM_AT_MSG *pMsg;
- for(i=0;i<20;i++){
- if(ModemSendAT2WaitAckMsg("AT\r\n","OK",&pMsg,100)){
- //_free_box(AtMpool,pMsg);
- return 1;
- }
- }
- return 0;
- }
- /*************************************************************************
- ModemWaitOpen
- 等待模块开机
- 通过检查模块主动上报:
- **************************************************************************/
- int ModemWaitOpen(int timeout)
- {
- //char *pAck;
- //SUT_MODEM_AT_MSG **pMsg;
- SUT_MODEM_AT_MSG *Msg;
- SlwTrace(DEBUG,"ModemWaitOpen",1);
- while(timeout--){
- //if(OS_R_TMO!=os_mbx_wait(AtMsgBox,(void **)&Msg,1)){
- if((Msg->MsgLen = MsgQueueAccept(Msg->MsgData,sizeof(Msg->MsgData)))){
- SlwTrace(DEBUG,(char *)Msg->MsgData,0);
- // if(0==ModemStrCmp((char *)Msg->MsgData,pAck)){
- // *pMsg=Msg;
- // return 1;
- // }else{
- // _free_box(AtMpool,Msg);
- //}
- }else os_dly_wait(1);
- }
- return 1;
- }
- //模块的电源以及复位引脚的配置
- //这段配置要放要最开始
- //目的是一开机时确保模块是没有电源的
- //解决原来问题:当开机到模块播报“欢迎.....”时马上关机,看到屏幕灭后马上又开机,此次开机会失败
- void ModemPinConfig(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
-
- RCC_LSEConfig( RCC_LSE_OFF );
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Pin = MODEM_RESET_PIN;
- GPIO_Init(MODEM_RESET_PORT, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = MODEM_PWRKEY_PIN;
- GPIO_Init(MODEM_PWRKEY_PORT, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = MODEN_POWER_EN_PIN;
- GPIO_Init(MODEN_POWER_EN_PORT,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = MODEM_VBUS_EN_PIN;
- GPIO_Init(MODEM_VBUS_EN_PORT,&GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
- GPIO_InitStructure.GPIO_Pin = MODEN_BOOT_EN_PIN;
- GPIO_Init(MODEN_BOOT_EN_PORT,&GPIO_InitStructure);
-
- MODEN_BOOT_EN_LOW;
- MODEN_POWER_EN_LOW;
- MODEM_RESET_LOW;
-
- }
- /**********************************************************************************
- ModemInit
- 返回:1 初始化成功 0-失败
- ***********************************************************************************/
- int ModemInit(void)
- {
- RunMake(THIS_FILE_ID);
- Uart2Init();
- MsgQueueSet();//初始化队列
- g_ucModemSentTcpCt=0;
- RunMake(THIS_FILE_ID);
- //return 0;//测试
- MODEM_PWRKEY_HIGH;
-
- MODEM_RESET_HIGH;
- os_dly_wait(200);//100
- MODEM_RESET_LOW;
- MODEN_POWER_EN_HIGH;
- os_dly_wait(100);
- MODEN_POWER_EN_LOW;
- sutPocStatus.ModemPowerOn=1;
- //等待模块开机并能接受AT命令
- if(WaitModemStart())return 0;
- return 1;
- //ModemGetIMEI();
- }
- /**********************************************************************************
- CSQ2Num
- ***********************************************************************************/
- int CSQ2Num(char *str)
- {
- int csq;
- csq=atoi(str);
- if(csq<0 || csq>99)return 99;
- else return csq;
- }
- /**********************************************************************************
- ModemStrCmp
- ***********************************************************************************/
- int ModemStrCmp(char *msg,char *str)
- {
- char *p1=str;
- char *p2=msg;
- while(*p1!=0){
- if(*p1!=*p2)return 1;
- p1++;
- p2++;
- }
- return 0;
- }
- /**********************************************************************************
- ModemWaitAckMsg
- Input:
- pATCmd--AT Command string
- pAck --期待回的ACK,头相同即可
- pMsg --实际消息内容,可能比pAck长
- timeout --超时,10ms为单位
- Output:
- if timeout return 0
- else return 1 注意,处理完消息要调用_free_box释放消息
- ***********************************************************************************/
- int ModemSendAT2WaitAckMsg(char *pATCmd,char *pAck,SUT_MODEM_AT_MSG **pMsg,int timeout)
- {
- SUT_MODEM_AT_MSG *Msg=&sutAtmPro;
- ModemSendAT(pATCmd);
- while(timeout){
-
- //if(OS_R_TMO!=os_mbx_wait(AtMsgBox,(void **)&Msg,1)){
- if((Msg->MsgLen = MsgQueueAccept(Msg->MsgData,sizeof(Msg->MsgData)))){
- //SlwTrace(DEBUG,(char *)Msg->MsgData);
- if(0==ModemStrCmp((char *)Msg->MsgData,pAck)){
- *pMsg=Msg;
- return 1;
- }else{
- //_free_box(AtMpool,Msg);
- }
- }else {
- timeout--;
- os_dly_wait(1);
- }
-
- }
- return 0;
- }
- /********************************************
- *0x12 --> "12" --> 0x31 0x32
- **********************************************/
- void HexToAsc(unsigned char Hex,char *pAsc)
- {
- unsigned char h,l;
- l=Hex & 0x0f;
- h=Hex >> 4;
- if((l>=0)&&(l<=9))l += 0x30;
- else if((l>=10)&&(l<=15))l += ('A'-10);
-
- if((h>=0)&&(h<=9))h += 0x30;
- else if((h>=10)&&(h<=15))h += ('A'-10);
-
- pAsc[0]=h;
- pAsc[1]=l;
- }
- void HexToStr(unsigned char *HexStr,char *AscStr,unsigned short len)
- {
- int i,j=0;
- for(i=0;i<len;i++)
- {
- HexToAsc(HexStr[i],&AscStr[j]);
- j+=2;
- }
- }
- /***********************************************************************************
- *ModemSendUdpData WCDMA没有UDP指令
- ************************************************************************************/
- int ModemSendUdpData(unsigned char socket,unsigned char *pData,unsigned short len)
- {
- int i;
- char buf[142];
- char tmp[5];
- unsigned char temp=0;
- snprintf(buf, sizeof(buf),"AT+ZIPSENDU=%d,%d\r",socket,len);
- ModemSendAT(buf);
- ModemSendData(pData,len);
-
- snprintf(buf, sizeof(buf),"UdpSend[%d]",len);
- SlwTrace(INF,buf,1);
-
- #ifdef SLW_DEBUG
- if(len>45)len=45;
- buf[0]='>';buf[1]='>';buf[2]=0;
- for(i=0;i<len;i++){
- snprintf(tmp, sizeof(tmp),"%02x,",pData[i]);
- strcat(buf,tmp);
- }
- SlwTrace(DEBUG,buf,1);
- #endif
- return 0;
-
- }
- /***********************************************************************************
- *StrToNum
- ************************************************************************************/
- unsigned short StrToNum(char *str)
- {
- unsigned short num;
- if(str[0]>0x2f && str[0]<0x3a){
- if(str[1]>0x2f && str[1]<0x3a){
- if(str[2]>0x2f && str[2]<0x3a){
- if(str[3]>0x2f && str[3]<0x3a){
- num=1000*(str[0]-0x30);
- num+=100*(str[1]-0x30);
- num+=10*(str[2]-0x30);
- num+=(str[3]-0x30);
- }else{
- num=100*(str[0]-0x30);
- num+=10*(str[1]-0x30);
- num+=(str[2]-0x30);
- }
- }else{
- num=10*(str[0]-0x30);
- num+=(str[1]-0x30);
- }
- }else{
- num= str[0]-0x30;
- }
- }else{
- num=0;
- }
- return num;
- }
- /***********************************************************************************
- *ModemPoweroff
- ************************************************************************************/
- void ModemPoweroff(void)
- {
- ModemSendAT("AT+ZPWROFF\r\n");
- os_dly_wait(50);
- ModemSendAT("AT+ZPWROFF\r\n");
- IWDG_ReloadCounter();//喂狗
- os_dly_wait(100);
- IWDG_ReloadCounter();//喂狗
- os_dly_wait(100);
- IWDG_ReloadCounter();//喂狗
- os_dly_wait(50);
- IWDG_ReloadCounter();//喂狗
- MODEM_PWRKEY_LOW;
- MODEM_RESET_HIGH;
- os_dly_wait(10);
- MODEM_RESET_LOW;
- }
- //0==ModemStrCmp((char *)pMsg->MsgData,"OK") ||
- char WaitModemStart(void)
- {
- int t,i;
- char buf[50];
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- SlwTrace(INF, "WaitModemRun:",0);
- for(i=0;i<10;i++)//100
- {
- t=500;//50
- //ModemSendAT("ATE0\r\n");
- ModemSendAT("AT\r\n");
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- //+CPIN: READY //RDY
- if(
- (0==ModemStrCmp((char *)pMsg->MsgData,"RDY"))||(0==ModemStrCmp((char *)pMsg->MsgData,"OK")))
- {
- SlwTrace(INF, "Runing",1);
- return 0;
- }
- }else
- os_dly_wait(1);
- }
- }
- SlwTrace(INF, "TimeOut",1);
- return 1;
- }
- char WaitPocInit(void)
- {
- int t,i;
- char buf[50];
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- SlwTrace(INF, "WaitPocInit:",0);
- ModemSendAT("AT+POC=605\r\n");
- for(i=0;i<100;i++)
- {
- t=50;
-
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- if(
- (0==ModemStrCmp((char *)pMsg->MsgData,">605&1")))
- {
- SlwTrace(INF, "PocInit Ok\r\n",1);
- return 0;
- }
- }else
- os_dly_wait(1);
- }
- }
- SlwTrace(INF, "PocInit TimeOut",1);
- return 1;
- }
- char GetPocVer()
- {
- int t,j;
- int i,len;
- char *p=0;
- j=0;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- for(i=0;i<50;i++){
- ModemSendAT("AT+POC=508\r\n");
- t=50;
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- len=strlen((char *)&(pMsg->MsgData));
- if((0==ModemStrCmp((char *)pMsg->MsgData,">120&"))&& len>7)
- {
- strcpy(g_iPocVer,&pMsg->MsgData[5]);
- p=g_iPocVer;
- while(*p!=0x0d){
- p++;
- j++;
- }
- g_iPocVer[j]=0;
- printf("[2]GET POC_VER OK--%s\r\n",g_iPocVer);
- return 1;
- }
-
- }else
- os_dly_wait(10);
- }
-
- }
- SlwTrace(INF,"[2]GET POC_VER FAILD\r\n",1);
-
- return 0;
- }
- char SetCodec(char *setcodec,char *readcodec,char*turecodec)
- {
- int t,j;
- int i,len;
- char Tempbuf[40];
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- for(i=0;i<50;i++){
- ModemSendAT(readcodec);
- t=50;
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- len=strlen((char *)&(pMsg->MsgData));
- if(len>7){
- if((0==ModemStrCmp((char *)pMsg->MsgData,turecodec)))
- {
- snprintf(Tempbuf,sizeof(Tempbuf),"Set Ok-->%s",setcodec);
- SlwTrace(INF,Tempbuf,1);
- return 1;
- }else {
- ModemSendAT(setcodec);
- printf("setnew-->%s",setcodec);
- }
- }
- }else
- os_dly_wait(1);
- }
- }
-
- snprintf(Tempbuf,sizeof(Tempbuf),"Set Failed-->%s",setcodec);
- SlwTrace(INF,Tempbuf,1);
- return 0;
- }
- char GetModemVer()
- {
- int t,j=0;
- int i,len;
- char Tempbuf[30];
- unsigned char *p=NULL;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- for(i=0;i<50;i++){
- ModemSendAT("ATI\r\n");
- t=50;
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- len=strlen((char *)&(pMsg->MsgData));
- if((0==ModemStrCmp((char *)pMsg->MsgData,"Revision"))&& len>7)
- {
- strcpy(HardRevision,&pMsg->MsgData[10]);
- p=HardRevision;
- while(*p!=0x0a){
- p++;
- j++;
- }
- HardRevision[j]=0;
-
- if(pMsg->MsgData[19]=='U'){
- Modem_type=USA_Modem;
- }else if(pMsg->MsgData[19]=='C'){
- Modem_type=Europe_Modem;
- }else{
- Modem_type=Un_KnownModem;
- }
- Modem_TypeSetFlag=1;
- SlwTrace(INF,"[3]GET MODEM Type OK \r\n",1);
- return 1;
- }
- }else
- os_dly_wait(10);
- }
- SlwTrace(INF,"[3]GET MODEM Type failed\r\n",1);
- return 0;
- }
- }
-
- int ModemGetIMEI(void)
- {
- int t,j;
- int i,len;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- for(i=0;i<50;i++){
- ModemSendAT("AT+GSN\r\n");//0x80DA219D
- //862015030301209 两种情况都会返回
- t=50;
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- len=strlen((char *)&(pMsg->MsgData));
- if(0==ModemStrCmp((char *)pMsg->MsgData,"0x"))
- {
- len -=4;
- memcpy(sutProductPara.HARDID, &pMsg->MsgData[2], len);
- if(len < sizeof(sutProductPara.HARDID))
- sutProductPara.HARDID[len]=0;
- return 1;
- }else if(len == 17)
- {
- len -= 2;
- memcpy(sutProductPara.HARDID, pMsg->MsgData, len);
- if(len < sizeof(sutProductPara.HARDID))
- sutProductPara.HARDID[len]=0;
- return 2;
- }
- }else
- os_dly_wait(1);
- }
- }
- return 0;
- }
- void ModemApnConfig(void)
- {
- char buf[100],index;
- char buf2[80];
- char i,t;
- char ApnSetFlag=0;
-
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
-
- snprintf(buf, sizeof(buf), "[11]Accessp:");
- if(sutProductPara.APNApn[0]==0)
- {//接入点为空时不配置,因为模块不支持
- strcat(buf, "unsupport-Empty");
- }else
- {
- snprintf(buf2, sizeof(buf2), "AT+MIPPROFILE=1,\"%s\"\r\n",sutProductPara.APNApn);
- ModemSendAT(buf2);
- snprintf(buf2, sizeof(buf2), "%s",sutProductPara.APNApn);
- strcat(buf,buf2);
- }
- SlwTrace(INF,buf,1);
-
- snprintf(buf, sizeof(buf), ",Name-Pass:");
- if(sutProductPara.APNName[0] ==0 ||
- sutProductPara.APNPass[0] ==0)
- {//名称或密码为空不配置,因为模块不支持
- strcat(buf, "unsupport-Empty");
- }else
- {
-
- snprintf(buf2, sizeof(buf2),"AT^PPPCFG=\"%s\",\"%s\"\r\n",sutProductPara.APNName,sutProductPara.APNPass);
- ModemSendAT(buf2);
- SlwTrace(INF,buf2,0);
-
- snprintf(buf, sizeof(buf), "^PPPCFG:\"%s\",\"%s\"",sutProductPara.APNName,sutProductPara.APNPass);
- for(i=0;i<5;i++)
- {
- t=50;
- ModemSendAT("at^pppcfg\r\n");
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- if(0==ModemStrCmp((char *)pMsg->MsgData,buf))
- {
-
- ApnSetFlag=1;
- break;
- }else{
- if(t==0)ModemSendAT(buf2);
- }
-
- }else
- os_dly_wait(1);
- }
-
- }
- if(ApnSetFlag==1){
- SlwTrace(INF,"PPPCFG is OK",1);
- }else
- SlwTrace(INF,"PPPCFG is failed",1);
-
- ApnSetFlag=0;
- memset(buf,0,sizeof(buf));
- memset(buf2,0,sizeof(buf2));
- if(sutProductPara.ApnAuthType!=0){
-
- snprintf(buf2, sizeof(buf2),"AT$QCPDPP=1,%d,%s,%s\r\n",sutProductPara.ApnAuthType,sutProductPara.APNPass,sutProductPara.APNName);
- ModemSendAT(buf2);
- SlwTrace(INF,buf2,0);
- snprintf(buf, sizeof(buf), "$QCPDPP: 1,%d,\"%s\"",sutProductPara.ApnAuthType,sutProductPara.APNName);
-
- for(i=0;i<5;i++)
- {
- t=50;
- ModemSendAT("AT$QCPDPP?\r\n");
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- if(0==ModemStrCmp((char *)pMsg->MsgData,buf))
- {
-
- ApnSetFlag=1;
- break;
- }else
- {
- if(t==0)ModemSendAT(buf2);
- // break;
-
- }
- }else
- os_dly_wait(1);
-
- }
- }
- if(ApnSetFlag==1){
- SlwTrace(INF,"QCPDPP is OK",1);
- }else
- SlwTrace(INF,"QCPDPP is failed",1);
-
- }else
- {
- for(i=0;i<3;i++){
- snprintf(buf2, sizeof(buf2),"AT$QCPDPP=1,%d\r\n",sutProductPara.ApnAuthType);
- ModemSendAT(buf2);
- os_dly_wait(30);
- }
-
- }
-
-
- }
-
- }
- void M9507CSendTcpData(unsigned char socket, unsigned char *pData, unsigned short len)
- {
- char buf[20];
-
- snprintf(buf, sizeof(buf), "AT+TCPSEND=%d,%d,",socket, len);
- ModemSendAT(buf);
- ModemSendData(pData, len);
- ModemSendAT("\r\n");
- }
- //LoginPocInfo();
- void LoginSetPocPara(void)
- {
- char i,t;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- //先配置一次,再查,因为默认就查有可能是没有返回的
- char Tempbuf[100];
- snprintf(Tempbuf,sizeof(Tempbuf),"AT+POC=504&%s&%s&%s&%s&%s&%s&%d&%d&%d&%s\r\n",sutProductPara.PIP,sutProductPara.APNApn,sutProductPara.Net_Mode \
- ,sutProductPara.Language,sutProductPara.Local,sutProductPara.Channel,sutProductPara.SendToneEnadble,sutProductPara.RecvToneEnadble,sutProductPara.PromptToneEnable,sutProductPara.IMEI);
- SlwTrace(INF,Tempbuf,1);
-
- for(i=0;i<10;i++)
- {
- t=300;
- ModemSendAT(Tempbuf);;
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- if(0==ModemStrCmp((char *)pMsg->MsgData,">504&1"))
- {
- SlwTrace(INF, "Set PocPara",1);
- return;
- }else{
- //if(t==0) ModemSendAT(buf);
- }
- }else
- os_dly_wait(1);
- }
- }
- SlwTrace(INF, "Set PocPara failed",1);
- }
- void VolumeSet(void)
- {
- char i,t;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- char buf[20];
- //先配置一次,再查,因为默认就查有可能是没有返回的
- snprintf(buf,sizeof(buf),"AT+POC=607&%d\r\n",sutProductPara.VolLv);
- for(i=0;i<10;i++)
- {
- t=100;
- ModemSendAT(buf);
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- if(0==ModemStrCmp((char *)pMsg->MsgData,">607&1"))
- {
- SlwTrace(INF, "[03]Set Volume ok",1);
- return;
- }else{
- //if(t==0) ModemSendAT(buf);
- }
- }else
- os_dly_wait(1);
- }
- }
- SlwTrace(INF, "[03]Set Volume failed",1);
- }
- void ServerTimeGet(void)
- {
- static unsigned short timeCnt=12000;
-
- if(++timeCnt < 12000) return;
- timeCnt=0;
- ModemSendAT("AT+CCLK?\r\n");
- }
- //total 群组总数
- //一次获取个数最多5个,取决于显示条目个数
- void SimpleGroupInfoScan(char firstIn,char direction)
- {
- uint16_t i;
- uint16_t timeout;
- char buf[30];
- uint16_t thisStartIndex;
- uint8_t readNum;
- char flag=0;
- char trycnt=0;
-
-
- if(firstIn) sutPocStatus.handleIndex=0;
- // if(0==strcmp(sutProductPara.Language,"cn"))ShowMessageBox("请稍候..."); //0
- // else ShowMessageBox("Please Wait...");
- // os_dly_wait(1);
- // snprintf(buf, sizeof(buf),"AT+POC=0E0000%08x\r\n",sutPocStatus.LocalGroup.ID);//先更新总数
- // ModemSendAT(buf);
-
- ModemSendAT(POC_CMD_GROUP_SUM);
- SlwTrace(INF,buf,0);
- timeout=1000;
- sutPocStatus.GroupNum_Update=0;
- sutPocStatus.GroupOnLineNum=0;
-
- while(timeout)
- {
- timeout--;
- OsDelayTime(1);
- //if(sutPocStatus.UserNum_Update) break;
- if(sutPocStatus.GroupNum_Update)break;
- if(timeout % 200 == 0)
- ModemSendAT(POC_CMD_GROUP_SUM);
- }
-
- if(sutPocStatus.GroupOnLineNum<=0){
- sutPocStatus.FillGroupIndex=0;
- goto QUIT_FUNCTION;
- }
- // if(sutPocStatus.handleIndex >= sutPocStatus.GroupOnLineNum)
- // {
- // snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.handleIndex);
- // SlwTrace(INF, buf, 1);
- // sutPocStatus.handleIndex=0;
- // }
- if(sutPocStatus.GroupOnLineNum%5==0)flag=5;
- else flag=sutPocStatus.GroupOnLineNum%5;
-
- printf("*********flag==%d********handleIndex====%d,readNum==%d\r\n",flag,sutPocStatus.handleIndex,readNum);
- //然后根据最新总数来获取每个成员信息
- if(direction==1)//递增索引
- {
- thisStartIndex=sutPocStatus.handleIndex;
- if(sutPocStatus.GroupOnLineNum-thisStartIndex>=5) readNum=5;
- else {
-
- readNum=sutPocStatus.GroupOnLineNum-thisStartIndex;
- }
-
- }else{//递减索引
-
- thisStartIndex=sutPocStatus.handleIndex;
-
- if(sutPocStatus.handleIndex <5) //<
- {
- thisStartIndex=0;//0
- readNum=sutPocStatus.GroupOnLineNum; //(sutPocStatus.UserOnLineNum%5)
- }
- else if(sutPocStatus.GroupOnLineNum-thisStartIndex<=flag){
- if((sutPocStatus.GroupOnLineNum%5)==0){
- SlwTrace(INF,"GO UPUPUP-------------------\r\n",1);
- readNum=5;
- }
- else readNum=(sutPocStatus.GroupOnLineNum%5); //Z
- //thisStartIndex=sutPocStatus.UserOnLineNum-readNum;
-
- }
- else
- {
- //thisStartIndex=sutPocStatus.handleIndex-5;
- readNum=5;
- }
- }
- if(readNum >= 5) readNum=5;
- sutPocStatus.FillGroupIndex=0;
- printf("this=====%d===handleIndex====%d,readNum==%d\r\n",thisStartIndex,sutPocStatus.handleIndex,readNum);
- for(i=thisStartIndex;i<(thisStartIndex+readNum);i++)
- {
- RETRYGROUP:
- sutPocStatus.GetOneGroupFlag=0;
- snprintf(buf, sizeof(buf), "AT+POC=534&%d&1\r\n",i);
- ModemSendAT(buf);
- SlwTrace(INF, buf,0);
- timeout=50;
- while(1)
- {
- OsDelayTime(1);
- if(sutPocStatus.GetOneGroupFlag)
- {
- sutPocStatus.FillGroupIndex++;
- break;
- }
- if(--timeout==0) {
-
- if(++trycnt>10){
- trycnt=0;
- UISetNextStatus(UIS_MENU_MAIN);
- return;
- }
- goto RETRYGROUP;
- break;
- }
- }
- }
-
- // if(direction==1) sutPocStatus.handleIndex += readNum;
- // else {
- // sutPocStatus.handleIndex -= readNum;
- // }
- if(firstIn) {
- sutPocStatus.handleIndex=0;
- //lastOption=1;
- }
- //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
- QUIT_FUNCTION:
- //GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
-
- }
- //total 成员总数
- //一次获取个数最多5个,取决于显示条目个数
- //前提是要使用简短模式
- void SimpleUserInfoScan(uint8_t firstIn,uint8_t direction)
- {
- uint16_t i;
- uint16_t timeout;
- char buf[30];
- uint16_t thisStartIndex;
- uint8_t readNum;
- static char flag;
- char trycnt=0;
- if(firstIn) {
- sutPocStatus.handleIndex=0;
- }
- // if(0==strcmp(sutProductPara.Language,"cn"))ShowMessageBox("请稍候..."); //0
- // else ShowMessageBox("Please Wait...");
- // os_dly_wait(1);
-
- ModemSendAT(POC_CMD_USER_SUM);
- timeout=1000;
- sutPocStatus.UserNum_Update=0;
- sutPocStatus.UserOnLineNum=0;
- while(timeout)
- {
- timeout--;
- OsDelayTime(1);
- if(sutPocStatus.UserNum_Update) break;
- if(timeout % 200 == 0)
- //ModemSendAT(buf);
- ModemSendAT(POC_CMD_USER_SUM);
- }
-
- if(sutPocStatus.UserOnLineNum<=0)
- {
- sutPocStatus.FillUserIndex=0;
- goto QUIT_FUNCTION;
- }
- // if(sutPocStatus.handleIndex >= sutPocStatus.UserOnLineNum)
- // {
- // snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.handleIndex);
- // SlwTrace(INF, buf, 1);
- // sutPocStatus.handleIndex=0;
- // }
-
- if(sutPocStatus.UserOnLineNum%5==0)flag=5;
- else flag=sutPocStatus.UserOnLineNum%5;
-
- //然后根据最新总数来获取每个成员信息
- if(direction==1)//递增索引
- {
-
- thisStartIndex=sutPocStatus.handleIndex;
- if(sutPocStatus.UserOnLineNum-thisStartIndex>=5) readNum=5;
- else {
-
- readNum=sutPocStatus.UserOnLineNum-thisStartIndex;
- }
-
-
- }else{//递减索引
-
- thisStartIndex=sutPocStatus.handleIndex;
-
- if(sutPocStatus.handleIndex <5) //<
- {
- thisStartIndex=0;//0
- readNum=sutPocStatus.UserOnLineNum; //(sutPocStatus.UserOnLineNum%5)
- }
- else if(sutPocStatus.UserOnLineNum-thisStartIndex<=flag){
- if((sutPocStatus.UserOnLineNum%5)==0)readNum=5;
- else readNum=(sutPocStatus.UserOnLineNum%5); //Z
- //thisStartIndex=sutPocStatus.UserOnLineNum-readNum;
- }
- else
- {
- //thisStartIndex=sutPocStatus.handleIndex-5;
- readNum=5;
- }
-
- }
-
- if(readNum >= 5) readNum=5;
- sutPocStatus.FillUserIndex=0;
-
- for(i=thisStartIndex;i<(thisStartIndex+readNum);i++)
- {
- RETRYUSR:
- sutPocStatus.GetOneUserFlag=0;
- snprintf(buf, sizeof(buf), "AT+POC=537&%d&1\r\n",i);
- ModemSendAT(buf);
- SlwTrace(INF, buf,0);
- timeout=50;
- while(1)
- {
- OsDelayTime(1);
- if(sutPocStatus.GetOneUserFlag)
- {
- sutPocStatus.FillUserIndex++;
- break;
- }
- if(--timeout==0) {
-
- if(++trycnt>10){
- trycnt=0;
- UISetNextStatus(UIS_MENU_MAIN);
- return;
- }
- goto RETRYUSR;
- break;
- }
- }
- }
-
-
- if(firstIn){
- sutPocStatus.handleIndex=0;
- }
- //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
- QUIT_FUNCTION:
- //GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
- }
- void SimpleVoiceInfoScan(uint8_t firstIn,uint8_t direction)
- {
- uint16_t i;
- uint16_t timeout;
- char buf[30];
- uint16_t thisStartIndex;
- uint8_t readNum;
- char trycnt=0;
-
- if(firstIn) sutPocStatus.voicehandleIndex=0;
- sutPocStatus.VoiceOnLineNum=0;
-
- // if(0==strcmp(sutProductPara.Language,"cn"))ShowMessageBox("请稍候..."); //0
- // else ShowMessageBox("Please Wait...");
- os_dly_wait(1);
-
- RETRYVOICE1:
- sutPocStatus.VoiceNum_Update=0;
- snprintf(buf,sizeof(buf),"AT+POC=550&%d\r\n",sutPocStatus.recordID);
- printf("***VoiceNum_Update===%d\r\n",sutPocStatus.VoiceNum_Update);
- ModemSendAT(buf);
- SlwTrace(INF, buf,0);
- timeout=30; //20
-
- while(1)
- {
- OsDelayTime(1);
- if(sutPocStatus.VoiceNum_Update)
- {
- //sutPocStatus.VoiceNum_Update=0;
- break;
- }
- if(--timeout==0) {
- //未做防护 有可能卡死
- printf("超时了===========\r\n");
- goto RETRYVOICE1;
- break;
- }
- }
-
- printf("VoiceNum_Update===%d\r\n",sutPocStatus.VoiceNum_Update);
- sutPocStatus.VoiceNum_Update=0;
-
- if(sutPocStatus.VoiceOnLineNum<=0) {
- sutPocStatus.FillVoiceIndex=0;
- printf("GOTO------------");
- // goto QUIT_FUNCTION;
- }
-
- if(sutPocStatus.voicehandleIndex >= sutPocStatus.VoiceOnLineNum)
- {
- snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.voicehandleIndex);
- SlwTrace(INF, buf, 1);
- sutPocStatus.voicehandleIndex=sutPocStatus.VoiceOnLineNum-1;
- }
-
- printf("step0======%d\r\n",sutPocStatus.VoiceOnLineNum);
-
- if(sutPocStatus.VoiceOnLineNum<=5){
- thisStartIndex=0;
- readNum=sutPocStatus.VoiceOnLineNum;
- printf("step1 ====%d\r\n",readNum);
- }else if(firstIn){
- thisStartIndex=0;
- if(sutPocStatus.VoiceOnLineNum%5==0){
- readNum=5;
- }else{
- readNum=sutPocStatus.VoiceOnLineNum%5;
- }
- }else if(sutPocStatus.voicehandleIndex>4){
-
- if(sutPocStatus.VoiceOnLineNum%5==0)thisStartIndex=5;
- else thisStartIndex=sutPocStatus.VoiceOnLineNum%5;
- readNum=5;
- }else {
- thisStartIndex=0;
- readNum=5;
- }
- if(readNum >= 5) readNum=5;
- sutPocStatus.FillVoiceIndex=0;
- os_dly_wait(1); /////
- for(i=thisStartIndex;i<(thisStartIndex+readNum);i++)
- {
- //sutPocStatus.GetOneVoiceFlag=0;
- RETRYVOICE:
- printf("this===%d readnum===%d\r\n",thisStartIndex,readNum);
- snprintf(buf, sizeof(buf), "AT+POC=551&%d&%d&1\r\n",sutPocStatus.recordID,i); //AT+POC=551&群组ID&序号&个数
- ModemSendAT(buf);
- SlwTrace(INF, buf,0);
- timeout=5; //300
- while(1)
- {
- OsDelayTime(3);
- if(sutPocStatus.GetOneVoiceFlag)
- {
- sutPocStatus.FillVoiceIndex++;
- sutPocStatus.GetOneVoiceFlag=0;
- break;
- }
- if(--timeout==0) {
- printf("超时了===========\r\n");
- if(++trycnt>10){
- trycnt=0;
- UISetNextStatus(UIS_MENU_MAIN);
- return;
- }
- goto RETRYVOICE;
- break;
- }
- }
- }
-
- //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
- QUIT_FUNCTION:
- //GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
-
- }
- void SetModemPocSimpleMode(void)
- {//设置使用简短模式获取成员信息
- short t,i;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- for(i=0;i<5;i++)
- {
- t=50;
- ModemSendAT("AT+POC=10000020\r\n");
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- if(0==ModemStrCmp((char *)pMsg->MsgData,"+POC:10000000"))
- {
- SlwTrace(INF, "[14]SimpleMode_Ok",1);
- return;
- }
- }else
- os_dly_wait(1);
- }
- }
- SlwTrace(INF, "[14]SimpleMode_Tout",1);
- }
- char GetUniStringByID(char *HardIDString)
- {//输出15个字节的字符串
- unsigned char id[12];
- unsigned char string[16];
-
- long long temp;
- short i;
- unsigned char seed;
- if(HardIDString == '\0') return 0;
- GetSTM32ID(id);
- printf("STM32 ID==");
- for(i=0;i<12;i++)printf("%02x",id[i]);
- printf("\r\n");
- for(i=5;i>=0;i--){
- temp <<=8;
- temp |= id[i];
- }
- temp &= 0xffffffffffff;
- printf("temp=%015llu\r\n",temp);
- snprintf(string,sizeof(string),"%015llu",temp);
- for(i=0;i<15;i++) HardIDString[i]=string[i];
- HardIDString[15]='\0';
- //snprintf(HardIDString,16,"%015llu",temp);
- return 1;
- }
- void ModemNetSet()
- {
- if(sutProductPara.LowConsumption==1)
- {
- sutProductPara.Netmode=1;
- GetMododexWithCard();
- }else
- {
- if(0==strcmp(sutProductPara.Language,"en"))
- {
- if(sutProductPara.Netmode>2)sutProductPara.Netmode=0;
- }
- GetMododexWithCard();
- }
- }
- /**********************************************************************************************************************
- 格式:AT+ICCID
- +GETICCID:0x89860315402521836592
- +SCID:98680036904030021872
- ***********************************************************************************************************************/
- short ModemGetCCID(void)
- {
- short t;
- short i,len,ver;
- char buf[80],bufTemp[3];
- char CCID[21];
-
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- ver=0;
- for(i=0;i<5;i++){
- t=100;
- ModemSendAT("AT+ZGETICCID\r\n");
- while(t--)
- {//^SCID: 89860316452001903429
- if(g_ucQuitModemInitNow==1) return -1;
-
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData, sizeof(pMsg->MsgData))))
- {
- if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZGETICCID:"))////^SCID:
- {
- memcpy(CCID, &pMsg->MsgData[12], sizeof(CCID));
- CCID[20]=0;
- snprintf(buf, sizeof(buf), "[5][Minit]ICCID:%s[", CCID);
- bufTemp[0] = CCID[4];
- bufTemp[1] = CCID[5];
- bufTemp[2] = 0;
- switch(atoi(bufTemp))
- {
- case 1:
- case 6:
- case 9:thisYunYingShang = CHINA_UNICOM;
- strcat(buf, "CHINA_UNICOM]");
- break;
- case 0:
- case 2:
- case 4:
- case 7:thisYunYingShang = CHINA_MOBILE;
- strcat(buf, "CHINA_MOBILE]");
- break;
- case 3:
- case 8:
- case 11:thisYunYingShang = CHINA_TELECOM;
- strcat(buf, "CHINA_TELECOM]");
- break;
- default:strcat(buf, "UNKNOW-ICCID]");
- break;
- }
- SlwTrace(INF, buf,1);
- return 1;
- }
- }else os_dly_wait(1);
- }
- }
- SlwTrace(INF, "[5][Minit]Get CCID failed",1);
- return 0;
- }
- void APNSet(void)
- {
- char i,t;
- int Volume;
- char buf[50];
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- //先配置一次,再查,因为默认就查有可能是没有返回的
- snprintf(buf,sizeof(buf),"AT+CGDCONT=1,\"IPV4V6\",\"%s\"\r\n",sutProductPara.APNApn);
-
- ModemSendAT(buf);
- for(i=0;i<10;i++)
- {
- t=50;
- ModemSendAT("AT+CGDCONT?\r\n");
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- if(0==ModemStrCmp(&pMsg->MsgData[22],sutProductPara.APNApn))
- {
- snprintf(buf,sizeof(buf),"[4]Set APN Ok--[%s]",sutProductPara.APNApn);
- SlwTrace(INF,buf,1);
- return;
- }else{
- if(t==0) ModemSendAT(buf);
- }
- }else
- os_dly_wait(1);
- }
- }
- SlwTrace(INF, "[4]Set APN failed",1);
- }
- //+ZCDS:100,460,3,7760,77DA809,-98,99,15,0,285,460113302871543 //2.3段不为 460则非国内
- char GetCountry()
- {
- char t=0;
- char j=0;
- char z=0;
- int i,len;
- char Tempbuf[30];
- short buf[3];
- char cnt=0;
- SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
- for(i=0;i<50;i++){
- ModemSendAT("AT+ZCDS?\r\n");
- t=50;
- while(t--)
- {
- if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
- {
- len=strlen((char *)&(pMsg->MsgData));
- if((0==ModemStrCmp((char *)pMsg->MsgData,"+ZCDS:"))&& len>7)
- {
- //StringCatByNumb((char *)pMsg->MsgData,1,Tempbuf);
- // printf("buf===%s\r\n",&pMsg->MsgData[z+6]);
- while(cnt<3)
- {
-
- if(pMsg->MsgData[z+6]!=',')
- {
- Tempbuf[j]=pMsg->MsgData[z+6];
- j++;
- }else{
- Tempbuf[j]=0;
- j=0;
- buf[cnt]=atoi(Tempbuf);
- cnt++;
- }
- z++;
-
- }
-
- if(buf[1]==460||buf[2]==460){
- //国内
- SlwTrace(INF,"[6]国内----\r\n",1);
-
- }else {
- SlwTrace(INF,"[6]国外----\r\n",1);
- thisYunYingShang =FOREIGN_ALL;
- }
- return 1;
- }
-
-
- }else
- os_dly_wait(10);
- }
-
- }
- SlwTrace(INF,"[6]GET Country FAILD\r\n",1);
-
- return 0;
- }
- /***********************************************************************************/
|