Modem.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. #include "includes.h"
  2. SUT_MODEM_AT_MSG sutAtm,sutAtmPro;
  3. unsigned char ModemVer[15];
  4. void ModemPinConfig(void)
  5. {
  6. GPIO_InitTypeDef GPIO_InitStructure;
  7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
  8. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  9. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  10. GPIO_InitStructure.GPIO_Pin = MODEM_RESET_PIN;
  11. GPIO_Init(MODEM_RESET_PORT, &GPIO_InitStructure);
  12. // GPIO_InitStructure.GPIO_Pin = MODEM_PWRKEY_PIN;
  13. // GPIO_Init(MODEM_PWRKEY_PORT, &GPIO_InitStructure);
  14. GPIO_InitStructure.GPIO_Pin = MODEM_PWREN_PIN;
  15. GPIO_Init(MODEM_PWREN_PORT, &GPIO_InitStructure);
  16. MODEM_RESET_LOW;
  17. MODEM_PWREN_LOW;
  18. }
  19. void ModemSendAt(char *p){
  20. unsigned short len;
  21. len=strlen(p);
  22. Uart2Send((unsigned char *)p,len);
  23. }
  24. /************************************************************************************
  25. *
  26. *************************************************************************************/
  27. void ModemSendData(unsigned char *pData,unsigned short datalen)
  28. {
  29. Uart2Send(pData,datalen);
  30. }
  31. void ModemVersionGet(char *msg)
  32. {//InnerVersion: LLA0029_0016_1.0.57_L0901_EFS2.6
  33. char j,bufTemp[30],version[10],type,countFlag;
  34. if(0==ModemStrCmp(msg,"InnerVersion:")){
  35. countFlag=0;
  36. for(j=0;j<strlen(msg);j++){
  37. if(msg[j] == '_'){
  38. countFlag++;
  39. if(countFlag == 1){
  40. version[0] = msg[j+3];
  41. version[1] = msg[j+4];
  42. }else if(countFlag == 3){
  43. version[2] = msg[j+2];
  44. version[3] = msg[j+3];
  45. version[4] = msg[j+4];
  46. version[5] = msg[j+5];
  47. version[6] = 0;
  48. snprintf(bufTemp, sizeof(bufTemp), "ModemVer:%s",version);
  49. SlwTrace(INF, bufTemp, 1);
  50. g_iModemVer=atoi(version);
  51. }
  52. }
  53. }
  54. }
  55. }
  56. void ModemPocVerGet(char *msg){
  57. //+POC_VER:xxxxxx
  58. char bufTemp[40];
  59. short i,len,j;
  60. int ver;
  61. len = strlen(msg);
  62. j=0;
  63. for(i=0;i<len;i++){
  64. if(msg[i] == '\r'){
  65. bufTemp[j]=0;
  66. ver=atoi(bufTemp);
  67. snprintf(bufTemp, sizeof(bufTemp),"POCver:%d<->%s", ver,msg);
  68. SlwTrace(INF, bufTemp,0);
  69. g_iPocVer=ver;
  70. return;
  71. }else if(msg[i] >= '0' && msg[i] <= '9') bufTemp[j++]=msg[i];
  72. }
  73. }
  74. void PocTypeSet(void){
  75. hgs_poc_type=POC_XIAN;
  76. if(g_iPocVer > 19000){
  77. hgs_poc_type=POC_OWN;
  78. SlwTrace(INF, "poc-own",1);
  79. }else SlwTrace(INF, "poc-xian",1);
  80. if(hgs_poc_type != POC_OWN) return;
  81. ModemSendAt("AT+POC=3000000100\r\n");//GBK
  82. __nop();__nop();
  83. ModemSendAt("AT+POC=030000\r\n");//启动登陆,POC默认打开的
  84. __nop();__nop();
  85. }
  86. void SetDefaultSpkMic(void){
  87. char sendInfo[40];
  88. snprintf(sendInfo, sizeof(sendInfo), "at+syscmd=start_pcm volume ");
  89. if(1) strcat(sendInfo, "7 7\r\n");//这里1根据实际参数替换吧
  90. else strcat(sendInfo, "7 5\r\n");
  91. ModemSendAt(sendInfo);
  92. }
  93. char IMEI[18]={0};
  94. char *getIMEI(void){return IMEI;}
  95. void ModemGetIMEI(char *msg){
  96. //+LSHIMEI:862015039899963
  97. ReplaceStrWithN(msg);
  98. strncpy(IMEI, msg+9, sizeof(IMEI));
  99. printf("IMEI:%s\r\n",IMEI);
  100. }
  101. char CCID[21]={0};
  102. char *getICCID(void){return CCID;}
  103. void ModemGetICCID(char *msg){
  104. char bufTemp[3],info[20];
  105. //^SCID: 89860316452001903429
  106. memcpy(CCID, &msg[7], sizeof(CCID));
  107. CCID[20]=0;
  108. bufTemp[0] = CCID[4];
  109. bufTemp[1] = CCID[5];
  110. bufTemp[2] = 0;
  111. switch(atoi(bufTemp))
  112. {
  113. case 1:
  114. case 6:
  115. case 9:thisYunYingShang = CHINA_UNICOM;
  116. snprintf(info,sizeof(info), "CHINA_UNICOM]");
  117. break;
  118. case 0:
  119. case 2:
  120. case 4:
  121. case 7:thisYunYingShang = CHINA_MOBILE;
  122. snprintf(info,sizeof(info), "CHINA_MOBILE]");
  123. break;
  124. case 3:
  125. case 8:
  126. case 11:thisYunYingShang = CHINA_TELECOM;
  127. snprintf(info,sizeof(info), "CHINA_TELECOM]");
  128. break;
  129. default:snprintf(info,sizeof(info), "UNKNOW-ICCID]");
  130. break;
  131. }
  132. printf("ICCID:%s %s\r\n", CCID, info);
  133. }
  134. void ModemSetPocPara(char *msg,int len){
  135. //+POC:0200000069643D313030303031343031343B69703D3138332E3133312E31332E31303B7077643D3135303034343739303438383931343B646F6D61696E3D7777772E6869676F73706F632E636F6D3B
  136. //id=1000014014;ip=183.131.13.10;pwd=150044790488914;domain=www.higospoc.com;
  137. char buf[40];
  138. char buf1[100];
  139. char idFlag=0;
  140. char ipFlag=0;
  141. char pwdFlag=0;
  142. char domainFlag=0;
  143. char enableChangeIp=1;
  144. msg[len-3]=0;
  145. len=AsciiHexStringToHexBytes(&msg[13], msg);
  146. msg[len]=0;
  147. //找id
  148. len=GetParaFromStr(msg,"id",buf);
  149. snprintf(buf1, sizeof(buf1),"%lu",sutProductPara.PSN);
  150. if(0!=strcmp(buf1, buf)) idFlag=1;;
  151. // //找ip
  152. // len=GetParaFromStr(msg,"ip",buf);
  153. // snprintf(buf1, sizeof(buf1), "%s", getPIPAddr());
  154. // if(0!=strcmp(buf1, buf)) ipFlag=1;
  155. //找pwd
  156. len=GetParaFromStr(msg,"pwd",buf);
  157. snprintf(buf1, sizeof(buf1), "%s",DEV_HARDID);
  158. if(0!=strcmp(buf1, buf)) pwdFlag=1;
  159. //找domain
  160. switch(newPara.serList.defaultuse)
  161. {
  162. case SER_HZ:
  163. case SER_SD:
  164. case SER_US:
  165. break;
  166. case SER_IP:
  167. case SER_JIQUN:
  168. if(newPara.serList.defaultuse==SER_IP)snprintf(buf1, sizeof(buf1), "%s",newPara.serList.ipFenFa);
  169. else if(newPara.serList.defaultuse==SER_JIQUN)snprintf(buf1, sizeof(buf1), "%s",newPara.serList.jiqun);
  170. len=GetParaFromStr(msg,"domain",buf); //domain
  171. if(0!=strcmp(buf1, buf)) domainFlag=1;
  172. //modify by wjl 0609
  173. //但使用集群或者IP分发的时候,保证不去更新ip即可
  174. enableChangeIp=0;
  175. break;
  176. }
  177. //找ip
  178. if(enableChangeIp!=0){//modify by wjl 0609
  179. len=GetParaFromStr(msg,"ip",buf);
  180. snprintf(buf1, sizeof(buf1), "%s", getPIPAddr());
  181. if(0!=strcmp(buf1, buf)) ipFlag=1;
  182. }
  183. if(idFlag == 0 && ipFlag==0 && pwdFlag==0&&domainFlag==0) {
  184. SlwTrace(INF,"POC still",1);
  185. return;
  186. }
  187. RESET_ALL:
  188. ModemSendAt("AT+POC=010000");
  189. //更新id
  190. if(idFlag != 0){
  191. snprintf(buf, sizeof(buf),"id=%lu;",sutProductPara.PSN);
  192. AscStrToHexStr(buf,buf1);
  193. ModemSendAt(buf1);
  194. }
  195. //更新ip
  196. if(enableChangeIp!=0){//modify by wjl 0609
  197. //if(ipFlag != 0){
  198. snprintf(buf, sizeof(buf), "ip=%s;", getPIPAddr());
  199. AscStrToHexStr(buf,buf1);
  200. ModemSendAt(buf1);
  201. //}
  202. }
  203. //更新pwd
  204. // if(pwdFlag != 0){
  205. snprintf(buf, sizeof(buf), "pwd=%s;",DEV_HARDID);
  206. AscStrToHexStr(buf,buf1);
  207. ModemSendAt(buf1);
  208. //}
  209. if(newPara.serList.defaultuse==SER_IP)snprintf(buf, sizeof(buf), "domain=%s;",newPara.serList.ipFenFa);
  210. else if(newPara.serList.defaultuse==SER_JIQUN)snprintf(buf, sizeof(buf), "domain=%s;",newPara.serList.jiqun);
  211. else{
  212. snprintf(buf, sizeof(buf), "domain=;");
  213. AscStrToHexStr(buf,buf1);
  214. }
  215. AscStrToHexStr(buf,buf1);
  216. ModemSendAt(buf1);
  217. ModemSendAt("\r\n");
  218. SlwTrace(INF,"Rst_POCPara",1);
  219. }
  220. void MeSpeak(ENCODE_DEF type, char *voice)
  221. {
  222. char buf[20];
  223. SpeakerCtrl(1);
  224. snprintf(buf, sizeof(buf), "AT+LSHTTS=%d,\"",type);
  225. ModemSendAt(buf);
  226. ModemSendAt(voice);
  227. sutPocStatus.TTS=1;
  228. ModemSendAt("\"\r\n");
  229. }
  230. void ModemApnConfig(void)
  231. {
  232. char needAuthLogin=0;
  233. char buf[100];
  234. char buf2[80];
  235. char i,t;
  236. char ApnSetFlag=0;
  237. char *apnName=newPara.apnList.apnList[newPara.apnList.defaultuse].account;
  238. char *apnPass=newPara.apnList.apnList[newPara.apnList.defaultuse].pass;
  239. SUT_MODEM_AT_MSG *pMsg=&sutAtmPro;
  240. snprintf(buf, sizeof(buf), "Accessp:");
  241. if(apnName[0] ==0 ||
  242. apnPass[0] ==0)
  243. {//名称或密码为空不配置,因为模块不支持
  244. strcat(buf, "unsupport-Empty");
  245. }else
  246. {
  247. snprintf(buf2, sizeof(buf2),"AT+CSTT=\"%s\",\"%s\",\"%s\"\r\n",newPara.apnList.APN_Name,apnName,apnPass);
  248. ModemSendAt(buf2);
  249. snprintf(buf2, sizeof(buf2), "%s,%s,%s",newPara.apnList.APN_Name,apnName,apnPass);
  250. strcat(buf,buf2);
  251. needAuthLogin=1;
  252. }
  253. SlwTrace(INF, buf,1);
  254. if(needAuthLogin != 0){
  255. //认证
  256. snprintf(buf, sizeof(buf),"AUTH-LOGIN:");
  257. switch(newPara.authType){
  258. case AUTH_LOGIN_PAP:strcat(buf, "PAP");
  259. case AUTH_LOGIN_CHAP:strcat(buf, "CHAP");
  260. snprintf(buf2, sizeof(buf2),"AT+CGAUTH=1,%d,%s,%s\r\n",newPara.authType,apnName,apnPass);
  261. break;
  262. case AUTH_LOGIN_NONE:strcat(buf, "NONE");
  263. break;
  264. default:strcat(buf, " Do nothing");
  265. break;
  266. }
  267. SlwTrace(INF,buf, 1);
  268. ModemSendAt(buf2);
  269. SlwTrace(INF,buf2,0);
  270. __nop();__nop();
  271. SlwTrace(INF,"AuthLogin Done",1);
  272. }
  273. }
  274. /***************************************************************/
  275. char ModemLCCCheck(char *msg){
  276. short j;
  277. char countFlag,version[10];
  278. char t;
  279. SlwTrace(INF, msg, 0);
  280. countFlag=0;
  281. if((0==ModemStrCmp(msg,"ERROR"))){
  282. SlwTrace(INF, "It is not 3 in 1 version quit this check",1);
  283. return 0;
  284. }else if(0==ModemStrCmp(msg,"+LSPOCPF:")){//+LSPOCPF:hgs(1)
  285. //这个模块支持三合一指令,即为三合一模块版本
  286. if(msg[13] == '1'){
  287. SlwTrace(INF, "It is hgs version now",1);
  288. return 0;
  289. }else{
  290. SlwTrace(INF, "Reset to hgs version and reboot",1);
  291. ModemSendAt("AT+LSPOCPF=hgs\r\n");
  292. ShowMessageBox("切换海高思版本");
  293. t=0;
  294. while(++t<50){
  295. DelayMs(2);
  296. IWDG_ReloadCounter();
  297. }
  298. while(1);
  299. return 1;
  300. }
  301. }
  302. }
  303. //////////////////////////////////////////
  304. void getModemModule(char *msg){
  305. memcpy(ModemVer,msg,strlen(msg)-2);
  306. SlwTrace(INF, msg,0);
  307. }
  308. void getModemVersion(char *msg){
  309. short j;
  310. char countFlag,version[10];
  311. SlwTrace(INF, msg, 0);
  312. countFlag=0;
  313. for(j=0;j<strlen(msg);j++){
  314. if(msg[j] == '_'){
  315. countFlag++;
  316. if(countFlag == 1){
  317. version[0] = msg[j+3];
  318. version[1] = msg[j+4];
  319. }else if(countFlag == 3)
  320. {
  321. version[2] = msg[j+2];
  322. version[3] = msg[j+3];
  323. version[4] = msg[j+4];
  324. version[5] = msg[j+5];
  325. version[6] = 0;
  326. g_iModemVer=atoi(version);
  327. printf("ModemVer:%d\r\n",g_iModemVer);
  328. }
  329. }
  330. }
  331. }
  332. void getPocVersion(char *msg){
  333. int i,j,len,ver;
  334. char bufTemp[40];
  335. len = strlen(msg);
  336. j=0;
  337. for(i=0;i<len;i++){
  338. if(msg[i] == '\r'){
  339. bufTemp[j]=0;
  340. ver=atoi(bufTemp);
  341. snprintf(bufTemp, sizeof(bufTemp),"POCver:%d<->%s", ver,msg);
  342. SlwTrace(INF, bufTemp,0);
  343. g_iPocVer=ver;
  344. return;
  345. }else if(msg[i] >= '0' && msg[i] <= '9') bufTemp[j++]=msg[i];
  346. }
  347. }
  348. void CheckPocType(void)
  349. {
  350. //19001 19002 19003 自研POC版本号
  351. //1184 1191 西安POC版本号
  352. hgs_poc_type=POC_OWN;//默认是西安的,然后通过POC版本号来判断是西安的还是自研的POC
  353. // if(g_iPocVer > 19000){
  354. // hgs_poc_type=POC_OWN;
  355. // SlwTrace(INF, "poc-own",1);
  356. // }else SlwTrace(INF, "poc-xian",1);
  357. }
  358. void ModemOwnPocSet(void)
  359. {
  360. if(hgs_poc_type != POC_OWN) return;
  361. ModemSendAt("AT+POC=3000000100\r\n");//GBK
  362. __nop();__nop();
  363. ModemSendAt("AT+POC=030000\r\n");//启动登陆,POC默认打开的
  364. __nop();__nop();
  365. }
  366. void getPocCode(char *msg){
  367. if(msg[14]=='0') sutPocStatus.codeType=0;
  368. else sutPocStatus.codeType=1;
  369. printf("PocCode:%d\r\n", sutPocStatus.codeType);
  370. }
  371. //total 成员总数
  372. //一次获取个数最多5个,取决于显示条目个数
  373. //前提是要使用简短模式
  374. char SimpleUserInfoScan(uint8_t firstIn,uint8_t direction)
  375. {
  376. static char first=1;
  377. static unsigned char machine;
  378. static unsigned int timer;
  379. static unsigned short w;
  380. static uint16_t thisStartIndex;
  381. char buf[30];
  382. char ret =0;
  383. if(firstIn && first){
  384. sutPocStatus.handleIndex=0; //当前页
  385. machine=0;
  386. first=0;
  387. }
  388. switch(machine){
  389. case 0:
  390. ShowMessageBox("请稍候...");
  391. snprintf(buf, sizeof(buf),"AT+POC=0E0000%08x\r\n",sutPocStatus.LocalGroup.ID);//先更新总数
  392. ModemSendAt(buf);
  393. SlwTrace(INF,buf,0);
  394. sutPocStatus.UserNum_Update=0;
  395. sutPocStatus.UserOnLineNum=0;
  396. uTimerStart(&timer, 500);
  397. machine=1;
  398. break;
  399. case 1:
  400. if(uTimerExpired(&timer) || sutPocStatus.UserNum_Update){
  401. if(sutPocStatus.UserOnLineNum<=0){
  402. sutPocStatus.FillUserIndex=0;
  403. goto QUIT_FUNCTION;
  404. }
  405. machine=2;
  406. }
  407. break;
  408. case 2:
  409. if(firstIn!=1){
  410. if(direction==1){
  411. sutPocStatus.handleIndex ++;
  412. if(sutPocStatus.handleIndex>sutPocStatus.UserOnLineNum/5){
  413. sutPocStatus.handleIndex=0;
  414. }
  415. if(sutPocStatus.UserOnLineNum%5==0){
  416. if(sutPocStatus.handleIndex==sutPocStatus.UserOnLineNum/5)sutPocStatus.handleIndex=0;
  417. }
  418. }
  419. else {
  420. if(sutPocStatus.handleIndex>0)sutPocStatus.handleIndex--;
  421. else if(sutPocStatus.handleIndex==0){
  422. if(sutPocStatus.UserOnLineNum%5==0)sutPocStatus.handleIndex=(sutPocStatus.UserOnLineNum/5)-1;
  423. else sutPocStatus.handleIndex=sutPocStatus.UserOnLineNum/5;
  424. printf("sutPocStatus.UserOnLineNum===%d,sutPocStatus.handleIndex==%d\r\n",sutPocStatus.UserOnLineNum,sutPocStatus.handleIndex);
  425. }
  426. }
  427. }
  428. /*
  429. 下面操作只决定 预读值sutPocStatus.ExceptionReadNum
  430. */
  431. if((sutPocStatus.handleIndex+1)*5 >sutPocStatus.UserOnLineNum){ //超过 首页 +1
  432. snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.handleIndex);
  433. SlwTrace(INF, buf, 1);
  434. if(sutPocStatus.UserOnLineNum%5==0)sutPocStatus.ExceptionReadNum=5;
  435. else sutPocStatus.ExceptionReadNum=sutPocStatus.UserOnLineNum%5;
  436. } else{
  437. sutPocStatus.ExceptionReadNum=5; //普通情况 5个
  438. }
  439. sutPocStatus.FillUserIndex=0;
  440. machine=3;
  441. w=sutPocStatus.handleIndex*5;
  442. break;
  443. case 3:
  444. if(w>=(sutPocStatus.handleIndex*5+sutPocStatus.ExceptionReadNum)){
  445. machine=5;
  446. break;
  447. }
  448. sutPocStatus.GetOneUserFlag=0;
  449. snprintf(buf, sizeof(buf), "AT+POC=10000021%04x\r\n",w++);
  450. ModemSendAt(buf);
  451. SlwTrace(INF, buf,0);
  452. uTimerStart(&timer, 200);
  453. machine=4;
  454. break;
  455. case 4:
  456. if(sutPocStatus.GetOneUserFlag){//获取到一个成员,继续下一个
  457. sutPocStatus.FillUserIndex++;
  458. machine=3;
  459. }
  460. if(uTimerExpired(&timer)) machine=5;//超时了,结束
  461. break;
  462. case 5:
  463. //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
  464. QUIT_FUNCTION:
  465. first=1;
  466. GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
  467. machine=0;
  468. return 1;
  469. break;
  470. }
  471. return ret;
  472. }
  473. char SimpleGroupsInfoScan(uint8_t firstIn,uint8_t direction)
  474. {
  475. static char first=1;
  476. static unsigned char machine;
  477. static unsigned int timer;
  478. static uint16_t thisStartIndex;
  479. char buf[30];
  480. char ret =0;
  481. if(firstIn && first){
  482. sutPocStatus.handleIndex=0;//当前页
  483. machine=0;
  484. first=0;
  485. }
  486. switch(machine){
  487. case 0:
  488. ShowMessageBox("请稍候...");
  489. snprintf(buf, sizeof(buf),"AT+POC=3D0000\r\n");//先更新总数
  490. ModemSendAt(buf);
  491. SlwTrace(INF,buf,0);
  492. sutPocStatus.ListUpdate=0;
  493. sutPocStatus.ListFillIndex=0;
  494. uTimerStart(&timer, 500);
  495. machine=1;
  496. break;
  497. case 1:
  498. if(uTimerExpired(&timer) || sutPocStatus.ListUpdate){
  499. if(sutPocStatus.ListCurOnlineNum<=0){
  500. sutPocStatus.ListFillIndex=0;
  501. printf("获取超时或者CUR=0\r\n");
  502. goto QUIT_FUNCTION;
  503. }
  504. machine=2;
  505. }
  506. break;
  507. case 2:
  508. /*
  509. 第一次进来不操作页数
  510. 后续判定sutPocStatus.handleIndex 页是否合法
  511. 注意处理临界值 5的倍数
  512. */
  513. if(firstIn!=1){
  514. if(direction==1){
  515. sutPocStatus.handleIndex ++;
  516. if(sutPocStatus.handleIndex>sutPocStatus.ListCurOnlineNum/5){
  517. sutPocStatus.handleIndex=0;
  518. }
  519. if(sutPocStatus.ListCurOnlineNum%5==0){
  520. if(sutPocStatus.handleIndex==sutPocStatus.ListCurOnlineNum/5)sutPocStatus.handleIndex=0;
  521. }
  522. }
  523. else {
  524. if(sutPocStatus.handleIndex>0)sutPocStatus.handleIndex--;
  525. else if(sutPocStatus.handleIndex==0){
  526. if(sutPocStatus.ListCurOnlineNum%5==0)sutPocStatus.handleIndex=(sutPocStatus.ListCurOnlineNum/5)-1;
  527. else sutPocStatus.handleIndex=sutPocStatus.ListCurOnlineNum/5;
  528. printf("sutPocStatus.ListCurOnlineNum===%d,sutPocStatus.handleIndex==%d\r\n",sutPocStatus.ListCurOnlineNum,sutPocStatus.handleIndex);
  529. }
  530. }
  531. }
  532. /*
  533. 下面操作只决定 预读值sutPocStatus.ExceptionReadNum
  534. */
  535. if((sutPocStatus.handleIndex+1)*5 >sutPocStatus.ListCurOnlineNum){ //超过 首页 +1
  536. snprintf(buf, sizeof(buf), "over:%d",sutPocStatus.handleIndex);
  537. SlwTrace(INF, buf, 1);
  538. if(sutPocStatus.ListCurOnlineNum%5==0)sutPocStatus.ExceptionReadNum=5;
  539. else sutPocStatus.ExceptionReadNum=sutPocStatus.ListCurOnlineNum%5;
  540. } else{
  541. sutPocStatus.ExceptionReadNum=5; //普通情况 5个
  542. }
  543. sutPocStatus.ListFillIndex=0;
  544. machine=3;
  545. break;
  546. case 3:
  547. sutPocStatus.ListGetOneFlag=0; //起始 //个数//5个
  548. snprintf(buf, sizeof(buf), "AT+POC=1D0000%04x0005\r\n",sutPocStatus.handleIndex*5);
  549. ModemSendAt(buf);
  550. SlwTrace(INF, buf,0);
  551. uTimerStart(&timer, 200);
  552. machine=4;
  553. break;
  554. case 4:
  555. if(sutPocStatus.ListGetOneFlag){//获取成功
  556. machine=5;
  557. }
  558. if(uTimerExpired(&timer)) machine=5;//超时了,结束
  559. break;
  560. case 5:
  561. //最终成功读了多少个回来,存在sutPocStatus.FillUserIndex中
  562. QUIT_FUNCTION:
  563. first=1;
  564. GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
  565. machine=0;//
  566. return 1;
  567. break;
  568. }
  569. return ret;
  570. }
  571. char SimpleVoiceInfoScan(uint8_t firstIn)
  572. {
  573. static unsigned char machine=0;
  574. static unsigned int timer;
  575. char buf[30];
  576. char ret =0;
  577. // if(firstIn ){
  578. // machine=0;
  579. // }
  580. switch(machine){
  581. case 0:
  582. sutPocStatus.ListFillIndex=0;
  583. sutPocStatus.ListGetOneFlag=0;
  584. sutPocStatus.ExceptionReadNum=3;
  585. machine=1;
  586. break;
  587. case 1:
  588. snprintf(buf, sizeof(buf), "AT+VINFO?\r\n");
  589. ModemSendAt(buf);
  590. SlwTrace(INF, buf,0);
  591. uTimerStart(&timer, 150);
  592. machine=2;
  593. break;
  594. case 2:
  595. if(sutPocStatus.ListGetOneFlag){//获取成功
  596. machine=3;
  597. }
  598. if(uTimerExpired(&timer)){
  599. machine=3;//超时了,结束
  600. printf("超时了----\r\n");
  601. }
  602. break;
  603. case 3:
  604. GuiClearRect(0, 40, LCD_WIDTH-1, LCD_HEIGHT-32);
  605. machine=0;
  606. return 1;
  607. break;
  608. }
  609. return ret;
  610. }