UI.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164
  1. #include "includes.h"
  2. char showPIP[40];
  3. char showGIP[40];
  4. signed char netshowvalue=-1;
  5. signed char tempnetshowvalue=-1;
  6. SUT_UI_STATUS sutUIstatus;
  7. UI_STACK UI_Stack;
  8. SUT_LIST_BOX sutListBox;
  9. SUT_PALACE sutPalace;
  10. static void UserAssistAdd(void);
  11. static void UI_Loop(void);
  12. PT_THREAD (ptUITask(struct pt *pt)){
  13. static timer_t ptTimer;
  14. PT_BEGIN(pt);
  15. while(1){
  16. if(uTimerExpired(&bootMapCnt))UI_Loop();
  17. UI_Key();
  18. PTTimerStart(&pt_timerPool, &ptTimer, 1);//1
  19. PT_WAIT_UNTIL(pt, PTTimerIsExpired(&ptTimer));
  20. }
  21. PT_END(pt);
  22. }
  23. /******************************************************
  24. UISetNextStatus
  25. 设置下一个UI状态
  26. *******************************************************/
  27. void UISetNextStatus(unsigned char status)
  28. {
  29. sutUIstatus.LastStatus=sutUIstatus.NextStatus;
  30. sutUIstatus.NextStatus=status;
  31. }
  32. void UI_Init(void)
  33. {
  34. memset(&sutUIstatus,0,sizeof(SUT_UI_STATUS));
  35. UISetNextStatus(UIS_STANDBY);
  36. }
  37. void ShowSingle(int CSQ);
  38. static void ShowGPSICon(void);
  39. static void ShowBatttery(int bat);
  40. static void ShowTime(char update);
  41. static void Show_Net(unsigned int s_netshowvalue);
  42. /************************************************************************
  43. ShowStatusBar
  44. 显示状态栏
  45. *************************************************************************/
  46. void ShowStatusBar(char Update,char change)
  47. {
  48. static char batFirstShow=0;
  49. static uint8_t siHNS;
  50. static int siCSQ;
  51. static int siVbat;
  52. unsigned short usGps;
  53. static unsigned short susGps;
  54. static STATUE lastPPPStatus;
  55. static signed char s_netshowvalue=-1;
  56. //static signed char danhu=-1;
  57. static signed char ItemShow=-1;
  58. if(ItemShow==-1){
  59. GuiFillRect(0,0,159,STATUS_BAR_HEIGH-1,COLOR_DEFAULT_BLUE);
  60. GuiFillRect(0,STATUS_BAR_HEIGH,159,STATUS_ITEM_HEIGH-1,COLOR_WARN_RED);
  61. ItemShow=1;
  62. }
  63. //2G-4G显示
  64. if(s_netshowvalue!=netshowvalue){
  65. s_netshowvalue=netshowvalue;
  66. Show_Net(s_netshowvalue);
  67. }
  68. //信号显示
  69. if(siCSQ!=g_iCSQ || lastPPPStatus != netPPP){
  70. lastPPPStatus=netPPP;
  71. siCSQ=g_iCSQ;
  72. ShowSingle(g_iCSQ);
  73. }
  74. if(batFirstShow < 100)
  75. {//开机大概前1秒显示50%电量,之后根据实际显示
  76. g_iVbat=360;
  77. batFirstShow++;
  78. }
  79. //电量显示
  80. if(siVbat!=g_iVbat || g_iVbat < WARN_PWR_LEVEL){
  81. siVbat=g_iVbat;
  82. ShowBatttery(g_iVbat);
  83. }
  84. //消息显示
  85. ShowMessageFlag(0);
  86. //GPS显示
  87. usGps=((unsigned short)sutGpsInfo.isGpsWork<<8) | ((unsigned short)sutGpsInfo.isGpsValid) | ((unsigned short)sutGpsInfo.isGpsAuthOk<<2);
  88. if(susGps!=usGps ){
  89. susGps =usGps;
  90. ShowGPSICon();
  91. }
  92. //时间显示
  93. ShowTime(Update);
  94. if(g_uslockflag==1){
  95. GuiShowBmp(72,110,"lock.bmp");
  96. }
  97. // //if(danhu!=sutPocStatus.danHunStatus)
  98. // if(change==1 && sutUIstatus.Status==UIS_STANDBY)
  99. // {
  100. // danhu=sutPocStatus.danHunStatus;
  101. // if(danhu==0) GuiClearArea(130,110,30,14);//GuiClearRect(120,110,160,14);//136
  102. // else GuiShowStr(130,110,"挂断",0x01,0);
  103. // }
  104. }
  105. static void ShowCallUserName(u16 x,u16 y);
  106. static void ShowGroupAndUserName(u16 x,u16 y,int update);
  107. static void UIShowGroupSel(int update);
  108. static void UIShowUserSel(int update);
  109. static void ReFlashItem(void);
  110. static void UIShowMenuMain(int update);
  111. SUT_MENU sutMenuMain;
  112. int siCt1=-1;
  113. void UIShowMainInterface(char StatusUpdate)
  114. {
  115. int Flag;//主界面状态:0--未登录 1--无人说话 2--本机说话 3--对方说话
  116. static int siLastFlag=-1;//上一个Flag状态值
  117. static int siCt=0;
  118. char info[20];
  119. static unsigned char lastLoginResult=0xff;
  120. static signed char danhu=-1;
  121. if(StatusUpdate){
  122. GuiClearAll();
  123. ShowCaption("公网集群对讲系统",STATUS_BAR_HEIGH);
  124. //ShowButton(1,107,"菜单");
  125. GuiShowStr(1,110,"菜单",0x01,0);
  126. //GuiShowStr(125,110,"消息",0x01,0);
  127. //ShowButton(121,107,"消息");
  128. danhu=sutPocStatus.danHunStatus;
  129. if(danhu==0) GuiClearArea(130,110,30,14);//GuiClearRect(120,110,160,14);//136
  130. else GuiShowStr(130,110,"挂断",0x01,0);
  131. siLastFlag=-1;
  132. siCt=0;
  133. return;
  134. }
  135. if(danhu!=sutPocStatus.danHunStatus)
  136. {
  137. danhu=sutPocStatus.danHunStatus;
  138. if(danhu==0) GuiClearArea(130,110,30,14);//GuiClearRect(120,110,160,14);//136
  139. else GuiShowStr(130,110,"挂断",0x01,0);
  140. }
  141. if(Ui_LockFlag==1){
  142. ShowMessageBox("请先解锁!");
  143. uTimerHardDly(50);
  144. // GuiClearRect(0,LCD_HEIGHT/2-20,159,LCD_HEIGHT/2+20);
  145. }
  146. //======以下持续调用,以便动态更新信息==========
  147. //----顶部显示状态栏-----------
  148. //ShowStatusBar(StatusUpdate);
  149. //-----登陆状态标志更新--------
  150. if(0==sutPocStatus.Logined){//未登录时,显示LOGO
  151. Flag=0;
  152. }else if(sutPocStatus.Speaker==0 && sutPocStatus.Mic==0){//对方未说话,本机未说话
  153. Flag=1;
  154. siCt1=0;
  155. }else if(sutPocStatus.Mic>0 ){//对方未说话,本机说话
  156. Flag=2;
  157. }else if(sutPocStatus.Speaker>0){//对方说话了
  158. Flag=3;
  159. // if(siCt1==0){
  160. // siCt1=1;
  161. // GuiClearRect(0,STATUS_ITEM_HEIGH,159,STATUS_ITEM_HEIGH+16);
  162. // }
  163. }
  164. //-------中间图片显示-------
  165. switch(Flag){
  166. case 0://未登录
  167. if(Flag!=siLastFlag||Ui_LockFlag){
  168. GuiClearRect(0,STATUS_ITEM_HEIGH,159,44+64);
  169. GuiShowBmp(0,44,"logo.bmp");
  170. }
  171. break;
  172. case 1://已登录,但无人说话
  173. if(Flag!=siLastFlag||Ui_LockFlag){
  174. GuiClearRect(0,STATUS_ITEM_HEIGH,159,STATUS_ITEM_HEIGH+8);
  175. GuiClearRect(32,STATUS_ITEM_HEIGH+20+20+8,159,STATUS_ITEM_HEIGH+20+20+8+20);
  176. GuiShowStr(32,STATUS_ITEM_HEIGH+20+20+8,"空闲",0x10,0);
  177. sutPocStatus.statusChaned = 1;
  178. }
  179. break;
  180. case 2://已登录,本机说话
  181. if(Flag!=siLastFlag||Ui_LockFlag){
  182. GuiClearRect(40,STATUS_ITEM_HEIGH+20+20+8,159,STATUS_ITEM_HEIGH+20+20+8+20);
  183. }
  184. GuiShowStr(32,STATUS_ITEM_HEIGH+20+20+8,"本机在讲话",0x10,0);
  185. break;
  186. case 3://已登录,对方说话
  187. if(Flag!=siLastFlag||Ui_LockFlag)
  188. {
  189. GuiClearRect(32,STATUS_ITEM_HEIGH+20+20+8,159,STATUS_ITEM_HEIGH+20+20+20+8);
  190. }
  191. //显示对方名字
  192. ShowCallUserName(32,STATUS_ITEM_HEIGH+20+20+8);
  193. break;
  194. }
  195. //------群组、用户显示--------
  196. if(Flag>0){//已登陆
  197. // if(siCt==0 || siCt==100 || siCt==200){//每秒刷一次,以便及时更新。刷太快也影响
  198. // if(Flag!=3)
  199. // {
  200. if((Flag!=siLastFlag&&(siLastFlag==0||siLastFlag==-1))||Ui_LockFlag)
  201. {
  202. ShowGroupAndUserName(0,STATUS_ITEM_HEIGH+8,1);//当前群组和用户名显示 18
  203. }else {
  204. ShowGroupAndUserName(0,STATUS_ITEM_HEIGH+8,0);//当前群组和用户名显示 18
  205. }
  206. // }
  207. //}
  208. }else{//未登陆
  209. memset(info, ' ',sizeof(info));
  210. memcpy(info, "正在登陆.", 9);
  211. if(0==siCt)
  212. {
  213. GuiShowStr(0,STATUS_ITEM_HEIGH,info,1,0);
  214. }
  215. else if(100==siCt)
  216. {
  217. info[9]='.';
  218. GuiShowStr(0,STATUS_ITEM_HEIGH,info,1,0);
  219. }
  220. else if(200==siCt)
  221. {
  222. info[9]='.';info[10]='.';
  223. GuiShowStr(0,STATUS_ITEM_HEIGH,info,1,0);
  224. }
  225. if(lastLoginResult != sutPocStatus.loginResult || siLastFlag==-1)
  226. {
  227. lastLoginResult=sutPocStatus.loginResult;
  228. if(lastLoginResult==1) snprintf(info, sizeof(info), "账号信息错误");
  229. else if(lastLoginResult==2) snprintf(info, sizeof(info), "无网络连接 ");
  230. else if(lastLoginResult==4) snprintf(info, sizeof(info), "请插卡 ");
  231. else if(lastLoginResult==5) snprintf(info, sizeof(info), "无法连接");
  232. else if(lastLoginResult==6) snprintf(info, sizeof(info), "没有服务");
  233. else goto NEXT_STEP;
  234. GuiShowStr(0,STATUS_ITEM_HEIGH+16,info,1,0);
  235. }
  236. }
  237. Ui_LockFlag=0;
  238. NEXT_STEP:
  239. //-------
  240. if(++siCt>=300)siCt=0;
  241. if(Flag!=siLastFlag){//状态变化 才更新 分页
  242. siLastFlag=Flag;
  243. siCt=0;
  244. }
  245. }
  246. /******************************************************
  247. UIShowMenuSysSetup
  248. 系统设置菜单
  249. *******************************************************/
  250. //SUT_MENU sutMenuSysSetup;
  251. void UIShowMenuSysSetup(int update)
  252. {
  253. static const char *apcMenuSysSetup[]={
  254. "1.LCD设置",
  255. "2.亮度调节",
  256. "3.网络设置",
  257. "4.提示音设置",
  258. "5.SIM选择",
  259. // "6.麦克风增益",
  260. "6.串口功能切换",
  261. "7.功耗模式设置",
  262. "8.服务器设置",
  263. "9.对讲版本升级",//此项放最后
  264. ""
  265. ////"6.场景模式",
  266. //"6.编码器设置",
  267. };
  268. static char *staticMenum[11];
  269. char i;
  270. char numb=0;
  271. while(*apcMenuSysSetup[numb++]);
  272. numb--;
  273. if(update){
  274. GuiClearAll();
  275. ShowCaption("系统设置",STATUS_BAR_HEIGH); //1
  276. if(hgs_poc_type != POC_OWN){
  277. for(i=0;i<6;i++) staticMenum[i]=(char *)apcMenuSysSetup[i];
  278. staticMenum[i]=(char *)apcMenuSysSetup[numb];
  279. MenuInit(&sutMenuSysSetup,staticMenum);
  280. }else MenuInit(&sutMenuSysSetup,apcMenuSysSetup);
  281. GuiShowStr(1,114,"确定",0x01,0);
  282. GuiShowStr(125,114,"返回",0x01,0);
  283. GuiDrawHLine(0,159,110,1);
  284. return;
  285. }
  286. }
  287. /******************************************************
  288. UI_Loop
  289. UI循环调用,需要在MainTask的主循环中持续调用,及时处理状态发生变化时的UI显示
  290. 此处按下OK键显示里面内容
  291. *******************************************************/
  292. void UI_Loop(void)
  293. {
  294. char StatusUpdate=0;
  295. if(sutUIstatus.Status!=sutUIstatus.NextStatus||sutUIstatus.ItemRefresh){//状态发生变更
  296. sutUIstatus.LastStatus=sutUIstatus.Status;
  297. sutUIstatus.Status=sutUIstatus.NextStatus;
  298. StatusUpdate=1;
  299. }
  300. ShowStatusBar(1,StatusUpdate);//顶部状态栏
  301. switch(sutUIstatus.Status){
  302. case UIS_STANDBY:
  303. Init_stack(&UI_Stack);//UI 返回栈
  304. UIShowMainInterface(StatusUpdate);
  305. break;
  306. case UIS_MENU_MAIN:
  307. UIShowMenuMain(StatusUpdate);
  308. break;
  309. case UIS_MENU_USER_SEL:
  310. UIShowUserSel(StatusUpdate);
  311. break;
  312. case UIS_MENU_GROUP_SEL:
  313. UIShowGroupSel(StatusUpdate);
  314. break;
  315. case UIS_MAIL_BOX:
  316. UIShowMailBox(StatusUpdate);
  317. break;
  318. case UIS_MENU_SYS_SET:
  319. UIShowMenuSysSetup(StatusUpdate);
  320. break;
  321. case UIS_MENU_INFO:
  322. UIShowInformation(StatusUpdate);
  323. break;
  324. case UIS_MESSAGE_OPTION:
  325. MessageOptionShow(StatusUpdate);
  326. break;
  327. case UIS_MESSAGE_READ:
  328. MessageReadShow(StatusUpdate);
  329. break;
  330. case UIS_CALL_TO_PHONE:
  331. CallToPhoneNum(StatusUpdate);
  332. break;
  333. case UIS_MESSAGE_DELE:
  334. MessageDeletShow(StatusUpdate);
  335. break;
  336. case UIS_MESSAGE_FORMAT:
  337. MessageFormatShow(StatusUpdate);
  338. break;
  339. case UIS_SET_APN:
  340. SetAPNShow(StatusUpdate);
  341. break;
  342. case UIS_APN_DETAIL:
  343. SetApnDetailShow(StatusUpdate);
  344. break;
  345. case UIS_SET_GPS:
  346. SetGPSShow(StatusUpdate);
  347. break;
  348. case UIS_SET_LCD:
  349. SetLCDShow(StatusUpdate);
  350. break;
  351. case UIS_SET_LCDBRIGHT:
  352. SetLcdBrightShow(StatusUpdate);
  353. break;
  354. ////////////////////////////
  355. case UIS_SET_NET:
  356. SetNetShow(StatusUpdate);
  357. break;
  358. ///////////////////////////
  359. case UIS_SET_SERVER_PASS:
  360. UIShowPOCSerPass(StatusUpdate);
  361. break;
  362. case UIS_SET_SERVER:
  363. UIShowPOCSer(StatusUpdate);
  364. break;
  365. case UIS_SET_CODETYPE:
  366. SetCodeTypeShow(StatusUpdate);
  367. break;
  368. case UIS_SET_KEYSound:
  369. SetKeySoundShow(StatusUpdate);
  370. break;
  371. case UIS_SET_SOUNDMODE:
  372. SetSoundModeShow(StatusUpdate);
  373. break;
  374. case UIS_SET_PWRMODE:
  375. SetPowerModeShow(StatusUpdate);
  376. break;
  377. case UIS_SET_POC_FOTA:
  378. SetUpIntercomVerShow(StatusUpdate);
  379. break;
  380. case UIS_SET_USBTTL:
  381. SetUSBorTTLShow(StatusUpdate);
  382. break;
  383. case UIS_SET_SIMCARD:
  384. SetCardShow(StatusUpdate);
  385. break;
  386. case UIS_SET_MICLV:
  387. SetMicLvSelectShow(StatusUpdate);
  388. break;
  389. case UIS_POWEROFF_WAIT:
  390. PoweroffWaitShow(StatusUpdate);
  391. break;
  392. }
  393. }
  394. SUT_MENU sutMenuMain;
  395. static void UserSelResponse();
  396. static void GroupSelResponse();
  397. void UI_Key()
  398. {
  399. int key;
  400. char buf[30];
  401. if(!isKeyPress()) return;
  402. if(g_ucTMMode!=0) return;
  403. if(g_ulKeyValue==KEY_INFO){
  404. if(g_uslockflag==1)return;
  405. UI_Stack.FastUiChange=1;
  406. UISetNextStatus(UIS_MENU_GROUP_SEL);
  407. }else if(g_ulKeyValue==KEY_FUNC){
  408. if(g_uslockflag==1)return;
  409. UI_Stack.FastUiChange=1;
  410. UISetNextStatus(UIS_MENU_USER_SEL);
  411. }
  412. switch(sutUIstatus.Status){
  413. case UIS_STANDBY://----待机界面---
  414. switch(g_ulKeyValue){
  415. case KEY_PANEL_MENU:
  416. if(g_uslockflag==1) return;
  417. UISetNextStatus(UIS_MENU_MAIN);
  418. break;
  419. case KEY_PANEL_EXIT:
  420. if(g_uslockflag==1)return;
  421. if(sutPocStatus.danHunStatus==1) {
  422. if(hgs_poc_type==POC_OWN)ModemSendAt("AT+POC=500000\r\n");
  423. else {
  424. snprintf(buf, sizeof(buf),"AT+POC=entergroup,%d\r\n",sutPocStatus.LocalGroup.ID);
  425. ModemSendAt(buf);
  426. }
  427. }
  428. break;
  429. }
  430. break;
  431. case UIS_MENU_MAIN://----主菜单----
  432. key=PalaceResponse(&sutPalace);
  433. if(KEY_PANEL_MENU==g_ulKeyValue){
  434. switch(sutPalace.Index){
  435. case 0://群组选择
  436. UISetNextStatus(UIS_MENU_GROUP_SEL);
  437. break;
  438. case 1://成员选择
  439. UISetNextStatus(UIS_MENU_USER_SEL);
  440. break;
  441. case 2://信箱查阅
  442. UISetNextStatus(UIS_MAIL_BOX);
  443. break;
  444. case 3://系统设置
  445. UISetNextStatus(UIS_MENU_SYS_SET);
  446. break;
  447. case 4: //GPS设置
  448. UISetNextStatus(UIS_SET_GPS);
  449. break;
  450. case 5://终端信息
  451. UISetNextStatus(UIS_MENU_INFO);
  452. break;
  453. }
  454. PushUiStack(&UI_Stack,sutPalace.Index);//
  455. }
  456. else if(KEY_PANEL_EXIT==g_ulKeyValue){
  457. UISetNextStatus(UIS_STANDBY);
  458. }
  459. break;
  460. case UIS_MENU_GROUP_SEL://-----群组选择-----
  461. GroupSelResponse();
  462. break;
  463. case UIS_MENU_USER_SEL://-----成员选择-----
  464. UserSelResponse();
  465. break;
  466. case UIS_MAIL_BOX://-----短信查阅-----
  467. MessageResponse();
  468. break;
  469. case UIS_MENU_SYS_SET://-----系统设置-----
  470. SetSYSResponse(); //名字没取好,实际上是系统
  471. break;
  472. case UIS_MENU_INFO://-----终端信息-----
  473. if(KEY_PANEL_EXIT==g_ulKeyValue){
  474. UISetNextStatus(sutUIstatus.LastStatus);//UIS_STANDBY
  475. }
  476. //else if(KEY_PANEL_MENU==g_ulKeyValue)UISetNextStatus(UIS_MENU_MAIN);
  477. break;
  478. case UIS_MESSAGE_OPTION:
  479. MessageOptionResponse();
  480. break;
  481. case UIS_MESSAGE_READ:
  482. MessageReadResponse();
  483. break;
  484. case UIS_MESSAGE_FORMAT:
  485. MessageFormatResponse();
  486. break;
  487. case UIS_MESSAGE_DELE:
  488. MessageDeletResponse();
  489. break;
  490. case UIS_SET_APN: //-----系统设置-------
  491. SetAPNResponse();
  492. break;
  493. case UIS_APN_DETAIL:
  494. SetApnDetailResponse();
  495. break;
  496. case UIS_SET_GPS:
  497. SetGPSResponse();
  498. break;
  499. case UIS_SET_LCD:
  500. SetLCDResponse();
  501. break;
  502. case UIS_SET_LCDBRIGHT:
  503. SetLcdBrightResponse();
  504. break;
  505. ////////////////////////////////////
  506. case UIS_SET_NET:
  507. SetNetResponse();
  508. break;
  509. //////////////////////////////////
  510. case UIS_SET_SERVER_PASS:
  511. POCSetSerPassResponse();
  512. break;
  513. case UIS_SET_SERVER:
  514. POCSetSerResponse();
  515. break;
  516. case UIS_SET_CODETYPE:
  517. SetCodeTypeResponse();
  518. break;
  519. case UIS_SET_KEYSound:
  520. SetKeysoundResponse();
  521. break;
  522. case UIS_SET_SOUNDMODE:
  523. SetSoundModeResponse();
  524. break;
  525. case UIS_SET_PWRMODE:
  526. SetPowerModeResponse();
  527. break;
  528. case UIS_SET_POC_FOTA:
  529. SetUpIntercomVerResponse();
  530. //SetPocFotaResponse();
  531. break;
  532. case UIS_SET_USBTTL:
  533. SetUSBorTTLResponse();
  534. break;
  535. case UIS_SET_SIMCARD:
  536. SetCardResponse();
  537. break;
  538. case UIS_SET_MICLV:
  539. SetMicLvSelectResponse();
  540. break;
  541. case UIS_POWEROFF_WAIT:
  542. PoweroffWaitResponse();
  543. break;
  544. default:
  545. break;
  546. }
  547. }
  548. /***********************************
  549. 显示信号状态
  550. **********************************/
  551. void ShowSingle(int CSQ)
  552. {
  553. if(netPPP == OPEN) GuiShowBmp(0,0+2,"SingleOK.bmp");
  554. else GuiShowBmp(0,0+2,"Single.bmp");
  555. //11 3格
  556. if(CSQ<1 || CSQ==99){
  557. GuiClearRect(7,3,21,11);
  558. }else if(CSQ<8){
  559. GuiDrawVLine(9,10,7,2,COLOR_WHITE_BACK);
  560. GuiClearRect(9,3,21,11);
  561. }else if(CSQ<16){
  562. GuiDrawVLine(9,10,7,2,COLOR_WHITE_BACK);
  563. GuiDrawVLine(7,10,10,2,COLOR_WHITE_BACK);
  564. GuiClearRect(13,3,21,11);
  565. }else if(CSQ<22){
  566. GuiDrawVLine(9,10,7,2,COLOR_WHITE_BACK);
  567. GuiDrawVLine(7,10,10,2,COLOR_WHITE_BACK);
  568. GuiDrawVLine(5,10,13,2,COLOR_WHITE_BACK);
  569. GuiClearRect(16,3,21,11);
  570. }else{
  571. GuiDrawVLine(9,10,7,2,COLOR_WHITE_BACK);
  572. GuiDrawVLine(7,10,10,2,COLOR_WHITE_BACK);
  573. GuiDrawVLine(5,10,13,2,COLOR_WHITE_BACK);
  574. GuiDrawVLine(3,10,16,2,COLOR_WHITE_BACK);//COLOR_DEFAULT_BLUE
  575. }
  576. //2G-4G 显示
  577. //GuiShowBmp(28,5,"2g.bmp");
  578. }
  579. static void ShowGPSICon(void)
  580. {
  581. GuiClearRect(45,0,75,11);//30
  582. if(0== sutGpsInfo.isGpsWork) GuiClearRect(45,0,75,11);//未工作或未检测到
  583. else
  584. {
  585. //GPS已工作
  586. if(0 == sutGpsInfo.isGpsValid)
  587. {//未定位
  588. if(sutGpsInfo.isGpsAuthOk==0)//未鉴权
  589. {
  590. GuiShowBmp(45,0,"GPS1.bmp");
  591. }else//已鉴权
  592. {
  593. GuiShowBmp(45,0,"GPSA.bmp");//已鉴权
  594. }
  595. }else
  596. {//已定位
  597. if(sutGpsInfo.isGpsAuthOk==0)//未鉴权
  598. {
  599. GuiShowBmp(45,0,"GPS1.bmp");
  600. }else//已鉴权
  601. {
  602. GuiShowBmp(45,0,"GPSA.bmp");//已鉴权
  603. }
  604. GuiShowBmp(45+10,0,"GPS2.bmp");//定位辐射放最后//2
  605. }
  606. }
  607. }
  608. static void ShowBatttery(int bat)
  609. {
  610. static unsigned int flashCnt=0;
  611. static unsigned char flag=0;
  612. int x=128;
  613. if(bat<WARN_PWR_LEVEL){//请充电
  614. if(uTimerExpired(&flashCnt)==0) return;
  615. uTimerStart(&flashCnt, 80);
  616. if(flag==0)
  617. {
  618. GuiShowBmp(x,1,"VBAT1.bmp");
  619. flag=1;
  620. }else{
  621. flag=0;
  622. GuiClearRect(x,0,x+21,1+12);
  623. }
  624. //GuiDrawVLine(5,12,64+x,2,COLOR_WARN_RED);
  625. }
  626. else if(bat<355){//340<x<=355 1格
  627. GuiShowBmp(x,1,"VBAT1.bmp");//3
  628. GuiDrawVLine(3,8,x+16,3,COLOR_WHITE_BACK);
  629. }
  630. else if(bat<375){//355<x<=375 2格
  631. GuiShowBmp(x,1,"VBAT1.bmp");
  632. GuiDrawVLine(3,8,x+12,3,COLOR_WHITE_BACK);
  633. GuiDrawVLine(3,8,x+16,3,COLOR_WHITE_BACK);//5.12
  634. }
  635. else if(bat<400){//375<x<=400 3格
  636. GuiShowBmp(x,1,"VBAT1.bmp");
  637. GuiDrawVLine(3,8,x+8,3,COLOR_WHITE_BACK);
  638. GuiDrawVLine(3,8,x+12,3,COLOR_WHITE_BACK);
  639. GuiDrawVLine(3,8,x+16,3,COLOR_WHITE_BACK);//5.12
  640. }
  641. else{//>=400 4格
  642. GuiShowBmp(x,1,"VBAT1.bmp");
  643. GuiDrawVLine(3,8,x+4,3,COLOR_WHITE_BACK);
  644. GuiDrawVLine(3,8,x+8,3,COLOR_WHITE_BACK);
  645. GuiDrawVLine(3,8,x+12,3,COLOR_WHITE_BACK);
  646. GuiDrawVLine(3,8,x+16,3,COLOR_WHITE_BACK);//5.12
  647. }
  648. }
  649. static void ShowTime(char update)
  650. {
  651. static unsigned char lastS=0xff;
  652. USER_RTC_DEF tempTime;
  653. char buf[30];
  654. if(sutPocStatus.FirstLogined==0) return;
  655. RTC_UserGetTime(&tempTime);
  656. if(lastS != tempTime.second || update){
  657. lastS=tempTime.second;
  658. if(lastS % 2) snprintf(buf, sizeof(buf),"%02d:%02d",tempTime.hour,tempTime.min);
  659. else snprintf(buf, sizeof(buf),"%02d %02d",tempTime.hour,tempTime.min);
  660. GuiShowStr(65,0,buf,0x01,0);
  661. }
  662. }
  663. static void Show_Net(unsigned int s_netshowvalue)
  664. {
  665. if(sutPocStatus.loginResult==4)return; //未插卡不显示2G
  666. if(s_netshowvalue==2||s_netshowvalue==0){
  667. GuiShowStr(24,0,"2G",0x01,0);
  668. }else if(s_netshowvalue==7){
  669. GuiShowStr(24,0,"4G",0x01,0);
  670. }else {
  671. GuiClearRect(24,0,41,11);
  672. }
  673. }
  674. void ShowCallUserName(u16 x,u16 y)
  675. {
  676. static char scName[POC_USER_NAME_LEN];
  677. char name[POC_USER_NAME_LEN];
  678. uint8_t thisName;
  679. static uint8_t siCt=0;
  680. if(siCt==0||siCt==20||siCt==40 || siCt==60||siCt==80||siCt==100)
  681. {
  682. if(strncmp(scName, sutPocStatus.Callname,sizeof(scName)) != 0 ||
  683. strncmp(scName, sutPocStatus.Callname,sizeof(sutPocStatus.Callname))!=0 ||
  684. sutPocStatus.statusChaned)
  685. {//当名字变更后,刷新
  686. //GuiClearRect(x+30,y,159,y+18);
  687. GuiClearArea(x+32,y,124,18);
  688. memcpy(scName,sutPocStatus.Callname,sizeof(sutPocStatus.Callname));
  689. sutPocStatus.statusChaned=0;
  690. // SlwTrace(INF,"------------------\r\n",1);
  691. // printf("-------------suct=%d\r\n",siCt);
  692. }
  693. StrIntercept(name,scName,sizeof(name));
  694. //GuiShowStrM20(x+30,y,sutPocStatus.Callname,0x11,BlueColorId,COLOR_WHITE);
  695. GuiShowStr(x,y,sutPocStatus.Callname,0x10,0);
  696. }
  697. if(++siCt>100) siCt=0;
  698. }
  699. //static void ShowCallUserName(u16 x,u16 y)
  700. //{
  701. // static char scName[POC_USER_NAME_LEN];
  702. // char name[20];
  703. // uint8_t thisName;
  704. //
  705. // static uint8_t suCt=0;
  706. //
  707. // if(!(suCt%50))
  708. // {
  709. // if(strncmp(scName, sutPocStatus.Callname,sizeof(scName)) != 0 ||
  710. // strncmp(scName, sutPocStatus.Callname,sizeof(sutPocStatus.Callname))!=0 ||
  711. // sutPocStatus.statusChaned)
  712. // {//当名字变更后,刷新
  713. // GuiClearRect(0,y,159,y+16);
  714. // memcpy(scName,sutPocStatus.Callname,sizeof(sutPocStatus.Callname));
  715. // sutPocStatus.statusChaned=0;
  716. // }
  717. // StrIntercept(name,scName,sizeof(name));
  718. // GuiShowStr(x,y,sutPocStatus.Callname,0x10,0);
  719. //
  720. // //GuiShowStr(x,y,name,0x10,0);
  721. // }
  722. // if(++suCt>=200)
  723. // suCt=0;
  724. //}
  725. /******************************************************
  726. 在同一个位置交替显示本机用户名和本机当前群组名
  727. 参数:x,y 显示位置左上角的坐标
  728. update ==0 时根据内部静态群组名比较决定是否刷屏显示
  729. update !=0 时强制刷屏显示
  730. ******************************************************/
  731. static void ShowGroupAndUserName(u16 x,u16 y,int update)
  732. {
  733. static char scNameUser[POC_GROUP_NAME_LEN];
  734. static char scNameGroup[POC_GROUP_NAME_LEN];
  735. char name[POC_GROUP_NAME_LEN];
  736. u16 len;
  737. unsigned char danHuanBuffer[9]={0xB5,0xA5,0xBA,0xF4,0xC4,0xA3,0xCA,0xBD,0};
  738. char GroupShowUpdate=0;
  739. if(sutPocStatus.danHunStatus==0){
  740. if(0!=strcmp(sutPocStatus.LocalGroup.name,scNameGroup) || update!=0){
  741. memcpy(scNameGroup,sutPocStatus.LocalGroup.name,sizeof(scNameGroup));
  742. GroupShowUpdate=1;
  743. }
  744. }else{
  745. if(0!=strcmp((char *)danHuanBuffer,scNameGroup) || update!=0){
  746. memcpy(scNameGroup, danHuanBuffer,sizeof(danHuanBuffer));
  747. GroupShowUpdate=1;
  748. }
  749. }
  750. if(0!=strcmp(sutPocStatus.LocalUser.name,scNameUser) || update!=0){
  751. memcpy(scNameUser,sutPocStatus.LocalUser.name,sizeof(scNameUser));
  752. GroupShowUpdate=1;
  753. }
  754. if(GroupShowUpdate){
  755. GuiClearRect(x,y,160,y+20);//18
  756. GuiClearRect(x,y+20,160,y+20+20);//18
  757. if(sutPocStatus.danHunStatus==0){
  758. GuiShowStr(x,y+3,"群组:",0x01,0);
  759. }else GuiShowStr(x,y+3,"单呼:",0x01,0);
  760. GuiShowStr(x,y+20+3,"成员:",0x01,0);
  761. GuiShowStr(x,y+20+20+3,"话权:",0x01,0);
  762. StrIntercept(name,scNameGroup,sizeof(name));
  763. GuiShowStr(x+32,y,name,0x10,0);
  764. StrIntercept(name,scNameUser,sizeof(name));
  765. GuiShowStr(x+32,y+20,name,0x10,0);
  766. sutPocStatus.statusChaned=1;
  767. GroupShowUpdate=0;
  768. }
  769. }
  770. void ReFlashItem2(void)
  771. {
  772. static unsigned short susCt=0;
  773. static const char *accIconFileName[]={
  774. "Group1.bmp",
  775. "Group2.bmp",
  776. ""
  777. };
  778. int i;
  779. unsigned short timeout;
  780. static char NullGroup=0;
  781. static char *GroupsName[POC_ALL_GROUPS_NUM+1]; //5
  782. static char GroupFeatures[POC_ALL_GROUPS_NUM+1];//5
  783. //----------------------------
  784. for(i=0;i<=POC_ALL_GROUPS_NUM;i++){
  785. GroupsName[i]=&NullGroup;
  786. GroupFeatures[i]=0;
  787. }
  788. printf("name111====%d\r\n",sutPocStatus.ListFillIndex);
  789. for(i=0;i<sutPocStatus.ListFillIndex;i++)
  790. {
  791. GroupFeatures[i]=1;
  792. if(sutPocStatus.AllGroups[i].ID==sutPocStatus.LocalGroup.ID)GroupFeatures[i]=0;
  793. GroupsName[i]=sutPocStatus.AllGroups[i].name;
  794. printf("name====%s\r\n",GroupsName[i]);
  795. }
  796. if(sutPocStatus.ListCurOnlineNum==0)
  797. {
  798. GroupsName[0]="空";
  799. GroupFeatures[i]=0;
  800. }
  801. //初始化ListBox控件
  802. ListBoxInit(&sutListBox,GroupsName,0,accIconFileName,GroupFeatures);
  803. }
  804. /******************************************************
  805. UIShowGroupSel
  806. 群组选择
  807. *******************************************************/
  808. static void UIShowGroupSel(int update)
  809. {
  810. static char machine;
  811. static unsigned int timer;
  812. static unsigned short susCt=0;
  813. unsigned short timeout;
  814. char temp;
  815. if(update){
  816. machine=0;
  817. susCt=0;
  818. }
  819. switch(machine){
  820. case 0:
  821. if(sutPocStatus.Logined == 0){//not login
  822. ShowMessageBox(" 请先登录... ");
  823. uTimerStart(&timer, 50);
  824. machine=1;
  825. }else{
  826. UiassistStart(0);
  827. machine=2;
  828. }
  829. break;
  830. case 1:
  831. if(uTimerExpired(&timer)){
  832. UISetNextStatus(UIS_STANDBY);
  833. }
  834. break;
  835. case 2:
  836. temp=getAssistResult();
  837. if(temp){//获取完成
  838. printf("temp===%d\r\n",temp);
  839. GuiClearAll();
  840. ShowCaption("群组选择",STATUS_BAR_HEIGH); //0
  841. ReFlashItem2();
  842. GuiDrawHLine(0,159,110,1);
  843. machine=3;
  844. }
  845. break;
  846. }
  847. if(machine != 3) return;
  848. //按键提示
  849. if(susCt==0){
  850. GuiShowStr(0,SUBSCRIPT_LOCATION,"[上]选择 [下]选择",0x01,0);
  851. }else if(susCt==200){
  852. GuiShowStr(0,SUBSCRIPT_LOCATION,"[M]确认 [EXIT]退出",0x01,0);
  853. }
  854. if(++susCt>=400)susCt=0;
  855. UserAssistAdd();
  856. }
  857. static void ReFlashItem(void)
  858. {
  859. //char buf[100];
  860. static const char *accIconFileName[]={
  861. "people1.bmp",
  862. "people2.bmp",
  863. ""
  864. };
  865. int i;
  866. static char NullUser=0;
  867. static char *UsersName[POC_ALL_USERS_NUM+1]; //5
  868. static char UserFeatures[POC_ALL_USERS_NUM+1];//5
  869. //----------------------------
  870. for(i=0;i<=POC_ALL_USERS_NUM;i++){
  871. UsersName[i]=&NullUser;
  872. UserFeatures[i]=0;
  873. }
  874. for(i=0;i<sutPocStatus.ListFillIndex;i++)
  875. {
  876. UserFeatures[i]=1;
  877. //UserFeatures[i]=sutPocStatus.AllUsers[i].status-1;
  878. if(sutPocStatus.AllUsers[i].ID==sutPocStatus.LocalGroup.ID)UserFeatures[i]=0;
  879. UsersName[i]=sutPocStatus.AllUsers[i].name;
  880. }
  881. if(sutPocStatus.ListCurOnlineNum==0)
  882. {
  883. UsersName[0]="空";
  884. UserFeatures[i]=0;
  885. }
  886. //初始化ListBox控件
  887. ListBoxInit(&sutListBox,UsersName,0,accIconFileName,UserFeatures);
  888. }
  889. /******************************************************
  890. UIShowUserSel
  891. 用户选择
  892. *******************************************************/
  893. static void UIShowUserSel(int update)
  894. {
  895. static char machine;
  896. static unsigned int timer;
  897. static unsigned short susCt=0;
  898. unsigned short timeout;
  899. if(update){
  900. machine=0;
  901. susCt=0;
  902. }
  903. switch(machine){
  904. case 0:
  905. if(sutPocStatus.Logined == 0){//not login
  906. ShowMessageBox(" 请先登录... ");
  907. uTimerStart(&timer, 50);
  908. machine=1;
  909. }else{
  910. UiassistStart(0);
  911. machine=2;
  912. }
  913. break;
  914. case 1:
  915. if(uTimerExpired(&timer)){
  916. UISetNextStatus(UIS_STANDBY);
  917. }
  918. break;
  919. case 2:
  920. if(getAssistResult()){//获取完成
  921. GuiClearAll();
  922. ShowCaption("用户选择",STATUS_BAR_HEIGH); //0
  923. ReFlashItem();
  924. GuiDrawHLine(0,159,110,1);
  925. machine=3;
  926. }
  927. break;
  928. }
  929. if(machine != 3) return;
  930. //按键提示
  931. if(susCt==0){
  932. GuiShowStr(0,SUBSCRIPT_LOCATION,"[上]选择 [下]选择",0x01,0);
  933. }else if(susCt==200){
  934. GuiShowStr(0,SUBSCRIPT_LOCATION,"[M]单呼 [EXIT]退出",0x01,0);
  935. }
  936. if(++susCt>=400)susCt=0;
  937. UserAssistAdd();
  938. }
  939. /******************************************************
  940. UIShowMenuMain
  941. 显示主菜单
  942. *******************************************************/
  943. SUT_MENU sutMenuMain;
  944. void UIShowMenuMain(int update)
  945. {
  946. static const char *apcMenuMain[]={
  947. "群组选择",
  948. "成员选择",
  949. "文本消息",//"短信查阅",
  950. // "电话管理",
  951. "系统设置",
  952. "定位设置",
  953. "终端信息",
  954. ""
  955. };
  956. if(update){
  957. PalaceInit(&sutPalace,apcMenuMain,"Palace","主菜单");
  958. }
  959. }
  960. static char SelMachine=0; //上一次仍在处理标志
  961. static void UserAssistAdd(void){
  962. switch(SelMachine){
  963. case 1:
  964. if(getAssistResult()){
  965. if(sutUIstatus.Status==UIS_MENU_GROUP_SEL)ReFlashItem2();//指针会被重置到0位置
  966. else ReFlashItem();
  967. SelMachine=0;
  968. }
  969. break;
  970. case 2:
  971. if(getAssistResult()){
  972. if(sutUIstatus.Status==UIS_MENU_GROUP_SEL)ReFlashItem2();//指针会被重置到0位置
  973. else ReFlashItem();
  974. SelMachine=0;
  975. }
  976. break;
  977. }
  978. }
  979. static void UserSelResponse(){
  980. char buf[50];
  981. unsigned long key;
  982. switch(SelMachine){
  983. case 0:
  984. if(sutListBox.handle==0 && KEY_PANEL_UP==g_ulKeyValue){
  985. UiassistStart(1);
  986. SelMachine=1;
  987. }else if((sutListBox.handle+1) == sutListBox.itemnum && (KEY_PANEL_DOWN==g_ulKeyValue)){
  988. UiassistStart(2);
  989. SelMachine=2;
  990. }
  991. key=ListBoxResponse(&sutListBox);
  992. if(KEY_PANEL_EXIT==g_ulKeyValue){
  993. uiAssist.status=0;
  994. if(UI_Stack.FastUiChange)UISetNextStatus(UIS_STANDBY);
  995. else UISetNextStatus(UIS_MENU_MAIN);
  996. }else if(KEY_PANEL_MENU==key){
  997. //单呼成员 AT+POC=AT+POC=0A0000xxxxxxxx
  998. ///////////////////////////////////////
  999. if(0 == sutPocStatus.ListCurOnlineNum){
  1000. break;
  1001. }
  1002. ///////////////////////////////////////
  1003. UiassistEnd(1);
  1004. if(hgs_poc_type==POC_BND)ModemSendAt("AT+POC=autoleavetime,30\r\n");//单呼30秒无人通话自动解散
  1005. if(hgs_poc_type==POC_BND)snprintf(buf, sizeof(buf),"AT+POC=singlecall,%d\r\n",sutPocStatus.AllUsers[sutListBox.handle].ID);
  1006. else snprintf(buf, sizeof(buf),"AT+POC=0A0000%08x\r\n",sutPocStatus.AllUsers[sutListBox.handle].ID);
  1007. ModemSendAt(buf);
  1008. SlwTrace(INF, buf,1);
  1009. snprintf(buf, sizeof(buf),"呼叫:%s",sutPocStatus.AllUsers[sutListBox.handle].name);
  1010. SlwTrace(INF, buf,1);
  1011. //ShowMessageBox(buf);
  1012. //OsDelayTime(200);
  1013. UISetNextStatus(UIS_STANDBY);
  1014. SelMachine=0;
  1015. }
  1016. break;
  1017. }
  1018. }
  1019. static void GroupSelResponse(){
  1020. unsigned int key;
  1021. char buf[50];
  1022. int i;
  1023. switch(SelMachine){
  1024. case 0:
  1025. if(sutListBox.handle==0 && KEY_PANEL_UP==g_ulKeyValue){
  1026. UiassistStart(1);
  1027. SelMachine=1;
  1028. }else if((sutListBox.handle+1) == sutListBox.itemnum && (KEY_PANEL_DOWN==g_ulKeyValue)){
  1029. UiassistStart(2);
  1030. SelMachine=2;
  1031. }
  1032. key=ListBoxResponse(&sutListBox);
  1033. if(KEY_PANEL_EXIT==g_ulKeyValue){
  1034. uiAssist.status=0;
  1035. if(UI_Stack.FastUiChange)UISetNextStatus(UIS_STANDBY);
  1036. else UISetNextStatus(UIS_MENU_MAIN);
  1037. }else if(KEY_PANEL_MENU==key){
  1038. if(0 == sutPocStatus.ListCurOnlineNum){
  1039. break;
  1040. }
  1041. ///////////////////////////////////////
  1042. UiassistEnd(1);
  1043. if(hgs_poc_type==POC_BND)snprintf(buf, sizeof(buf),"AT+POC=entergroup,%d\r\n",sutPocStatus.AllGroups[sutListBox.handle].ID);
  1044. else snprintf(buf, sizeof(buf),"AT+POC=090000%08x\r\n",sutPocStatus.AllGroups[sutListBox.handle].ID);
  1045. ModemSendAt(buf);
  1046. SlwTrace(INF, buf,1);
  1047. snprintf(buf, sizeof(buf),"进入:%s",sutPocStatus.AllGroups[sutListBox.handle].name);
  1048. g_ucEnterGroupFlag=1;//进入播报
  1049. SlwTrace(INF, buf,1);
  1050. UISetNextStatus(UIS_STANDBY);
  1051. SelMachine=0;
  1052. }
  1053. break;
  1054. }
  1055. }
  1056. void speciallShow(char type)
  1057. {//他们的FileSys.c中的中文编码设置不到正常的,其它C的正常,所以要显示只能通过这个方式实现了
  1058. if(type==0) ShowMessageBox("正在设置");
  1059. else ShowMessageBox("设置完成");
  1060. }