SetSystemPara.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. /*****************************************************************************
  2. SetSystemPara.c
  3. *****************************************************************************/
  4. #include "includes.h"
  5. #define APN_NUM (4+1)
  6. #define WANT_APN_DETAIL 0
  7. SUT_MENU sutMenuSysSetup;
  8. SUT_LCDGPS_SEND_DATA sutLcdGpsSendData;
  9. char ReadApnData(unsigned char *source,unsigned char witchone,char *apnapn,char *apnname,char *apnpass);
  10. const static unsigned short g_ausTimeOut[5]={10,30,60,300,0};
  11. int ApnFileIndex;
  12. /*************************************************************************/
  13. unsigned int g_uiGpsStat = 1;
  14. unsigned int g_iLCDFlag=0;
  15. SUT_LCD_PARAM sutLcdParam;
  16. unsigned int g_UpdataPocVersion=0;
  17. unsigned char startUp=0;
  18. unsigned short g_UpdatePocCount;
  19. char showApn[3][APN_LEN+1];
  20. void SetAPNShow(int update)
  21. {
  22. int i;
  23. static unsigned short susCt=0;
  24. static const char *accIconFileName[]={"APN.bmp","APN1.bmp",""};
  25. unsigned char buf[300];
  26. static char NullGroup=0;
  27. static char GroupsFeatures[APN_NUM];
  28. static char *APNAPN[APN_NUM];
  29. char NullPtr[]="";
  30. if(update){
  31. susCt=0;
  32. GuiClearAll();
  33. ShowCaption("设置APN",1);//
  34. GuiDrawHLine(0,159,20,1);
  35. ReadFileData(ApnFileIndex,0,sizeof(buf),buf);
  36. for(i=0;i<3;i++)
  37. {//读取三组接入点名称
  38. if(ReadApnData(buf, i, &showApn[i][0], 0,0))
  39. {
  40. return;
  41. }
  42. }
  43. //付给用于显示的指针
  44. APNAPN[0]=&showApn[0][0];
  45. APNAPN[1]=&showApn[1][0];
  46. APNAPN[2]=&showApn[2][0];
  47. APNAPN[3]=NullPtr;
  48. APNAPN[4]=NullPtr;
  49. //----------------------------
  50. for(i=0;i<APN_NUM;i++){
  51. GroupsFeatures[i]=0;
  52. }
  53. //设置Features 将决定选择图标
  54. if(0==strcmp(sutProductPara.APNApn, APNAPN[0])) GroupsFeatures[0]=1;
  55. else if(0==strcmp(sutProductPara.APNApn, APNAPN[1])) GroupsFeatures[1]=1;
  56. else if(0==strcmp(sutProductPara.APNApn, APNAPN[2])) GroupsFeatures[2]=1;
  57. else{
  58. //如果以上三种都不是,则认为是用户自定义的了
  59. APNAPN[3]=sutProductPara.APNApn;
  60. GroupsFeatures[3]=1;
  61. }
  62. ListBoxInit(&sutListBox,APNAPN,0,accIconFileName,GroupsFeatures);
  63. //----------------------------
  64. GuiDrawHLine(0,159,104,1);
  65. #if(WANT_APN_DETAIL==1)
  66. GuiShowStr(0,110,"[OK]切换 [S]详情 ",0x01);
  67. #else
  68. GuiShowStr(0,110,"[OK]切换 ",0x01);
  69. #endif
  70. }
  71. }
  72. void SetSYSResponse(void)
  73. {
  74. unsigned long key;
  75. key=MenuResponse(&sutMenuSysSetup);
  76. if(KEY_PANEL_OK==key){
  77. switch(sutMenuSysSetup.handle){
  78. case 0:
  79. UISetNextStatus(UIS_SET_APN);
  80. break;
  81. case 1:
  82. UISetNextStatus(UIS_SET_GPS);
  83. break;
  84. case 2:
  85. UISetNextStatus(UIS_SET_LCD);
  86. break;
  87. case 3:
  88. UISetNextStatus(UIS_UP_APPRICATION_VER);
  89. break;
  90. case 4:
  91. // UISetNextStatus(UIS_UP_INTERCOM_VER);
  92. break;
  93. }
  94. }else if(KEY_PANEL_MENU==key){
  95. UISetNextStatus(UIS_MENU_MAIN);
  96. }else if(KEY_PANEL_EXIT==key){
  97. UISetNextStatus(UIS_MENU_MAIN); //UIS_MENU_SYS_SET
  98. }
  99. }
  100. /***************************************
  101. 注意:CDMA的APN形式跟WCDMA大不相同
  102. W机子是不需要改来改去的 "IP","UNIM2M.NJM2MAPN","0.0.0.0"
  103. ****************************************/
  104. void SetAPNResponse(void)
  105. {
  106. unsigned long key;
  107. unsigned char needSave=0;
  108. unsigned char buf[300];
  109. char access[APN_LEN+1];
  110. char account[APN_LEN+1];
  111. char passw[APN_LEN+1];
  112. key=ListBoxResponse(&sutListBox);
  113. if(KEY_PANEL_OK==key)
  114. {
  115. if(sutListBox.handle < 3)
  116. {
  117. ReadFileData(ApnFileIndex,0,sizeof(buf),buf);
  118. if(ReadApnData(buf, sutListBox.handle, access, account, passw))
  119. strcpy(sutProductPara.APNApn, access);
  120. strcpy(sutProductPara.APNName,account);
  121. strcpy(sutProductPara.APNPass,passw);
  122. sutProductPara.ApnParaIndex=sutListBox.handle;
  123. needSave=1;
  124. }else{
  125. //第4个是本来的设置,更改无效
  126. return;
  127. }
  128. if(needSave)
  129. {
  130. ShowCaption("即将重启更新参数",80);
  131. SaveProductParaToFlash("MENU_SWAPN");
  132. }
  133. os_dly_wait(10);
  134. while(1);
  135. // ModemSendAT("AT+ZPIDPWD=");
  136. // ModemSendAT(sutProductPara.APNName);
  137. // ModemSendAT(",");
  138. // ModemSendAT(sutProductPara.APNPass);
  139. // ModemSendAT("\r\n");
  140. // os_dly_wait(200);
  141. // ModemInit();
  142. // UISetNextStatus(UIS_STANDBY);
  143. }
  144. if(KEY_PANEL_EXIT==key)UISetNextStatus(UIS_MENU_SYS_SET);
  145. else if(KEY_PANEL_MENU==key)UISetNextStatus(UIS_MENU_MAIN);
  146. #if(WANT_APN_DETAIL==1)
  147. else if(KEY_OPTION==key)UISetNextStatus(UIS_MENU_APN_DETAIL);
  148. #endif
  149. }
  150. #if(WANT_APN_DETAIL==1)
  151. void SetAPNDetailShow(int update)
  152. {
  153. unsigned char buf[300];
  154. char access[APN_LEN+1];
  155. char account[APN_LEN+1];
  156. char passw[APN_LEN+1];
  157. u16 x,y;
  158. if(update)
  159. {
  160. //sutMenuSysSetup.handle
  161. GuiClearAll();
  162. ShowCaption("APN详情",1);//
  163. GuiDrawHLine(0,159,20,1);
  164. if(sutListBox.handle < 3)
  165. {
  166. ReadFileData(ApnFileIndex,0,sizeof(buf),buf);
  167. if(ReadApnData(buf, sutListBox.handle, access, account, passw)) return;
  168. }else{//3
  169. strncpy(access, sutProductPara.APNApn,sizeof(access));
  170. strncpy(account, sutProductPara.APNName,sizeof(account));
  171. strncpy(passw, sutProductPara.APNPass,sizeof(passw));
  172. }
  173. x=2;
  174. y=22;
  175. //显示APN详情
  176. GuiClearRect(0,y,LCD_WIDTH-1,LCD_HEIGHT-1);
  177. GuiShowStr(x,y,"接入点,用户名,密码",0x01);
  178. y+= 20;
  179. GuiShowStr(x,y,access,0x01);
  180. y+=20;
  181. GuiShowStr(x,y,account,0x01);
  182. y+=20;
  183. GuiShowStr(x,y,passw, 1);
  184. GuiDrawHLine(0,159,104,1);
  185. GuiShowStr(0,110,"[OK]返回 ",0x01);
  186. }
  187. }
  188. #endif
  189. void SetAPNDetailResponse(void)
  190. {
  191. if(KEY_PANEL_OK==g_ulKeyValue ||
  192. KEY_PANEL_EXIT==g_ulKeyValue)
  193. UISetNextStatus(sutUIstatus.LastStatus);
  194. else if(KEY_PANEL_MENU==g_ulKeyValue)
  195. UISetNextStatus(UIS_MENU_MAIN);
  196. }
  197. void MakeGpsSendData(void)
  198. {
  199. unsigned char *data=(unsigned char *)&sutLcdGpsSendData;
  200. memset(data, 0, sizeof(SUT_LCDGPS_SEND_DATA));
  201. data[0] = (sutGpsInfo.latitue>>24)&0xFF;
  202. data[1] = (sutGpsInfo.latitue>>16)&0xFF;
  203. data[2] = (sutGpsInfo.latitue>>8)&0xFF;
  204. data[3] = (sutGpsInfo.latitue)&0xFF;
  205. data[4] = (sutGpsInfo.longitue>>24)&0xFF;
  206. data[5] = (sutGpsInfo.longitue>>16)&0xFF;
  207. data[6] = (sutGpsInfo.longitue>>8)&0xFF;
  208. data[7] = (sutGpsInfo.longitue)&0xFF;
  209. }
  210. /*****************************************************
  211. 深圳北纬22.33 东经114.07
  212. 经过试验数据比较准确,但是东西南北不知道
  213. ******************************************************/
  214. void GetCoordinates(unsigned char type)
  215. {
  216. //type 0 UI时调用
  217. // 1 上传时调用
  218. char buf[10];
  219. char buf0[10]={0};
  220. char buf1[8];
  221. char buf2[4]={0};
  222. char temp[3];
  223. char temp1[3];
  224. char temp2[5];
  225. char temp3[5];
  226. int i,num,num1,w,j;
  227. double Jnum1,Jnum2,Jnum3;//有小数位 8位有效
  228. double Wnum1,Wnum2,Wnum3;//有小数位 8位有效
  229. // char* g_cGetlongitude;
  230. // char* g_cGetlatitude;
  231. MakeGpsSendData();
  232. AscStrTurnHexStr((char *)sutLcdGpsSendData.JJJJ,buf1);
  233. memset(temp, 0, sizeof(temp));
  234. for(i=0;i<3;i++){
  235. temp[i]=buf1[i];
  236. }
  237. j=atoi(temp);
  238. memset(temp2, 0, sizeof(temp2));
  239. for(i=0;i<6;i++){
  240. temp2[i]=buf1[i+3];
  241. }
  242. num=atoi(temp2);
  243. Jnum1=num/1000;
  244. Jnum1 /=60;
  245. Jnum2 = (num%1000)*60;
  246. Jnum2 /=3600000;
  247. Jnum3=Jnum1+Jnum2;
  248. //sutLcdGpsSendData.j=j*1000000+Jnum3*1000000;
  249. // sutLcdGpsSendData.j = (j+Jnum3)*1000000;
  250. //Getlongitude;
  251. //Getlatitude;
  252. sutGpsInfo.testJD = j*1000000+Jnum3*1000000;//上传时使用
  253. // if(type == 0){//UI时要显示
  254. // sprintf(buf,"经度 %s: %d.%05d","W",j,(unsigned int)(Jnum3*100000));
  255. // GuiShowStr(0,40,buf,0x01);
  256. // }
  257. AscStrTurnHexStr((char *)sutLcdGpsSendData.WWWW,buf2);
  258. for(i=0;i<3;i++){
  259. temp1[i]=buf2[i];
  260. }
  261. w=atoi(temp1);
  262. for(i=0;i<6;i++){//5
  263. temp3[i]=buf2[i+3];
  264. }
  265. num1=atoi(temp3);
  266. Wnum1=num1/1000;
  267. Wnum1 /=60;
  268. Wnum2 = (num1%1000)*60;
  269. Wnum2 /=3600000;
  270. Wnum3=Wnum1+Wnum2;
  271. sutGpsInfo.testWD = w*1000000+Wnum3*1000000;
  272. if(type == 0){//UI时要显示
  273. sprintf(buf0," 纬度 %s: %.3d.%05d","S",w,(unsigned int)(Wnum3*100000));
  274. GuiShowStr(0,24,buf0,0x01);
  275. sprintf(buf," 经度 %s: %d.%05d","W",j,(unsigned int)(Jnum3*100000));
  276. GuiShowStr(0,40,buf,0x01);
  277. }
  278. }
  279. void SetGPSTimeShowDetail(unsigned char timeIndex)
  280. {
  281. unsigned short tempTime;
  282. char buf[10];
  283. tempTime = GPS_TimeTable[timeIndex];
  284. if(tempTime==0)
  285. {
  286. GuiShowStr(100,56," 关闭 ",0x01);//130
  287. GuiReverseRect(108,56,16*2,16);
  288. }else
  289. {
  290. sprintf(buf," %02d 秒",tempTime);
  291. GuiShowStr(100,56,buf,0x01);//130
  292. GuiReverseRect(108,56,16,16);
  293. }
  294. }
  295. /*********************************************************/
  296. void SetGPSShow(int update)
  297. {
  298. static unsigned short susCt=0;
  299. // char buf[10];
  300. // char buf0[10]={0};
  301. // char buf1[8];
  302. // char buf2[4]={0};
  303. // char buf3[2];
  304. // char temp[3];
  305. // char temp1[3];
  306. // char temp2[5];
  307. // char temp3[5];
  308. // int i,num,num1;
  309. //AscStrToHexStr
  310. if(update){
  311. GuiClearAll();
  312. ShowCaption("GPS设置",1);//
  313. GuiShowStr(0,56," GPS上传设置: 秒",0x01); //sutGpsInfo.SendTime
  314. GuiDrawHLine(0,159,20,1);
  315. // GuiShowBmp(65,60,"GPS2.bmp");
  316. GetCoordinates(0);
  317. sutGpsInfo.GPS_TimeIndexBackup = sutProductPara.m_GPS_TimeIndex;
  318. SetGPSTimeShowDetail(sutGpsInfo.GPS_TimeIndexBackup);
  319. GuiDrawHLine(0,159,104,1);
  320. susCt=0;
  321. }
  322. if(susCt==0){
  323. GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01);
  324. }else if(susCt==200){
  325. GuiShowStr(0,110,"[OK]切换 [EXIT]退出",0x01);
  326. }
  327. if(++susCt>=400)susCt=0;
  328. }
  329. void SetGPSResponse(void)
  330. {
  331. switch(g_ulKeyValue)
  332. {
  333. case KEY_PANEL_UP:
  334. case KEY_PANEL_DOWN:
  335. if(g_ulKeyValue==KEY_PANEL_UP)
  336. {
  337. if(sutGpsInfo.GPS_TimeIndexBackup<(sizeof(GPS_TimeTable)-1))
  338. sutGpsInfo.GPS_TimeIndexBackup++;
  339. else
  340. sutGpsInfo.GPS_TimeIndexBackup=0;
  341. }else{
  342. if(sutGpsInfo.GPS_TimeIndexBackup==0)
  343. sutGpsInfo.GPS_TimeIndexBackup=sizeof(GPS_TimeTable)-1;
  344. else
  345. sutGpsInfo.GPS_TimeIndexBackup--;
  346. }
  347. SetGPSTimeShowDetail(sutGpsInfo.GPS_TimeIndexBackup);
  348. break;
  349. case KEY_PANEL_OK:
  350. if(sutGpsInfo.GPS_TimeIndexBackup != sutProductPara.m_GPS_TimeIndex)
  351. {//changed
  352. sutProductPara.m_GPS_TimeIndex = sutGpsInfo.GPS_TimeIndexBackup;
  353. GpsTimeUpdate();
  354. SaveProductParaToFlash("MENU_SWGPS");
  355. }
  356. UISetNextStatus(UIS_STANDBY);
  357. break;
  358. case KEY_PANEL_EXIT: UISetNextStatus(UIS_MENU_SYS_SET);break;
  359. case KEY_PANEL_MENU: UISetNextStatus(UIS_MENU_MAIN);break;
  360. }
  361. }
  362. void SetLCDShow(int update)
  363. {
  364. static unsigned short susCt=0;
  365. char buf[6];
  366. char buf1[6];
  367. int x=4;//4
  368. int i;
  369. if(update==1){
  370. for(i=0;i<5;i++)sutLcdParam.SetTime[i]=g_ausTimeOut[i];
  371. sutLcdParam.SetTimeIndex=sutLcdParam.OnTimeIndex;
  372. GuiClearAll();
  373. ShowCaption("LCD设置",1);//0
  374. GuiDrawHLine(0,159,20,1);
  375. GuiShowStr(x,56," 背光时间: 秒",1);
  376. if(sutLcdParam.SetTimeIndex==4) sprintf(buf,"常亮");
  377. else sprintf(buf,"%3d",sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]);
  378. GuiShowStr(x+(16*5),56,buf,1);
  379. GuiReverseRect(x+(16*5),56,32,16);
  380. sprintf(buf1,"%3d",sutLcdParam.SetTimeIndex);
  381. SlwTrace(INF,buf1,1);
  382. GuiDrawHLine(0,159,104,1);
  383. susCt=0;
  384. //return;
  385. }else if(update == 2){
  386. if(sutLcdParam.SetTimeIndex==4) sprintf(buf,"常亮");
  387. else sprintf(buf,"%3d",sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]);
  388. GuiShowStr(x+(16*5),56,buf,1);
  389. GuiReverseRect(x+(16*5),56,32,16);
  390. GuiDrawHLine(0,159,104,1);
  391. }
  392. if(susCt==0){
  393. GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01);
  394. }else if(susCt==200){
  395. GuiShowStr(0,110,"[OK]切换 [EXIT]退出",0x01);
  396. }
  397. if(++susCt>=400)susCt=0;
  398. }
  399. void SetLCDResponse(void)
  400. {
  401. int FileIndex;
  402. unsigned long key;
  403. char Buf[10];
  404. int x=4;//4
  405. //TimeOut[]
  406. // key=ListBoxResponse(&sutListBox);
  407. switch(g_ulKeyValue){
  408. case KEY_PANEL_UP:
  409. if(++sutLcdParam.SetTimeIndex>=5)sutLcdParam.SetTimeIndex=0;
  410. SetLCDShow(2);//0
  411. break;
  412. case KEY_PANEL_DOWN:
  413. if(sutLcdParam.SetTimeIndex>0)sutLcdParam.SetTimeIndex--;
  414. else sutLcdParam.SetTimeIndex=4;
  415. SetLCDShow(2);//0
  416. break;
  417. case KEY_PANEL_OK:
  418. g_iLCDFlag=1;
  419. sutLcdParam.OnTime=sutLcdParam.SetTime[sutLcdParam.SetTimeIndex];
  420. sutLcdParam.OnTimeIndex=sutLcdParam.SetTimeIndex;
  421. FileIndex=GetFileIndex("LcdParam.ini");
  422. ModifyFileData(FileIndex,0,sizeof(SUT_LCD_PARAM),(unsigned char *)&sutLcdParam);
  423. UISetNextStatus(UIS_MENU_SYS_SET);
  424. break;
  425. case KEY_PANEL_EXIT:
  426. UISetNextStatus(UIS_MENU_SYS_SET);
  427. break;
  428. case KEY_PANEL_MENU:
  429. UISetNextStatus(UIS_MENU_MAIN);
  430. break;
  431. }
  432. // //--
  433. // if(KEY_PANEL_UP==key){
  434. // Index++;
  435. // if(Index==5)Index=0;
  436. // GuiClearArea(32, 56, 170, 24);
  437. // sprintf(Buf,"LCD定时:%d秒",TimeOut[Index]);
  438. // GuiShowStr(32,56,Buf,1);
  439. // }
  440. // //--
  441. // if(KEY_PANEL_DOWN==key){
  442. // if(Index==0)Index=5;
  443. // Index--;
  444. // GuiClearArea(32, 56, 170, 24);
  445. // sprintf(Buf,"LCD定时:%d秒",TimeOut[Index]);
  446. // GuiShowStr(32,56,Buf,1);
  447. // }
  448. // //--
  449. // if(KEY_PANEL_OK==key){
  450. // g_LCDFlag=1;
  451. // g_LCDTimeCt = TimeOut[Index]+5;
  452. // g_LCDTemp=TimeOut[Index]+5;
  453. // }
  454. // if(KEY_PANEL_EXIT==key)UISetNextStatus(UIS_STANDBY);
  455. // else if(KEY_PANEL_MENU==key)UISetNextStatus(UIS_MENU_MAIN);
  456. }
  457. void SetUpIntercomVerShow(int update)
  458. {
  459. char buf[19];
  460. if(update){
  461. GuiClearAll();
  462. ShowCaption("升级对讲版本",1);//
  463. GuiDrawHLine(0,159,20,1);
  464. GuiShowStr(32,56,"是否升级?",1);
  465. GuiDrawHLine(0,159,104,1);
  466. GuiShowStr(0,110,"[OK]升级 [EXIT]退出",0x01);
  467. g_UpdataPocVersion =0;
  468. startUp=0;
  469. }
  470. if(g_UpdataPocVersion>0){
  471. g_UpdatePocCount++;
  472. if(g_UpdatePocCount >= 130){//1S
  473. g_UpdatePocCount = 0;
  474. g_UpdataPocVersion--;
  475. }else return;
  476. sprintf(buf, " 请稍候 %d ", g_UpdataPocVersion);
  477. GuiShowStr(0,110,buf,0x01);
  478. if(g_UpdataPocVersion==0)
  479. {
  480. GuiClearArea(4, 56, 158, 24);
  481. SpeakerEnable();
  482. GuiShowStr(10,44," 请重启对讲机! ",0x01);
  483. GuiShowStr(10,68," 并检查对讲版本号!",0x01);
  484. GuiShowStr(0,110," 可以重启设备 ",0x01);
  485. LCD_BL_HIGH;
  486. SpeakerEnable();
  487. ModemSendAT("AT+ZTTS=1,\"EF53E54ECD912F54BE8B0759\"\r\n");//可以重启设备
  488. }
  489. }
  490. }
  491. void SetUpIntercomVerResponse(void)
  492. {
  493. char buf[19];
  494. if(KEY_PANEL_OK==g_ulKeyValue && !g_UpdataPocVersion && !startUp){
  495. GuiClearArea(0, 22, 160, 80);
  496. SpeakerEnable();
  497. ModemSendAT("AT+ZTTS=1,\"636B28570459067470656E63\"\r");//正在处理数据...
  498. UpdataPocVersion();
  499. GuiShowStr(4,44," 正在处理数据... ",0x01);
  500. GuiShowStr(4,68," 请别断电!!! ",0x01);
  501. g_UpdataPocVersion=150;
  502. sprintf(buf, " 请稍候 %d ", g_UpdataPocVersion);
  503. GuiShowStr(0,110,buf,0x01);
  504. startUp=1;
  505. }
  506. if(startUp) return;
  507. if(KEY_PANEL_EXIT==g_ulKeyValue)UISetNextStatus(UIS_MENU_SYS_SET);
  508. else if(KEY_PANEL_MENU==g_ulKeyValue)UISetNextStatus(UIS_MENU_MAIN);
  509. }
  510. char GetApnPara(unsigned char *source, unsigned char whitchOne,unsigned short *accessP, unsigned short *account,unsigned short *passw)
  511. {
  512. unsigned char *ptr=source;
  513. unsigned char getFlag=0;
  514. unsigned short i,noteAddress[9];//总共3组,共9个;号
  515. if(whitchOne >=3) return 1;//只有3组值
  516. i=0;
  517. while(*ptr != 0)
  518. {
  519. if(*ptr == ';')
  520. {
  521. if(getFlag < 9)
  522. {
  523. noteAddress[getFlag++]=i;
  524. }else{
  525. //收够了
  526. break;
  527. }
  528. }
  529. i++;
  530. ptr++;
  531. }
  532. if(getFlag != 9) return 2;//资源文件内容有错误
  533. switch(whitchOne)
  534. {
  535. case 0:*accessP=0;*account=noteAddress[0]+1;*passw=noteAddress[1]+1;break;
  536. case 1:*accessP=noteAddress[2]+1;*account=noteAddress[3]+1;*passw=noteAddress[4]+1;break;
  537. case 2:*accessP=noteAddress[5]+1;*account=noteAddress[6]+1;*passw=noteAddress[7]+1;break;
  538. }
  539. return 0;
  540. }
  541. char ReadApnData(unsigned char *source,unsigned char witchone,char *apnapn,char *apnname,char *apnpass)
  542. {//从缓存中获取数据段,一次一组
  543. unsigned char *accessPV,*accountV,*passwV;
  544. unsigned short accessP,account,passw;
  545. unsigned short i;
  546. char buf[30];
  547. if(GetApnPara(source, witchone, &accessP, &account, &passw))
  548. {
  549. SlwTrace(INF, "HGS.apn dataErr",1);//如果初始化失败,则直接使用内存中的了
  550. return 1;
  551. }
  552. accessPV=source+accessP;
  553. accountV=source+account;
  554. passwV=source+passw;
  555. //accesspoint
  556. if(apnapn != 0)
  557. {
  558. if(*accessPV == ';') apnapn[0] = 0;//空数据段
  559. else{
  560. for(i=0;i<APN_LEN;i++)
  561. {
  562. if(accessPV[i] != ';') apnapn[i]=accessPV[i];
  563. else{
  564. apnapn[i]=0;
  565. break;
  566. }
  567. }
  568. }
  569. }
  570. //account name
  571. if(apnname != 0)
  572. {
  573. if(*accountV == ';') apnname[0] = 0;//空数据段
  574. else{
  575. for(i=0;i<APN_LEN;i++)
  576. {
  577. if(accountV[i] != ';') apnname[i]=accountV[i];
  578. else{
  579. apnname[i]=0;
  580. break;
  581. }
  582. }
  583. }
  584. }
  585. //password
  586. if(apnpass != 0)
  587. {
  588. if(*passwV == ';') apnpass[0] = 0;//空数据段
  589. else{
  590. for(i=0;i<APN_LEN;i++)
  591. {
  592. if(passwV[i] != ';') apnpass[i]=passwV[i];
  593. else{
  594. apnpass[i]=0;
  595. break;
  596. }
  597. }
  598. }
  599. }
  600. return 0;
  601. }
  602. void APNFileInit(void)
  603. {
  604. unsigned char apnTable[300];//3组APN,每组中每参数30个
  605. ApnFileIndex=GetFileIndex("HGS.apn");
  606. ReadFileData(ApnFileIndex,0,sizeof(apnTable),apnTable);
  607. if(ReadApnData(apnTable, sutProductPara.ApnParaIndex, sutProductPara.APNApn, sutProductPara.APNName,sutProductPara.APNPass)) return;
  608. SaveProductParaToFlash("INIT_APN");
  609. }