UI.c 28 KB

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