uiBlock.c 87 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021
  1. #include "includes.h"
  2. static unsigned int UserTempIndex=0;
  3. /****************************状态栏显示部分开始***********************************/
  4. //显示信号强度
  5. static void ShowSingle(int CSQ){
  6. unsigned short x=SIGNAL_ICON_X;
  7. unsigned short y=3;
  8. if(sutApp.pocPpp == 0) guiShowBmp(x,y,"/ext/prepack/Single.bmp");
  9. else guiShowBmp(x,y,"/ext/prepack/SingleOK.bmp");
  10. //11 3格
  11. x += 10;
  12. if(CSQ<5 || CSQ==99){
  13. guiClearRect(x,y+1,x+14,y+17,COLOR_STATUS_BAR);
  14. }else if(CSQ<11){
  15. guiDrawVLine(x+2,y+16,x,y,guiGetBackColor());
  16. guiClearRect(x+4,y+1,x+14,y+17,COLOR_STATUS_BAR);
  17. }else if(CSQ<18){
  18. guiDrawVLine(x+2,y+16,x,y,guiGetBackColor());
  19. guiDrawVLine(x,y+16,x+4,y,guiGetBackColor());
  20. guiClearRect(x+8,y+1,x+14,y+17,COLOR_STATUS_BAR);
  21. }else if(CSQ<22){
  22. guiDrawVLine(x+2,y+16,x,y,guiGetBackColor());
  23. guiDrawVLine(x,y+16,x+4,y,guiGetBackColor());
  24. guiDrawVLine(x-2,y+16,x+8,y,guiGetBackColor());
  25. guiClearRect(x+11,y+1,x+14,y+17,COLOR_STATUS_BAR);
  26. }else{
  27. guiDrawVLine(x+2,y+16,x,y,guiGetBackColor());
  28. guiDrawVLine(x,y+16,x+4,y,guiGetBackColor());
  29. guiDrawVLine(x-2,y+16,x+8,y,guiGetBackColor());
  30. guiDrawVLine(x-4,y+16,x+12,y,guiGetBackColor());
  31. }
  32. }
  33. unsigned char netshowvalue=0xff;
  34. unsigned char ctecCurrentSet=0;
  35. //显示网络制式
  36. static void Show_Net(unsigned char s_netshowvalue){
  37. unsigned short y=0;
  38. if(s_netshowvalue==4){
  39. if(sutApp.UserInfo.tnet==5) guiShowStr(NET_ICON_X, y+1,"5G", FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR);
  40. else guiShowStr(NET_ICON_X, y+1,"4G", FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR);
  41. }else guiClearRect(NET_ICON_X,y,NET_ICON_X+NET_ICON_WX,y+11,COLOR_STATUS_BAR);
  42. }
  43. static void gpsIconShow(char flash){
  44. typedef struct{
  45. unsigned char located:1;
  46. unsigned char gpsF:1;
  47. }TMP_GPS_DEF;
  48. static TMP_GPS_DEF tmpGps;
  49. unsigned short x=GPS_ICON_X,y=0;
  50. if(tmpGps.located==sutGpsInfo.isGpsValid && tmpGps.gpsF==sutGpsInfo.isGpsWork&& flash==0) return;
  51. guiClearRect(x,y,x+GPS_ICON_WX,y+11,COLOR_STATUS_BAR);
  52. if(sutGpsInfo.isGpsWork==1){//GPS打开时
  53. guiShowBmp(x,y,"/ext/prepack/GPSA.bmp");
  54. if(sutGpsInfo.isGpsValid==1) {
  55. guiShowBmp(x+14,y,"/ext/prepack/GPSL1.bmp");//已定位
  56. guiShowBmp(x+20,y,"/ext/prepack/GPSL2.bmp");//已定位
  57. }
  58. }
  59. tmpGps.located=sutGpsInfo.isGpsValid;
  60. tmpGps.gpsF=sutGpsInfo.isGpsWork;
  61. }
  62. //显示电量
  63. static void ShowBatttery(int bat,unsigned int exeInterval){
  64. static unsigned int flashCnt=0;
  65. static unsigned char flag=0;
  66. static unsigned short cnt=0;
  67. unsigned short x=BAT_ICON_X+1,y=2,h=y+4;
  68. unsigned char batweight=10;
  69. int color;
  70. if(sutApp.chargeStatus)color=COLOR_GREEN;
  71. else color=guiGetBackColor();
  72. if(bat<WARN_PWR_LEVEL){//请充电
  73. if(++cnt<(800/exeInterval)) return;
  74. cnt=0;
  75. if(sutApp.lowPwrWarn==0){
  76. sutApp.lowPwrWarn=1;
  77. sutApp.lowPwrCnt=WARN_TTS_INTERVAL-5000;
  78. }
  79. if(flag==0){
  80. guiShowBmp(x,y,"/ext/prepack/VBAT1.bmp");
  81. flag=1;
  82. }else{
  83. flag=0;
  84. guiClearRect(x,y-2,x+398,y-2+1+24,COLOR_STATUS_BAR);
  85. }
  86. return;
  87. }else if(bat<355){//340<x<=355 1格 //test 355
  88. guiShowBmp(x,y,"/ext/prepack/VBAT1.bmp");//3
  89. guiDrawVLine(h,h+batweight,x+29,y+2,color);
  90. }
  91. else if(bat<375){//355<x<=375 2格
  92. guiShowBmp(x,y,"/ext/prepack/VBAT1.bmp");
  93. guiDrawVLine(h,h+batweight,x+22,y+2,color);
  94. guiDrawVLine(h,h+batweight,x+29,y+2,color);//5.12
  95. }
  96. else if(bat<400){//375<x<=400 3格
  97. guiShowBmp(x,y,"/ext/prepack/VBAT1.bmp");
  98. guiDrawVLine(h,h+batweight,x+15,y+2,color);
  99. guiDrawVLine(h,h+batweight,x+22,y+2,color);
  100. guiDrawVLine(h,h+batweight,x+29,y+2,color);//5.12
  101. }
  102. else{//>=400 4格
  103. guiShowBmp(x,y,"/ext/prepack/VBAT1.bmp");
  104. guiDrawVLine(h,h+batweight,x+8,y+2,color);
  105. guiDrawVLine(h,h+batweight,x+15,y+2,color);
  106. guiDrawVLine(h,h+batweight,x+22,y+2,color);
  107. guiDrawVLine(h,h+batweight,x+29,y+2,color);//5.12
  108. }
  109. sutApp.lowPwrWarn=0;
  110. }
  111. //显示时间
  112. static void ShowTime(char flash,unsigned int exeInterval){
  113. static unsigned short nextExe=0;
  114. static unsigned char flag=0;
  115. MY_CLOCK myclock;
  116. char buf[30]={0};
  117. if(nextExe==0 || flash){
  118. //ohpocGetClock(&myclock);
  119. if(flag){
  120. snprintf(buf, sizeof(buf), "%02d:%02d",My_Clock.hour, My_Clock. min);
  121. flag=0;
  122. }else{
  123. snprintf(buf, sizeof(buf), "%02d %02d",My_Clock.hour, My_Clock. min);
  124. flag=1;
  125. }
  126. guiShowStr(TIME_ICON_X, 1,buf, FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR);
  127. }
  128. if(++nextExe>=(1000/exeInterval)) nextExe=0;
  129. }
  130. //显示耳机接入状态
  131. static void ShowEarStatus(char flash){
  132. static unsigned char lastStatus=0;
  133. if(lastStatus==sutApp.earLev && flash==0) return;
  134. if(sutApp.earLev!=0) guiShowBmp(EAR_ICON_X, 1, "/ext/prepack/ear.bmp");
  135. else guiClearRect(EAR_ICON_X, 1, EAR_ICON_X+EAR_ICON_WX,1+12, COLOR_STATUS_BAR);
  136. lastStatus=sutApp.earLev;
  137. }
  138. //显示键盘锁状态
  139. static void ShowKeyLocStatus(char flash){
  140. static unsigned char lastStatus=0;
  141. if(lastStatus==sutApp.keyLock && flash==0) return;
  142. if(sutApp.keyLock!=0) guiShowBmp(LOCK_ICON_X, 1, "/ext/prepack/lock.bmp");
  143. else guiClearRect(LOCK_ICON_X, 1, LOCK_ICON_X+LOCK_ICON_WX,12, COLOR_STATUS_BAR);
  144. lastStatus=sutApp.keyLock;
  145. }
  146. //显示状态栏
  147. void uiShowStatusBar(char flash,unsigned int exeInterval){
  148. static unsigned char s_netshowvalue=0xff;
  149. static unsigned char lastPPPStatus;
  150. static int siCSQ;
  151. static int siVbat;
  152. static signed char charging=-1;//充电
  153. static unsigned short batFirstShow=0;
  154. static char cardType=0;
  155. char tempFlash=flash;
  156. if(sutApp.enableKey==0) return;
  157. if(sutApp.updateStatusBar!=0){
  158. sutApp.updateStatusBar=0;
  159. tempFlash=1;
  160. guiFillRect(0, 0, GLCD_WIDTH-1, UI_STATUS_BAR_HEIGH-1,COLOR_STATUS_BAR);//清除第一区
  161. guiFillRect(0, UI_LOCATION_SHOW_Y, GLCD_WIDTH-1, GLCD_HEIGHT-1, guiGetForeColor());//清除信标区
  162. }
  163. //显示信号
  164. if(tempFlash || siCSQ!=sutApp.g_iCSQ || lastPPPStatus != sutApp.pocPpp){
  165. lastPPPStatus=sutApp.pocPpp;
  166. siCSQ=sutApp.g_iCSQ;
  167. ShowSingle(sutApp.g_iCSQ);
  168. }
  169. //显示2G/3G/4G
  170. if(tempFlash || s_netshowvalue!=netshowvalue){
  171. s_netshowvalue=netshowvalue;
  172. Show_Net(s_netshowvalue);
  173. }
  174. //显示GPS是否正常
  175. sutGpsInfo.isGpsValid=1;
  176. sutGpsInfo.isGpsWork=1;
  177. gpsIconShow(tempFlash);
  178. //电量显示
  179. if(tempFlash || siVbat!=sutApp.g_iBAT || sutApp.g_iBAT < WARN_PWR_LEVEL||charging!=sutApp.chargeStatus){
  180. if(sutApp.g_iBAT>=0){
  181. siVbat=sutApp.g_iBAT;
  182. charging=sutApp.chargeStatus;
  183. ShowBatttery(sutApp.g_iBAT,exeInterval);
  184. }
  185. }
  186. //文本消息显示
  187. //sutSms.haveUnRead=1;
  188. //ShowMessageFlag(0);
  189. //GPS显示
  190. //时间显示
  191. ShowTime(tempFlash,exeInterval);
  192. //显示耳机状态
  193. //sutApp.earLev=1;
  194. ShowEarStatus(tempFlash);
  195. //显示键盘锁状态
  196. //ShowKeyLocStatus(tempFlash);
  197. }
  198. /****************************状态栏显示部分结束***********************************/
  199. /****************************待机界面显示部分开始***********************************/
  200. typedef enum{
  201. ME_NO_LOGIN,
  202. ME_NOBODY_SPEAK,
  203. ME_IAM_SPEAK,
  204. ME_SOMEBODY_SPEAK
  205. }ME_ENUM;
  206. static void uiShowGUName(int update);
  207. static void uiShowGuaDuan(unsigned char danhu);
  208. static void uiShowGroup(const char* info);
  209. static void uiShowUser(const char* info);
  210. static void uiShowHuaQuan(const char* info,char type);
  211. static void uiShowCallUserName(void);
  212. static void uiShowOffLineMessage(void);
  213. static void uiShowCopsInfo(void){
  214. char info[50];
  215. if(newPara.itemShowType==0){
  216. switch(sutApp.copstype){
  217. case 0:case 2:case 4:case 7://中国移动
  218. snprintf(info, sizeof(info), "中国移动");
  219. break;
  220. case 1:case 6:case 9://中移联通
  221. snprintf(info, sizeof(info), "中国联通");
  222. break;
  223. case 3:case 8:case 11://中国电信
  224. snprintf(info, sizeof(info), "中国电信");
  225. break;
  226. default:snprintf(info, sizeof(info), "公网集群对讲系统");break;
  227. }
  228. }else snprintf(info, sizeof(info), "公网集群对讲系统");
  229. guiFillRect(0, UI_STATUS_ITEM_Y, GLCD_WIDTH-1, UI_CONTENT_SHOW_Y-1, guiGetForeColor());//清除第二区
  230. guiShowCaption(0,info, UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  231. }
  232. #ifdef USE_LEFT_MOVING
  233. void movingShowNames(unsigned int dlyInterval,unsigned char reset, unsigned char now,unsigned char voice){
  234. const char *idleptr="空闲";
  235. const char *voiceptr="本机在讲话";
  236. const char *danhuptr="单呼模式";
  237. char *gname=danhuptr;
  238. char *voicePri=idleptr;
  239. char *uname=NULL;
  240. static unsigned int interval=0xffffff;
  241. if(sutPocStatus.logined==0) return;
  242. //if(sutPocStatus.statusChaned!=0){
  243. // sutPocStatus.statusChaned=0;
  244. // reset=1;
  245. //}
  246. if(++interval<500/dlyInterval && reset==0 && now==0) return;//0.5秒刷新一次
  247. interval=0;
  248. if(sutPocStatus.danHuStatus==0){
  249. if(sutPocStatus.LocalGroup.name[0]==0) gname=NULL;
  250. else gname=sutPocStatus.LocalGroup.name;
  251. }
  252. if(voice==0) voicePri=idleptr;
  253. else if(voice==1) voicePri=voiceptr;
  254. else voicePri=sutPocStatus.CallName;
  255. if(sutPocStatus.LocalUser.name[0]!=0) uname=sutPocStatus.LocalUser.name;
  256. mainScreenShowMoving(UI_GROUP_SHOW_Y, reset,gname,uname,voicePri);
  257. }
  258. #endif
  259. void uiShowMainInterface(char status,unsigned int exeInterval){
  260. short Flag=ME_NO_LOGIN;//ME_ENUM
  261. static unsigned char danhu=0;
  262. static short lastFlag=-1;
  263. static unsigned short siCt=0;
  264. char info[20];
  265. static char firstRun=0;
  266. static unsigned short dly=0;
  267. char tmpStatus=status;
  268. static int copsStatus;
  269. static unsigned int timer;
  270. static char lockStep=0;
  271. unsigned char reset=0;
  272. unsigned char moveFlash=0;
  273. static unsigned char voice=0;
  274. //提示解锁
  275. if(sutApp.lockShow!=0){
  276. if(lockStep==0){
  277. lockStep=1;
  278. backLightReset();
  279. uTimerStart(&timer, 1000);
  280. guiShowMessageBox("请先解锁!");
  281. }
  282. }else lockStep=0;
  283. if(lockStep==1){
  284. if(uTimerExpired(&timer)){
  285. guiClearRect(0,GLCD_HEIGHT/2-20,GLCD_WIDTH-1,GLCD_HEIGHT/2+20,guiGetBackColor());
  286. lastFlag=-1;//让以下刷新一下
  287. sutApp.lockShow=0;
  288. lockStep=0;
  289. sutUIstatus.ItemRefresh=1;//如果"请插卡"有显示,会被刷掉不再显示,这里让它重新显示出来
  290. }
  291. return;
  292. }
  293. /*逻辑处理开始*/
  294. if(tmpStatus){
  295. guiClearAll(guiGetBackColor());
  296. #ifdef DEVELOP_MODE
  297. guiShowStr(1, UI_BOTTOM_SHOW_Y,"研发版垚", FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR);
  298. #else
  299. guiShowStr(1, UI_BOTTOM_SHOW_Y,"菜单", FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR, guiGetBackColor());
  300. #endif
  301. danhu=sutPocStatus.danHuStatus;
  302. uiShowGuaDuan(danhu);
  303. lastFlag=-1;
  304. siCt=0;
  305. //return;
  306. }
  307. if(copsStatus != sutApp.copstype || tmpStatus){
  308. copsStatus=sutApp.copstype;
  309. uiShowCopsInfo();
  310. }
  311. //更新单呼显示与否
  312. if(sutPocStatus.danHuStatus != danhu){
  313. danhu=sutPocStatus.danHuStatus;
  314. uiShowGuaDuan(danhu);
  315. }
  316. //以下持续调用,以便动态更新信息
  317. if(0==sutPocStatus.logined) Flag=ME_NO_LOGIN;//未登录
  318. else if(0==sutPocStatus.spk && 0==sutPocStatus.mic){//已登录,无人说话
  319. Flag=ME_NOBODY_SPEAK;
  320. }else if(0!=sutPocStatus.mic) Flag=ME_IAM_SPEAK;//已登录,本机说话
  321. else if(0!=sutPocStatus.spk) Flag=ME_SOMEBODY_SPEAK;//有人说话
  322. switch(Flag){
  323. case ME_NO_LOGIN://未登录
  324. if(Flag != lastFlag){
  325. guiFillRect(0, UI_CONTENT_SHOW_Y, GLCD_WIDTH-1, UI_BOTTOM_SHOW_Y-1,guiGetBackColor());
  326. guiShowBmp(0,UI_CONTENT_SHOW_Y, "logo.bmp");
  327. }
  328. break;
  329. case ME_NOBODY_SPEAK://已登录,无人说话
  330. if(Flag != lastFlag){
  331. if(ME_NO_LOGIN==lastFlag) guiFillRect(0, UI_CONTENT_SHOW_Y, GLCD_WIDTH-1, UI_CONTENT_SHOW_Y+16,guiGetBackColor());//从未登录到登录,'正在登录'那行也刷掉
  332. guiFillRect(0, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16,guiGetBackColor());
  333. #ifdef USE_LEFT_MOVING
  334. voice=0;
  335. moveFlash=1;
  336. #else
  337. uiShowHuaQuan("空闲",0);
  338. #endif
  339. sutPocStatus.statusChaned = 1;
  340. }
  341. break;
  342. case ME_IAM_SPEAK://已登录,本机说话
  343. if(Flag != lastFlag){
  344. #ifdef USE_LEFT_MOVING
  345. voice=1;
  346. moveFlash=1;
  347. #else
  348. guiFillRect(0, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16,guiGetBackColor());
  349. uiShowHuaQuan("本机在讲话",1);
  350. #endif
  351. }
  352. break;
  353. case ME_SOMEBODY_SPEAK://已登录,有人说话
  354. if(Flag != lastFlag){
  355. guiFillRect(0, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16,guiGetBackColor());
  356. sutPocStatus.statusChaned=1;//保证要刷新名字
  357. #ifdef USE_LEFT_MOVING
  358. voice=2;
  359. moveFlash=1;
  360. #endif
  361. }
  362. #ifndef USE_LEFT_MOVING
  363. uiShowCallUserName();
  364. #endif
  365. break;
  366. }
  367. if(Flag>0){//已登录
  368. if(Flag != lastFlag && (lastFlag==-1 || ME_NO_LOGIN==lastFlag)){
  369. #ifdef USE_LEFT_MOVING
  370. reset=1;
  371. #else
  372. uiShowGUName(1);
  373. #endif
  374. }
  375. #ifndef USE_LEFT_MOVING
  376. else uiShowGUName(0);
  377. #endif
  378. }else{//未登录
  379. snprintf(info, sizeof(info),"正在登陆.");
  380. switch(siCt){//not finished yet
  381. case 0:
  382. strcat(info, " ");
  383. guiShowStr(1, UI_GROUP_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
  384. break;
  385. case (1000/APP_SUB_DIV_TIME):
  386. strcat(info, ". ");
  387. guiShowStr(1, UI_GROUP_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
  388. break;
  389. case (2000/APP_SUB_DIV_TIME):
  390. strcat(info, "..");
  391. guiShowStr(1, UI_GROUP_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
  392. break;
  393. }
  394. //显示登录状态
  395. uiShowOffLineMessage();
  396. }
  397. #ifdef USE_LEFT_MOVING
  398. movingShowNames(APP_SUB_DIV_TIME,reset,moveFlash,voice);
  399. #endif
  400. if(++siCt>=(3000/APP_SUB_DIV_TIME)) siCt=0;
  401. if(Flag != lastFlag) lastFlag=Flag;
  402. }
  403. static void uiShowGUName(int update){
  404. static char scNameUser[POC_GROUP_USER_NAME_LEN];
  405. static char scNameGroup[POC_GROUP_USER_NAME_LEN];
  406. char name[POC_GROUP_USER_NAME_LEN];
  407. unsigned short len;
  408. const unsigned char danHuanBuffer[9]={0xB5,0xA5,0xBA,0xF4,0xC4,0xA3,0xCA,0xBD,0};
  409. char GroupShowUpdate=0;
  410. char UserShowUpdate=0;
  411. if(sutPocStatus.danHuStatus==0){
  412. if(0!=strcmp(sutPocStatus.LocalGroup.name,scNameGroup) || update!=0){
  413. memset(scNameGroup,0,sizeof(scNameGroup));
  414. memcpy(scNameGroup,sutPocStatus.LocalGroup.name,sizeof(scNameGroup));
  415. GroupShowUpdate=1;
  416. }
  417. }else{
  418. if(0!=strcmp((char *)danHuanBuffer,scNameGroup) || update!=0){
  419. memset(scNameGroup,0,sizeof(scNameGroup));
  420. memcpy(scNameGroup, danHuanBuffer,sizeof(danHuanBuffer));
  421. GroupShowUpdate=1;
  422. }
  423. }
  424. if(0!=strcmp(sutPocStatus.LocalUser.name,scNameUser) || update!=0){
  425. memset(scNameUser,0,sizeof(scNameUser));
  426. memcpy(scNameUser,sutPocStatus.LocalUser.name,sizeof(scNameUser));
  427. UserShowUpdate=1;
  428. }
  429. if(GroupShowUpdate){
  430. guiClearRect(0,UI_GROUP_SHOW_Y,GLCD_WIDTH-1,UI_GROUP_SHOW_Y+16+2,guiGetBackColor());//18
  431. //刷新群组栏
  432. if(sutPocStatus.danHuStatus==0) StrIntercept(name, scNameGroup, sizeof(name));
  433. else snprintf(name, sizeof(name), "单呼模式");
  434. uiShowGroup(name);
  435. sutPocStatus.statusChaned=1;
  436. }
  437. if(UserShowUpdate){
  438. guiClearRect(0,UI_USER_SHOW_Y,GLCD_WIDTH-1,UI_GROUP_SHOW_Y+16,guiGetBackColor());//18
  439. //刷新成员栏
  440. StrIntercept(name, scNameUser, sizeof(name));
  441. uiShowUser(name);
  442. }
  443. }
  444. static void uiShowGuaDuan(unsigned char danhu){
  445. if(danhu==0) guiClearArea(GLCD_WIDTH-48-1, UI_BOTTOM_SHOW_Y, 48, 24, guiGetBackColor());
  446. else guiShowStr(GLCD_WIDTH-48, UI_BOTTOM_SHOW_Y, "挂断", FONT_MODE_16X16, REVERSED_NO, COLOR_STATUS_BAR,guiGetBackColor());
  447. }
  448. static void uiShowGroup(const char* info){
  449. unsigned int color=COLOR_BLACK;
  450. if(sutPocStatus.danHuStatus==0) guiShowBmp(2, UI_GROUP_SHOW_Y, "/ext/prepack/Group2.bmp");
  451. else{
  452. guiShowBmp(2, UI_GROUP_SHOW_Y, "/ext/prepack/Onecall.bmp");
  453. color=COLOR_RED;
  454. }
  455. guiClearRect(2+24, UI_GROUP_SHOW_Y, GLCD_WIDTH-1, UI_GROUP_SHOW_Y+24, guiGetBackColor());
  456. guiShowStr(2+24+8, UI_GROUP_SHOW_Y,info, FONT_MODE_24X24, REVERSED_NO,COLOR_BLACK,guiGetBackColor());
  457. }
  458. static void uiShowUser(const char* info){
  459. guiShowBmp(2, UI_USER_SHOW_Y, "/ext/prepack/people2.bmp");
  460. guiClearRect(2+24, UI_USER_SHOW_Y, GLCD_WIDTH-1, UI_USER_SHOW_Y+24, guiGetBackColor());
  461. //guiShowStr(2+16, UI_USER_SHOW_Y," ", FONT_MODE_24X24, REVERSED_NO,guiGetForeColor(),guiGetBackColor());
  462. guiShowStr(2+24+8, UI_USER_SHOW_Y,info, FONT_MODE_24X24, REVERSED_NO,COLOR_BLACK,guiGetBackColor());
  463. }
  464. void showGroup(void){
  465. uiShowGroup("默认群组");
  466. }
  467. void showUser(void){
  468. uiShowUser("小明");
  469. }
  470. static void uiShowHuaQuan(const char* info,char type){
  471. unsigned int color=COLOR_BLACK;
  472. if(type==0) guiShowBmp(2, UI_VOICE_SHOW_Y, "/ext/prepack/Phone.bmp");
  473. else if(type==1){
  474. color=COLOR_RED;
  475. guiShowBmp(2, UI_VOICE_SHOW_Y, "/ext/prepack/Csend.bmp");
  476. }else if(type==2){
  477. guiShowBmp(2, UI_VOICE_SHOW_Y, "/ext/prepack/Creceive.bmp");
  478. color=COLOR_DEEP_GREEN;
  479. }
  480. guiClearRect(2+8+24, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+24, guiGetBackColor());
  481. guiShowStr(2+8+24, UI_VOICE_SHOW_Y,info, FONT_MODE_24X24, REVERSED_NO,color,guiGetBackColor());
  482. }
  483. static void uiShowCallUserName(void){
  484. static char scName[POC_GROUP_USER_NAME_LEN];
  485. char name[POC_GROUP_USER_NAME_LEN];
  486. if(0 != strncmp(scName, sutPocStatus.CallName, POC_GROUP_USER_NAME_LEN) ||
  487. sutPocStatus.statusChaned){
  488. //当名字变更或UI切换了,刷新显示
  489. sutPocStatus.statusChaned=0;
  490. memcpy(scName, sutPocStatus.CallName, POC_GROUP_USER_NAME_LEN);
  491. uiShowHuaQuan(scName,2);
  492. }
  493. }
  494. static void uiShowOffLineMessage(void){
  495. static unsigned char laReason;
  496. char info[50],update=0;
  497. unsigned short y;
  498. if(sutUIstatus.Status != UIS_STANDBY) return;
  499. if(sutPocStatus.PocLineOffReason==laReason && sutUIstatus.ItemRefresh==0) return;
  500. sutUIstatus.ItemRefresh=0;
  501. laReason=sutPocStatus.PocLineOffReason;
  502. if(sutApp.cardStatus==0){
  503. snprintf(info, sizeof(info), "请插卡");
  504. update=1;
  505. }else{
  506. switch(sutPocStatus.PocLineOffReason){
  507. case 1:snprintf(info, sizeof(info), "无网络连接");break;
  508. case 2:snprintf(info, sizeof(info), "无法连接");break;
  509. case 3:snprintf(info, sizeof(info), "没有服务");break;
  510. case 4:snprintf(info, sizeof(info), "账号信息错误");break;
  511. }
  512. if(sutPocStatus.PocLineOffReason!=0) update=1;
  513. }
  514. if(update!=0){
  515. y=UI_USER_SHOW_Y;
  516. guiClearRect(2,y, GLCD_WIDTH-1, y +12, guiGetBackColor());
  517. guiShowStr(2, y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
  518. }
  519. }
  520. /****************************待机界面显示部分结束***********************************/
  521. /****************************主菜单显示部分开始*************************************/
  522. #include "Palace.h"
  523. SUT_PALACE sutPalace;
  524. void PalaceIndexReset(){sutPalace.Index=0;}
  525. void uiShowMenuMain(char update){
  526. static const char *apcMenuMain[]={
  527. "群组选择",
  528. "成员选择",
  529. "选呼好友",
  530. "蓝牙设置",
  531. "信标设置",
  532. "本机设置",
  533. "侧键定义",
  534. "本机信息",
  535. "首长功能",
  536. "闹铃设置",
  537. "初始化",
  538. "初始化",
  539. ""
  540. };
  541. if(update) PalaceInit(&sutPalace,apcMenuMain,"/ext/prepack/Palace","主菜单");
  542. }
  543. void MenuMainResponse(void){
  544. unsigned short key;
  545. key=PalaceResponse(&sutPalace);
  546. if(MKEY_VALUE_MENU==key){
  547. switch(sutPalace.Index){
  548. case 0:
  549. uISetNextStatus(UIS_MENU_GROUP_SEL);
  550. break;
  551. case 1:
  552. uISetNextStatus(UIS_MENU_USER_SEL);
  553. break;
  554. case 2:
  555. uISetNextStatus(UIS_MENU_MAIL_SEL);
  556. break;
  557. case 3:
  558. uISetNextStatus(UIS_MENU_SYS_SEL);
  559. break;
  560. case 4:
  561. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  562. break;
  563. case 5:
  564. uISetNextStatus(UIS_MENU_INFO_SEL);
  565. break;
  566. case 6:
  567. uISetNextStatus(UIS_MENU_BLE_MAIN);
  568. break;
  569. case 7:
  570. uISetNextStatus(UIS_MENU_FRIEND_SEL);
  571. break;
  572. }
  573. uiPushStack(sutPalace.Index);
  574. }
  575. else if(MKEY_VALUE_ESC==key){
  576. uISetNextStatus(UIS_STANDBY);
  577. }
  578. }
  579. /****************************主菜单显示部分结束*************************************/
  580. /*****************************群组选择/成员选择部分开始*********************************/
  581. bool uiSwitchLock=false;
  582. bool isUiSwitchReady(void){return uiSwitchLock;}
  583. static char GUListBoxInited=0;
  584. static char SelMachine=0;
  585. static void ReFlashItemGU(char type);
  586. static void UserAssistAdd(void);
  587. void numGUFlash(int index, int total){
  588. char info[10];
  589. int x;
  590. snprintf(info, sizeof(info), "%03d", total);
  591. x=GLCD_WIDTH-strlen(info)*16;
  592. guiClearRect(x, UI_STATUS_ITEM_Y, GLCD_WIDTH-1, UI_STATUS_ITEM_Y+24, guiGetForeColor());
  593. guiShowStr(x, UI_STATUS_ITEM_Y+1, info, FONT_MODE_16X16, REVERSED_NO, guiGetBackColor(), guiGetForeColor());
  594. }
  595. bool setHandleToZero=true;
  596. void uiShowGUSel(char StatusUpdate,unsigned int exeInterval,char type){
  597. static char machine;
  598. static unsigned int timer;
  599. unsigned short timeout;
  600. char temp;
  601. if(StatusUpdate) machine=0;
  602. switch(machine){
  603. case 0:
  604. if(sutPocStatus.logined == 0){//not login
  605. guiShowMessageBox(" 请先登录 ");
  606. uTimerStart(&timer, 1000);
  607. machine=1;
  608. }else{
  609. uiSwitchLock=true;
  610. if(type==0) appSleepCtl(ASLEEP_GGROUP, 1);//要获取群组信息,不让休眠,记得超时或获取成功或获取失败后需要释放
  611. else if(type==1)appSleepCtl(ASLEEP_GUSER, 1);
  612. else appSleepCtl(ASLEEP_GFRIEND,1);
  613. UiassistStart(0);
  614. machine=2;
  615. setHandleToZero=true;
  616. }
  617. break;
  618. case 1:
  619. if(uTimerExpired(&timer)){
  620. uISetNextStatus(UIS_STANDBY);
  621. }
  622. break;
  623. case 2:
  624. temp=getAssistResult();
  625. if(temp){//??è?íê3é
  626. guiClearAll(guiGetBackColor());
  627. if(type==0){
  628. guiShowCaption(30,"群组选择",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); //0
  629. uiMenuShowBottomIndacitor("确定", "返回");
  630. }else if(type==1){
  631. guiShowCaption(30,"用户选择",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); //0
  632. uiMenuShowBottomIndacitor("单呼", "返回");
  633. }else {
  634. guiShowCaption(30,"好友选择",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); //0
  635. uiMenuShowBottomIndacitor("呼叫", "返回");
  636. }
  637. ReFlashItemGU(type);
  638. uiMenuShowBottomLine();
  639. machine=3;
  640. //获取成功后退出释放休眠
  641. if(type==0) appSleepCtl(ASLEEP_GGROUP, 0);
  642. else if(type==1)appSleepCtl(ASLEEP_GUSER, 0);
  643. else appSleepCtl(ASLEEP_GFRIEND,0);
  644. uiSwitchLock=false;
  645. }
  646. break;
  647. }
  648. if(machine != 3) return;
  649. UserAssistAdd();
  650. LeftMoveSelectedItem(&sutListBox);
  651. }
  652. void GroupSelResponse(){
  653. unsigned int key;
  654. char buf[50];
  655. int i;
  656. key=getKeyValue();
  657. switch(SelMachine){
  658. case 0:
  659. if(GUListBoxInited==0) break;//还未初始化listbox时,不执行按键响应
  660. if(sutListBox.handle==0 && MKEY_VALUE_UP==key){
  661. UiassistStart(1);
  662. SelMachine=1;
  663. }else if(((sutListBox.handle+1) == sutListBox.itemnum) && (MKEY_VALUE_DOWN==key)){
  664. setHandleToZero=true;
  665. UiassistStart(2);
  666. SelMachine=2;
  667. }
  668. key=ListBoxResponse(&sutListBox);
  669. if(MKEY_VALUE_ESC==key){
  670. uiAssist.status=0;
  671. if(getStackStruct()->FastUiChange)uISetNextStatus(UIS_STANDBY);
  672. else uISetNextStatus(UIS_MENU_MAIN);
  673. appSleepCtl(ASLEEP_GGROUP, 0);//按键退出后释放休眠
  674. GUListBoxInited=0;
  675. uiSwitchLock=false;
  676. }else if(MKEY_VALUE_MENU==key){
  677. if(0 == sutPocStatus.ListCurOnlineNum) break;
  678. ///////////////////////////////////////
  679. UiassistEnd(0);
  680. sutApp.groupTTSEnable=1;
  681. snprintf(buf, sizeof(buf),"AT+POC=090000%08x\r\n",sutPocStatus.AllGroups[sutListBox.handle].ID);
  682. msgAtSend(buf);
  683. MSG_INFO(1,buf);
  684. snprintf(buf, sizeof(buf),"进入:%s",sutPocStatus.AllGroups[sutListBox.handle].name);
  685. MSG_INFO(1,buf);
  686. uISetNextStatus(UIS_STANDBY);
  687. SelMachine=0;
  688. }
  689. break;
  690. }
  691. }
  692. void UserSelResponse(){
  693. char buf[50];
  694. unsigned int key;
  695. key=getKeyValue();
  696. switch(SelMachine){
  697. case 0:
  698. if(GUListBoxInited==0) break;//还未初始化listbox时,不执行按键响应
  699. if(sutListBox.handle==0 && MKEY_VALUE_UP==key){
  700. UiassistStart(1);
  701. SelMachine=1;
  702. }else if((sutListBox.handle+1) == sutListBox.itemnum && (MKEY_VALUE_DOWN==key)){
  703. setHandleToZero=true;
  704. UiassistStart(2);
  705. SelMachine=2;
  706. }
  707. key=ListBoxResponse(&sutListBox);
  708. if(MKEY_VALUE_ESC==key){
  709. uiAssist.status=0;
  710. if(getStackStruct()->FastUiChange)uISetNextStatus(UIS_STANDBY);
  711. else uISetNextStatus(UIS_MENU_MAIN);
  712. appSleepCtl(ASLEEP_GUSER, 0);//按键退出后释放休眠
  713. GUListBoxInited=0;
  714. uiSwitchLock=false;
  715. }else if(MKEY_VALUE_MENU==key){
  716. if(0 == sutPocStatus.ListCurOnlineNum) break;
  717. UiassistEnd(0);
  718. snprintf(buf, sizeof(buf),"AT+POC=0A0000%08x\r\n",sutPocStatus.AllUsers[sutListBox.handle].ID);
  719. msgAtSend(buf);
  720. MSG_INFO(1, buf);
  721. snprintf(buf, sizeof(buf),"呼叫:%s",sutPocStatus.AllUsers[sutListBox.handle].name);
  722. MSG_INFO(1, buf);
  723. uISetNextStatus(UIS_STANDBY);
  724. SelMachine=0;
  725. }
  726. break;
  727. }
  728. }
  729. void FriendSelResponse(){
  730. char buf[50];
  731. unsigned int key;
  732. key=getKeyValue();
  733. switch(SelMachine){
  734. case 0:
  735. if(GUListBoxInited==0) break;//还未初始化listbox时,不执行按键响应
  736. if(sutListBox.handle==0 && MKEY_VALUE_UP==key){
  737. UiassistStart(1);
  738. SelMachine=1;
  739. }else if((sutListBox.handle+1) == sutListBox.itemnum && (MKEY_VALUE_DOWN==key)){
  740. setHandleToZero=true;
  741. UiassistStart(2);
  742. SelMachine=2;
  743. }
  744. key=ListBoxResponse(&sutListBox);
  745. if(MKEY_VALUE_ESC==key){
  746. uiAssist.status=0;
  747. if(getStackStruct()->FastUiChange)uISetNextStatus(UIS_STANDBY);
  748. else uISetNextStatus(UIS_MENU_MAIN);
  749. appSleepCtl(ASLEEP_GFRIEND, 0);//按键退出后释放休眠
  750. GUListBoxInited=0;
  751. uiSwitchLock=false;
  752. }else if(MKEY_VALUE_MENU==key){
  753. if(0 == sutPocStatus.ListCurOnlineNum) break;
  754. UiassistEnd(0);
  755. if(sutPocStatus.AllUsers[sutListBox.handle].status==1)break;
  756. snprintf(buf, sizeof(buf),"AT+POC=0A0000%08x\r\n",sutPocStatus.AllUsers[sutListBox.handle].ID);
  757. msgAtSend(buf);
  758. MSG_INFO(1, buf);
  759. snprintf(buf, sizeof(buf),"呼叫:%s",sutPocStatus.AllUsers[sutListBox.handle].name);
  760. MSG_INFO(1, buf);
  761. uISetNextStatus(UIS_STANDBY);
  762. SelMachine=0;
  763. }
  764. break;
  765. }
  766. }
  767. static void UserAssistAdd(void){
  768. switch(SelMachine){
  769. case 1:
  770. if(getAssistResult()){
  771. if(sutUIstatus.Status==UIS_MENU_GROUP_SEL)ReFlashItemGU(0);
  772. else if(sutUIstatus.Status==UIS_MENU_USER_SEL)ReFlashItemGU(1);
  773. else ReFlashItemGU(2);
  774. SelMachine=0;
  775. }
  776. break;
  777. case 2:
  778. if(getAssistResult()){
  779. if(sutUIstatus.Status==UIS_MENU_GROUP_SEL)ReFlashItemGU(0);
  780. else if(sutUIstatus.Status==UIS_MENU_USER_SEL)ReFlashItemGU(1);
  781. else ReFlashItemGU(2);
  782. SelMachine=0;
  783. }
  784. break;
  785. }
  786. }
  787. static void ReFlashItemGU(char type){
  788. static unsigned short susCt=0;
  789. static const char *accIconFileName[]={
  790. "/ext/prepack/Group1.bmp",
  791. "/ext/prepack/Group2.bmp",
  792. "/ext/prepack/people1.bmp",
  793. "/ext/prepack/people2.bmp",
  794. "/ext/prepack/people3.bmp",
  795. ""
  796. };
  797. static char *icons[4];//3//3
  798. int i;
  799. unsigned short timeout;
  800. static const char *NullGU="";
  801. static char *GUName[POC_ALL_GROUPS_NUM+1]; //5
  802. static char GUFeatures[POC_ALL_GROUPS_NUM+1];//5
  803. unsigned int showHandle;
  804. char info[30];
  805. if(type==0){
  806. icons[0]=accIconFileName[0];
  807. icons[1]=accIconFileName[1];
  808. }else{
  809. icons[0]=accIconFileName[2];
  810. icons[1]=accIconFileName[3];
  811. icons[2]=accIconFileName[4];
  812. }
  813. icons[3]=accIconFileName[5];
  814. for(i=0;i<=POC_ALL_GROUPS_NUM;i++){
  815. GUName[i]=NullGU;
  816. GUFeatures[i]=0;
  817. }
  818. for(i=0;i<sutPocStatus.ListFillIndex;i++){
  819. GUFeatures[i]=1;
  820. if(type==0){
  821. if(sutPocStatus.AllGroups[i].ID==sutPocStatus.LocalGroup.ID) GUFeatures[i]=0;
  822. GUName[i]=sutPocStatus.AllGroups[i].name;
  823. }else if(type==1){
  824. if(sutPocStatus.AllUsers[i].ID==sutPocStatus.LocalUser.ID) GUFeatures[i]=0;
  825. GUName[i]=sutPocStatus.AllUsers[i].name;
  826. }else{
  827. if(sutPocStatus.AllUsers[i].status==1)GUFeatures[i]=2;
  828. GUName[i]=sutPocStatus.AllUsers[i].name;
  829. }
  830. }
  831. if(sutPocStatus.ListCurOnlineNum==0 || sutPocStatus.ListDetailValid==0){//没有成员总数或没有获取到明细
  832. GUName[0]="空";
  833. GUFeatures[i]=0;
  834. }
  835. //初始化ListBox控件
  836. numGUFlash(0,sutPocStatus.ListCurOnlineNum);
  837. if(setHandleToZero==true){
  838. showHandle=0;
  839. setHandleToZero=false;
  840. }else{
  841. if(sutPocStatus.ListFillIndex) showHandle=sutPocStatus.ListFillIndex-1;
  842. else showHandle=0;
  843. }
  844. ListBoxInit(&sutListBox,GUName,0,icons,GUFeatures,showHandle);
  845. GUListBoxInited=1;
  846. }
  847. /*****************************群组选择/成员选择部分结束*********************************/
  848. /*****************************系统设置部分开始*********************************/
  849. void uiShowMenuSysSetup(char flash){
  850. static const char *apcPtr[]={
  851. "1.LCD设置",
  852. "2.功耗模式设置",
  853. "3.提示音设置",
  854. "4.键锁设置",
  855. "5.工程设置",
  856. ""
  857. };
  858. if(flash){
  859. msgAtSend("AT+RSIM\r\n");//进此菜单前查询一下卡用于后面显示
  860. guiClearAll(guiGetBackColor());
  861. guiShowCaption(0,"系统设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  862. uiMenuShowBottomLine();
  863. uiMenuShowBottomIndacitor("确认", "返回");
  864. uiMenuInit(&sutMenuSysSetup,apcPtr,FONT_MODE_16X16);
  865. }
  866. }
  867. void sysTemSetResponse(void){
  868. unsigned short key;
  869. key=uiMenuResponse(&sutMenuSysSetup);
  870. if(MKEY_VALUE_MENU==key){
  871. switch(sutMenuSysSetup.handle){
  872. case 0://LCD设置
  873. uISetNextStatus(UIS_MENU_SYS_LCD);
  874. break;
  875. case 1://功耗模式设置
  876. uISetNextStatus(UIS_MENU_SYS_PWR);
  877. break;
  878. case 2://提示音设置
  879. uISetNextStatus(UIS_MENU_SYS_NOTE);
  880. break;
  881. case 3://键锁设置
  882. uISetNextStatus(UIS_MENU_SYS_LOCK);
  883. break;
  884. case 4://工程设置
  885. uISetNextStatus(UIS_MENU_SYS_FACTORY);
  886. break;
  887. }
  888. if(sutMenuSysSetup.handle<=4) uiPushStack(sutMenuSysSetup.handle);
  889. }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_MAIN);
  890. }
  891. /*****************************系统设置部分结束*********************************/
  892. /*****************************定位设置部分开始*********************************/
  893. unsigned char tempGpsIndex;
  894. static locationTimeFlash(char type);
  895. static locationXYFlash(char flash);
  896. void uiShowMenuLocationSel(char flash){
  897. static unsigned int timer;
  898. static char machine=0;
  899. if(flash){
  900. machine=0;
  901. guiClearAll(guiGetBackColor());
  902. guiShowCaption(0,"定位设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  903. uiMenuShowBottomLine();
  904. if(newPara.gpsEnable==0){
  905. machine=1;
  906. uiMenuShowBottomIndacitor(NULL, "返回");
  907. guiShowMessageBox("版本不支持");
  908. uTimerStart(&timer, 1000);
  909. return;
  910. }
  911. uiMenuShowBottomIndacitor("保存", "返回");
  912. locationTimeFlash(0);
  913. }
  914. if(newPara.gpsEnable!=0) locationXYFlash(flash);
  915. if(machine==1){
  916. if(uTimerExpired(&timer)){
  917. machine=0;
  918. uISetNextStatus(UIS_MENU_MAIN);
  919. }
  920. }
  921. }
  922. void loationSetResponse(void){
  923. unsigned short key;
  924. key=getKeyValue();
  925. if(newPara.gpsEnable==0){
  926. if(key!=MKEY_VALUE_ESC) return;
  927. }
  928. if(MKEY_VALUE_UP==key) locationTimeFlash(1);
  929. else if(MKEY_VALUE_DOWN==key) locationTimeFlash(2);
  930. else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  931. else if(MKEY_VALUE_MENU==key){
  932. if(tempGpsIndex != newPara.gpsTimeIndex){
  933. MSG_INFO(1, "GPS timeIndex update:%d",getGPSTimeValue(tempGpsIndex));
  934. newPara.gpsTimeIndex=tempGpsIndex;
  935. sysIniSave("location");
  936. gpsCheckInfo();//检测一下
  937. }
  938. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  939. }
  940. }
  941. static locationTimeFlash(char type){
  942. unsigned short gpsTimeValue;
  943. char buf[50];
  944. unsigned short y=70;
  945. if(type==0){
  946. tempGpsIndex=newPara.gpsTimeIndex;
  947. }else if(type==1){
  948. if(++tempGpsIndex>=GPS_TABLE_NUM) tempGpsIndex=0;
  949. }else if(type==2){
  950. if(tempGpsIndex>0) tempGpsIndex--;
  951. else tempGpsIndex=GPS_TABLE_NUM-1;
  952. }else return;
  953. gpsTimeValue=getGPSTimeValue(tempGpsIndex);
  954. if(gpsTimeValue==0) snprintf(buf, sizeof(buf), "定位上传设置:关闭");
  955. else snprintf(buf, sizeof(buf), "定位上传设置:%d秒",gpsTimeValue);
  956. guiClearRect(0,y,GLCD_WIDTH-1, y+12,guiGetBackColor());
  957. guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  958. }
  959. static locationXYFlash(char flash){
  960. char buf[50];
  961. unsigned short y=UI_CONTENT_SHOW_Y+2;
  962. // if(gpsInfo.update==0 && flash==0) return;
  963. // gpsInfo.update=0;
  964. guiClearRect(0, y,GLCD_WIDTH-1, y+12+5+12,guiGetBackColor());
  965. snprintf(buf, sizeof(buf), "纬度 S:%d.%05d",sutGpsInfo.latitue/1000000,sutGpsInfo.latitue%1000000);
  966. guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  967. y+=12+5;
  968. snprintf(buf, sizeof(buf), "经度 W:%d.%05d",sutGpsInfo.longitue/1000000,sutGpsInfo.longitue%1000000);
  969. guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  970. }
  971. /*****************************定位设置部分结束*********************************/
  972. /*******************************终端信息开始**********************************/
  973. unsigned char sysInfoType;
  974. static void sysInfoFlash(void){
  975. unsigned short x,y;
  976. char buf[50];
  977. unsigned char LineSpace=12+4;
  978. unsigned char NeedSpace=0;
  979. int len;
  980. char yunyingshang=0;
  981. x=0,y=UI_CONTENT_SHOW_Y+5;
  982. guiClearRect(0,y,GLCD_WIDTH-1,UI_BOTTOM_LINE_Y-1,guiGetBackColor());
  983. NeedSpace=0;
  984. if(sysInfoType==0){
  985. //终端编码
  986. snprintf(buf,sizeof(buf),"PSN:%lu", sutApp.UserInfo.psn);
  987. len=strlen(buf);
  988. if(len>17){
  989. y+=LineSpace;
  990. NeedSpace=LineSpace;
  991. guiShowStr(x+56,y,buf+17,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  992. buf[17]=0;
  993. y-=LineSpace;
  994. }
  995. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  996. y+=LineSpace;y+=NeedSpace;
  997. //账号
  998. snprintf(buf,sizeof(buf),"账号:%s", sutApp.UserInfo.OtherId);
  999. len=strlen(buf);
  1000. if(len>17){
  1001. y+=LineSpace;
  1002. NeedSpace=LineSpace;
  1003. guiShowStr(x+56,y,buf+17,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1004. buf[17]=0;
  1005. y-=LineSpace;
  1006. }
  1007. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1008. y+=LineSpace;y+=NeedSpace;
  1009. //应用版本
  1010. snprintf(buf, sizeof(buf),"应用版本:%s",OHPOC_VERSION);
  1011. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1012. y+=LineSpace;
  1013. //内部版本
  1014. snprintf(buf, sizeof(buf),"内部版本:%d",CUSTOMER_CODE);
  1015. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1016. }else if(sysInfoType==1){
  1017. //对讲平台
  1018. snprintf(buf, sizeof(buf),"对讲平台:%s", OHPOC_POC_PLATFORM);
  1019. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1020. y+=LineSpace;
  1021. //对讲版本号
  1022. NeedSpace=0;
  1023. snprintf(buf, sizeof(buf),"对讲版本:%s",sutApp.pocVersion);
  1024. len=strlen(buf);
  1025. if(len>15){
  1026. y+=LineSpace;
  1027. NeedSpace=LineSpace;
  1028. guiShowStr(0,y,buf+15,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1029. buf[15]=0;
  1030. y-=LineSpace;
  1031. }
  1032. guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1033. y+=LineSpace; y+=NeedSpace;
  1034. //模块
  1035. memset(buf,sizeof(buf),0);
  1036. snprintf(buf,sizeof(buf),"模块:%s", sutApp.modemVer);
  1037. len=strlen(buf);
  1038. if(len>16){
  1039. y+=LineSpace;
  1040. guiShowStr(x+32,y,buf+16,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1041. buf[16]=0;
  1042. y-=LineSpace;
  1043. }
  1044. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1045. }else if(sysInfoType==2){
  1046. NeedSpace=0;
  1047. snprintf(buf, sizeof(buf),"ICCID:");
  1048. guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1049. y+=LineSpace;
  1050. //终端编码
  1051. memset(buf,0,sizeof(buf));
  1052. switch(sutApp.copstype){
  1053. case 46000:
  1054. case 46002:
  1055. case 46007:
  1056. yunyingshang=1;
  1057. break;
  1058. case 46001:
  1059. case 46006:
  1060. yunyingshang=2;
  1061. break;
  1062. case 46003:
  1063. case 46005:
  1064. case 46008:
  1065. case 46009:
  1066. case 46010:
  1067. case 46011:
  1068. yunyingshang=3;
  1069. break;
  1070. default:
  1071. yunyingshang=0;
  1072. break;
  1073. }
  1074. if(LSAPI_SIM_GetICCID(buf)==0&&yunyingshang!=0){
  1075. strncpy(sutApp.ICCID, buf,sizeof(sutApp.ICCID));
  1076. if(yunyingshang!=1){
  1077. sutApp.ICCID[19]=0;
  1078. }
  1079. snprintf(buf, sizeof(buf),"%s",sutApp.ICCID);
  1080. //guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1081. }else{
  1082. snprintf(buf, sizeof(buf),"未知");
  1083. //guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1084. }
  1085. len=strlen(buf);
  1086. if(len>15){
  1087. y+=LineSpace;
  1088. NeedSpace=LineSpace;
  1089. guiShowStr(0,y,buf+15,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1090. buf[15]=0;
  1091. y-=LineSpace;
  1092. }
  1093. guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1094. y+=LineSpace; y+=NeedSpace;
  1095. //IMEI
  1096. snprintf(buf, sizeof(buf),"IMEI:");
  1097. guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1098. y+=LineSpace;
  1099. memset(buf,0,sizeof(buf));
  1100. if(LSAPI_SIM_GetIMEI(buf)==0){
  1101. guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1102. }else{
  1103. guiShowStr(0,y,"未知",FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1104. }
  1105. }else if(sysInfoType==3){
  1106. //显示服务器
  1107. //对讲IP
  1108. //getPIPAddr();getGIPAddr();
  1109. guiShowStr(x,y,"交换服务器:",FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1110. y+= LineSpace;
  1111. snprintf(buf, sizeof(buf),"%s",showPIP);
  1112. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1113. y+=LineSpace;
  1114. //GPS IP
  1115. guiShowStr(x,y,"定位服务器:",FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1116. y+= LineSpace;
  1117. snprintf(buf, sizeof(buf),"%s",showGIP);
  1118. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1119. y+=LineSpace;
  1120. snprintf(buf, sizeof(buf),"端口:%d",newPara.gpsPort);
  1121. guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
  1122. }
  1123. }
  1124. void uiShowInformation(char update){
  1125. if(update){
  1126. sysInfoType=0;
  1127. msgAtSend("AT+POC=7D0000\r\n");
  1128. guiClearAll(guiGetBackColor());
  1129. guiShowCaption(0,"终端信息",UI_STATUS_BAR_HEIGH,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1130. uiMenuShowBottomLine();
  1131. uiMenuShowBottomIndacitor(NULL, "返回");
  1132. sysInfoFlash();
  1133. }
  1134. }
  1135. void uiShowInformationResponse(void){
  1136. unsigned short key=getKeyValue();
  1137. if(MKEY_VALUE_ESC==key) uISetNextStatus(sutUIstatus.LastStatus);
  1138. else if(MKEY_VALUE_DOWN==key){
  1139. if(++sysInfoType>2) sysInfoType=0;
  1140. sysInfoFlash();
  1141. }else if(MKEY_VALUE_UP==key){
  1142. if(sysInfoType==0) sysInfoType=2;
  1143. else sysInfoType--;
  1144. sysInfoFlash();
  1145. }else if(MKEY_VALUE_CB_IP==key){
  1146. sysInfoType=3;
  1147. sysInfoFlash();
  1148. }
  1149. }
  1150. /*****************************终端信息结束**********************************/
  1151. static const char *commonIcon2[]={
  1152. "/ext/prepack/APN.bmp",
  1153. "/ext/prepack/APN1.bmp",
  1154. ""
  1155. };
  1156. /*****************************LCD设置开始**********************************/
  1157. unsigned char lcdTmpIndex;
  1158. static void lcdTimeFlash(char type){
  1159. char buf[50];
  1160. unsigned short x=4,y=56,value;
  1161. if(type==0) guiShowStr(x+20, y, "背光时间:", FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1162. else if(type==1){
  1163. if(++lcdTmpIndex>=5) lcdTmpIndex=0;
  1164. }else if(type==2){
  1165. if(lcdTmpIndex>0) lcdTmpIndex--;
  1166. else lcdTmpIndex=4;
  1167. }
  1168. value=newPara.lcdParaList[lcdTmpIndex];
  1169. MSG_INFO(1,"lcdTmpIndex==%d,value===%d",lcdTmpIndex,value);
  1170. if(value==0) snprintf(buf, sizeof(buf), " 常亮 ");
  1171. else snprintf(buf, sizeof(buf), "%3d 秒", value);
  1172. guiShowStr(x+80, y, buf, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1173. }
  1174. void uiShowLcdSel(char StatusUpdate){
  1175. if(StatusUpdate){
  1176. guiClearAll(guiGetBackColor());
  1177. guiShowCaption(0,"LCD设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1178. uiMenuShowBottomLine();
  1179. lcdTmpIndex=newPara.lcdParaDefaultIndex;
  1180. lcdTimeFlash(0);
  1181. uiMenuShowBottomIndacitor("保存", "返回");
  1182. }
  1183. }
  1184. void uiShowLcdSelResponse(void){
  1185. unsigned short key=getKeyValue();
  1186. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
  1187. else if(MKEY_VALUE_DOWN==key)lcdTimeFlash(1);
  1188. else if(MKEY_VALUE_UP==key) lcdTimeFlash(2);
  1189. else if(MKEY_VALUE_MENU==key){
  1190. getStackStruct()->ok_back=1;
  1191. if(lcdTmpIndex != newPara.lcdParaDefaultIndex){
  1192. newPara.lcdParaDefaultIndex=lcdTmpIndex;
  1193. MSG_INFO(1, "LCD TimeUpdate");
  1194. backLightReset();
  1195. sysIniSave("lcd");
  1196. }
  1197. uISetNextStatus(UIS_MENU_SYS_SEL);
  1198. }
  1199. }
  1200. /*****************************LCD设置结束**********************************/
  1201. /*****************************网络设置开始**********************************/
  1202. const unsigned char netModeSetTable[3]={1,2,4};//设置制式:AUTH,2G,4G
  1203. /*输入制式源始值,返回索引值对应值*/
  1204. unsigned char getNetModeIndex(unsigned char netModeValue){
  1205. unsigned char i;
  1206. for(i=0;i<sizeof(netModeSetTable);i++){
  1207. if(netModeValue==netModeSetTable[i]) return i;
  1208. }
  1209. return 0xff;//无对应值
  1210. }
  1211. /*输入制式索引值,返回制式源始值*/
  1212. unsigned char getNetModeValue(unsigned char netModeIndex){
  1213. if(netModeIndex>=sizeof(netModeSetTable)) return 0xff;
  1214. else return netModeSetTable[netModeIndex];
  1215. }
  1216. /*输入制式索引值,发送对应该命令给模块*/
  1217. void netModeSetCmd(unsigned char netMode){
  1218. char buf[30];
  1219. snprintf(buf, sizeof(buf), "AT+CTEC=%d,%d\r\n",ctecCurrentSet, netMode);
  1220. msgAtSend(buf);
  1221. }
  1222. #define NET_MODE_NUM 3
  1223. void uiShowNetSel(char StatusUpdate){
  1224. static const char *netMode[NET_MODE_NUM+1]={
  1225. "AUTO",
  1226. "2G",
  1227. "4G",
  1228. ""
  1229. };
  1230. char Features[NET_MODE_NUM];
  1231. unsigned char i;
  1232. if(StatusUpdate){
  1233. guiClearAll(guiGetBackColor());
  1234. guiShowCaption(0,"网络设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1235. uiMenuShowBottomLine();
  1236. for(i=0;i<NET_MODE_NUM;i++){
  1237. if(i==newPara.netMode) Features[i]=1;
  1238. else Features[i]=0;
  1239. }
  1240. ListBoxInit(&sutListBox,netMode,0,commonIcon2,Features,0);
  1241. uiMenuShowBottomIndacitor("保存", "返回");
  1242. }
  1243. }
  1244. void uiShowNetSelResponse(void){
  1245. unsigned short key=ListBoxResponse(&sutListBox);
  1246. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
  1247. else if(MKEY_VALUE_MENU==key){
  1248. getStackStruct()->ok_back=1;
  1249. if(sutListBox.handle*2 != newPara.netMode){
  1250. newPara.netMode=sutListBox.handle*2;
  1251. MSG_INFO(1, "netMode update:%d", newPara.netMode);
  1252. sysIniSave("NetSel");
  1253. netModeSetCmd(newPara.netMode);
  1254. }
  1255. uISetNextStatus(UIS_MENU_SYS_SEL);
  1256. }
  1257. }
  1258. /*****************************网络设置结束**********************************/
  1259. /*****************************卡选择设置开始**********************************/
  1260. #define SIM_MODE_NUM 2
  1261. void uiShowSimSel(char StatusUpdate){
  1262. static const char *simMode[SIM_MODE_NUM+1]={
  1263. "卡1",
  1264. "卡2",
  1265. ""
  1266. };
  1267. char Features[SIM_MODE_NUM];
  1268. unsigned char i;
  1269. if(StatusUpdate){
  1270. guiClearAll(guiGetBackColor());
  1271. guiShowCaption(0,"SIM设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1272. uiMenuShowBottomLine();
  1273. for(i=0;i<SIM_MODE_NUM;i++){
  1274. if(i==sutApp.simSel) Features[i]=1;
  1275. else Features[i]=0;
  1276. }
  1277. ListBoxInit(&sutListBox,simMode,0,commonIcon2,Features,0);
  1278. uiMenuShowBottomIndacitor("保存", "返回");
  1279. }
  1280. }
  1281. void uiShowSimSelResponse(void){
  1282. char buf[30];
  1283. unsigned short key=ListBoxResponse(&sutListBox);
  1284. if(MKEY_VALUE_ESC==key){
  1285. if(getStackStruct()->FastUiChange)uISetNextStatus(UIS_STANDBY);
  1286. else uISetNextStatus(UIS_MENU_SYS_SEL);
  1287. }else if(MKEY_VALUE_MENU==key){
  1288. getStackStruct()->ok_back=1;
  1289. if(sutListBox.handle != sutApp.simSel){
  1290. snprintf(buf, sizeof(buf), "AT+SIMCROSS=%d\r\n",sutListBox.handle);
  1291. msgAtSend(buf);
  1292. guiShowMessageBox("请重启设备");
  1293. msgAtSend("AT+TRB\r\n");
  1294. LSAPI_OSI_ThreadSleep(100);
  1295. CTL_POWER_HOLD(false);
  1296. for(;;){
  1297. MSG_INFO(1, "card changed, wait user reboot");
  1298. CTL_POWER_HOLD(false);
  1299. LSAPI_OSI_ThreadSleep(1000);
  1300. }
  1301. }
  1302. uISetNextStatus(UIS_MENU_SYS_SEL);
  1303. }
  1304. }
  1305. /*****************************卡选择设置结束**********************************/
  1306. /*****************************功耗设置开始**********************************/
  1307. typedef enum{
  1308. PMODE_DEFAULT_LOW,
  1309. PMODE_SUPER_LOW,
  1310. PMODE_NORMAL
  1311. }PWR_ENUMDEF;
  1312. //低功耗模式
  1313. #define MODE_LOW_PWR_NONE_4G 5
  1314. #define MODE_LOW_PWR_IS_4G 25
  1315. //超长待机模式
  1316. #define MODE_LONG_LOW_PWR_NONE_4G 5
  1317. #define MODE_LONG_LOW_PWR_IS_4G 55
  1318. //常规模式
  1319. #define MODE_NORMAL__NONE_4G 5
  1320. #define MODE_NORMAL__IS_4G 5
  1321. //终端放弃设置模式,由服务器决定使用什么
  1322. #define MODE_AUTO____NONE_4G 0
  1323. #define MODE_AUTO____IS_4G 0
  1324. //默认功耗模式
  1325. #define MODE_PWR_DEFAULT_NONE_4G MODE_LOW_PWR_NONE_4G
  1326. #define MODE_PWR_DEFAULT_IS_4G MODE_LOW_PWR_IS_4G
  1327. const char ZZD_PWRMODE[3]={2,0,3};
  1328. void pwrModeSetCmd(unsigned char pwrMode){
  1329. char buf[30];
  1330. memset(buf,0,sizeof(buf));
  1331. snprintf(buf, sizeof(buf), "AT+POC=3D0000%02d\r\n",ZZD_PWRMODE[pwrMode]);
  1332. msgAtSend(buf);
  1333. }
  1334. void pwrModeAckHandler(unsigned char seg1, unsigned char seg2){
  1335. if(seg1==MODE_PWR_DEFAULT_NONE_4G && seg2==MODE_PWR_DEFAULT_IS_4G && newPara.pwrMode != PMODE_DEFAULT_LOW){
  1336. goto SAVE_PWR_MODE;
  1337. }else if(seg1==MODE_LONG_LOW_PWR_NONE_4G && seg2==MODE_LONG_LOW_PWR_IS_4G && newPara.pwrMode != PMODE_SUPER_LOW){
  1338. goto SAVE_PWR_MODE;
  1339. }else if(seg1==MODE_NORMAL__NONE_4G && seg2==MODE_NORMAL__IS_4G && newPara.pwrMode != PMODE_NORMAL){
  1340. goto SAVE_PWR_MODE;
  1341. }else if(seg2!=MODE_LOW_PWR_IS_4G&&seg2!=MODE_LONG_LOW_PWR_IS_4G&& seg2!=MODE_NORMAL__IS_4G){
  1342. //Seg2 3个模式都不满足则切换为默认模式
  1343. newPara.pwrMode = PMODE_DEFAULT_LOW;
  1344. goto SAVE_PWR_MODE;
  1345. }
  1346. return;
  1347. SAVE_PWR_MODE:
  1348. sysIniSave("workPwr");
  1349. pwrModeSetCmd(newPara.pwrMode);
  1350. }
  1351. #define PWR_MODE_NUM 3
  1352. void uiShowPwrSel(char StatusUpdate){
  1353. static const char *pwrMode[PWR_MODE_NUM+1]={
  1354. "常规省电模式",
  1355. "高性能模式",
  1356. "超长待机模式",
  1357. "",
  1358. };
  1359. char Features[PWR_MODE_NUM];
  1360. unsigned char i;
  1361. if(StatusUpdate){
  1362. guiClearAll(guiGetBackColor());
  1363. guiShowCaption(0,"功耗设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1364. uiMenuShowBottomLine();
  1365. for(i=0;i<PWR_MODE_NUM;i++){
  1366. if(i==newPara.pwrMode) Features[i]=1;
  1367. else Features[i]=0;
  1368. }
  1369. ListBoxInit(&sutListBox,pwrMode,0,commonIcon2,Features,newPara.pwrMode);
  1370. uiMenuShowBottomIndacitor("保存", "返回");
  1371. }
  1372. }
  1373. void uiShowPwrSelResponse(void){
  1374. unsigned short key=ListBoxResponse(&sutListBox);
  1375. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
  1376. else if(MKEY_VALUE_MENU==key){
  1377. getStackStruct()->ok_back=1;
  1378. if(sutListBox.handle != newPara.pwrMode){
  1379. newPara.pwrMode=sutListBox.handle;
  1380. MSG_INFO(1, "pwrMode update:%d", newPara.pwrMode);
  1381. sysIniSave("pwrSel");
  1382. pwrModeSetCmd(newPara.pwrMode);
  1383. }
  1384. uISetNextStatus(UIS_MENU_SYS_SEL);
  1385. }
  1386. }
  1387. /*****************************功耗设置结束**********************************/
  1388. /*****************************服务器设置输入密码开始**********************************/
  1389. void uiShowServerPassSel(char StatusUpdate){
  1390. if(StatusUpdate){
  1391. guiClearAll(guiGetBackColor());
  1392. guiShowCaption(0,"密码验证",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1393. uiMenuShowBottomLine();
  1394. NumEditInit(&sutNumEdit,(GLCD_WIDTH-6*8)/2,(GLCD_HEIGHT-16)/2,"000000");
  1395. NumEditShow(&sutNumEdit);
  1396. uiMenuShowBottomIndacitor("[P1]加值", "[P2]移动");
  1397. }
  1398. }
  1399. void uiShowServerSelPassResponse(void){
  1400. unsigned short key=getKeyValue();
  1401. NumEditResponse(&sutNumEdit);
  1402. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1403. else if(MKEY_VALUE_MENU==key){
  1404. if(memcmp(sutNumEdit.buffer, getMenuKey(), 6)==0) uISetNextStatus(UIS_MENU_SYS_SERVER);
  1405. else{
  1406. guiShowMessageBox("密码错误");
  1407. LSAPI_OSI_ThreadSleep(1000);
  1408. getStackStruct()->ok_back=1;
  1409. uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1410. }
  1411. }
  1412. }
  1413. /*****************************服务器设置输入密码结束**********************************/
  1414. /*****************************服务器设置开始**********************************/
  1415. void uiShowServerSel(char StatusUpdate){
  1416. static const char *serIcons[]={
  1417. "Ser.bmp",
  1418. "Sersel.bmp",
  1419. ""
  1420. };
  1421. static const char *serName[]={
  1422. "杭州服务器",
  1423. "山东服务器",
  1424. "IP分发服务器",
  1425. "集群服务器",
  1426. "自定义服务器",
  1427. "",
  1428. };
  1429. char Features[5];
  1430. unsigned char tempSer,i;
  1431. if(StatusUpdate){
  1432. guiClearAll(guiGetBackColor());
  1433. guiShowCaption(0,"服务器列表",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1434. uiMenuShowBottomLine();
  1435. uiMenuShowBottomIndacitor("确认", "返回");
  1436. tempSer=newPara.serList.defaultuse;
  1437. for(i=0;i<=SERVER_UR;i++){
  1438. if(i==tempSer) Features[i]=1;
  1439. else Features[i]=0;
  1440. }
  1441. ListBoxInit(&sutListBox,serName,0,serIcons,Features,0);
  1442. }
  1443. }
  1444. void uiShowServerSelResponse(void){
  1445. unsigned char tempSer;
  1446. char buf[50],buf1[100];
  1447. unsigned short key=ListBoxResponse(&sutListBox);
  1448. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
  1449. else if(MKEY_VALUE_MENU==key){
  1450. tempSer=sutListBox.handle;
  1451. if(tempSer != newPara.serList.defaultuse){
  1452. newPara.serList.defaultuse=tempSer;
  1453. sysIniSave("serverSel");
  1454. getGIPAddr();
  1455. snprintf(buf, sizeof(buf), "ip=%s;domain=%s;",getPIPAddr(),getDOMAINAddr());
  1456. AscStrTurnHexStr(buf,buf1);
  1457. msgAtSend("AT+POC=010000");
  1458. msgAtSend(buf1);
  1459. msgAtSend("\r\n");
  1460. LSAPI_OSI_ThreadSleep(100);
  1461. msgAtSend("AT+POC=040000\r\n");
  1462. }
  1463. uISetNextStatus(UIS_STANDBY );
  1464. }
  1465. }
  1466. /*****************************服务器设置结束**********************************/
  1467. /*****************************版本设置开始**********************************/
  1468. unsigned char fotaStep;
  1469. unsigned int fotaTick;
  1470. void fotaStepSet(unsigned char newStep){
  1471. fotaStep=newStep;
  1472. }
  1473. void fotaMsgShow(char *msg){
  1474. #ifdef USE_12X12_FONT_ONLY
  1475. int len=guiGetStrXLen((char *)msg,FONT_MODE_16X16);
  1476. #else
  1477. int len=guiGetStrXLen((char *)msg,FONT_MODE_16X16);
  1478. #endif
  1479. guiClearRect(0, 60, GLCD_WIDTH-1, 60+16,guiGetBackColor());
  1480. #ifdef USE_12X12_FONT_ONLY
  1481. guiShowStr((GLCD_WIDTH-len)/2,60+2, msg,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1482. #else
  1483. guiShowStr((GLCD_WIDTH-len)/2,60, msg,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1484. #endif
  1485. }
  1486. void fotaMsgShow2(char *msg1, char *msg2){
  1487. guiClearRect(0, 45, GLCD_WIDTH-1, 45+16+2+16,guiGetBackColor());
  1488. int len=guiGetStrXLen((char *)msg1,FONT_MODE_16X16);
  1489. guiShowStr((GLCD_WIDTH-len)/2,45, msg1,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1490. len=guiGetStrXLen((char *)msg2,FONT_MODE_16X16);
  1491. guiShowStr((GLCD_WIDTH-len)/2,45+16+2, msg2,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1492. }
  1493. void uiShowVersionSel(char StatusUpdate){
  1494. char buf[50];
  1495. if(StatusUpdate){
  1496. sutApp.fotaVersion[0]=0;
  1497. guiClearAll(guiGetBackColor());
  1498. guiShowCaption(0,"版本更新",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1499. msgAtSend("AT+FOTA?\r\n");
  1500. fotaStep=0;
  1501. sutApp.fotaStatus=0;
  1502. fotaMsgShow("正在检测版本");
  1503. uiMenuShowBottomLine();
  1504. uiMenuShowBottomIndacitor("确定", "返回");
  1505. uTimerStart(&fotaTick, 2000);
  1506. }
  1507. switch(fotaStep){
  1508. case 0:
  1509. if(sutApp.fotaStatus==1){
  1510. fotaMsgShow("无更新版本");
  1511. fotaStep=4;
  1512. break;
  1513. }else if(sutApp.fotaStatus==2){
  1514. fotaMsgShow("是否更新到:");
  1515. snprintf(buf, sizeof(buf), "%s",sutApp.fotaVersion);
  1516. fotaMsgShow(buf);
  1517. fotaStep=1;
  1518. break;
  1519. }
  1520. if(uTimerExpired(&fotaTick)){
  1521. fotaMsgShow("检测超时");
  1522. fotaStep=4;
  1523. }
  1524. break;
  1525. case 1://等待用户确定
  1526. break;
  1527. case 2://用户确定后等待结果
  1528. if(sutApp.fotaStatus==3){
  1529. fotaMsgShow("升级失败");
  1530. fotaStep=4;
  1531. break;
  1532. }else if(sutApp.fotaStatus==4){
  1533. sutApp.fotaStatus=0;//否则会一直刷新本消息
  1534. fotaMsgShow("正在下载");
  1535. break;
  1536. }else if(sutApp.fotaStatus==5){
  1537. fotaMsgShow("下载成功");
  1538. fotaStep=3;
  1539. break;
  1540. }
  1541. if(uTimerExpired(&fotaTick)){
  1542. fotaMsgShow("超时退出");
  1543. fotaStep=4;
  1544. }
  1545. break;
  1546. case 3://升级成功,等待重启
  1547. LSAPI_OSI_ThreadSleep(1000);
  1548. fotaStep=6;
  1549. fotaMsgShow2("确定将关机,再","开机需约60秒");
  1550. //msgAtSend("AT+POC=050000\r\n");//停止POC后复位
  1551. //MSG_INFO(1, "Stop poc");
  1552. //LSAPI_OSI_ThreadSleep(2000);
  1553. //msgAtSend("AT+TRB\r\n");
  1554. //MSG_INFO(1, "Reset system!!!");
  1555. //while(1){LSAPI_OSI_ThreadSleep(1000);}
  1556. break;
  1557. case 4://延时显示2秒后退出
  1558. uTimerStart(&fotaTick, 2000);
  1559. fotaStep=5;
  1560. break;
  1561. case 5://退出升级流程
  1562. if(uTimerExpired(&fotaTick)){
  1563. getStackStruct()->ok_back=1;
  1564. uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1565. }
  1566. break;
  1567. case 6://无更新版本
  1568. sutApp.timeOutCnt=0;//不让界面返回待机界面
  1569. break;
  1570. }
  1571. }
  1572. void uiShowVersionSelResponse(void){
  1573. unsigned char key=getKeyValue();
  1574. if(fotaStep!=1 && fotaStep!=6) return;
  1575. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1576. else if(MKEY_VALUE_MENU==key){
  1577. if(fotaStep==1){
  1578. fotaMsgShow("请勿断电!");
  1579. fotaStep=2;
  1580. msgAtSend("AT+FOTA=1\r\n");
  1581. uTimerStart(&fotaTick, 10000);
  1582. }else if(fotaStep==6){
  1583. paControl(false);//防止一直滴音
  1584. MSG_INFO(1, "Reset system!!!");
  1585. msgAtSend("AT+POC=050000\r\n");
  1586. msgAtSend("AT+TRB\r\n");
  1587. while(1){LSAPI_OSI_ThreadSleep(1000);}
  1588. }
  1589. }
  1590. }
  1591. /*****************************版本设置结束**********************************/
  1592. /*****************************工程设置开始*********************************/
  1593. void uiShowFactory(char flash){
  1594. static const char *apcPtr[]={
  1595. //"1.服务器设置",
  1596. //"2.版本升级",
  1597. "1.CSQ查看",
  1598. "2.耳机MIC增益",
  1599. // "5.耳机SPK增益",
  1600. // "3.字库更新",
  1601. ""
  1602. };
  1603. if(flash){
  1604. guiClearAll(guiGetBackColor());
  1605. guiShowCaption(0,"工程设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1606. uiMenuShowBottomLine();
  1607. uiMenuShowBottomIndacitor("确认", "返回");
  1608. uiMenuInit(&sutMenuSysSetup,apcPtr,FONT_MODE_16X16);
  1609. }
  1610. }
  1611. void uiShowFactoryResponse(void){
  1612. unsigned short key;
  1613. key=uiMenuResponse(&sutMenuSysSetup);
  1614. if(MKEY_VALUE_MENU==key){
  1615. switch(sutMenuSysSetup.handle){
  1616. // case 0://服务器设置
  1617. // uISetNextStatus(UIS_MENU_SYS_SERVERPASS);
  1618. // break;
  1619. // case 1://版本升级
  1620. // uISetNextStatus(UIS_MENU_SYS_VERSION);
  1621. // break;
  1622. case 0://CSQ查看
  1623. uISetNextStatus(UIS_MENU_SYS_CSQ);
  1624. break;
  1625. case 1://设置mic增益
  1626. uISetNextStatus(UIS_MENU_SYS_MIC);
  1627. break;
  1628. //case 4://耳机SPK增益
  1629. // uISetNextStatus(UIS_MENU_SYS_SPK);
  1630. // break;
  1631. /*
  1632. case 2://字库更新
  1633. uISetNextStatus(UIS_MENU_SYS_FONT);
  1634. break;
  1635. */
  1636. }
  1637. if(sutMenuSysSetup.handle<=2) uiPushStack(sutMenuSysSetup.handle);
  1638. }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
  1639. }
  1640. /*****************************工程设置结束***********************************/
  1641. /*****************************提示音设置开始********************************/
  1642. unsigned char noteSetTmp;
  1643. static void switchFlash(void){
  1644. char info[30];
  1645. unsigned short x,y,len;
  1646. if(noteSetTmp==0) snprintf(info, sizeof(info), "关闭");
  1647. else snprintf(info, sizeof(info), "打开");
  1648. len=guiGetStrXLen((char *)info, FONT_MODE_16X16);
  1649. x=(GLCD_WIDTH-len)/2;
  1650. y=UI_CONTENT_SHOW_Y+(GLCD_HEIGHT-UI_CONTENT_SHOW_Y)/2-12;
  1651. guiShowStr(x,y,info, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1652. }
  1653. void uiShowNoteSel(char StatusUpdate){
  1654. if(StatusUpdate){
  1655. guiClearAll(guiGetBackColor());
  1656. guiShowCaption(0,"提示音设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1657. uiMenuShowBottomLine();
  1658. noteSetTmp=newPara.KeySound;
  1659. switchFlash();
  1660. uiMenuShowBottomIndacitor("保存", "返回");
  1661. }
  1662. }
  1663. void uiShowNoteSelResponse(void){
  1664. unsigned short key=getKeyValue();
  1665. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
  1666. else if(MKEY_VALUE_MENU==key){
  1667. getStackStruct()->ok_back=1;
  1668. if(newPara.KeySound != noteSetTmp){
  1669. newPara.KeySound=noteSetTmp;
  1670. #ifndef ENABLE_PWM_BEEP
  1671. if(noteSetTmp==0) msgAtSend("AT+TONES=0\r\n");
  1672. else msgAtSend("AT+TONES=1\r\n");
  1673. #endif
  1674. sysIniSave("noteSel");
  1675. }
  1676. uISetNextStatus(UIS_MENU_SYS_SEL);
  1677. }else if(MKEY_VALUE_DOWN || MKEY_VALUE_UP){
  1678. if(noteSetTmp==0) noteSetTmp=1;
  1679. else noteSetTmp=0;
  1680. switchFlash();
  1681. }
  1682. }
  1683. /*****************************提示音设置结束********************************/
  1684. /*****************************关机界面提示开始**********************************/
  1685. void uiShowShutDown(char update){
  1686. if(update){
  1687. lcdBackLightApi(1);
  1688. guiClearAll(guiGetBackColor());
  1689. guiShowCaption(0,"关机",UI_STATUS_BAR_HEIGH,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1690. guiShowMessageBox("确定关机?");
  1691. uiMenuShowBottomLine();
  1692. uiMenuShowBottomIndacitor("确定", "取消");
  1693. }
  1694. }
  1695. void uiShowShutDownResponse(void){
  1696. unsigned short key=getKeyValue();
  1697. if(MKEY_VALUE_ESC==key){
  1698. if(sutApp.waitEscReleased==0) uISetNextStatus(UIS_STANDBY);
  1699. }else if(MKEY_VALUE_MENU==key){
  1700. MSG_INFO(1, "Power is off!");
  1701. appSleepCtl(ASLEEP_PWR, 1);
  1702. }
  1703. }
  1704. /*****************************关机界面提示结束**********************************/
  1705. /*****************************CSQ查看开始********************************/
  1706. void CSQShow(unsigned int exeInterval,char StatusUpdate){
  1707. char info[30];
  1708. static int g_iCSQ=-1,cnt=1000;
  1709. int y=UI_CONTENT_SHOW_Y+(GLCD_HEIGHT-UI_CONTENT_SHOW_Y)/2-12;
  1710. if(g_iCSQ!=sutApp.g_iCSQ || StatusUpdate){
  1711. g_iCSQ=sutApp.g_iCSQ;
  1712. snprintf(info, sizeof(info), "CSQ:%d ", g_iCSQ);
  1713. guiShowStr(GLCD_HEIGHT/2-24,y,info, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1714. }
  1715. if(++cnt<(1500/exeInterval)) return;
  1716. cnt=0;
  1717. msgAtSend("AT+CSQ\r\n");
  1718. }
  1719. void uiShowCsqSel(char StatusUpdate,unsigned int exeInterval){
  1720. if(StatusUpdate){
  1721. guiClearAll(guiGetBackColor());
  1722. guiShowCaption(0,"CSQ查看",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1723. uiMenuShowBottomLine();
  1724. uiMenuShowBottomIndacitor(NULL, "返回");
  1725. }
  1726. CSQShow(exeInterval,StatusUpdate);
  1727. }
  1728. void uiShowCsqSelResponse(void){
  1729. unsigned short key=getKeyValue();
  1730. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1731. }
  1732. /*****************************CSQ查看结束********************************/
  1733. /*******************************MIC/SPK查看************************************/
  1734. unsigned char micSpkTmp;
  1735. void MicSpkShow(void){
  1736. char info[30];
  1737. unsigned short x,y,len;
  1738. snprintf(info, sizeof(info), "%d ",micSpkTmp+1);
  1739. len=guiGetStrXLen((char *)info, FONT_MODE_16X16);
  1740. x=(GLCD_WIDTH-len)/2;
  1741. y=UI_CONTENT_SHOW_Y+(GLCD_HEIGHT-UI_CONTENT_SHOW_Y)/2-12;
  1742. guiShowStr(x,y,info, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  1743. }
  1744. void uiShowMicSel(char StatusUpdate){
  1745. if(StatusUpdate){
  1746. guiClearAll(guiGetBackColor());
  1747. guiShowCaption(0,"耳机MIC增益",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1748. uiMenuShowBottomLine();
  1749. uiMenuShowBottomIndacitor("确定", "返回");
  1750. micSpkTmp=newPara.micGain;
  1751. MicSpkShow();
  1752. }
  1753. }
  1754. void uiShowMicSelResponse(void){
  1755. unsigned short key=getKeyValue();
  1756. if(MKEY_VALUE_DOWN==key){
  1757. if(micSpkTmp==0) micSpkTmp=MIC_GAIN_NUM-1;
  1758. else micSpkTmp--;
  1759. MicSpkShow();
  1760. }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1761. else if(MKEY_VALUE_MENU==key){
  1762. if(micSpkTmp!= newPara.micGain){
  1763. newPara.micGain=micSpkTmp;
  1764. sysIniSave("micSel");
  1765. if(sutApp.earLev!=0) VolMicUpdate();
  1766. }
  1767. getStackStruct()->ok_back=1;
  1768. uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1769. }
  1770. }
  1771. void uiShowSpkSel(char StatusUpdate){
  1772. if(StatusUpdate){
  1773. guiClearAll(guiGetBackColor());
  1774. guiShowCaption(0,"耳机SPK增益",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1775. uiMenuShowBottomLine();
  1776. uiMenuShowBottomIndacitor("确定", "返回");
  1777. micSpkTmp=newPara.spkGain;
  1778. MicSpkShow();
  1779. }
  1780. }
  1781. void uiShowSpkSelResponse(void){
  1782. unsigned short key=getKeyValue();
  1783. if(MKEY_VALUE_DOWN==key){
  1784. if(micSpkTmp==0) micSpkTmp=SPK_GAIN_NUM-1;
  1785. else micSpkTmp--;
  1786. MicSpkShow();
  1787. }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1788. else if(MKEY_VALUE_MENU==key){
  1789. if(micSpkTmp!= newPara.spkGain){
  1790. newPara.spkGain=micSpkTmp;
  1791. sysIniSave("spkSel");
  1792. if(sutApp.earLev!=0) VolSpkUpdate();
  1793. }
  1794. getStackStruct()->ok_back=1;
  1795. uISetNextStatus(UIS_MENU_SYS_FACTORY);
  1796. }
  1797. }
  1798. /******************************MIC/SPK查看结束*********************************/
  1799. /******************************fota更新生辟字库**********************************/
  1800. #include "lsapi_http.h"
  1801. #define FONT_16_FILE HZK_16_NEW_FILE
  1802. #define FONT_16_MD5 "HZK16_Ext_md5.txt"
  1803. #define FONT_12_FILE HZK_12_NEW_FILE
  1804. #define FONT_12_MD5 "HZK12_Ext_md5.txt"
  1805. LSAPI_OSI_Thread_t *fontThread=NULL;
  1806. short fontLoadStatus;
  1807. bool fontResult;
  1808. HttpInfoSet httpFont;
  1809. //return:false, not finished, true, done
  1810. //status:1:busy
  1811. //status:-1:get 16 file failed
  1812. //status:-2:16 file len err
  1813. //status:-3:16 file format err
  1814. //status:-4:16 ok, get 12 file failed
  1815. //status:-5:16 ok, get 12 file len err
  1816. //status:-6:16 ok, get 12 file fotmat err
  1817. //status:0 16,12 ok
  1818. bool httpFontGetStatus(short *status){//获取更新结果接口
  1819. if(fontResult==true) *status=fontLoadStatus;
  1820. return fontResult;
  1821. }
  1822. static void fontEntry(void *param);
  1823. bool httpFontGetStart(void){//开启更新接口
  1824. fontResult=false;
  1825. if(NULL != fontThread) return true;
  1826. fontLoadStatus=-1;
  1827. fontThread=LSAPI_OSI_ThreadCreate("lteEntry", fontEntry,NULL,LSAPI_OSI_PRIORITY_NORMAL,1024*10,4);
  1828. if(NULL==fontThread) return false;
  1829. }
  1830. void fontSaveData(unsigned char *data, unsigned int len){
  1831. int fd;
  1832. char filename[30];
  1833. if(data[0]==12){
  1834. extFontFileCtl(data[0],false);
  1835. snprintf(filename,sizeof(filename), "%s",FONT_12_FILE);
  1836. }else if(data[0]==16){
  1837. extFontFileCtl(data[0],false);
  1838. snprintf(filename,sizeof(filename), "%s",FONT_16_FILE);
  1839. }
  1840. else return;
  1841. fd=LSAPI_FS_Open(filename, LSAPI_FS_O_RDWR | LSAPI_FS_O_CREAT | LSAPI_FS_O_TRUNC,0x0);
  1842. if(fd<0){
  1843. extFontFileCtl(data[0],true);
  1844. return;
  1845. }
  1846. LSAPI_FS_Write(fd, data, len);
  1847. LSAPI_FS_Close(fd);
  1848. extFontFileCtl(data[0],true);
  1849. }
  1850. bool checkFileMd5(char type, unsigned char *md5, unsigned int len){
  1851. int fd;
  1852. char filename[30];
  1853. unsigned char rmd5[32];
  1854. if(type==0)snprintf(filename,sizeof(filename), "%s",FONT_16_MD5);
  1855. else if(type==1)snprintf(filename,sizeof(filename), "%s",FONT_12_MD5);
  1856. else return false;
  1857. fd=LSAPI_FS_Open(filename, LSAPI_FS_O_RDONLY,0);
  1858. if(fd<0){
  1859. MSG_WARN(1, "'%s' open failed to read", filename);
  1860. return false;
  1861. }
  1862. LSAPI_FS_Read(fd, rmd5, sizeof(rmd5));
  1863. LSAPI_FS_Close(fd);
  1864. if(0==memcmp(rmd5, md5, len)) return true;
  1865. else return false;
  1866. }
  1867. void fontSaveMd5(char type, unsigned char *md5, unsigned int len){
  1868. int fd;
  1869. char filename[30];
  1870. if(type==0)snprintf(filename,sizeof(filename), "%s",FONT_16_MD5);
  1871. else if(type==1)snprintf(filename,sizeof(filename), "%s",FONT_12_MD5);
  1872. else return;
  1873. fd=LSAPI_FS_Open(filename, LSAPI_FS_O_RDWR | LSAPI_FS_O_CREAT | LSAPI_FS_O_TRUNC,0);
  1874. if(fd<0){
  1875. MSG_WARN(1, "'%s' open failed to save", filename);
  1876. return;
  1877. }
  1878. LSAPI_FS_Write(fd, md5, len);
  1879. LSAPI_FS_Close(fd);
  1880. }
  1881. static void fontEntry(void *param){
  1882. bool font12_noneed_update=true;
  1883. bool font16_noneed_update=true;
  1884. char type=0;
  1885. unsigned int md5_len;
  1886. unsigned char rmd5[32];
  1887. bool needClear=true;
  1888. //get 16 md5
  1889. MSG_INFO(1,"try get 16 md5");
  1890. memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1;
  1891. snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_16_MD5);
  1892. if(LSAPI_HTTP_GET(&httpFont)){
  1893. fontLoadStatus=-2;
  1894. goto FONT_END;
  1895. }
  1896. //ana 16 md5
  1897. if(httpFont.recvlen!=32){
  1898. fontLoadStatus=-3;
  1899. goto FONT_END;
  1900. }
  1901. md5_len=httpFont.recvlen;
  1902. memcpy(rmd5, httpFont.RecvData, md5_len);
  1903. LSAPI_HTTP_ParaClear(&httpFont);
  1904. font16_noneed_update=checkFileMd5(type, rmd5, md5_len);
  1905. if(false==font16_noneed_update){
  1906. MSG_INFO(1,"try get 16 file");
  1907. //get 16 first
  1908. memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1;
  1909. snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_16_FILE);
  1910. if(LSAPI_HTTP_GET(&httpFont)){//尝试获取差分包
  1911. fontLoadStatus=-4;
  1912. goto FONT_END;
  1913. }
  1914. if(httpFont.recvlen<35){//1+[2+32]....
  1915. fontLoadStatus=-5;
  1916. goto FONT_END;
  1917. }else if(httpFont.RecvData[0]!=16 || (httpFont.recvlen-1)%34){
  1918. fontLoadStatus=-6;
  1919. goto FONT_END;
  1920. }
  1921. fontSaveData(httpFont.RecvData, httpFont.recvlen);
  1922. fontSaveMd5(type, rmd5, md5_len);
  1923. LSAPI_HTTP_ParaClear(&httpFont);
  1924. }
  1925. type=1;
  1926. //get 12 md5
  1927. MSG_INFO(1,"try get 12 md5");
  1928. memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1;
  1929. snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_12_MD5);
  1930. if(LSAPI_HTTP_GET(&httpFont)){
  1931. fontLoadStatus=-7;
  1932. goto FONT_END;
  1933. }
  1934. //ana 12 md5
  1935. if(httpFont.recvlen!=32){
  1936. fontLoadStatus=-8;
  1937. goto FONT_END;
  1938. }
  1939. md5_len=httpFont.recvlen;
  1940. memcpy(rmd5, httpFont.RecvData, md5_len);
  1941. LSAPI_HTTP_ParaClear(&httpFont);
  1942. font12_noneed_update=checkFileMd5(type, rmd5, md5_len);
  1943. if(false==font12_noneed_update){
  1944. MSG_INFO(1,"try get 12 file");
  1945. //get 12 then
  1946. memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1;
  1947. snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_12_FILE);
  1948. if(LSAPI_HTTP_GET(&httpFont)){//尝试获取差分包
  1949. fontLoadStatus=-9;
  1950. goto FONT_END;
  1951. }
  1952. if(httpFont.recvlen<27){//1+[2+24]....
  1953. fontLoadStatus=-10;
  1954. goto FONT_END;
  1955. }else if(httpFont.RecvData[0]!=12 || (httpFont.recvlen-1)%26){
  1956. fontLoadStatus=-11;
  1957. goto FONT_END;
  1958. }
  1959. fontSaveData(httpFont.RecvData, httpFont.recvlen);
  1960. fontSaveMd5(type, rmd5, md5_len);
  1961. LSAPI_HTTP_ParaClear(&httpFont);
  1962. needClear=false;
  1963. }else needClear=false;
  1964. if(font12_noneed_update==true && font16_noneed_update==true) fontLoadStatus=0;
  1965. else fontLoadStatus=1;
  1966. FONT_END:
  1967. fontThread=NULL;
  1968. fontResult=true;
  1969. if(needClear==true) LSAPI_HTTP_ParaClear(&httpFont);
  1970. LSAPI_OSI_ThreadExit();
  1971. }
  1972. //6、UI接口界面(供参考)
  1973. char fontUpdateStatus=0;
  1974. void uiShowFontUpdate(char StatusUpdate){
  1975. static unsigned int timer;
  1976. char info[30];
  1977. short status;
  1978. if(StatusUpdate){
  1979. guiClearAll(guiGetBackColor());
  1980. guiShowCaption(0,"字库更新",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  1981. fontUpdateStatus=0;
  1982. guiShowMessageBox("确定更新?");
  1983. uiMenuShowBottomLine();
  1984. uiMenuShowBottomIndacitor("确定", "返回");
  1985. }
  1986. if(fontUpdateStatus==1){
  1987. if(true==httpFontGetStatus(&status)){
  1988. if(status==1){
  1989. guiShowMessageBox("更新成功");
  1990. uTimerStart(&timer, 2000);
  1991. }else if(status==0){
  1992. guiShowMessageBox("无需更新");
  1993. uTimerStart(&timer, 2000);
  1994. }else{
  1995. snprintf(info,sizeof(info), "更新失败:%d",status);
  1996. guiShowMessageBox(info);
  1997. uTimerStart(&timer, 2000);
  1998. }
  1999. fontUpdateStatus=2;
  2000. }
  2001. }else if(fontUpdateStatus==2){
  2002. if(uTimerExpired(&timer)){
  2003. getStackStruct()->ok_back=1;
  2004. uISetNextStatus(UIS_MENU_SYS_FACTORY);
  2005. }
  2006. }
  2007. }
  2008. void uiShowFontUpdateResponse(){
  2009. unsigned short key=getKeyValue();
  2010. if(fontUpdateStatus!=0) return;
  2011. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY);
  2012. else if(MKEY_VALUE_MENU==key){
  2013. httpFontGetStart();
  2014. fontUpdateStatus=1;
  2015. guiShowMessageBox("正在更新");
  2016. }
  2017. }
  2018. /******************************fota更新生辟字库结束***********************************/
  2019. #ifdef USE_LEFT_MOVING
  2020. /***************************主界面滚动显示**********************************/
  2021. #define MOVING_ITME_NUM 3 //显示三条项目
  2022. #define MAX_ROW_BYTE (20+1+2) //最多显示20个字节,10个中文
  2023. #define MAX_SHOW_BYTE 12 //最多一次性显示10个字节
  2024. void leftMoveStr(char *name, unsigned short len){
  2025. char temp[3];
  2026. unsigned char move=1;
  2027. unsigned short i;
  2028. if(name[0] > 0x80) move=2;
  2029. for(i=0;i<move;i++) temp[i]=name[i];
  2030. for(i=0;i<len-move;i++) name[i]=name[i+move];
  2031. for(i=0;i<move;i++) name[i+len-move]=temp[i];
  2032. }
  2033. void getRealShow(char *des, char *src,int maxsize)
  2034. {//??è?×??à12+1??×??ú??ê?
  2035. int i,j,cpsize=maxsize-1;
  2036. for(i=0;i<cpsize;i++){
  2037. if(src[i]>0x80){
  2038. if(i+2>cpsize){//装不下了,停止
  2039. break;
  2040. }
  2041. des[i]=src[i];
  2042. des[i+1]=src[i+1];
  2043. i++;
  2044. }else des[i]=src[i];
  2045. }
  2046. des[i]=0;
  2047. }
  2048. void showbufdata(char type, unsigned char *data, int len){
  2049. char info[100],buf[3];
  2050. int i;
  2051. sprintf(info, "D[%d]%c:",len,type);
  2052. for(i=0;i<len;i++){
  2053. sprintf(buf, "%02x",data[i]);
  2054. strcat(info, buf);
  2055. }
  2056. MSG_INFO(1, info);
  2057. }
  2058. //除去标识(群组:/成员:/话权:)外的字节数,多的1字节用于加空格
  2059. void mainScreenShowMoving(unsigned short y, unsigned char reset,char *gname,char *uname,char *voicePri){
  2060. unsigned char i;
  2061. int j,len;
  2062. unsigned short showX,showY;
  2063. //显示缓存,最多显示7个中文
  2064. const char indicators[MOVING_ITME_NUM][6]={
  2065. "群组:","成员:","话权:",
  2066. };
  2067. static char item[MOVING_ITME_NUM][MAX_ROW_BYTE];
  2068. static unsigned short itemSum[MOVING_ITME_NUM];
  2069. unsigned short *sum,tsum;
  2070. char *ptr,*showPtr;
  2071. char showMax[MAX_ROW_BYTE];//用于临时存储条目全内容,判定是否发生变化
  2072. char needMove;
  2073. for(i=0;i<MOVING_ITME_NUM;i++){
  2074. showX=1;
  2075. showY=y+i*(12+8);//12x12高度,行间距2
  2076. sum=&itemSum[i];
  2077. showPtr=&item[i][0];
  2078. switch(i){
  2079. case 0://群组:默认群组
  2080. snprintf(showMax, sizeof(showMax), "%s ",gname);
  2081. break;
  2082. case 1://成员:测试组1
  2083. snprintf(showMax, sizeof(showMax), "%s ",uname);
  2084. break;
  2085. case 2://话权:空闲
  2086. snprintf(showMax, sizeof(showMax), "%s ",voicePri);
  2087. break;
  2088. }
  2089. ptr=showMax;
  2090. len=strlen(ptr);
  2091. //计算buff的sum
  2092. tsum=0;
  2093. for(j=0;j<len;j++) tsum += ptr[j];
  2094. //检测是否需要移动处理
  2095. if(len>MAX_SHOW_BYTE) needMove=1;
  2096. else needMove=0;
  2097. if(*sum != tsum || reset){
  2098. guiClearRect(0, showY, GLCD_WIDTH-1, showY+16,guiGetBackColor());
  2099. guiShowStr(showX, showY+2, &indicators[i][0], FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  2100. }
  2101. showX += 30;
  2102. if(needMove==0){
  2103. if(*sum != tsum || reset){//内容发生了变化
  2104. //只显示一次即可
  2105. snprintf(showPtr, MAX_ROW_BYTE, "%s", ptr);
  2106. guiClearRect(showX, showY, GLCD_WIDTH-1, showY+16,guiGetBackColor());
  2107. guiShowStr(showX, showY, showPtr, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  2108. }
  2109. }else{//做移动处理
  2110. if(*sum != tsum) memcpy(showPtr, ptr, MAX_ROW_BYTE);
  2111. else leftMoveStr(showPtr, strlen(showPtr));
  2112. getRealShow(showMax, showPtr,MAX_SHOW_BYTE);
  2113. guiClearRect(showX, showY, GLCD_WIDTH-1, showY+16,guiGetBackColor());
  2114. guiShowStr(showX,showY, showMax, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  2115. }
  2116. *sum=tsum;
  2117. }
  2118. }
  2119. #endif
  2120. /*****************************提示音设置开始********************************/
  2121. #define LOCK_MODE_NUM 2
  2122. void uiShowLockUpdate(char StatusUpdate){
  2123. static const char *lockMode[LOCK_MODE_NUM+1]={
  2124. "锁按键",
  2125. "锁按键+PTT",
  2126. ""
  2127. };
  2128. char Features[LOCK_MODE_NUM];
  2129. unsigned char i;
  2130. if(StatusUpdate){
  2131. guiClearAll(guiGetBackColor());
  2132. guiShowCaption(0,"键锁设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2133. uiMenuShowBottomLine();
  2134. for(i=0;i<LOCK_MODE_NUM;i++){
  2135. if(i==newPara.lockType) Features[i]=1;
  2136. else Features[i]=0;
  2137. }
  2138. ListBoxInit(&sutListBox,lockMode,0,commonIcon2,Features,0);
  2139. uiMenuShowBottomIndacitor("保存", "返回");
  2140. }
  2141. }
  2142. void uiShowLockUpdateResponse(void){
  2143. unsigned short key=ListBoxResponse(&sutListBox);
  2144. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
  2145. else if(MKEY_VALUE_MENU==key){
  2146. getStackStruct()->ok_back=1;
  2147. if(newPara.lockType != sutListBox.handle){
  2148. newPara.lockType=sutListBox.handle;
  2149. sysIniSave("lock");
  2150. }
  2151. uISetNextStatus(UIS_MENU_SYS_SEL);
  2152. }
  2153. }
  2154. /*****************************提示音设置结束********************************/
  2155. /*****************************蓝牙主部分开始*********************************/
  2156. void uiShowBleMenuSysSetup(char flash){
  2157. static const char *apcPtr[]={
  2158. "1.蓝牙开关",
  2159. "2.蓝牙配对",
  2160. "3.指环配对",
  2161. "4.喇叭音量",
  2162. "5.话筒音量",
  2163. "6.蓝牙初始化",
  2164. "7.指环初始化",
  2165. ""
  2166. };
  2167. if(flash){
  2168. guiClearAll(guiGetBackColor());
  2169. guiShowCaption(0,"蓝牙设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2170. uiMenuShowBottomLine();
  2171. uiMenuShowBottomIndacitor("确认", "返回");
  2172. uiMenuInit(&sutMenuSysSetup,apcPtr,FONT_MODE_16X16);
  2173. }
  2174. }
  2175. void sysBleSetResponse(void){
  2176. unsigned short key;
  2177. key=uiMenuResponse(&sutMenuSysSetup);
  2178. if(MKEY_VALUE_MENU==key){
  2179. switch(sutMenuSysSetup.handle){
  2180. case 0:
  2181. uISetNextStatus(UIS_MENU_BLE_ENABLE);
  2182. break;
  2183. case 1:
  2184. uISetNextStatus(UIS_MENU_BLE_MATCH);
  2185. break;
  2186. case 2:
  2187. uISetNextStatus(UIS_MENU_RING_MATCH);
  2188. break;
  2189. case 3:
  2190. uISetNextStatus(UIS_MENU_BLESPK_SEL);
  2191. break;
  2192. case 4:
  2193. uISetNextStatus(UIS_MENU_BLEMIC_SEL);
  2194. break;
  2195. case 5:
  2196. uISetNextStatus(UIS_MENU_BLE_REBOOT);
  2197. break;
  2198. case 6:
  2199. uISetNextStatus(UIS_MENU_RING_REBOOT);
  2200. break;
  2201. }
  2202. if(sutMenuSysSetup.handle<=6) uiPushStack(sutMenuSysSetup.handle);
  2203. }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_MAIN);
  2204. }
  2205. /*****************************蓝牙主部分结束*********************************/
  2206. static const char *BoolMode[NORMAL_BOOL_NUM+1]={
  2207. "开启",
  2208. "关闭",
  2209. ""
  2210. };
  2211. /*****************************蓝牙开关开始********************************/
  2212. void uiShowBleEnableUpdate(char StatusUpdate){
  2213. char Features[NORMAL_BOOL_NUM];
  2214. unsigned char i;
  2215. if(StatusUpdate){
  2216. guiClearAll(guiGetBackColor());
  2217. guiShowCaption(0,"蓝牙开关",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2218. uiMenuShowBottomLine();
  2219. for(i=0;i<NORMAL_BOOL_NUM;i++){
  2220. if(i==newPara.BleEnable) Features[i]=1;
  2221. else Features[i]=0;
  2222. }
  2223. ListBoxInit(&sutListBox,BoolMode,0,commonIcon2,Features,0);
  2224. uiMenuShowBottomIndacitor("保存", "返回");
  2225. }
  2226. }
  2227. void uiShowBleEnableUpdateResponse(void){
  2228. unsigned short key=ListBoxResponse(&sutListBox);
  2229. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN);
  2230. else if(MKEY_VALUE_MENU==key){
  2231. getStackStruct()->ok_back=1;
  2232. if(newPara.BleEnable != sutListBox.handle){
  2233. newPara.BleEnable=sutListBox.handle;
  2234. if(newPara.BleEnable)BLE_Open();
  2235. else BLE_Close();
  2236. sysIniSave("bleenable");
  2237. }
  2238. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2239. }
  2240. }
  2241. /*****************************蓝牙开关结束********************************/
  2242. static int UiDlycnt=0;
  2243. /*****************************蓝牙耳机配对开始********************************/
  2244. void uiShowBleMacth(char StatusUpdate){
  2245. char info[20];
  2246. short y=GLCD_HEIGHT/2;
  2247. if(StatusUpdate){
  2248. guiClearAll(guiGetBackColor());
  2249. guiShowCaption(0,"蓝牙配对",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2250. uiMenuShowBottomLine();
  2251. uiMenuShowBottomIndacitor("进入配对", "返回");
  2252. UserTempIndex=0;
  2253. UiDlycnt=0;
  2254. }
  2255. if(UserTempIndex){
  2256. if(UiDlycnt%(1000/APP_SUB_DIV_TIME)==0){
  2257. Ble_SendAT(Ble_IO2AT,sizeof(Ble_IO2AT));
  2258. snprintf(info, sizeof(info),"正在匹配%02d",UiDlycnt/(1000/APP_SUB_DIV_TIME));
  2259. guiShowStr(50, y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
  2260. }
  2261. if(++UiDlycnt>20000/APP_SUB_DIV_TIME){
  2262. UiDlycnt=0;
  2263. BT_Match_IOctr(0);
  2264. UserTempIndex=0;
  2265. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2266. }
  2267. }
  2268. }
  2269. void uiShowBleMacthUpdateResponse(void){
  2270. unsigned short key=getKeyValue();
  2271. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN);
  2272. else if(MKEY_VALUE_MENU==key){
  2273. getStackStruct()->ok_back=1;
  2274. UserTempIndex=1;
  2275. BT_Match_IOctr(1);
  2276. }
  2277. }
  2278. /*****************************蓝牙配对耳机结束********************************/
  2279. /*****************************指环配对开始********************************/
  2280. //UserTempIndex
  2281. void StartTimerCnt(){
  2282. }
  2283. void uiShowRingUpdate(char StatusUpdate){
  2284. short y=GLCD_HEIGHT/2;
  2285. char info[20];
  2286. if(StatusUpdate){
  2287. guiClearAll(guiGetBackColor());
  2288. guiShowCaption(0,"指环配对",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2289. uiMenuShowBottomLine();
  2290. uiMenuShowBottomIndacitor("进入配对", "返回");
  2291. UserTempIndex=0;
  2292. UiDlycnt=0;
  2293. }
  2294. if(UserTempIndex){
  2295. if(UiDlycnt%(1000/APP_SUB_DIV_TIME)==0){
  2296. snprintf(info, sizeof(info),"正在匹配%02d",UiDlycnt/(1000/APP_SUB_DIV_TIME));
  2297. guiShowStr(50, y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
  2298. }
  2299. if(++UiDlycnt>10000/APP_SUB_DIV_TIME){
  2300. UiDlycnt=0;
  2301. Ble_Match_IOCTR(0);
  2302. UserTempIndex=0;
  2303. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2304. }
  2305. }
  2306. }
  2307. void uiShowRingUpdateResponse(void){
  2308. //static int timer=0;
  2309. unsigned short key=getKeyValue();
  2310. if(MKEY_VALUE_ESC==key) {
  2311. UserTempIndex=0;
  2312. Ble_Match_IOCTR(0);
  2313. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2314. }
  2315. else if(MKEY_VALUE_MENU==key){
  2316. getStackStruct()->ok_back=1;
  2317. UserTempIndex=1;
  2318. Ble_Match_IOCTR(1);
  2319. }
  2320. }
  2321. /*****************************指环配对结束********************************/
  2322. #define BLEAUD_NUM 16
  2323. static BleAudioLvFlash(char dir,char type){
  2324. char buf[50];
  2325. unsigned short y=70;
  2326. if(dir==0){
  2327. UserTempIndex=newPara.BleSpkLv;
  2328. }else if(dir==1){
  2329. if(++UserTempIndex>BLEAUD_NUM) UserTempIndex=0;
  2330. }else if(dir==2){
  2331. if(UserTempIndex>0) UserTempIndex--;
  2332. else UserTempIndex=BLEAUD_NUM;
  2333. }else return;
  2334. if(!type) snprintf(buf, sizeof(buf), "喇叭音量:%02d",UserTempIndex);
  2335. else snprintf(buf, sizeof(buf), "话筒音量:%02d",UserTempIndex);
  2336. guiClearRect(0,y,GLCD_WIDTH-1, y+24,guiGetBackColor());
  2337. guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  2338. }
  2339. /*****************************蓝牙耳机SPK 开始***********************************/
  2340. void uiShowBleSpkUpdate(char StatusUpdate){
  2341. if(StatusUpdate){
  2342. guiClearAll(guiGetBackColor());
  2343. guiShowCaption(0,"喇叭音量",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2344. BleAudioLvFlash(0,0);
  2345. uiMenuShowBottomLine();
  2346. uiMenuShowBottomIndacitor("确认", "返回");
  2347. }
  2348. }
  2349. void uiShowBleSpkUpdateResponse(void){
  2350. unsigned short key=getKeyValue();
  2351. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN);
  2352. else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,0);
  2353. else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,0);
  2354. else if(MKEY_VALUE_MENU==key){
  2355. newPara.BleSpkLv=UserTempIndex;
  2356. sysIniSave("lock");
  2357. getStackStruct()->ok_back=1;
  2358. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2359. }
  2360. }
  2361. /*****************************蓝牙耳机SPK 结束***********************************/
  2362. /*****************************蓝牙耳机MIC 开始***********************************/
  2363. void uiShowBleMicUpdate(char StatusUpdate){
  2364. if(StatusUpdate){
  2365. guiClearAll(guiGetBackColor());
  2366. guiShowCaption(0,"话筒音量",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2367. BleAudioLvFlash(0,1);
  2368. uiMenuShowBottomLine();
  2369. uiMenuShowBottomIndacitor("确认", "返回");
  2370. }
  2371. }
  2372. void uiShowBleMicUpdateResponse(void){
  2373. unsigned short key=getKeyValue();
  2374. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN);
  2375. else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,1);
  2376. else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,1);
  2377. else if(MKEY_VALUE_MENU==key){
  2378. newPara.BleMicLv=UserTempIndex;
  2379. sysIniSave("lock");
  2380. getStackStruct()->ok_back=1;
  2381. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2382. }
  2383. }
  2384. /*****************************蓝牙耳机MIC 结束***********************************/
  2385. /*****************************蓝牙初始化开始***********************************/
  2386. void uiShowBleInitUpdate(char StatusUpdate){
  2387. if(StatusUpdate){
  2388. guiClearAll(guiGetBackColor());
  2389. guiShowCaption(0,"蓝牙初始化",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2390. BleAudioLvFlash(0,1);
  2391. uiMenuShowBottomLine();
  2392. uiMenuShowBottomIndacitor("确认", "返回");
  2393. }
  2394. }
  2395. void uiShowBleInitUpdateResponse(void){
  2396. unsigned short key=getKeyValue();
  2397. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN);
  2398. else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,1);
  2399. else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,1);
  2400. else if(MKEY_VALUE_MENU==key){
  2401. getStackStruct()->ok_back=1;
  2402. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2403. }
  2404. }
  2405. /*****************************蓝牙初始化 结束***********************************/
  2406. /*****************************指环初始化 开始***********************************/
  2407. void uiShowRingInitUpdate(char StatusUpdate){
  2408. if(StatusUpdate){
  2409. guiClearAll(guiGetBackColor());
  2410. guiShowCaption(0,"指环初始化",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2411. BleAudioLvFlash(0,1);
  2412. uiMenuShowBottomLine();
  2413. uiMenuShowBottomIndacitor("确认", "返回");
  2414. }
  2415. }
  2416. void uiShowRingInitUpdateResponse(void){
  2417. unsigned short key=getKeyValue();
  2418. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN);
  2419. else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,1);
  2420. else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,1);
  2421. else if(MKEY_VALUE_MENU==key){
  2422. getStackStruct()->ok_back=1;
  2423. uISetNextStatus(UIS_MENU_BLE_MAIN);
  2424. }
  2425. }
  2426. /*****************************指环初始化 结束***********************************/
  2427. /*
  2428. UIS_MENU_XINBIAO_MAIN,
  2429. UIS_MENU_GPS_ENABLE,
  2430. UIS_MENU_GPS_STATION,//GPS 站点
  2431. UIS_MENU_XINBIAO_INFO,
  2432. UIS_MENU_XINBIAO_LIVE,
  2433. UIS_MENU_XINBIAO_SENDMODE,
  2434. UIS_MENU_XINBIAO_TIME,
  2435. UIS_MENU_XINBIAO_IP,
  2436. UIS_MENU_XINBIAO_LISTCLEAR,
  2437. */
  2438. /*****************************信标主部分开始*********************************/
  2439. void uiShowXINBIAOMenuSysSetup(char flash){
  2440. static const char *apcPtr[]={
  2441. "1.gps开关",
  2442. "2.站点设置",
  2443. "3.信标详情",
  2444. "4.实时信标",
  2445. "5.信标发送模式",
  2446. "6.定时时间",
  2447. "7.上传网关",
  2448. "8.清除列表",
  2449. ""
  2450. };
  2451. if(flash){
  2452. guiClearAll(guiGetBackColor());
  2453. guiShowCaption(0,"信标设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2454. uiMenuShowBottomLine();
  2455. uiMenuShowBottomIndacitor("确认", "返回");
  2456. uiMenuInit(&sutMenuSysSetup,apcPtr,FONT_MODE_16X16);
  2457. }
  2458. }
  2459. void sysXINBIAOSetResponse(void){
  2460. unsigned short key;
  2461. key=uiMenuResponse(&sutMenuSysSetup);
  2462. if(MKEY_VALUE_MENU==key){
  2463. switch(sutMenuSysSetup.handle){
  2464. case 0:
  2465. uISetNextStatus(UIS_MENU_GPS_ENABLE);
  2466. break;
  2467. case 1:
  2468. uISetNextStatus(UIS_MENU_GPS_STATION);
  2469. break;
  2470. case 2:
  2471. uISetNextStatus(UIS_MENU_XINBIAO_INFO);
  2472. break;
  2473. case 3:
  2474. uISetNextStatus(UIS_MENU_XINBIAO_LIVE);
  2475. break;
  2476. case 4:
  2477. uISetNextStatus(UIS_MENU_XINBIAO_SENDMODE);
  2478. break;
  2479. case 5:
  2480. uISetNextStatus(UIS_MENU_XINBIAO_TIME);
  2481. break;
  2482. case 6:
  2483. uISetNextStatus(UIS_MENU_XINBIAO_IP);
  2484. break;
  2485. case 7:
  2486. uISetNextStatus(UIS_MENU_XINBIAO_LISTCLEAR);
  2487. break;
  2488. }
  2489. if(sutMenuSysSetup.handle<=7) uiPushStack(sutMenuSysSetup.handle);
  2490. }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_MAIN);
  2491. }
  2492. /*****************************信标主部分结束*********************************/
  2493. /*****************************站点开关开始********************************/
  2494. void uiShowXINBIAOStationUpdate(char StatusUpdate){
  2495. char Features[NORMAL_BOOL_NUM];
  2496. unsigned char i;
  2497. if(StatusUpdate){
  2498. guiClearAll(guiGetBackColor());
  2499. guiShowCaption(0,"站点设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2500. uiMenuShowBottomLine();
  2501. for(i=0;i<NORMAL_BOOL_NUM;i++){
  2502. if(i==newPara.Xinbiao_station) Features[i]=1;
  2503. else Features[i]=0;
  2504. }
  2505. ListBoxInit(&sutListBox,BoolMode,0,commonIcon2,Features,0);
  2506. uiMenuShowBottomIndacitor("保存", "返回");
  2507. }
  2508. }
  2509. void uiShowXINBIAOStationUpdateResponse(void){
  2510. unsigned short key=ListBoxResponse(&sutListBox);
  2511. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2512. else if(MKEY_VALUE_MENU==key){
  2513. getStackStruct()->ok_back=1;
  2514. if(newPara.Xinbiao_station != sutListBox.handle){
  2515. newPara.Xinbiao_station=sutListBox.handle;
  2516. sysIniSave("bleenable");
  2517. }
  2518. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2519. }
  2520. }
  2521. /*****************************站点开关结束********************************/
  2522. /*****************************信标详情开始********************************/
  2523. void uiShowXINBIAOPageShow(char dir){
  2524. short y=0;
  2525. char Showbuf[22];
  2526. y=LIST_TOPY; //LIST_ITEM_HEGH
  2527. if(dir==0)UserTempIndex=0;
  2528. else if(dir==1){
  2529. if(++UserTempIndex>sut_xinbiao_info.Max_id)UserTempIndex=0;
  2530. }else if(dir==2){
  2531. if(--UserTempIndex==0)UserTempIndex=sut_xinbiao_info.Max_id-1;
  2532. }
  2533. snprintf(Showbuf,sizeof(Showbuf),"ID号:%03d",sut_xinbiaopage.xb_id);
  2534. guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor());
  2535. y+=LIST_ITEM_HEGH;
  2536. snprintf(Showbuf,sizeof(Showbuf),"名字:%s",sut_xinbiaopage.xb_CallName);
  2537. guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor());
  2538. y+=LIST_ITEM_HEGH;
  2539. //guiClearRect(0, y,GLCD_WIDTH-1, y+12+5+12,guiGetBackColor());
  2540. snprintf(Showbuf, sizeof(Showbuf), "纬度 S:%d.%05d",sut_xinbiaopage.xb_latitue/1000000,sut_xinbiaopage.xb_latitue%1000000);
  2541. guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  2542. y+=LIST_ITEM_HEGH;
  2543. snprintf(Showbuf, sizeof(Showbuf), "经度 W:%d.%05d",sut_xinbiaopage.xb_longitue/1000000,sut_xinbiaopage.xb_longitue%1000000);
  2544. guiShowStr(30,y, Showbuf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  2545. y+=LIST_ITEM_HEGH;
  2546. snprintf(Showbuf,sizeof(Showbuf),"航向:%s",sut_xinbiaopage.xb_heading);
  2547. guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor());
  2548. y+=LIST_ITEM_HEGH;
  2549. snprintf(Showbuf,sizeof(Showbuf),"方向:%s",sut_xinbiaopage.xb_dir);
  2550. guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor());
  2551. y+=LIST_ITEM_HEGH;
  2552. snprintf(Showbuf,sizeof(Showbuf),"海拔:%s",sut_xinbiaopage.xb_elevation);
  2553. guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor());
  2554. y+=LIST_ITEM_HEGH;
  2555. }
  2556. void uiShowXINBIAOInfoUpdate(char StatusUpdate){
  2557. char Features[NORMAL_BOOL_NUM];
  2558. unsigned char i;
  2559. if(StatusUpdate){
  2560. guiClearAll(guiGetBackColor());
  2561. guiShowCaption(0,"信标详情",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2562. uiMenuShowBottomLine();
  2563. UserTempIndex=0;
  2564. uiShowXINBIAOPageShow(0);
  2565. uiMenuShowBottomIndacitor("详情", "返回");
  2566. }
  2567. }
  2568. /*****************************信标详情结束********************************/
  2569. /*****************************实时信标开关开始********************************/
  2570. void uiShowXINBIAOEnableLive(char StatusUpdate){
  2571. char Features[NORMAL_BOOL_NUM];
  2572. unsigned char i;
  2573. if(StatusUpdate){
  2574. guiClearAll(guiGetBackColor());
  2575. guiShowCaption(0,"实时信标",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2576. uiMenuShowBottomLine();
  2577. for(i=0;i<NORMAL_BOOL_NUM;i++){
  2578. if(i==newPara.Xinbiao_LiveUpdate) Features[i]=1;
  2579. else Features[i]=0;
  2580. }
  2581. ListBoxInit(&sutListBox,BoolMode,0,commonIcon2,Features,0);
  2582. uiMenuShowBottomIndacitor("保存", "返回");
  2583. }
  2584. }
  2585. void uiShowXINBIAOEnableLiveResponse(void){
  2586. unsigned short key=ListBoxResponse(&sutListBox);
  2587. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2588. else if(MKEY_VALUE_MENU==key){
  2589. getStackStruct()->ok_back=1;
  2590. if(newPara.Xinbiao_LiveUpdate != sutListBox.handle){
  2591. newPara.Xinbiao_LiveUpdate=sutListBox.handle;
  2592. sysIniSave("bleenable");
  2593. }
  2594. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2595. }
  2596. }
  2597. /*****************************实时信标开关结束********************************/
  2598. /*****************************信标发送开始********************************/
  2599. void uiShowXINBIAOTriggerMode(char StatusUpdate){
  2600. char Features[3];
  2601. unsigned char i;
  2602. static const char *xinbiaoMode[3+1]={
  2603. "PTT联动",
  2604. "定时发送",
  2605. "PTT联动+定时",
  2606. ""
  2607. };
  2608. if(StatusUpdate){
  2609. guiClearAll(guiGetBackColor());
  2610. guiShowCaption(0,"信标发送",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2611. uiMenuShowBottomLine();
  2612. for(i=0;i<3;i++){
  2613. if(i==newPara.Xinbiao_SendMode) Features[i]=1;
  2614. else Features[i]=0;
  2615. }
  2616. ListBoxInit(&sutListBox,xinbiaoMode,0,commonIcon2,Features,0);
  2617. uiMenuShowBottomIndacitor("保存", "返回");
  2618. }
  2619. }
  2620. void uiShowXINBIAOTriggerModeResponse(void){
  2621. unsigned short key=ListBoxResponse(&sutListBox);
  2622. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2623. else if(MKEY_VALUE_MENU==key){
  2624. getStackStruct()->ok_back=1;
  2625. if(newPara.Xinbiao_SendMode != sutListBox.handle){
  2626. newPara.Xinbiao_SendMode=sutListBox.handle;
  2627. sysIniSave("bleenable");
  2628. }
  2629. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2630. }
  2631. }
  2632. /*****************************信标发送结束********************************/
  2633. /*****************************信标时间开始********************************/
  2634. static XinbiaoTimeFlash(char dir){
  2635. char buf[50];
  2636. unsigned short y=70;
  2637. if(dir==0){
  2638. UserTempIndex=newPara.Xinbiao_Time;
  2639. }else if(dir==1){
  2640. if(++UserTempIndex>10) UserTempIndex=0;
  2641. }else if(dir==2){
  2642. if(UserTempIndex>0) UserTempIndex--;
  2643. else UserTempIndex=10;
  2644. }else return;
  2645. snprintf(buf, sizeof(buf), "%02d 秒",(UserTempIndex+1)*5);
  2646. guiClearRect(0,y,GLCD_WIDTH-1, y+24,guiGetBackColor());
  2647. guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
  2648. }
  2649. void uiShowXinbiaoTimeUpdate(char StatusUpdate){
  2650. if(StatusUpdate){
  2651. guiClearAll(guiGetBackColor());
  2652. guiShowCaption(0,"定时时间",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2653. XinbiaoTimeFlash(0);
  2654. uiMenuShowBottomLine();
  2655. uiMenuShowBottomIndacitor("确认", "返回");
  2656. }
  2657. }
  2658. void uiShowXinbiaoTimeUpdateResponse(void){
  2659. unsigned short key=getKeyValue();
  2660. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2661. else if(MKEY_VALUE_UP==key)XinbiaoTimeFlash(1);
  2662. else if(MKEY_VALUE_DOWN==key)XinbiaoTimeFlash(2);
  2663. else if(MKEY_VALUE_MENU==key){
  2664. newPara.Xinbiao_Time=UserTempIndex;
  2665. sysIniSave("lock");
  2666. getStackStruct()->ok_back=1;
  2667. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2668. }
  2669. }
  2670. /*****************************信标时间结束********************************/
  2671. /*****************************上传网关开始********************************/
  2672. void uiShowXINBIAOGateway(char StatusUpdate){
  2673. char Features[NORMAL_BOOL_NUM];
  2674. unsigned char i;
  2675. if(StatusUpdate){
  2676. guiClearAll(guiGetBackColor());
  2677. guiShowCaption(0,"上传网关",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2678. uiMenuShowBottomLine();
  2679. for(i=0;i<NORMAL_BOOL_NUM;i++){
  2680. if(i==newPara.Xinbiao_IpEnable) Features[i]=1;
  2681. else Features[i]=0;
  2682. }
  2683. ListBoxInit(&sutListBox,BoolMode,0,commonIcon2,Features,0);
  2684. uiMenuShowBottomIndacitor("保存", "返回");
  2685. }
  2686. }
  2687. void uiShowXINBIAOGatewayResponse(void){
  2688. unsigned short key=ListBoxResponse(&sutListBox);
  2689. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2690. else if(MKEY_VALUE_MENU==key){
  2691. getStackStruct()->ok_back=1;
  2692. if(newPara.Xinbiao_IpEnable != sutListBox.handle){
  2693. newPara.Xinbiao_IpEnable=sutListBox.handle;
  2694. sysIniSave("bleenable");
  2695. }
  2696. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2697. }
  2698. }
  2699. /*****************************上传网关结束********************************/
  2700. /*****************************清除列表开始********************************/
  2701. void uiShowXinbiaoClearlist(char StatusUpdate){
  2702. if(StatusUpdate){
  2703. guiClearAll(guiGetBackColor());
  2704. guiShowCaption(0,"清除列表",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16);
  2705. BleAudioLvFlash(0,1);
  2706. uiMenuShowBottomLine();
  2707. uiMenuShowBottomIndacitor("确认", "返回");
  2708. }
  2709. }
  2710. void uiShowXinbiaoClearlistResponse(void){
  2711. unsigned short key=getKeyValue();
  2712. if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2713. else if(MKEY_VALUE_MENU==key){
  2714. getStackStruct()->ok_back=1;
  2715. uISetNextStatus(UIS_MENU_XINBIAO_MAIN);
  2716. }
  2717. }
  2718. /*****************************清除列表结束********************************/