SetSystemPara.c 23 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  1. /*****************************************************************************
  2. SetSystemPara.c
  3. *****************************************************************************/
  4. #include "includes.h"
  5. SUT_MENU sutMenuSysSetup;
  6. unsigned char Net_temp_flag;
  7. SUT_LCDGPS_SEND_DATA sutLcdGpsSendData;
  8. char ReadApnData(unsigned char *source,unsigned char witchone,char *apnapn,char *apnname,char *apnpass);
  9. const static unsigned short g_ausTimeOut[5]={10,30,60,300,0};
  10. static const char*g_ausNetOut[]={" Auto","2G+3G"," 4G "};
  11. int ApnFileIndex;
  12. /*************************************************************************/
  13. unsigned int g_uiGpsStat = 1;
  14. unsigned int g_iLCDFlag=0;
  15. SUT_LCD_PARAM sutLcdParam;
  16. unsigned short g_UpdatePocCount;
  17. char showApnTable[2*APN_NUM][31];
  18. char *APNNAME[APN_NUM+1]=
  19. {
  20. "APN1",
  21. "APN2",
  22. "APN3",
  23. "APN4",
  24. ""
  25. };
  26. void SetAPNShow(int update)
  27. {
  28. #if 1
  29. int i;
  30. static const char *accIconFileName[]={
  31. "APN.bmp",
  32. "APN1.bmp",
  33. ""
  34. };
  35. static char GroupsFeatures[APN_NUM];
  36. if(update){
  37. if(showApn!=1)
  38. {
  39. ShowMessageBox("禁止修改");
  40. os_dly_wait(200);
  41. UISetNextStatus(UIS_MENU_SYS_SET);
  42. return;
  43. }
  44. if(validApnNum==1)
  45. {
  46. ShowMessageBox("配置文件无APN");
  47. os_dly_wait(200);
  48. UISetNextStatus(UIS_MENU_SYS_SET);
  49. return;
  50. }
  51. GuiClearAll();
  52. ShowCaption("设置APN",2);//
  53. GuiDrawHLine(0,159,20,1);
  54. //设置Features 将决定选择图标
  55. GroupsFeatures[sutProductPara.APNIndex]=1;
  56. ListBoxInit(&sutListBox,APNNAME,0,accIconFileName,GroupsFeatures);
  57. //----------------------------
  58. GuiDrawHLine(0,159,104,1);
  59. GuiShowStr(0,110,"[OK]切换 [P1]详情",0x01);
  60. }
  61. #else
  62. int i;
  63. static unsigned short susCt=0;
  64. static const char *accIconFileName[]={"APN.bmp","APN1.bmp",""};
  65. unsigned char buf[300];
  66. static char NullGroup=0;
  67. static char GroupsFeatures[APN_NUM];
  68. static char *APNAPN[APN_NUM];
  69. char NullPtr[]="";
  70. if(update){
  71. susCt=0;
  72. GuiClearAll();
  73. ShowCaption("设置APN",1);//
  74. GuiDrawHLine(0,159,20,1);
  75. ReadFileData(ApnFileIndex,0,sizeof(buf),buf);
  76. for(i=0;i<3;i++)
  77. {//读取三组接入点名称
  78. if(ReadApnData(buf, i, &showApn[i][0], 0,0))
  79. {
  80. return;
  81. }
  82. }
  83. //付给用于显示的指针
  84. APNAPN[0]=&showApn[0][0];
  85. APNAPN[1]=&showApn[1][0];
  86. APNAPN[2]=&showApn[2][0];
  87. APNAPN[3]=NullPtr;
  88. APNAPN[4]=NullPtr;
  89. //----------------------------
  90. for(i=0;i<APN_NUM;i++){
  91. GroupsFeatures[i]=0;
  92. }
  93. //设置Features 将决定选择图标
  94. if(0==strcmp(sutProductPara.APNApn, APNAPN[0])) GroupsFeatures[0]=1;
  95. else if(0==strcmp(sutProductPara.APNApn, APNAPN[1])) GroupsFeatures[1]=1;
  96. else if(0==strcmp(sutProductPara.APNApn, APNAPN[2])) GroupsFeatures[2]=1;
  97. else{
  98. //如果以上三种都不是,则认为是用户自定义的了
  99. APNAPN[3]=sutProductPara.APNApn;
  100. GroupsFeatures[3]=1;
  101. }
  102. ListBoxInit(&sutListBox,APNAPN,0,accIconFileName,GroupsFeatures);
  103. //----------------------------
  104. GuiDrawHLine(0,159,104,1);
  105. GuiShowStr(0,110,"[M]切换 ",0x01);
  106. }
  107. #endif
  108. }
  109. void SetSYSResponse(void)
  110. {
  111. unsigned long key;
  112. key=MenuResponse(&sutMenuSysSetup);
  113. if(KEY_PANEL_MENU==key){
  114. switch(sutMenuSysSetup.handle){
  115. case 0:
  116. UISetNextStatus(UIS_SET_APN);
  117. break;
  118. case 1:
  119. UISetNextStatus(UIS_SET_GPS);
  120. break;
  121. case 2:
  122. UISetNextStatus(UIS_SET_LCD);
  123. break;
  124. case 3:
  125. UISetNextStatus(UIS_SET_NET);
  126. break;
  127. case 4:
  128. UISetNextStatus(UIS_UP_INTERCOM_VER);
  129. break;
  130. case 5:
  131. // UISetNextStatus(UIS_UP_INTERCOM_VER);
  132. break;
  133. }
  134. }
  135. // else if(KEY_PANEL_MENU==key){
  136. // UISetNextStatus(UIS_MENU_MAIN);
  137. // }
  138. else if(KEY_PANEL_EXIT==key){
  139. UISetNextStatus(UIS_MENU_MAIN); //UIS_MENU_SYS_SET
  140. }
  141. }
  142. /***************************************
  143. 注意:CDMA的APN形式跟WCDMA大不相同
  144. W机子是不需要改来改去的 "IP","UNIM2M.NJM2MAPN","0.0.0.0"
  145. ****************************************/
  146. void SetAPNResponse(void)
  147. {
  148. unsigned long key;
  149. key=ListBoxResponse(&sutListBox);
  150. if(KEY_PANEL_MENU==key)
  151. {
  152. ShowMessageBox("即将重启更新...");
  153. sutProductPara.APNIndex=sutListBox.handle;
  154. strcpy(sutProductPara.APNName, showApnTable[2*sutProductPara.APNIndex]);
  155. strcpy(sutProductPara.APNPass, showApnTable[2*sutProductPara.APNIndex+1]);
  156. SaveProductParaToFlash("MENU_SWAPN");
  157. os_dly_wait(200);
  158. modemPwrOffNow=1;
  159. }else if(KEY_INFO==key) UISetNextStatus(UIS_APN_DETAIL);
  160. else if(KEY_PANEL_EXIT==key)UISetNextStatus(UIS_MENU_SYS_SET);
  161. }
  162. char showIndex;
  163. void ShowAPNMessage(char index)
  164. {
  165. char buf[40];
  166. char temp[40];
  167. unsigned char len;
  168. unsigned char i,y,maxLen;
  169. i=0;
  170. y=22;
  171. maxLen=14;
  172. GuiClearRect(0, y, LCD_WIDTH-1,LCD_HEIGHT-25);
  173. snprintf(buf, sizeof(buf), "%s:",APNNAME[showIndex]);
  174. GuiShowStr(1,y+16*i++,buf,0x01);
  175. len=strlen(showApnTable[2*showIndex]);
  176. memcpy(temp, showApnTable[2*showIndex], maxLen);
  177. temp[maxLen]=0;
  178. snprintf(buf, sizeof(buf), "Name:%s",temp);
  179. GuiShowStr(1,y+16*i++,buf,0x01);
  180. if(len > maxLen)
  181. {
  182. strcpy(temp, &showApnTable[2*showIndex][maxLen]);
  183. snprintf(buf, sizeof(buf), "%s",temp);
  184. buf[len-maxLen]=0;
  185. GuiShowStr(1,y+16*i++,buf,0x01);
  186. }
  187. len=strlen(showApnTable[2*showIndex+1]);
  188. memcpy(temp, showApnTable[2*showIndex+1], maxLen);
  189. temp[maxLen]=0;
  190. snprintf(buf, sizeof(buf), "Pass:%s",temp);
  191. GuiShowStr(1,y+16*i++,buf,0x01);
  192. if(len > maxLen)
  193. {
  194. strcpy(temp, &showApnTable[2*showIndex+1][maxLen]);
  195. snprintf(buf, sizeof(buf), "%s",temp);
  196. buf[len-maxLen]=0;
  197. GuiShowStr(1,y+16*i++,buf,0x01);
  198. }
  199. }
  200. void SetApnDetailShow(int update)
  201. {
  202. char buf[40];
  203. if(update)
  204. {
  205. GuiClearAll();
  206. ShowCaption("APN详情",2);//
  207. GuiDrawHLine(0,159,20,1);
  208. showIndex=0;
  209. ShowAPNMessage(showIndex);
  210. //----------------------------
  211. GuiDrawHLine(0,159,104,1);
  212. GuiShowStr(0,110,"[EXIT]返回 ",0x01);
  213. }
  214. }
  215. void SetApnDetailResponse(void)
  216. {
  217. if(KEY_PANEL_DOWN==g_ulKeyValue)
  218. {
  219. showIndex++;
  220. if(showIndex >= validApnNum) showIndex=0;
  221. ShowAPNMessage(showIndex);
  222. }else if(KEY_PANEL_UP==g_ulKeyValue)
  223. {
  224. if(showIndex==0) showIndex=validApnNum;
  225. if(showIndex > 0) showIndex--;
  226. ShowAPNMessage(showIndex);
  227. }
  228. else if(KEY_PANEL_EXIT==g_ulKeyValue) UISetNextStatus(UIS_SET_APN);
  229. }
  230. void MakeGpsSendData(void)
  231. {
  232. unsigned char *data=(unsigned char *)&sutLcdGpsSendData;
  233. memset(data, 0, sizeof(SUT_LCDGPS_SEND_DATA));
  234. data[0] = (sutGpsInfo.latitue>>24)&0xFF;
  235. data[1] = (sutGpsInfo.latitue>>16)&0xFF;
  236. data[2] = (sutGpsInfo.latitue>>8)&0xFF;
  237. data[3] = (sutGpsInfo.latitue)&0xFF;
  238. data[4] = (sutGpsInfo.longitue>>24)&0xFF;
  239. data[5] = (sutGpsInfo.longitue>>16)&0xFF;
  240. data[6] = (sutGpsInfo.longitue>>8)&0xFF;
  241. data[7] = (sutGpsInfo.longitue)&0xFF;
  242. }
  243. /*****************************************************
  244. 深圳北纬22.33 东经114.07
  245. 经过试验数据比较准确,但是东西南北不知道
  246. ******************************************************/
  247. void GetCoordinates(unsigned char type)
  248. {
  249. //type 0 UI时调用
  250. // 1 上传时调用
  251. char buf[30];
  252. //char buf0[15]={0};
  253. char buf1[8];
  254. char buf2[4]={0};
  255. char temp[3];
  256. char temp1[3];
  257. char temp2[5];
  258. char temp3[5];
  259. int i,num,num1,w,j;
  260. double Jnum1,Jnum2,Jnum3;//有小数位 8位有效
  261. double Wnum1,Wnum2,Wnum3;//有小数位 8位有效
  262. // char* g_cGetlongitude;
  263. // char* g_cGetlatitude;
  264. MakeGpsSendData();
  265. AscStrTurnHexStr((char *)sutLcdGpsSendData.JJJJ,buf1);
  266. memset(temp, 0, sizeof(temp));
  267. for(i=0;i<3;i++){
  268. temp[i]=buf1[i];
  269. }
  270. j=atoi(temp);
  271. memset(temp2, 0, sizeof(temp2));
  272. for(i=0;i<6;i++){
  273. temp2[i]=buf1[i+3];
  274. }
  275. num=atoi(temp2);
  276. Jnum1=num/1000;
  277. Jnum1 /=60;
  278. Jnum2 = (num%1000)*60;
  279. Jnum2 /=3600000;
  280. Jnum3=Jnum1+Jnum2;
  281. //sutLcdGpsSendData.j=j*1000000+Jnum3*1000000;
  282. // sutLcdGpsSendData.j = (j+Jnum3)*1000000;
  283. //Getlongitude;
  284. //Getlatitude;
  285. sutGpsInfo.testJD = j*1000000+Jnum3*1000000;//上传时使用
  286. // if(type == 0){//UI时要显示
  287. // sprintf(buf,"经度 %s: %d.%05d","W",j,(unsigned int)(Jnum3*100000));
  288. // GuiShowStr(0,40,buf,0x01);
  289. // }
  290. AscStrTurnHexStr((char *)sutLcdGpsSendData.WWWW,buf2);
  291. for(i=0;i<3;i++){
  292. temp1[i]=buf2[i];
  293. }
  294. w=atoi(temp1);
  295. for(i=0;i<6;i++){//5
  296. temp3[i]=buf2[i+3];
  297. }
  298. num1=atoi(temp3);
  299. Wnum1=num1/1000;
  300. Wnum1 /=60;
  301. Wnum2 = (num1%1000)*60;
  302. Wnum2 /=3600000;
  303. Wnum3=Wnum1+Wnum2;
  304. sutGpsInfo.testWD = w*1000000+Wnum3*1000000;
  305. if(type == 0){//UI时要显示
  306. snprintf(buf, sizeof(buf)," 纬度 %s: %.3d.%05d","S",w,(unsigned int)(Wnum3*100000));
  307. GuiShowStr(0,24,buf,0x01);
  308. snprintf(buf, sizeof(buf)," 经度 %s: %d.%05d","W",j,(unsigned int)(Jnum3*100000));
  309. GuiShowStr(0,40,buf,0x01);
  310. }
  311. }
  312. void SetGPSTimeShowDetail(unsigned char timeIndex)
  313. {
  314. unsigned short tempTime;
  315. char buf[10];
  316. tempTime = GPS_TimeTable[timeIndex];
  317. if(tempTime==0)
  318. {
  319. GuiShowStr(100,56," 关闭 ",0x01);//130
  320. GuiReverseRect(108,56,16*2,16);
  321. }else
  322. {
  323. snprintf(buf, sizeof(buf)," %02d 秒",tempTime);
  324. GuiShowStr(100,56,buf,0x01);//130
  325. GuiReverseRect(108,56,16,16);
  326. }
  327. }
  328. /*********************************************************/
  329. void SetGPSShow(int update)
  330. {
  331. static unsigned short susCt=0;
  332. if(update){
  333. GuiClearAll();
  334. ShowCaption("北斗设置",1);//
  335. GuiShowStr(0,56,"北斗上传设置: 秒",0x01); //sutGpsInfo.SendTime
  336. GuiDrawHLine(0,159,20,1);
  337. GetCoordinates(0);
  338. sutGpsInfo.GPS_TimeIndexBackup = sutProductPara.m_GPS_TimeIndex;
  339. SetGPSTimeShowDetail(sutGpsInfo.GPS_TimeIndexBackup);
  340. GuiDrawHLine(0,159,104,1);
  341. susCt=0;
  342. }
  343. if(susCt==0){
  344. GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01);
  345. }else if(susCt==200){
  346. GuiShowStr(0,110,"[M]保存 [EXIT]退出",0x01);
  347. }
  348. if(++susCt>=400)susCt=0;
  349. }
  350. void SetGPSResponse(void)
  351. {
  352. switch(g_ulKeyValue)
  353. {
  354. case KEY_PANEL_UP:
  355. case KEY_PANEL_DOWN:
  356. if(g_ulKeyValue==KEY_PANEL_UP)
  357. {
  358. if(sutGpsInfo.GPS_TimeIndexBackup<(sizeof(GPS_TimeTable)-1))
  359. sutGpsInfo.GPS_TimeIndexBackup++;
  360. else
  361. sutGpsInfo.GPS_TimeIndexBackup=0;
  362. }else{
  363. if(sutGpsInfo.GPS_TimeIndexBackup==0)
  364. sutGpsInfo.GPS_TimeIndexBackup=sizeof(GPS_TimeTable)-1;
  365. else
  366. sutGpsInfo.GPS_TimeIndexBackup--;
  367. }
  368. SetGPSTimeShowDetail(sutGpsInfo.GPS_TimeIndexBackup);
  369. break;
  370. case KEY_PANEL_MENU:
  371. if(sutGpsInfo.GPS_TimeIndexBackup != sutProductPara.m_GPS_TimeIndex)
  372. {//changed
  373. sutProductPara.m_GPS_TimeIndex = sutGpsInfo.GPS_TimeIndexBackup;
  374. GpsTimeUpdate();
  375. SaveProductParaToFlash("MENU_SWGPS");
  376. }
  377. UISetNextStatus(UIS_STANDBY);
  378. break;
  379. case KEY_PANEL_EXIT: UISetNextStatus(UIS_MENU_SYS_SET);break;
  380. //case KEY_PANEL_MENU: UISetNextStatus(UIS_MENU_MAIN);break;
  381. }
  382. }
  383. void SetLCDShow(int update)
  384. {
  385. static unsigned short susCt=0;
  386. char buf[10];
  387. char buf1[6];
  388. int x=4;//4
  389. int i;
  390. if(update==1){
  391. for(i=0;i<5;i++)sutLcdParam.SetTime[i]=g_ausTimeOut[i];
  392. sutLcdParam.SetTimeIndex=sutLcdParam.OnTimeIndex;
  393. GuiClearAll();
  394. ShowCaption("LCD设置",1);//0
  395. GuiDrawHLine(0,159,20,1);
  396. GuiShowStr(x,56," 背光时间: ",1);
  397. if(sutLcdParam.SetTimeIndex==4) snprintf(buf, sizeof(buf),"常亮 ");
  398. else snprintf(buf, sizeof(buf),"%3d 秒",sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]);
  399. GuiShowStr(x+(16*5),56,buf,1);
  400. GuiReverseRect(x+(16*5),56,32,16);
  401. snprintf(buf1, sizeof(buf1),"%3d",sutLcdParam.SetTimeIndex);
  402. SlwTrace(INF,buf1,1);
  403. GuiDrawHLine(0,159,104,1);
  404. susCt=0;
  405. //return;
  406. }else if(update == 2){
  407. if(sutLcdParam.SetTimeIndex==4) snprintf(buf, sizeof(buf),"常亮 ");
  408. else snprintf(buf, sizeof(buf),"%3d 秒",sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]);
  409. GuiShowStr(x+(16*5),56,buf,1);
  410. GuiReverseRect(x+(16*5),56,32,16);
  411. GuiDrawHLine(0,159,104,1);
  412. }
  413. if(susCt==0){
  414. GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01);
  415. }else if(susCt==200){
  416. GuiShowStr(0,110,"[M]保存 [EXIT]退出",0x01);
  417. }
  418. if(++susCt>=400)susCt=0;
  419. }
  420. void SetLCDResponse(void)
  421. {
  422. int FileIndex;
  423. unsigned long key;
  424. char Buf[10];
  425. int x=4;//4
  426. //TimeOut[]
  427. // key=ListBoxResponse(&sutListBox);
  428. switch(g_ulKeyValue){
  429. case KEY_PANEL_UP:
  430. if(++sutLcdParam.SetTimeIndex>=5)sutLcdParam.SetTimeIndex=0;
  431. SetLCDShow(2);//0
  432. break;
  433. case KEY_PANEL_DOWN:
  434. if(sutLcdParam.SetTimeIndex>0)sutLcdParam.SetTimeIndex--;
  435. else sutLcdParam.SetTimeIndex=4;
  436. SetLCDShow(2);//0
  437. break;
  438. case KEY_PANEL_MENU:
  439. g_iLCDFlag=1;
  440. sutLcdParam.OnTime=sutLcdParam.SetTime[sutLcdParam.SetTimeIndex];
  441. sutLcdParam.OnTimeIndex=sutLcdParam.SetTimeIndex;
  442. FileIndex=GetFileIndex("LcdParam.ini");
  443. ModifyFileData(FileIndex,0,sizeof(SUT_LCD_PARAM),(unsigned char *)&sutLcdParam);
  444. UISetNextStatus(UIS_MENU_SYS_SET);
  445. break;
  446. case KEY_PANEL_EXIT:
  447. UISetNextStatus(UIS_MENU_SYS_SET);
  448. break;
  449. // case KEY_PANEL_MENU:
  450. // UISetNextStatus(UIS_MENU_MAIN);
  451. // break;
  452. }
  453. // //--
  454. // if(KEY_PANEL_UP==key){
  455. // Index++;
  456. // if(Index==5)Index=0;
  457. // GuiClearArea(32, 56, 170, 24);
  458. // sprintf(Buf,"LCD定时:%d秒",TimeOut[Index]);
  459. // GuiShowStr(32,56,Buf,1);
  460. // }
  461. // //--
  462. // if(KEY_PANEL_DOWN==key){
  463. // if(Index==0)Index=5;
  464. // Index--;
  465. // GuiClearArea(32, 56, 170, 24);
  466. // sprintf(Buf,"LCD定时:%d秒",TimeOut[Index]);
  467. // GuiShowStr(32,56,Buf,1);
  468. // }
  469. // //--
  470. // if(KEY_PANEL_OK==key){
  471. // g_LCDFlag=1;
  472. // g_LCDTimeCt = TimeOut[Index]+5;
  473. // g_LCDTemp=TimeOut[Index]+5;
  474. // }
  475. // if(KEY_PANEL_EXIT==key)UISetNextStatus(UIS_STANDBY);
  476. // else if(KEY_PANEL_MENU==key)UISetNextStatus(UIS_MENU_MAIN);
  477. }
  478. unsigned char modemProcessFlash=0;
  479. MODEM_UPDATE_DEF m_updStatus;
  480. unsigned char m_process=0;
  481. int m_updateTimeout=0;
  482. char updateStart=0;
  483. void UpdateStatus(MODEM_UPDATE_DEF status)
  484. {
  485. modemProcessFlash=1;
  486. m_updStatus=status;
  487. m_updateTimeout=0;
  488. }
  489. void SetUpIntercomVerShow(int update)
  490. {
  491. char buf[19];
  492. if(update){
  493. GuiClearAll();
  494. ShowCaption("升级对讲版本",1);//
  495. GuiDrawHLine(0,159,20,1);
  496. GuiShowStr(16,56,"升级到最新版本? ",1);
  497. GuiDrawHLine(0,159,104,1);
  498. GuiShowStr(0,110,"[M]升级 [EXIT]退出",0x01);
  499. }
  500. if(updateStart)
  501. {
  502. if(++m_updateTimeout>2000)
  503. {
  504. m_updateTimeout=0;
  505. UpdateStatus(MODEM_STATUS_TIMEOUT);
  506. }
  507. }
  508. if(modemProcessFlash==0) return;
  509. modemProcessFlash=0;
  510. switch(m_updStatus)
  511. {
  512. case MODEM_STATUS_TRIGGER://正在启动更新
  513. GuiShowStr(16,22,"正在启动更新...",1);
  514. TriggerHttpOn(MODE_HTTP_MODEM);
  515. break;
  516. case MODEM_STATUS_READY://启动成功,获取最新版本
  517. GuiShowStr(16,42,"正在获取版本...",1);
  518. break;
  519. case MODEM_STATUS_CMD_VER_ERR://指令失败
  520. GuiShowStr(16,62,"获取失败/版本错误.",1);
  521. UpdateStatus(MODEM_STATUS_REBOOT);
  522. break;
  523. case MODEM_STATUS_NO_NEWVER://没有最新版本
  524. GuiShowStr(16,62,"没有最新版本...",1);
  525. UpdateStatus(MODEM_STATUS_REBOOT);
  526. break;
  527. case MODEM_STATUS_LOADING://正在下载
  528. GuiShowStr(16,62,"正在下载",1);
  529. snprintf(buf, sizeof(buf), ">>%d%%", m_process);
  530. GuiShowStr(16,82,buf,1);
  531. break;
  532. case MODEM_STATUS_SER_ERR://服务器应答出问题:如没有目标谁的
  533. GuiShowStr(16,102,"没有文件/其它错误",1);
  534. UpdateStatus(MODEM_STATUS_REBOOT);
  535. break;
  536. case MODEM_STATUS_DONE://下载完成
  537. GuiShowStr(16,102,"下载完成,正在安装",1);
  538. break;
  539. case MODEM_STATUS_INSTALLED://安装完成
  540. GuiShowStr(16,102,"安装完成,升级完成",1);
  541. UpdateStatus(MODEM_STATUS_REBOOT);
  542. break;
  543. case MODEM_STATUS_TIMEOUT:
  544. GuiShowStr(16,22,"超时无响应...",1);
  545. UpdateStatus(MODEM_STATUS_REBOOT);
  546. break;
  547. case MODEM_STATUS_REBOOT:
  548. LCD_BL_HIGH;
  549. os_dly_wait(200);
  550. modemPwrOffNow=1;
  551. // while(1)
  552. // {
  553. // os_dly_wait(100);
  554. // IWDG_ReloadCounter();
  555. // }
  556. break;
  557. }
  558. }
  559. void SetUpIntercomVerResponse(void)
  560. {
  561. if(updateStart) return;
  562. if(KEY_PANEL_MENU==g_ulKeyValue)
  563. {
  564. if(sutGpsStatus.PPPStatus != OPEN)
  565. {
  566. ShowMessageBox("无网络");
  567. os_dly_wait(100);
  568. UISetNextStatus(UIS_MENU_SYS_SET);
  569. return;
  570. }
  571. updateStart++;
  572. GuiClearArea(0, 22, LCD_WIDTH-1, LCD_HEIGHT-22);
  573. UpdateStatus(MODEM_STATUS_TRIGGER);
  574. }
  575. if(KEY_PANEL_EXIT==g_ulKeyValue) UISetNextStatus(UIS_MENU_SYS_SET);
  576. }
  577. char GetApnPara(unsigned char *source, unsigned char whitchOne,unsigned short *accessP, unsigned short *account,unsigned short *passw)
  578. {
  579. unsigned char *ptr=source;
  580. unsigned char getFlag=0;
  581. unsigned short i,noteAddress[9];//总共3组,共9个;号
  582. if(whitchOne >=3) return 1;//只有3组值
  583. i=0;
  584. while(*ptr != 0)
  585. {
  586. if(*ptr == ';')
  587. {
  588. if(getFlag < 9)
  589. {
  590. noteAddress[getFlag++]=i;
  591. }else{
  592. //收够了
  593. break;
  594. }
  595. }
  596. i++;
  597. ptr++;
  598. }
  599. if(getFlag != 9) return 2;//资源文件内容有错误
  600. switch(whitchOne)
  601. {
  602. case 0:*accessP=0;*account=noteAddress[0]+1;*passw=noteAddress[1]+1;break;
  603. case 1:*accessP=noteAddress[2]+1;*account=noteAddress[3]+1;*passw=noteAddress[4]+1;break;
  604. case 2:*accessP=noteAddress[5]+1;*account=noteAddress[6]+1;*passw=noteAddress[7]+1;break;
  605. }
  606. return 0;
  607. }
  608. char ReadApnData(unsigned char *source,unsigned char witchone,char *apnapn,char *apnname,char *apnpass)
  609. {//从缓存中获取数据段,一次一组
  610. unsigned char *accessPV,*accountV,*passwV;
  611. unsigned short accessP,account,passw;
  612. unsigned short i;
  613. char buf[30];
  614. if(GetApnPara(source, witchone, &accessP, &account, &passw))
  615. {
  616. SlwTrace(INF, "HGS.apn dataErr",1);//如果初始化失败,则直接使用内存中的了
  617. return 1;
  618. }
  619. accessPV=source+accessP;
  620. accountV=source+account;
  621. passwV=source+passw;
  622. //accesspoint
  623. if(apnapn != 0)
  624. {
  625. if(*accessPV == ';') apnapn[0] = 0;//空数据段
  626. else{
  627. for(i=0;i<APN_LEN;i++)
  628. {
  629. if(accessPV[i] != ';') apnapn[i]=accessPV[i];
  630. else{
  631. apnapn[i]=0;
  632. break;
  633. }
  634. }
  635. }
  636. }
  637. //account name
  638. if(apnname != 0)
  639. {
  640. if(*accountV == ';') apnname[0] = 0;//空数据段
  641. else{
  642. for(i=0;i<APN_LEN;i++)
  643. {
  644. if(accountV[i] != ';') apnname[i]=accountV[i];
  645. else{
  646. apnname[i]=0;
  647. break;
  648. }
  649. }
  650. }
  651. }
  652. //password
  653. if(apnpass != 0)
  654. {
  655. if(*passwV == ';') apnpass[0] = 0;//空数据段
  656. else{
  657. for(i=0;i<APN_LEN;i++)
  658. {
  659. if(passwV[i] != ';') apnpass[i]=passwV[i];
  660. else{
  661. apnpass[i]=0;
  662. break;
  663. }
  664. }
  665. }
  666. }
  667. return 0;
  668. }
  669. //读取Para.ini配置文件获取LCD模式
  670. char GetApnFromSrc(char *src, char index,char *name, char *pass)
  671. {
  672. char target[15];
  673. char finalData[62];
  674. unsigned char tempLen,i,j;
  675. j=0;
  676. index +=1;
  677. switch(index)
  678. {
  679. case 1:case 2:case 3:case 4:
  680. snprintf(target, sizeof(target), "APN%d", index);
  681. break;
  682. default:return 0;
  683. }
  684. tempLen=GetParaFromStr(src, target, finalData);
  685. if(tempLen == 0) return 0;
  686. for(i=0;i<tempLen;i++)
  687. {
  688. if(finalData[i]==',')
  689. {
  690. j=i+1;
  691. finalData[i]=0;
  692. i=tempLen;
  693. }
  694. }
  695. tempLen=strlen(finalData);
  696. if(tempLen>30) tempLen=30;
  697. memcpy(name, finalData, tempLen);
  698. name[tempLen]=0;
  699. tempLen=strlen(finalData+j);
  700. if(tempLen>30) tempLen=30;
  701. memcpy(pass, finalData+j, tempLen);
  702. pass[tempLen]=0;
  703. return 1;
  704. }
  705. int HgsApnLen;
  706. unsigned char validApnNum;
  707. void APNFileInit(void)
  708. {
  709. char tempData[400];//3组APN,每组中每参数30个
  710. char name[APN_LEN+1];
  711. char pass[APN_LEN+1];
  712. int tempLen,i;
  713. ApnFileIndex=GetFileIndex("HGS.apn");
  714. if(ApnFileIndex == -1)
  715. {
  716. printf("No HGS.apn file\r\n");
  717. goto READ_EXIT;
  718. }
  719. HgsApnLen=GetFileLen(ApnFileIndex);
  720. if(HgsApnLen==0)
  721. {
  722. printf("HGS.apn empty\r\n");
  723. goto READ_EXIT;
  724. }
  725. //读出数据
  726. if(HgsApnLen > sizeof(tempData))
  727. {
  728. printf("Hgs.apn len=%d,should <=%d\r\n",HgsApnLen,sizeof(tempData));
  729. HgsApnLen=sizeof(tempData);
  730. }
  731. tempLen=ReadFileData(ApnFileIndex,0,HgsApnLen,(u8*)tempData);
  732. //检测是否显示APN
  733. tempLen=GetParaFromStr(tempData, "APNSHOW", name);
  734. if(tempLen==0)
  735. {
  736. showApn=1;//没有字段,则设置为显示菜单
  737. printf("No 'APNSHOW'\r\n");
  738. }else{
  739. showApn=atoi(name);
  740. }
  741. printf("APNSHOW:%d\r\n",showApn);
  742. READ_EXIT:
  743. //读取APN参数到table
  744. if(ApnFileIndex==-1 || HgsApnLen==0)
  745. {//资源文件错误,则只有一个默认APN
  746. goto SET_ONLY_ONE;
  747. }else{
  748. //读出数据
  749. for(i=0;i<APN_NUM;i++)
  750. {
  751. if(0==GetApnFromSrc(tempData, i, name,pass))
  752. {//获取APN失败,恢复默认
  753. goto SET_ONLY_ONE;
  754. }else{
  755. strcpy(&showApnTable[2*i][0], name);
  756. strcpy(&showApnTable[2*i+1][0],pass);
  757. }
  758. }
  759. validApnNum=APN_NUM;
  760. return;
  761. }
  762. SET_ONLY_ONE:
  763. strcpy(showApnTable[0],APN_NAME);
  764. strcpy(showApnTable[1],APN_PASSWORD);
  765. validApnNum=1;
  766. }
  767. #if 0
  768. void SetNetResponse(void)
  769. {
  770. char buf[30];
  771. unsigned long key;
  772. // static char temp=0;
  773. key=MenuResponse(&sutMenuSysSetup);
  774. if(KEY_PANEL_MENU==key){
  775. if(sutProductPara.g_net==sutMenuSysSetup.handle){
  776. return;
  777. }
  778. switch(sutMenuSysSetup.handle){
  779. case 0:
  780. sutProductPara.g_net=0;
  781. GetMododexWithCard();
  782. break;
  783. case 1: //移动
  784. sutProductPara.g_net=1;
  785. GetMododexWithCard();
  786. break;
  787. case 2:
  788. sutProductPara.g_net=2;
  789. GetMododexWithCard();
  790. break;
  791. case 3:
  792. break;
  793. }
  794. GuiClearArea(0, 1, LCD_WIDTH-1,18);
  795. ShowNetCaption(sutProductPara.g_net);
  796. SaveProductParaToFlash("MENU_SWGPS");
  797. }else if(KEY_PANEL_EXIT==key){
  798. UISetNextStatus(UIS_MENU_SYS_SET); //UIS_MENU_SYS_SET
  799. }
  800. }
  801. # else
  802. void SetNetResponse(void)
  803. {
  804. switch(g_ulKeyValue){
  805. case KEY_PANEL_UP:
  806. if(++Net_temp_flag>=3)Net_temp_flag=0;
  807. SetNetShow(2);//0
  808. break;
  809. case KEY_PANEL_DOWN:
  810. if(Net_temp_flag>0)Net_temp_flag--;
  811. else Net_temp_flag=2;
  812. SetNetShow(2);//0
  813. break;
  814. case KEY_PANEL_MENU:
  815. sutProductPara.g_net=Net_temp_flag;
  816. GetMododexWithCard();
  817. SaveProductParaToFlash("MENU_SWGPS");
  818. UISetNextStatus(UIS_MENU_SYS_SET);
  819. break;
  820. case KEY_PANEL_EXIT:
  821. UISetNextStatus(UIS_MENU_SYS_SET);
  822. break;
  823. }
  824. }
  825. #endif
  826. #if 0
  827. void SetNetShow(int update)
  828. {
  829. static const char *apcMenuSysSetup[]={
  830. "网模自动",
  831. "2G+3G",
  832. "4G模式",
  833. ""
  834. };
  835. if(update){
  836. GuiClearAll();
  837. ShowNetCaption(sutProductPara.g_net);
  838. GuiDrawHLine(0,159,20,1);
  839. MenuInit(&sutMenuSysSetup,apcMenuSysSetup);
  840. return;
  841. }
  842. }
  843. #else
  844. void SetNetShow(int update)
  845. {
  846. //const char *p=GetCaptionByMododex[Mododrex_Net];
  847. static unsigned short susCt=0;
  848. char buf[10];
  849. char buf2[20];
  850. int x=12;//4
  851. if(update==1){
  852. GuiClearAll();
  853. //ShowNetCaption(sutProductPara.g_net); Mododrex_Net
  854. ShowCaption("网络设置",1);
  855. GuiDrawHLine(0,159,20,1);
  856. GuiShowStr(x,56," 网络选择: ",1);
  857. snprintf(buf2,sizeof(buf2),"MODE:%s",GetCaptionByMododex(Mododrex_Net));
  858. //GuiShowStr(x,86,buf2,1);
  859. ShowCaption(buf2,86);
  860. snprintf(buf, sizeof(buf),"%s",g_ausNetOut[sutProductPara.g_net]);
  861. GuiShowStr(x+(16*5),56,buf,1);
  862. GuiReverseRect(x+(16*5),56,40,16);//5
  863. GuiDrawHLine(0,159,104,1);
  864. susCt=0;
  865. }else if(update == 2){
  866. snprintf(buf, sizeof(buf),"%s",g_ausNetOut[Net_temp_flag]);
  867. GuiShowStr(x+(16*5),56,buf,1);
  868. GuiReverseRect(x+(16*5),56,40,16);//5
  869. GuiDrawHLine(0,159,104,1);
  870. }
  871. if(susCt==0){
  872. GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01);
  873. }else if(susCt==200){
  874. GuiShowStr(0,110,"[M]保存 [EXIT]退出",0x01);
  875. }
  876. if(++susCt>=400)susCt=0;
  877. }
  878. #endif
  879. void ShowNetCaption(unsigned char g_net)
  880. {
  881. switch(g_net)
  882. {
  883. case 0:
  884. ShowCaption("当前(Auto)",1); //
  885. break;
  886. case 1:
  887. ShowCaption("当前(2G+3G)",1); //
  888. break;
  889. case 2:
  890. ShowCaption("当前(4g模式)",1); //
  891. break;
  892. default:
  893. break;
  894. }
  895. }
  896. void GetMododexWithCard(void)
  897. {
  898. char buf[30];
  899. //根据CardType和ModeSetup转换为Mododex值的一个表
  900. static const unsigned char MododrxTable[3][3]={{11,24,5},{2,8,5},{17,21,5}};
  901. snprintf(buf,sizeof(buf),"AT+MODODREX=%d\r\n",MododrxTable[thisYunYingShang][sutProductPara.g_net]);
  902. ModemSendAT(buf);
  903. }
  904. const char *GetCaptionByMododex(unsigned int mododex)
  905. {
  906. static const char *CaptionTable[]={
  907. "",
  908. "UMTS ONLY",//1
  909. "AUTO(LTE)",
  910. "CDMA AND GSM",
  911. "AUTO(TDS)",
  912. "LTE ONLY",
  913. "TDS ONLY",
  914. "TDS WCDMA",
  915. "TDS GSM WCDMA",
  916. "TDS WCDMA LTE",
  917. "HDR ONLY",
  918. "AUTO (TELECOM)",
  919. "AUTO(HDR)",
  920. "CDMA HDR LTE",
  921. "CDMA HDR",
  922. "CDMA ONLY",
  923. "AUTO(TDS,LTE)",
  924. "AUTO(LTE,WCDMA)",
  925. "AUTO(WCDMA,GSM)",
  926. "AUTO(WCDMA,LTE)",
  927. "LTE WCDMA ONLY",
  928. "WCDMA GSM ONLY",
  929. "LTE AND TDS",
  930. "LTE GSM ONLY",
  931. "CDMA HDR WCDMA GSM",
  932. "GSM ONLY",
  933. };
  934. return CaptionTable[mododex];
  935. }