Modem.c 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430
  1. /**********************************************************************************
  2. * File Name: Modem.c
  3. * Function Describe:device for modem
  4. * Relate Module:
  5. * Explain: the modem must be using ZTE MC8332
  6. * Writer: ShiLiangWen
  7. * Date: 2015.1.20
  8. ***********************************************************************************/
  9. #define THIS_FILE_ID 2
  10. /* Includes ------------------------------------------------------------------*/
  11. #include "includes.h"
  12. //os_mbx_declare (PocMsgBox, 5); /* Declare an RTX mailbox */
  13. //_declare_box(PocMpool,sizeof(SUT_MODEM_POC_MSG),5);
  14. //SUT_SMS_PARA sutSMSpara;
  15. //os_mbx_declare (AtMsgBox, 7); /* Declare an RTX mailbox */
  16. //_declare_box(AtMpool,sizeof(SUT_MODEM_AT_MSG),7);
  17. SUT_MODEM_AT_MSG sutAtm,sutAtmPro;
  18. unsigned char Modem_TypeSetFlag;
  19. unsigned char g_ucModemSentTcpCt;//TCP 发送计数器
  20. unsigned char g_usModeMTime=0x00;
  21. unsigned char g_usModeSTime=0x00;
  22. unsigned char g_usModeHTime=0x00;
  23. unsigned char g_usModeYTime=0x00;//年
  24. unsigned char g_usModemTime=0x00;//月
  25. unsigned char g_usModeDTime=0x00;//日
  26. //MODEM_TYPE MODEM_TYPE;
  27. /************************************************************************************
  28. *
  29. *************************************************************************************/
  30. void ModemSendAT(char *p)
  31. {
  32. unsigned short len;
  33. len=strlen(p);
  34. RunMake(THIS_FILE_ID);
  35. #if UART2_TX_USE_DMA==0
  36. Uart2Send(p,len);
  37. #else
  38. USART2_Send(p,len);
  39. #endif
  40. }
  41. /************************************************************************************
  42. *
  43. *************************************************************************************/
  44. void ModemSendData(unsigned char *pData,unsigned short datalen)
  45. {
  46. #if UART2_TX_USE_DMA==0
  47. Uart2Send(pData,datalen);
  48. #else
  49. USART2_Send((char *)pData,datalen);
  50. #endif
  51. }
  52. /**********************************************************************************
  53. 等待模块启动完成
  54. 0:成功 -1:超时
  55. ***********************************************************************************/
  56. int WaitModemIsOpened(void)
  57. {
  58. int i;
  59. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  60. RunMake(THIS_FILE_ID);
  61. for(i=0;i<100;i++){
  62. SlwTrace(INF,"AT",1);
  63. ModemSendAT("AT\r\n");
  64. //if(OS_R_TMO!=os_mbx_wait(AtMsgBox,(void **)&pMsg,50)){
  65. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData)))){
  66. if('O'==pMsg->MsgData[0] && 'K'==pMsg->MsgData[1]){
  67. return 0;
  68. }
  69. //free(pMsg);
  70. }else os_dly_wait(1);
  71. }
  72. return -1;
  73. }
  74. /*************************************************************************
  75. *ModemWaitAtReady
  76. **************************************************************************/
  77. int ModemWaitAtReady(void)
  78. {
  79. int i;
  80. SUT_MODEM_AT_MSG *pMsg;
  81. for(i=0;i<20;i++){
  82. if(ModemSendAT2WaitAckMsg("AT\r\n","OK",&pMsg,100)){
  83. //_free_box(AtMpool,pMsg);
  84. return 1;
  85. }
  86. }
  87. return 0;
  88. }
  89. /*************************************************************************
  90. ModemWaitOpen
  91. 等待模块开机
  92. 通过检查模块主动上报:
  93. **************************************************************************/
  94. int ModemWaitOpen(int timeout)
  95. {
  96. //char *pAck;
  97. //SUT_MODEM_AT_MSG **pMsg;
  98. SUT_MODEM_AT_MSG *Msg;
  99. SlwTrace(DEBUG,"ModemWaitOpen",1);
  100. while(timeout--){
  101. //if(OS_R_TMO!=os_mbx_wait(AtMsgBox,(void **)&Msg,1)){
  102. if((Msg->MsgLen = MsgQueueAccept(Msg->MsgData,sizeof(Msg->MsgData)))){
  103. SlwTrace(DEBUG,(char *)Msg->MsgData,0);
  104. // if(0==ModemStrCmp((char *)Msg->MsgData,pAck)){
  105. // *pMsg=Msg;
  106. // return 1;
  107. // }else{
  108. // _free_box(AtMpool,Msg);
  109. //}
  110. }else os_dly_wait(1);
  111. }
  112. return 1;
  113. }
  114. //模块的电源以及复位引脚的配置
  115. //这段配置要放要最开始
  116. //目的是一开机时确保模块是没有电源的
  117. //解决原来问题:当开机到模块播报“欢迎.....”时马上关机,看到屏幕灭后马上又开机,此次开机会失败
  118. void ModemPinConfig(void)
  119. {
  120. GPIO_InitTypeDef GPIO_InitStructure;
  121. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);
  122. RCC_LSEConfig( RCC_LSE_OFF );
  123. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  124. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  125. GPIO_InitStructure.GPIO_Pin = MODEM_RESET_PIN;
  126. GPIO_Init(MODEM_RESET_PORT, &GPIO_InitStructure);
  127. GPIO_InitStructure.GPIO_Pin = MODEM_PWRKEY_PIN;
  128. GPIO_Init(MODEM_PWRKEY_PORT, &GPIO_InitStructure);
  129. GPIO_InitStructure.GPIO_Pin = MODEN_POWER_EN_PIN;
  130. GPIO_Init(MODEN_POWER_EN_PORT,&GPIO_InitStructure);
  131. GPIO_InitStructure.GPIO_Pin = MODEM_VBUS_EN_PIN;
  132. GPIO_Init(MODEM_VBUS_EN_PORT,&GPIO_InitStructure);
  133. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  134. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  135. GPIO_InitStructure.GPIO_Pin = MODEN_BOOT_EN_PIN;
  136. GPIO_Init(MODEN_BOOT_EN_PORT,&GPIO_InitStructure);
  137. MODEN_BOOT_EN_LOW;
  138. MODEN_POWER_EN_LOW;
  139. MODEM_RESET_LOW;
  140. }
  141. /**********************************************************************************
  142. ModemInit
  143. 返回:1 初始化成功 0-失败
  144. ***********************************************************************************/
  145. int ModemInit(void)
  146. {
  147. RunMake(THIS_FILE_ID);
  148. Uart2Init();
  149. MsgQueueSet();//初始化队列
  150. g_ucModemSentTcpCt=0;
  151. RunMake(THIS_FILE_ID);
  152. //return 0;//测试
  153. MODEM_PWRKEY_HIGH;
  154. MODEM_RESET_HIGH;
  155. os_dly_wait(200);//100
  156. MODEM_RESET_LOW;
  157. MODEN_POWER_EN_HIGH;
  158. os_dly_wait(100);
  159. MODEN_POWER_EN_LOW;
  160. sutPocStatus.ModemPowerOn=1;
  161. //等待模块开机并能接受AT命令
  162. if(WaitModemStart())return 0;
  163. return 1;
  164. //ModemGetIMEI();
  165. }
  166. /**********************************************************************************
  167. CSQ2Num
  168. ***********************************************************************************/
  169. int CSQ2Num(char *str)
  170. {
  171. int csq;
  172. csq=atoi(str);
  173. if(csq<0 || csq>99)return 99;
  174. else return csq;
  175. }
  176. /**********************************************************************************
  177. ModemStrCmp
  178. ***********************************************************************************/
  179. int ModemStrCmp(char *msg,char *str)
  180. {
  181. char *p1=str;
  182. char *p2=msg;
  183. while(*p1!=0){
  184. if(*p1!=*p2)return 1;
  185. p1++;
  186. p2++;
  187. }
  188. return 0;
  189. }
  190. /**********************************************************************************
  191. ModemWaitAckMsg
  192. Input:
  193. pATCmd--AT Command string
  194. pAck --期待回的ACK,头相同即可
  195. pMsg --实际消息内容,可能比pAck长
  196. timeout --超时,10ms为单位
  197. Output:
  198. if timeout return 0
  199. else return 1 注意,处理完消息要调用_free_box释放消息
  200. ***********************************************************************************/
  201. int ModemSendAT2WaitAckMsg(char *pATCmd,char *pAck,SUT_MODEM_AT_MSG **pMsg,int timeout)
  202. {
  203. SUT_MODEM_AT_MSG *Msg=&sutAtmPro;
  204. ModemSendAT(pATCmd);
  205. while(timeout){
  206. //if(OS_R_TMO!=os_mbx_wait(AtMsgBox,(void **)&Msg,1)){
  207. if((Msg->MsgLen = MsgQueueAccept(Msg->MsgData,sizeof(Msg->MsgData)))){
  208. //SlwTrace(DEBUG,(char *)Msg->MsgData);
  209. if(0==ModemStrCmp((char *)Msg->MsgData,pAck)){
  210. *pMsg=Msg;
  211. return 1;
  212. }else{
  213. //_free_box(AtMpool,Msg);
  214. }
  215. }else {
  216. timeout--;
  217. os_dly_wait(1);
  218. }
  219. }
  220. return 0;
  221. }
  222. /********************************************
  223. *0x12 --> "12" --> 0x31 0x32
  224. **********************************************/
  225. void HexToAsc(unsigned char Hex,char *pAsc)
  226. {
  227. unsigned char h,l;
  228. l=Hex & 0x0f;
  229. h=Hex >> 4;
  230. if((l>=0)&&(l<=9))l += 0x30;
  231. else if((l>=10)&&(l<=15))l += ('A'-10);
  232. if((h>=0)&&(h<=9))h += 0x30;
  233. else if((h>=10)&&(h<=15))h += ('A'-10);
  234. pAsc[0]=h;
  235. pAsc[1]=l;
  236. }
  237. void HexToStr(unsigned char *HexStr,char *AscStr,unsigned short len)
  238. {
  239. int i,j=0;
  240. for(i=0;i<len;i++)
  241. {
  242. HexToAsc(HexStr[i],&AscStr[j]);
  243. j+=2;
  244. }
  245. }
  246. /***********************************************************************************
  247. *ModemSendUdpData WCDMA没有UDP指令
  248. ************************************************************************************/
  249. int ModemSendUdpData(unsigned char socket,unsigned char *pData,unsigned short len)
  250. {
  251. int i;
  252. char buf[142];
  253. char tmp[5];
  254. unsigned char temp=0;
  255. snprintf(buf, sizeof(buf),"AT+ZIPSENDU=%d,%d\r",socket,len);
  256. ModemSendAT(buf);
  257. ModemSendData(pData,len);
  258. snprintf(buf, sizeof(buf),"UdpSend[%d]",len);
  259. SlwTrace(INF,buf,1);
  260. #ifdef SLW_DEBUG
  261. if(len>45)len=45;
  262. buf[0]='>';buf[1]='>';buf[2]=0;
  263. for(i=0;i<len;i++){
  264. snprintf(tmp, sizeof(tmp),"%02x,",pData[i]);
  265. strcat(buf,tmp);
  266. }
  267. SlwTrace(DEBUG,buf,1);
  268. #endif
  269. return 0;
  270. }
  271. /***********************************************************************************
  272. *StrToNum
  273. ************************************************************************************/
  274. unsigned short StrToNum(char *str)
  275. {
  276. unsigned short num;
  277. if(str[0]>0x2f && str[0]<0x3a){
  278. if(str[1]>0x2f && str[1]<0x3a){
  279. if(str[2]>0x2f && str[2]<0x3a){
  280. if(str[3]>0x2f && str[3]<0x3a){
  281. num=1000*(str[0]-0x30);
  282. num+=100*(str[1]-0x30);
  283. num+=10*(str[2]-0x30);
  284. num+=(str[3]-0x30);
  285. }else{
  286. num=100*(str[0]-0x30);
  287. num+=10*(str[1]-0x30);
  288. num+=(str[2]-0x30);
  289. }
  290. }else{
  291. num=10*(str[0]-0x30);
  292. num+=(str[1]-0x30);
  293. }
  294. }else{
  295. num= str[0]-0x30;
  296. }
  297. }else{
  298. num=0;
  299. }
  300. return num;
  301. }
  302. /***********************************************************************************
  303. *ModemPoweroff
  304. ************************************************************************************/
  305. void ModemPoweroff(void)
  306. {
  307. ModemSendAT("AT+ZPWROFF\r\n");
  308. os_dly_wait(50);
  309. ModemSendAT("AT+ZPWROFF\r\n");
  310. IWDG_ReloadCounter();//喂狗
  311. os_dly_wait(100);
  312. IWDG_ReloadCounter();//喂狗
  313. os_dly_wait(100);
  314. IWDG_ReloadCounter();//喂狗
  315. os_dly_wait(50);
  316. IWDG_ReloadCounter();//喂狗
  317. MODEM_PWRKEY_LOW;
  318. MODEM_RESET_HIGH;
  319. os_dly_wait(10);
  320. MODEM_RESET_LOW;
  321. }
  322. //0==ModemStrCmp((char *)pMsg->MsgData,"OK") ||
  323. char WaitModemStart(void)
  324. {
  325. int t,i;
  326. char buf[50];
  327. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  328. SlwTrace(INF, "WaitModemRun:",0);
  329. for(i=0;i<10;i++)//100
  330. {
  331. t=500;//50
  332. //ModemSendAT("ATE0\r\n");
  333. ModemSendAT("AT\r\n");
  334. while(t--)
  335. {
  336. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  337. {
  338. //+CPIN: READY //RDY
  339. if(
  340. (0==ModemStrCmp((char *)pMsg->MsgData,"RDY"))||(0==ModemStrCmp((char *)pMsg->MsgData,"OK")))
  341. {
  342. SlwTrace(INF, "Runing",1);
  343. return 0;
  344. }
  345. }else
  346. os_dly_wait(1);
  347. }
  348. }
  349. SlwTrace(INF, "TimeOut",1);
  350. return 1;
  351. }
  352. char WaitPocInit(void)
  353. {
  354. int t,i;
  355. char buf[50];
  356. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  357. SlwTrace(INF, "WaitPocInit:",0);
  358. ModemSendAT("AT+POC=605\r\n");
  359. for(i=0;i<100;i++)
  360. {
  361. t=50;
  362. while(t--)
  363. {
  364. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  365. {
  366. if(
  367. (0==ModemStrCmp((char *)pMsg->MsgData,">605&1")))
  368. {
  369. SlwTrace(INF, "PocInit Ok\r\n",1);
  370. return 0;
  371. }
  372. }else
  373. os_dly_wait(1);
  374. }
  375. }
  376. SlwTrace(INF, "PocInit TimeOut",1);
  377. return 1;
  378. }
  379. char GetPocVer()
  380. {
  381. int t,j;
  382. int i,len;
  383. char *p=0;
  384. j=0;
  385. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  386. for(i=0;i<50;i++){
  387. ModemSendAT("AT+POC=508\r\n");
  388. t=50;
  389. while(t--)
  390. {
  391. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  392. {
  393. len=strlen((char *)&(pMsg->MsgData));
  394. if((0==ModemStrCmp((char *)pMsg->MsgData,">120&"))&& len>7)
  395. {
  396. strcpy(g_iPocVer,&pMsg->MsgData[5]);
  397. p=g_iPocVer;
  398. while(*p!=0x0d){
  399. p++;
  400. j++;
  401. }
  402. g_iPocVer[j]=0;
  403. printf("[2]GET POC_VER OK--%s\r\n",g_iPocVer);
  404. return 1;
  405. }
  406. }else
  407. os_dly_wait(10);
  408. }
  409. }
  410. SlwTrace(INF,"[2]GET POC_VER FAILD\r\n",1);
  411. return 0;
  412. }
  413. char SetCodec(char *setcodec,char *readcodec,char*turecodec)
  414. {
  415. int t,j;
  416. int i,len;
  417. char Tempbuf[40];
  418. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  419. for(i=0;i<50;i++){
  420. ModemSendAT(readcodec);
  421. t=50;
  422. while(t--)
  423. {
  424. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  425. {
  426. len=strlen((char *)&(pMsg->MsgData));
  427. if(len>7){
  428. if((0==ModemStrCmp((char *)pMsg->MsgData,turecodec)))
  429. {
  430. snprintf(Tempbuf,sizeof(Tempbuf),"Set Ok-->%s",setcodec);
  431. SlwTrace(INF,Tempbuf,1);
  432. return 1;
  433. }else {
  434. ModemSendAT(setcodec);
  435. printf("setnew-->%s",setcodec);
  436. }
  437. }
  438. }else
  439. os_dly_wait(1);
  440. }
  441. }
  442. snprintf(Tempbuf,sizeof(Tempbuf),"Set Failed-->%s",setcodec);
  443. SlwTrace(INF,Tempbuf,1);
  444. return 0;
  445. }
  446. char GetModemVer()
  447. {
  448. int t,j=0;
  449. int i,len;
  450. char Tempbuf[30];
  451. unsigned char *p=NULL;
  452. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  453. for(i=0;i<50;i++){
  454. ModemSendAT("ATI\r\n");
  455. t=50;
  456. while(t--)
  457. {
  458. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  459. {
  460. len=strlen((char *)&(pMsg->MsgData));
  461. if((0==ModemStrCmp((char *)pMsg->MsgData,"Revision"))&& len>7)
  462. {
  463. strcpy(HardRevision,&pMsg->MsgData[10]);
  464. p=HardRevision;
  465. while(*p!=0x0a){
  466. p++;
  467. j++;
  468. }
  469. HardRevision[j]=0;
  470. if(pMsg->MsgData[19]=='U'){
  471. Modem_type=USA_Modem;
  472. }else if(pMsg->MsgData[19]=='C'){
  473. Modem_type=Europe_Modem;
  474. }else{
  475. Modem_type=Un_KnownModem;
  476. }
  477. Modem_TypeSetFlag=1;
  478. SlwTrace(INF,"[3]GET MODEM Type OK \r\n",1);
  479. return 1;
  480. }
  481. }else
  482. os_dly_wait(10);
  483. }
  484. SlwTrace(INF,"[3]GET MODEM Type failed\r\n",1);
  485. return 0;
  486. }
  487. }
  488. int ModemGetIMEI(void)
  489. {
  490. int t,j;
  491. int i,len;
  492. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  493. for(i=0;i<50;i++){
  494. ModemSendAT("AT+GSN\r\n");//0x80DA219D
  495. //862015030301209 两种情况都会返回
  496. t=50;
  497. while(t--)
  498. {
  499. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  500. {
  501. len=strlen((char *)&(pMsg->MsgData));
  502. if(0==ModemStrCmp((char *)pMsg->MsgData,"0x"))
  503. {
  504. len -=4;
  505. memcpy(sutProductPara.HARDID, &pMsg->MsgData[2], len);
  506. if(len < sizeof(sutProductPara.HARDID))
  507. sutProductPara.HARDID[len]=0;
  508. return 1;
  509. }else if(len == 17)
  510. {
  511. len -= 2;
  512. memcpy(sutProductPara.HARDID, pMsg->MsgData, len);
  513. if(len < sizeof(sutProductPara.HARDID))
  514. sutProductPara.HARDID[len]=0;
  515. return 2;
  516. }
  517. }else
  518. os_dly_wait(1);
  519. }
  520. }
  521. return 0;
  522. }
  523. void ModemApnConfig(void)
  524. {
  525. char buf[100],index;
  526. char buf2[80];
  527. char i,t;
  528. char ApnSetFlag=0;
  529. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  530. snprintf(buf, sizeof(buf), "[11]Accessp:");
  531. if(sutProductPara.APNApn[0]==0)
  532. {//接入点为空时不配置,因为模块不支持
  533. strcat(buf, "unsupport-Empty");
  534. }else
  535. {
  536. snprintf(buf2, sizeof(buf2), "AT+MIPPROFILE=1,\"%s\"\r\n",sutProductPara.APNApn);
  537. ModemSendAT(buf2);
  538. snprintf(buf2, sizeof(buf2), "%s",sutProductPara.APNApn);
  539. strcat(buf,buf2);
  540. }
  541. SlwTrace(INF,buf,1);
  542. snprintf(buf, sizeof(buf), ",Name-Pass:");
  543. if(sutProductPara.APNName[0] ==0 ||
  544. sutProductPara.APNPass[0] ==0)
  545. {//名称或密码为空不配置,因为模块不支持
  546. strcat(buf, "unsupport-Empty");
  547. }else
  548. {
  549. snprintf(buf2, sizeof(buf2),"AT^PPPCFG=\"%s\",\"%s\"\r\n",sutProductPara.APNName,sutProductPara.APNPass);
  550. ModemSendAT(buf2);
  551. SlwTrace(INF,buf2,0);
  552. snprintf(buf, sizeof(buf), "^PPPCFG:\"%s\",\"%s\"",sutProductPara.APNName,sutProductPara.APNPass);
  553. for(i=0;i<5;i++)
  554. {
  555. t=50;
  556. ModemSendAT("at^pppcfg\r\n");
  557. while(t--)
  558. {
  559. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  560. {
  561. if(0==ModemStrCmp((char *)pMsg->MsgData,buf))
  562. {
  563. ApnSetFlag=1;
  564. break;
  565. }else{
  566. if(t==0)ModemSendAT(buf2);
  567. }
  568. }else
  569. os_dly_wait(1);
  570. }
  571. }
  572. if(ApnSetFlag==1){
  573. SlwTrace(INF,"PPPCFG is OK",1);
  574. }else
  575. SlwTrace(INF,"PPPCFG is failed",1);
  576. ApnSetFlag=0;
  577. memset(buf,0,sizeof(buf));
  578. memset(buf2,0,sizeof(buf2));
  579. if(sutProductPara.ApnAuthType!=0){
  580. snprintf(buf2, sizeof(buf2),"AT$QCPDPP=1,%d,%s,%s\r\n",sutProductPara.ApnAuthType,sutProductPara.APNPass,sutProductPara.APNName);
  581. ModemSendAT(buf2);
  582. SlwTrace(INF,buf2,0);
  583. snprintf(buf, sizeof(buf), "$QCPDPP: 1,%d,\"%s\"",sutProductPara.ApnAuthType,sutProductPara.APNName);
  584. for(i=0;i<5;i++)
  585. {
  586. t=50;
  587. ModemSendAT("AT$QCPDPP?\r\n");
  588. while(t--)
  589. {
  590. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  591. {
  592. if(0==ModemStrCmp((char *)pMsg->MsgData,buf))
  593. {
  594. ApnSetFlag=1;
  595. break;
  596. }else
  597. {
  598. if(t==0)ModemSendAT(buf2);
  599. // break;
  600. }
  601. }else
  602. os_dly_wait(1);
  603. }
  604. }
  605. if(ApnSetFlag==1){
  606. SlwTrace(INF,"QCPDPP is OK",1);
  607. }else
  608. SlwTrace(INF,"QCPDPP is failed",1);
  609. }else
  610. {
  611. for(i=0;i<3;i++){
  612. snprintf(buf2, sizeof(buf2),"AT$QCPDPP=1,%d\r\n",sutProductPara.ApnAuthType);
  613. ModemSendAT(buf2);
  614. os_dly_wait(30);
  615. }
  616. }
  617. }
  618. }
  619. void M9507CSendTcpData(unsigned char socket, unsigned char *pData, unsigned short len)
  620. {
  621. char buf[20];
  622. snprintf(buf, sizeof(buf), "AT+TCPSEND=%d,%d,",socket, len);
  623. ModemSendAT(buf);
  624. ModemSendData(pData, len);
  625. ModemSendAT("\r\n");
  626. }
  627. //LoginPocInfo();
  628. void LoginSetPocPara(void)
  629. {
  630. char i,t;
  631. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  632. //先配置一次,再查,因为默认就查有可能是没有返回的
  633. char Tempbuf[100];
  634. 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 \
  635. ,sutProductPara.Language,sutProductPara.Local,sutProductPara.Channel,sutProductPara.SendToneEnadble,sutProductPara.RecvToneEnadble,sutProductPara.PromptToneEnable,sutProductPara.IMEI);
  636. SlwTrace(INF,Tempbuf,1);
  637. for(i=0;i<10;i++)
  638. {
  639. t=300;
  640. ModemSendAT(Tempbuf);;
  641. while(t--)
  642. {
  643. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  644. {
  645. if(0==ModemStrCmp((char *)pMsg->MsgData,">504&1"))
  646. {
  647. SlwTrace(INF, "Set PocPara",1);
  648. return;
  649. }else{
  650. //if(t==0) ModemSendAT(buf);
  651. }
  652. }else
  653. os_dly_wait(1);
  654. }
  655. }
  656. SlwTrace(INF, "Set PocPara failed",1);
  657. }
  658. void VolumeSet(void)
  659. {
  660. char i,t;
  661. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  662. char buf[20];
  663. //先配置一次,再查,因为默认就查有可能是没有返回的
  664. snprintf(buf,sizeof(buf),"AT+POC=607&%d\r\n",sutProductPara.VolLv);
  665. for(i=0;i<10;i++)
  666. {
  667. t=100;
  668. ModemSendAT(buf);
  669. while(t--)
  670. {
  671. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  672. {
  673. if(0==ModemStrCmp((char *)pMsg->MsgData,">607&1"))
  674. {
  675. SlwTrace(INF, "[03]Set Volume ok",1);
  676. return;
  677. }else{
  678. //if(t==0) ModemSendAT(buf);
  679. }
  680. }else
  681. os_dly_wait(1);
  682. }
  683. }
  684. SlwTrace(INF, "[03]Set Volume failed",1);
  685. }
  686. void ServerTimeGet(void)
  687. {
  688. static unsigned short timeCnt=12000;
  689. if(++timeCnt < 12000) return;
  690. timeCnt=0;
  691. ModemSendAT("AT+CCLK?\r\n");
  692. }
  693. //total 群组总数
  694. //一次获取个数最多5个,取决于显示条目个数
  695. void SimpleGroupInfoScan(char firstIn,char direction)
  696. {
  697. uint16_t i;
  698. uint16_t timeout;
  699. char buf[30];
  700. uint16_t thisStartIndex;
  701. uint8_t readNum;
  702. char flag=0;
  703. char trycnt=0;
  704. if(firstIn) sutPocStatus.handleIndex=0;
  705. // if(0==strcmp(sutProductPara.Language,"cn"))ShowMessageBox("请稍候..."); //0
  706. // else ShowMessageBox("Please Wait...");
  707. // os_dly_wait(1);
  708. // snprintf(buf, sizeof(buf),"AT+POC=0E0000%08x\r\n",sutPocStatus.LocalGroup.ID);//先更新总数
  709. // ModemSendAT(buf);
  710. ModemSendAT(POC_CMD_GROUP_SUM);
  711. SlwTrace(INF,buf,0);
  712. timeout=1000;
  713. sutPocStatus.GroupNum_Update=0;
  714. sutPocStatus.GroupOnLineNum=0;
  715. while(timeout)
  716. {
  717. timeout--;
  718. OsDelayTime(1);
  719. //if(sutPocStatus.UserNum_Update) break;
  720. if(sutPocStatus.GroupNum_Update)break;
  721. if(timeout % 200 == 0)
  722. ModemSendAT(POC_CMD_GROUP_SUM);
  723. }
  724. if(sutPocStatus.GroupOnLineNum<=0){
  725. sutPocStatus.FillGroupIndex=0;
  726. goto QUIT_FUNCTION;
  727. }
  728. // if(sutPocStatus.handleIndex >= sutPocStatus.GroupOnLineNum)
  729. // {
  730. // snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.handleIndex);
  731. // SlwTrace(INF, buf, 1);
  732. // sutPocStatus.handleIndex=0;
  733. // }
  734. if(sutPocStatus.GroupOnLineNum%5==0)flag=5;
  735. else flag=sutPocStatus.GroupOnLineNum%5;
  736. printf("*********flag==%d********handleIndex====%d,readNum==%d\r\n",flag,sutPocStatus.handleIndex,readNum);
  737. //然后根据最新总数来获取每个成员信息
  738. if(direction==1)//递增索引
  739. {
  740. thisStartIndex=sutPocStatus.handleIndex;
  741. if(sutPocStatus.GroupOnLineNum-thisStartIndex>=5) readNum=5;
  742. else {
  743. readNum=sutPocStatus.GroupOnLineNum-thisStartIndex;
  744. }
  745. }else{//递减索引
  746. thisStartIndex=sutPocStatus.handleIndex;
  747. if(sutPocStatus.handleIndex <5) //<
  748. {
  749. thisStartIndex=0;//0
  750. readNum=sutPocStatus.GroupOnLineNum; //(sutPocStatus.UserOnLineNum%5)
  751. }
  752. else if(sutPocStatus.GroupOnLineNum-thisStartIndex<=flag){
  753. if((sutPocStatus.GroupOnLineNum%5)==0){
  754. SlwTrace(INF,"GO UPUPUP-------------------\r\n",1);
  755. readNum=5;
  756. }
  757. else readNum=(sutPocStatus.GroupOnLineNum%5); //Z
  758. //thisStartIndex=sutPocStatus.UserOnLineNum-readNum;
  759. }
  760. else
  761. {
  762. //thisStartIndex=sutPocStatus.handleIndex-5;
  763. readNum=5;
  764. }
  765. }
  766. if(readNum >= 5) readNum=5;
  767. sutPocStatus.FillGroupIndex=0;
  768. printf("this=====%d===handleIndex====%d,readNum==%d\r\n",thisStartIndex,sutPocStatus.handleIndex,readNum);
  769. for(i=thisStartIndex;i<(thisStartIndex+readNum);i++)
  770. {
  771. RETRYGROUP:
  772. sutPocStatus.GetOneGroupFlag=0;
  773. snprintf(buf, sizeof(buf), "AT+POC=534&%d&1\r\n",i);
  774. ModemSendAT(buf);
  775. SlwTrace(INF, buf,0);
  776. timeout=50;
  777. while(1)
  778. {
  779. OsDelayTime(1);
  780. if(sutPocStatus.GetOneGroupFlag)
  781. {
  782. sutPocStatus.FillGroupIndex++;
  783. break;
  784. }
  785. if(--timeout==0) {
  786. if(++trycnt>10){
  787. trycnt=0;
  788. UISetNextStatus(UIS_MENU_MAIN);
  789. return;
  790. }
  791. goto RETRYGROUP;
  792. break;
  793. }
  794. }
  795. }
  796. // if(direction==1) sutPocStatus.handleIndex += readNum;
  797. // else {
  798. // sutPocStatus.handleIndex -= readNum;
  799. // }
  800. if(firstIn) {
  801. sutPocStatus.handleIndex=0;
  802. //lastOption=1;
  803. }
  804. //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
  805. QUIT_FUNCTION:
  806. //GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
  807. }
  808. //total 成员总数
  809. //一次获取个数最多5个,取决于显示条目个数
  810. //前提是要使用简短模式
  811. void SimpleUserInfoScan(uint8_t firstIn,uint8_t direction)
  812. {
  813. uint16_t i;
  814. uint16_t timeout;
  815. char buf[30];
  816. uint16_t thisStartIndex;
  817. uint8_t readNum;
  818. static char flag;
  819. char trycnt=0;
  820. if(firstIn) {
  821. sutPocStatus.handleIndex=0;
  822. }
  823. // if(0==strcmp(sutProductPara.Language,"cn"))ShowMessageBox("请稍候..."); //0
  824. // else ShowMessageBox("Please Wait...");
  825. // os_dly_wait(1);
  826. ModemSendAT(POC_CMD_USER_SUM);
  827. timeout=1000;
  828. sutPocStatus.UserNum_Update=0;
  829. sutPocStatus.UserOnLineNum=0;
  830. while(timeout)
  831. {
  832. timeout--;
  833. OsDelayTime(1);
  834. if(sutPocStatus.UserNum_Update) break;
  835. if(timeout % 200 == 0)
  836. //ModemSendAT(buf);
  837. ModemSendAT(POC_CMD_USER_SUM);
  838. }
  839. if(sutPocStatus.UserOnLineNum<=0)
  840. {
  841. sutPocStatus.FillUserIndex=0;
  842. goto QUIT_FUNCTION;
  843. }
  844. // if(sutPocStatus.handleIndex >= sutPocStatus.UserOnLineNum)
  845. // {
  846. // snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.handleIndex);
  847. // SlwTrace(INF, buf, 1);
  848. // sutPocStatus.handleIndex=0;
  849. // }
  850. if(sutPocStatus.UserOnLineNum%5==0)flag=5;
  851. else flag=sutPocStatus.UserOnLineNum%5;
  852. //然后根据最新总数来获取每个成员信息
  853. if(direction==1)//递增索引
  854. {
  855. thisStartIndex=sutPocStatus.handleIndex;
  856. if(sutPocStatus.UserOnLineNum-thisStartIndex>=5) readNum=5;
  857. else {
  858. readNum=sutPocStatus.UserOnLineNum-thisStartIndex;
  859. }
  860. }else{//递减索引
  861. thisStartIndex=sutPocStatus.handleIndex;
  862. if(sutPocStatus.handleIndex <5) //<
  863. {
  864. thisStartIndex=0;//0
  865. readNum=sutPocStatus.UserOnLineNum; //(sutPocStatus.UserOnLineNum%5)
  866. }
  867. else if(sutPocStatus.UserOnLineNum-thisStartIndex<=flag){
  868. if((sutPocStatus.UserOnLineNum%5)==0)readNum=5;
  869. else readNum=(sutPocStatus.UserOnLineNum%5); //Z
  870. //thisStartIndex=sutPocStatus.UserOnLineNum-readNum;
  871. }
  872. else
  873. {
  874. //thisStartIndex=sutPocStatus.handleIndex-5;
  875. readNum=5;
  876. }
  877. }
  878. if(readNum >= 5) readNum=5;
  879. sutPocStatus.FillUserIndex=0;
  880. for(i=thisStartIndex;i<(thisStartIndex+readNum);i++)
  881. {
  882. RETRYUSR:
  883. sutPocStatus.GetOneUserFlag=0;
  884. snprintf(buf, sizeof(buf), "AT+POC=537&%d&1\r\n",i);
  885. ModemSendAT(buf);
  886. SlwTrace(INF, buf,0);
  887. timeout=50;
  888. while(1)
  889. {
  890. OsDelayTime(1);
  891. if(sutPocStatus.GetOneUserFlag)
  892. {
  893. sutPocStatus.FillUserIndex++;
  894. break;
  895. }
  896. if(--timeout==0) {
  897. if(++trycnt>10){
  898. trycnt=0;
  899. UISetNextStatus(UIS_MENU_MAIN);
  900. return;
  901. }
  902. goto RETRYUSR;
  903. break;
  904. }
  905. }
  906. }
  907. if(firstIn){
  908. sutPocStatus.handleIndex=0;
  909. }
  910. //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
  911. QUIT_FUNCTION:
  912. //GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
  913. }
  914. void SimpleVoiceInfoScan(uint8_t firstIn,uint8_t direction)
  915. {
  916. uint16_t i;
  917. uint16_t timeout;
  918. char buf[30];
  919. uint16_t thisStartIndex;
  920. uint8_t readNum;
  921. char trycnt=0;
  922. if(firstIn) sutPocStatus.voicehandleIndex=0;
  923. sutPocStatus.VoiceOnLineNum=0;
  924. // if(0==strcmp(sutProductPara.Language,"cn"))ShowMessageBox("请稍候..."); //0
  925. // else ShowMessageBox("Please Wait...");
  926. os_dly_wait(1);
  927. RETRYVOICE1:
  928. sutPocStatus.VoiceNum_Update=0;
  929. snprintf(buf,sizeof(buf),"AT+POC=550&%d\r\n",sutPocStatus.recordID);
  930. printf("***VoiceNum_Update===%d\r\n",sutPocStatus.VoiceNum_Update);
  931. ModemSendAT(buf);
  932. SlwTrace(INF, buf,0);
  933. timeout=30; //20
  934. while(1)
  935. {
  936. OsDelayTime(1);
  937. if(sutPocStatus.VoiceNum_Update)
  938. {
  939. //sutPocStatus.VoiceNum_Update=0;
  940. break;
  941. }
  942. if(--timeout==0) {
  943. //未做防护 有可能卡死
  944. printf("超时了===========\r\n");
  945. goto RETRYVOICE1;
  946. break;
  947. }
  948. }
  949. printf("VoiceNum_Update===%d\r\n",sutPocStatus.VoiceNum_Update);
  950. sutPocStatus.VoiceNum_Update=0;
  951. if(sutPocStatus.VoiceOnLineNum<=0) {
  952. sutPocStatus.FillVoiceIndex=0;
  953. printf("GOTO------------");
  954. // goto QUIT_FUNCTION;
  955. }
  956. if(sutPocStatus.voicehandleIndex >= sutPocStatus.VoiceOnLineNum)
  957. {
  958. snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.voicehandleIndex);
  959. SlwTrace(INF, buf, 1);
  960. sutPocStatus.voicehandleIndex=sutPocStatus.VoiceOnLineNum-1;
  961. }
  962. printf("step0======%d\r\n",sutPocStatus.VoiceOnLineNum);
  963. if(sutPocStatus.VoiceOnLineNum<=5){
  964. thisStartIndex=0;
  965. readNum=sutPocStatus.VoiceOnLineNum;
  966. printf("step1 ====%d\r\n",readNum);
  967. }else if(firstIn){
  968. thisStartIndex=0;
  969. if(sutPocStatus.VoiceOnLineNum%5==0){
  970. readNum=5;
  971. }else{
  972. readNum=sutPocStatus.VoiceOnLineNum%5;
  973. }
  974. }else if(sutPocStatus.voicehandleIndex>4){
  975. if(sutPocStatus.VoiceOnLineNum%5==0)thisStartIndex=5;
  976. else thisStartIndex=sutPocStatus.VoiceOnLineNum%5;
  977. readNum=5;
  978. }else {
  979. thisStartIndex=0;
  980. readNum=5;
  981. }
  982. if(readNum >= 5) readNum=5;
  983. sutPocStatus.FillVoiceIndex=0;
  984. os_dly_wait(1); /////
  985. for(i=thisStartIndex;i<(thisStartIndex+readNum);i++)
  986. {
  987. //sutPocStatus.GetOneVoiceFlag=0;
  988. RETRYVOICE:
  989. printf("this===%d readnum===%d\r\n",thisStartIndex,readNum);
  990. snprintf(buf, sizeof(buf), "AT+POC=551&%d&%d&1\r\n",sutPocStatus.recordID,i); //AT+POC=551&群组ID&序号&个数
  991. ModemSendAT(buf);
  992. SlwTrace(INF, buf,0);
  993. timeout=5; //300
  994. while(1)
  995. {
  996. OsDelayTime(3);
  997. if(sutPocStatus.GetOneVoiceFlag)
  998. {
  999. sutPocStatus.FillVoiceIndex++;
  1000. sutPocStatus.GetOneVoiceFlag=0;
  1001. break;
  1002. }
  1003. if(--timeout==0) {
  1004. printf("超时了===========\r\n");
  1005. if(++trycnt>10){
  1006. trycnt=0;
  1007. UISetNextStatus(UIS_MENU_MAIN);
  1008. return;
  1009. }
  1010. goto RETRYVOICE;
  1011. break;
  1012. }
  1013. }
  1014. }
  1015. //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
  1016. QUIT_FUNCTION:
  1017. //GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
  1018. }
  1019. void SetModemPocSimpleMode(void)
  1020. {//设置使用简短模式获取成员信息
  1021. short t,i;
  1022. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  1023. for(i=0;i<5;i++)
  1024. {
  1025. t=50;
  1026. ModemSendAT("AT+POC=10000020\r\n");
  1027. while(t--)
  1028. {
  1029. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  1030. {
  1031. if(0==ModemStrCmp((char *)pMsg->MsgData,"+POC:10000000"))
  1032. {
  1033. SlwTrace(INF, "[14]SimpleMode_Ok",1);
  1034. return;
  1035. }
  1036. }else
  1037. os_dly_wait(1);
  1038. }
  1039. }
  1040. SlwTrace(INF, "[14]SimpleMode_Tout",1);
  1041. }
  1042. char GetUniStringByID(char *HardIDString)
  1043. {//输出15个字节的字符串
  1044. unsigned char id[12];
  1045. unsigned char string[16];
  1046. long long temp;
  1047. short i;
  1048. unsigned char seed;
  1049. if(HardIDString == '\0') return 0;
  1050. GetSTM32ID(id);
  1051. printf("STM32 ID==");
  1052. for(i=0;i<12;i++)printf("%02x",id[i]);
  1053. printf("\r\n");
  1054. for(i=5;i>=0;i--){
  1055. temp <<=8;
  1056. temp |= id[i];
  1057. }
  1058. temp &= 0xffffffffffff;
  1059. printf("temp=%015llu\r\n",temp);
  1060. snprintf(string,sizeof(string),"%015llu",temp);
  1061. for(i=0;i<15;i++) HardIDString[i]=string[i];
  1062. HardIDString[15]='\0';
  1063. //snprintf(HardIDString,16,"%015llu",temp);
  1064. return 1;
  1065. }
  1066. void ModemNetSet()
  1067. {
  1068. if(sutProductPara.LowConsumption==1)
  1069. {
  1070. sutProductPara.Netmode=1;
  1071. GetMododexWithCard();
  1072. }else
  1073. {
  1074. if(0==strcmp(sutProductPara.Language,"en"))
  1075. {
  1076. if(sutProductPara.Netmode>2)sutProductPara.Netmode=0;
  1077. }
  1078. GetMododexWithCard();
  1079. }
  1080. }
  1081. /**********************************************************************************************************************
  1082. 格式:AT+ICCID
  1083. +GETICCID:0x89860315402521836592
  1084. +SCID:98680036904030021872
  1085. ***********************************************************************************************************************/
  1086. short ModemGetCCID(void)
  1087. {
  1088. short t;
  1089. short i,len,ver;
  1090. char buf[80],bufTemp[3];
  1091. char CCID[21];
  1092. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  1093. ver=0;
  1094. for(i=0;i<5;i++){
  1095. t=100;
  1096. ModemSendAT("AT+ZGETICCID\r\n");
  1097. while(t--)
  1098. {//^SCID: 89860316452001903429
  1099. if(g_ucQuitModemInitNow==1) return -1;
  1100. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData, sizeof(pMsg->MsgData))))
  1101. {
  1102. if(0==ModemStrCmp((char *)pMsg->MsgData,"+ZGETICCID:"))////^SCID:
  1103. {
  1104. memcpy(CCID, &pMsg->MsgData[12], sizeof(CCID));
  1105. CCID[20]=0;
  1106. snprintf(buf, sizeof(buf), "[5][Minit]ICCID:%s[", CCID);
  1107. bufTemp[0] = CCID[4];
  1108. bufTemp[1] = CCID[5];
  1109. bufTemp[2] = 0;
  1110. switch(atoi(bufTemp))
  1111. {
  1112. case 1:
  1113. case 6:
  1114. case 9:thisYunYingShang = CHINA_UNICOM;
  1115. strcat(buf, "CHINA_UNICOM]");
  1116. break;
  1117. case 0:
  1118. case 2:
  1119. case 4:
  1120. case 7:thisYunYingShang = CHINA_MOBILE;
  1121. strcat(buf, "CHINA_MOBILE]");
  1122. break;
  1123. case 3:
  1124. case 8:
  1125. case 11:thisYunYingShang = CHINA_TELECOM;
  1126. strcat(buf, "CHINA_TELECOM]");
  1127. break;
  1128. default:strcat(buf, "UNKNOW-ICCID]");
  1129. break;
  1130. }
  1131. SlwTrace(INF, buf,1);
  1132. return 1;
  1133. }
  1134. }else os_dly_wait(1);
  1135. }
  1136. }
  1137. SlwTrace(INF, "[5][Minit]Get CCID failed",1);
  1138. return 0;
  1139. }
  1140. void APNSet(void)
  1141. {
  1142. char i,t;
  1143. int Volume;
  1144. char buf[50];
  1145. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  1146. //先配置一次,再查,因为默认就查有可能是没有返回的
  1147. snprintf(buf,sizeof(buf),"AT+CGDCONT=1,\"IPV4V6\",\"%s\"\r\n",sutProductPara.APNApn);
  1148. ModemSendAT(buf);
  1149. for(i=0;i<10;i++)
  1150. {
  1151. t=50;
  1152. ModemSendAT("AT+CGDCONT?\r\n");
  1153. while(t--)
  1154. {
  1155. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  1156. {
  1157. if(0==ModemStrCmp(&pMsg->MsgData[22],sutProductPara.APNApn))
  1158. {
  1159. snprintf(buf,sizeof(buf),"[4]Set APN Ok--[%s]",sutProductPara.APNApn);
  1160. SlwTrace(INF,buf,1);
  1161. return;
  1162. }else{
  1163. if(t==0) ModemSendAT(buf);
  1164. }
  1165. }else
  1166. os_dly_wait(1);
  1167. }
  1168. }
  1169. SlwTrace(INF, "[4]Set APN failed",1);
  1170. }
  1171. //+ZCDS:100,460,3,7760,77DA809,-98,99,15,0,285,460113302871543 //2.3段不为 460则非国内
  1172. char GetCountry()
  1173. {
  1174. char t=0;
  1175. char j=0;
  1176. char z=0;
  1177. int i,len;
  1178. char Tempbuf[30];
  1179. short buf[3];
  1180. char cnt=0;
  1181. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  1182. for(i=0;i<50;i++){
  1183. ModemSendAT("AT+ZCDS?\r\n");
  1184. t=50;
  1185. while(t--)
  1186. {
  1187. if((pMsg->MsgLen = MsgQueueAccept(pMsg->MsgData,sizeof(pMsg->MsgData))))
  1188. {
  1189. len=strlen((char *)&(pMsg->MsgData));
  1190. if((0==ModemStrCmp((char *)pMsg->MsgData,"+ZCDS:"))&& len>7)
  1191. {
  1192. //StringCatByNumb((char *)pMsg->MsgData,1,Tempbuf);
  1193. // printf("buf===%s\r\n",&pMsg->MsgData[z+6]);
  1194. while(cnt<3)
  1195. {
  1196. if(pMsg->MsgData[z+6]!=',')
  1197. {
  1198. Tempbuf[j]=pMsg->MsgData[z+6];
  1199. j++;
  1200. }else{
  1201. Tempbuf[j]=0;
  1202. j=0;
  1203. buf[cnt]=atoi(Tempbuf);
  1204. cnt++;
  1205. }
  1206. z++;
  1207. }
  1208. if(buf[1]==460||buf[2]==460){
  1209. //国内
  1210. SlwTrace(INF,"[6]国内----\r\n",1);
  1211. }else {
  1212. SlwTrace(INF,"[6]国外----\r\n",1);
  1213. thisYunYingShang =FOREIGN_ALL;
  1214. }
  1215. return 1;
  1216. }
  1217. }else
  1218. os_dly_wait(10);
  1219. }
  1220. }
  1221. SlwTrace(INF,"[6]GET Country FAILD\r\n",1);
  1222. return 0;
  1223. }
  1224. /***********************************************************************************/