#include "includes.h" static unsigned int UserTempIndex=0; /****************************状态栏显示部分开始***********************************/ //显示信号强度 static void ShowSingle(int CSQ){ unsigned short x=SIGNAL_ICON_X; unsigned short y=3; if(sutApp.pocPpp == 0) guiShowBmp(x,y,"/ext/prepack/Single.bmp"); else guiShowBmp(x,y,"/ext/prepack/SingleOK.bmp"); //11 3格 x += 10; if(CSQ<5 || CSQ==99){ guiClearRect(x,y+1,x+14,y+17,COLOR_STATUS_BAR); }else if(CSQ<11){ guiDrawVLine(x+2,y+16,x,y,guiGetBackColor()); guiClearRect(x+4,y+1,x+14,y+17,COLOR_STATUS_BAR); }else if(CSQ<18){ guiDrawVLine(x+2,y+16,x,y,guiGetBackColor()); guiDrawVLine(x,y+16,x+4,y,guiGetBackColor()); guiClearRect(x+8,y+1,x+14,y+17,COLOR_STATUS_BAR); }else if(CSQ<22){ guiDrawVLine(x+2,y+16,x,y,guiGetBackColor()); guiDrawVLine(x,y+16,x+4,y,guiGetBackColor()); guiDrawVLine(x-2,y+16,x+8,y,guiGetBackColor()); guiClearRect(x+11,y+1,x+14,y+17,COLOR_STATUS_BAR); }else{ guiDrawVLine(x+2,y+16,x,y,guiGetBackColor()); guiDrawVLine(x,y+16,x+4,y,guiGetBackColor()); guiDrawVLine(x-2,y+16,x+8,y,guiGetBackColor()); guiDrawVLine(x-4,y+16,x+12,y,guiGetBackColor()); } } unsigned char netshowvalue=0xff; unsigned char ctecCurrentSet=0; //显示网络制式 static void Show_Net(unsigned char s_netshowvalue){ unsigned short y=0; if(s_netshowvalue==4){ if(sutApp.UserInfo.tnet==5) guiShowStr(NET_ICON_X, y+1,"5G", FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR); else guiShowStr(NET_ICON_X, y+1,"4G", FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR); }else guiClearRect(NET_ICON_X,y,NET_ICON_X+NET_ICON_WX,y+11,COLOR_STATUS_BAR); } static void gpsIconShow(char flash){ typedef struct{ unsigned char located:1; unsigned char gpsF:1; }TMP_GPS_DEF; static TMP_GPS_DEF tmpGps; unsigned short x=GPS_ICON_X,y=0; if(tmpGps.located==sutGpsInfo.isGpsValid && tmpGps.gpsF==sutGpsInfo.isGpsWork&& flash==0) return; guiClearRect(x,y,x+GPS_ICON_WX,y+11,COLOR_STATUS_BAR); if(sutGpsInfo.isGpsWork==1){//GPS打开时 guiShowBmp(x,y,"/ext/prepack/GPSA.bmp"); if(sutGpsInfo.isGpsValid==1) { guiShowBmp(x+14,y,"/ext/prepack/GPSL1.bmp");//已定位 guiShowBmp(x+20,y,"/ext/prepack/GPSL2.bmp");//已定位 } } tmpGps.located=sutGpsInfo.isGpsValid; tmpGps.gpsF=sutGpsInfo.isGpsWork; } //显示电量 static void ShowBatttery(int bat,unsigned int exeInterval){ static unsigned int flashCnt=0; static unsigned char flag=0; static unsigned short cnt=0; unsigned short x=BAT_ICON_X+1,y=2,h=y+4; unsigned char batweight=10; int color; if(sutApp.chargeStatus)color=COLOR_GREEN; else color=guiGetBackColor(); if(bat=400 4格 guiShowBmp(x,y,"/ext/prepack/VBAT1.bmp"); guiDrawVLine(h,h+batweight,x+8,y+2,color); guiDrawVLine(h,h+batweight,x+15,y+2,color); guiDrawVLine(h,h+batweight,x+22,y+2,color); guiDrawVLine(h,h+batweight,x+29,y+2,color);//5.12 } sutApp.lowPwrWarn=0; } //显示时间 static void ShowTime(char flash,unsigned int exeInterval){ static unsigned short nextExe=0; static unsigned char flag=0; MY_CLOCK myclock; char buf[30]={0}; if(nextExe==0 || flash){ //ohpocGetClock(&myclock); if(flag){ snprintf(buf, sizeof(buf), "%02d:%02d",My_Clock.hour, My_Clock. min); flag=0; }else{ snprintf(buf, sizeof(buf), "%02d %02d",My_Clock.hour, My_Clock. min); flag=1; } guiShowStr(TIME_ICON_X, 1,buf, FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR); } if(++nextExe>=(1000/exeInterval)) nextExe=0; } //显示耳机接入状态 static void ShowEarStatus(char flash){ static unsigned char lastStatus=0; if(lastStatus==sutApp.earLev && flash==0) return; if(sutApp.earLev!=0) guiShowBmp(EAR_ICON_X, 1, "/ext/prepack/ear.bmp"); else guiClearRect(EAR_ICON_X, 1, EAR_ICON_X+EAR_ICON_WX,1+12, COLOR_STATUS_BAR); lastStatus=sutApp.earLev; } //显示键盘锁状态 static void ShowKeyLocStatus(char flash){ static unsigned char lastStatus=0; if(lastStatus==sutApp.keyLock && flash==0) return; if(sutApp.keyLock!=0) guiShowBmp(LOCK_ICON_X, 1, "/ext/prepack/lock.bmp"); else guiClearRect(LOCK_ICON_X, 1, LOCK_ICON_X+LOCK_ICON_WX,12, COLOR_STATUS_BAR); lastStatus=sutApp.keyLock; } //显示状态栏 void uiShowStatusBar(char flash,unsigned int exeInterval){ static unsigned char s_netshowvalue=0xff; static unsigned char lastPPPStatus; static int siCSQ; static int siVbat; static signed char charging=-1;//充电 static unsigned short batFirstShow=0; static char cardType=0; char tempFlash=flash; if(sutApp.enableKey==0) return; if(sutApp.updateStatusBar!=0){ sutApp.updateStatusBar=0; tempFlash=1; guiFillRect(0, 0, GLCD_WIDTH-1, UI_STATUS_BAR_HEIGH-1,COLOR_STATUS_BAR);//清除第一区 guiFillRect(0, UI_LOCATION_SHOW_Y, GLCD_WIDTH-1, GLCD_HEIGHT-1, guiGetForeColor());//清除信标区 } //显示信号 if(tempFlash || siCSQ!=sutApp.g_iCSQ || lastPPPStatus != sutApp.pocPpp){ lastPPPStatus=sutApp.pocPpp; siCSQ=sutApp.g_iCSQ; ShowSingle(sutApp.g_iCSQ); } //显示2G/3G/4G if(tempFlash || s_netshowvalue!=netshowvalue){ s_netshowvalue=netshowvalue; Show_Net(s_netshowvalue); } //显示GPS是否正常 sutGpsInfo.isGpsValid=1; sutGpsInfo.isGpsWork=1; gpsIconShow(tempFlash); //电量显示 if(tempFlash || siVbat!=sutApp.g_iBAT || sutApp.g_iBAT < WARN_PWR_LEVEL||charging!=sutApp.chargeStatus){ if(sutApp.g_iBAT>=0){ siVbat=sutApp.g_iBAT; charging=sutApp.chargeStatus; ShowBatttery(sutApp.g_iBAT,exeInterval); } } //文本消息显示 //sutSms.haveUnRead=1; //ShowMessageFlag(0); //GPS显示 //时间显示 ShowTime(tempFlash,exeInterval); //显示耳机状态 //sutApp.earLev=1; ShowEarStatus(tempFlash); //显示键盘锁状态 //ShowKeyLocStatus(tempFlash); } /****************************状态栏显示部分结束***********************************/ /****************************待机界面显示部分开始***********************************/ typedef enum{ ME_NO_LOGIN, ME_NOBODY_SPEAK, ME_IAM_SPEAK, ME_SOMEBODY_SPEAK }ME_ENUM; static void uiShowGUName(int update); static void uiShowGuaDuan(unsigned char danhu); static void uiShowGroup(const char* info); static void uiShowUser(const char* info); static void uiShowHuaQuan(const char* info,char type); static void uiShowCallUserName(void); static void uiShowOffLineMessage(void); static void uiShowCopsInfo(void){ char info[50]; if(newPara.itemShowType==0){ switch(sutApp.copstype){ case 0:case 2:case 4:case 7://中国移动 snprintf(info, sizeof(info), "中国移动"); break; case 1:case 6:case 9://中移联通 snprintf(info, sizeof(info), "中国联通"); break; case 3:case 8:case 11://中国电信 snprintf(info, sizeof(info), "中国电信"); break; default:snprintf(info, sizeof(info), "公网集群对讲系统");break; } }else snprintf(info, sizeof(info), "公网集群对讲系统"); guiFillRect(0, UI_STATUS_ITEM_Y, GLCD_WIDTH-1, UI_CONTENT_SHOW_Y-1, guiGetForeColor());//清除第二区 guiShowCaption(0,info, UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); } #ifdef USE_LEFT_MOVING void movingShowNames(unsigned int dlyInterval,unsigned char reset, unsigned char now,unsigned char voice){ const char *idleptr="空闲"; const char *voiceptr="本机在讲话"; const char *danhuptr="单呼模式"; char *gname=danhuptr; char *voicePri=idleptr; char *uname=NULL; static unsigned int interval=0xffffff; if(sutPocStatus.logined==0) return; //if(sutPocStatus.statusChaned!=0){ // sutPocStatus.statusChaned=0; // reset=1; //} if(++interval<500/dlyInterval && reset==0 && now==0) return;//0.5秒刷新一次 interval=0; if(sutPocStatus.danHuStatus==0){ if(sutPocStatus.LocalGroup.name[0]==0) gname=NULL; else gname=sutPocStatus.LocalGroup.name; } if(voice==0) voicePri=idleptr; else if(voice==1) voicePri=voiceptr; else voicePri=sutPocStatus.CallName; if(sutPocStatus.LocalUser.name[0]!=0) uname=sutPocStatus.LocalUser.name; mainScreenShowMoving(UI_GROUP_SHOW_Y, reset,gname,uname,voicePri); } #endif void uiShowMainInterface(char status,unsigned int exeInterval){ short Flag=ME_NO_LOGIN;//ME_ENUM static unsigned char danhu=0; static short lastFlag=-1; static unsigned short siCt=0; char info[20]; static char firstRun=0; static unsigned short dly=0; char tmpStatus=status; static int copsStatus; static unsigned int timer; static char lockStep=0; unsigned char reset=0; unsigned char moveFlash=0; static unsigned char voice=0; //提示解锁 if(sutApp.lockShow!=0){ if(lockStep==0){ lockStep=1; backLightReset(); uTimerStart(&timer, 1000); guiShowMessageBox("请先解锁!"); } }else lockStep=0; if(lockStep==1){ if(uTimerExpired(&timer)){ guiClearRect(0,GLCD_HEIGHT/2-20,GLCD_WIDTH-1,GLCD_HEIGHT/2+20,guiGetBackColor()); lastFlag=-1;//让以下刷新一下 sutApp.lockShow=0; lockStep=0; sutUIstatus.ItemRefresh=1;//如果"请插卡"有显示,会被刷掉不再显示,这里让它重新显示出来 } return; } /*逻辑处理开始*/ if(tmpStatus){ guiClearAll(guiGetBackColor()); #ifdef DEVELOP_MODE guiShowStr(1, UI_BOTTOM_SHOW_Y,"研发版垚", FONT_MODE_16X16, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR); #else guiShowStr(1, UI_BOTTOM_SHOW_Y,"菜单", FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR, guiGetBackColor()); #endif danhu=sutPocStatus.danHuStatus; uiShowGuaDuan(danhu); lastFlag=-1; siCt=0; //return; } if(copsStatus != sutApp.copstype || tmpStatus){ copsStatus=sutApp.copstype; uiShowCopsInfo(); } //更新单呼显示与否 if(sutPocStatus.danHuStatus != danhu){ danhu=sutPocStatus.danHuStatus; uiShowGuaDuan(danhu); } //以下持续调用,以便动态更新信息 if(0==sutPocStatus.logined) Flag=ME_NO_LOGIN;//未登录 else if(0==sutPocStatus.spk && 0==sutPocStatus.mic){//已登录,无人说话 Flag=ME_NOBODY_SPEAK; }else if(0!=sutPocStatus.mic) Flag=ME_IAM_SPEAK;//已登录,本机说话 else if(0!=sutPocStatus.spk) Flag=ME_SOMEBODY_SPEAK;//有人说话 switch(Flag){ case ME_NO_LOGIN://未登录 if(Flag != lastFlag){ guiFillRect(0, UI_CONTENT_SHOW_Y, GLCD_WIDTH-1, UI_BOTTOM_SHOW_Y-1,guiGetBackColor()); guiShowBmp(0,UI_CONTENT_SHOW_Y, "logo.bmp"); } break; case ME_NOBODY_SPEAK://已登录,无人说话 if(Flag != lastFlag){ if(ME_NO_LOGIN==lastFlag) guiFillRect(0, UI_CONTENT_SHOW_Y, GLCD_WIDTH-1, UI_CONTENT_SHOW_Y+16,guiGetBackColor());//从未登录到登录,'正在登录'那行也刷掉 guiFillRect(0, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16,guiGetBackColor()); #ifdef USE_LEFT_MOVING voice=0; moveFlash=1; #else uiShowHuaQuan("空闲",0); #endif sutPocStatus.statusChaned = 1; } break; case ME_IAM_SPEAK://已登录,本机说话 if(Flag != lastFlag){ #ifdef USE_LEFT_MOVING voice=1; moveFlash=1; #else guiFillRect(0, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16,guiGetBackColor()); uiShowHuaQuan("本机在讲话",1); #endif } break; case ME_SOMEBODY_SPEAK://已登录,有人说话 if(Flag != lastFlag){ guiFillRect(0, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16,guiGetBackColor()); sutPocStatus.statusChaned=1;//保证要刷新名字 #ifdef USE_LEFT_MOVING voice=2; moveFlash=1; #endif } #ifndef USE_LEFT_MOVING uiShowCallUserName(); #endif break; } if(Flag>0){//已登录 if(Flag != lastFlag && (lastFlag==-1 || ME_NO_LOGIN==lastFlag)){ #ifdef USE_LEFT_MOVING reset=1; #else uiShowGUName(1); #endif } #ifndef USE_LEFT_MOVING else uiShowGUName(0); #endif }else{//未登录 snprintf(info, sizeof(info),"正在登陆."); switch(siCt){//not finished yet case 0: strcat(info, " "); guiShowStr(1, UI_GROUP_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); break; case (1000/APP_SUB_DIV_TIME): strcat(info, ". "); guiShowStr(1, UI_GROUP_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); break; case (2000/APP_SUB_DIV_TIME): strcat(info, ".."); guiShowStr(1, UI_GROUP_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); break; } //显示登录状态 uiShowOffLineMessage(); } #ifdef USE_LEFT_MOVING movingShowNames(APP_SUB_DIV_TIME,reset,moveFlash,voice); #endif if(++siCt>=(3000/APP_SUB_DIV_TIME)) siCt=0; if(Flag != lastFlag) lastFlag=Flag; } static void uiShowGUName(int update){ static char scNameUser[POC_GROUP_USER_NAME_LEN]; static char scNameGroup[POC_GROUP_USER_NAME_LEN]; char name[POC_GROUP_USER_NAME_LEN]; unsigned short len; const unsigned char danHuanBuffer[9]={0xB5,0xA5,0xBA,0xF4,0xC4,0xA3,0xCA,0xBD,0}; char GroupShowUpdate=0; char UserShowUpdate=0; if(sutPocStatus.danHuStatus==0){ if(0!=strcmp(sutPocStatus.LocalGroup.name,scNameGroup) || update!=0){ memset(scNameGroup,0,sizeof(scNameGroup)); memcpy(scNameGroup,sutPocStatus.LocalGroup.name,sizeof(scNameGroup)); GroupShowUpdate=1; } }else{ if(0!=strcmp((char *)danHuanBuffer,scNameGroup) || update!=0){ memset(scNameGroup,0,sizeof(scNameGroup)); memcpy(scNameGroup, danHuanBuffer,sizeof(danHuanBuffer)); GroupShowUpdate=1; } } if(0!=strcmp(sutPocStatus.LocalUser.name,scNameUser) || update!=0){ memset(scNameUser,0,sizeof(scNameUser)); memcpy(scNameUser,sutPocStatus.LocalUser.name,sizeof(scNameUser)); UserShowUpdate=1; } if(GroupShowUpdate){ guiClearRect(0,UI_GROUP_SHOW_Y,GLCD_WIDTH-1,UI_GROUP_SHOW_Y+16+2,guiGetBackColor());//18 //刷新群组栏 if(sutPocStatus.danHuStatus==0) StrIntercept(name, scNameGroup, sizeof(name)); else snprintf(name, sizeof(name), "单呼模式"); uiShowGroup(name); sutPocStatus.statusChaned=1; } if(UserShowUpdate){ guiClearRect(0,UI_USER_SHOW_Y,GLCD_WIDTH-1,UI_GROUP_SHOW_Y+16,guiGetBackColor());//18 //刷新成员栏 StrIntercept(name, scNameUser, sizeof(name)); uiShowUser(name); } } static void uiShowGuaDuan(unsigned char danhu){ if(danhu==0) guiClearArea(GLCD_WIDTH-48-1, UI_BOTTOM_SHOW_Y, 48, 24, guiGetBackColor()); else guiShowStr(GLCD_WIDTH-48, UI_BOTTOM_SHOW_Y, "挂断", FONT_MODE_16X16, REVERSED_NO, COLOR_STATUS_BAR,guiGetBackColor()); } static void uiShowGroup(const char* info){ unsigned int color=COLOR_BLACK; if(sutPocStatus.danHuStatus==0) guiShowBmp(2, UI_GROUP_SHOW_Y, "/ext/prepack/Group2.bmp"); else{ guiShowBmp(2, UI_GROUP_SHOW_Y, "/ext/prepack/Onecall.bmp"); color=COLOR_RED; } guiClearRect(2+24, UI_GROUP_SHOW_Y, GLCD_WIDTH-1, UI_GROUP_SHOW_Y+24, guiGetBackColor()); guiShowStr(2+24+8, UI_GROUP_SHOW_Y,info, FONT_MODE_24X24, REVERSED_NO,COLOR_BLACK,guiGetBackColor()); } static void uiShowUser(const char* info){ guiShowBmp(2, UI_USER_SHOW_Y, "/ext/prepack/people2.bmp"); guiClearRect(2+24, UI_USER_SHOW_Y, GLCD_WIDTH-1, UI_USER_SHOW_Y+24, guiGetBackColor()); //guiShowStr(2+16, UI_USER_SHOW_Y," ", FONT_MODE_24X24, REVERSED_NO,guiGetForeColor(),guiGetBackColor()); guiShowStr(2+24+8, UI_USER_SHOW_Y,info, FONT_MODE_24X24, REVERSED_NO,COLOR_BLACK,guiGetBackColor()); } void showGroup(void){ uiShowGroup("默认群组"); } void showUser(void){ uiShowUser("小明"); } static void uiShowHuaQuan(const char* info,char type){ unsigned int color=COLOR_BLACK; if(type==0) guiShowBmp(2, UI_VOICE_SHOW_Y, "/ext/prepack/Phone.bmp"); else if(type==1){ color=COLOR_RED; guiShowBmp(2, UI_VOICE_SHOW_Y, "/ext/prepack/Csend.bmp"); }else if(type==2){ guiShowBmp(2, UI_VOICE_SHOW_Y, "/ext/prepack/Creceive.bmp"); color=COLOR_DEEP_GREEN; } guiClearRect(2+8+24, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+24, guiGetBackColor()); guiShowStr(2+8+24, UI_VOICE_SHOW_Y,info, FONT_MODE_24X24, REVERSED_NO,color,guiGetBackColor()); } static void uiShowCallUserName(void){ static char scName[POC_GROUP_USER_NAME_LEN]; char name[POC_GROUP_USER_NAME_LEN]; if(0 != strncmp(scName, sutPocStatus.CallName, POC_GROUP_USER_NAME_LEN) || sutPocStatus.statusChaned){ //当名字变更或UI切换了,刷新显示 sutPocStatus.statusChaned=0; memcpy(scName, sutPocStatus.CallName, POC_GROUP_USER_NAME_LEN); uiShowHuaQuan(scName,2); } } static void uiShowOffLineMessage(void){ static unsigned char laReason; char info[50],update=0; unsigned short y; if(sutUIstatus.Status != UIS_STANDBY) return; if(sutPocStatus.PocLineOffReason==laReason && sutUIstatus.ItemRefresh==0) return; sutUIstatus.ItemRefresh=0; laReason=sutPocStatus.PocLineOffReason; if(sutApp.cardStatus==0){ snprintf(info, sizeof(info), "请插卡"); update=1; }else{ switch(sutPocStatus.PocLineOffReason){ case 1:snprintf(info, sizeof(info), "无网络连接");break; case 2:snprintf(info, sizeof(info), "无法连接");break; case 3:snprintf(info, sizeof(info), "没有服务");break; case 4:snprintf(info, sizeof(info), "账号信息错误");break; } if(sutPocStatus.PocLineOffReason!=0) update=1; } if(update!=0){ y=UI_USER_SHOW_Y; guiClearRect(2,y, GLCD_WIDTH-1, y +12, guiGetBackColor()); guiShowStr(2, y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); } } /****************************待机界面显示部分结束***********************************/ /****************************主菜单显示部分开始*************************************/ #include "Palace.h" SUT_PALACE sutPalace; void PalaceIndexReset(){sutPalace.Index=0;} void uiShowMenuMain(char update){ static const char *apcMenuMain[]={ "群组选择", "成员选择", "选呼好友", "蓝牙设置", "信标设置", "本机设置", "侧键定义", "本机信息", "首长功能", "闹铃设置", "初始化", "初始化", "" }; if(update) PalaceInit(&sutPalace,apcMenuMain,"/ext/prepack/Palace","主菜单"); } void MenuMainResponse(void){ unsigned short key; key=PalaceResponse(&sutPalace); if(MKEY_VALUE_MENU==key){ switch(sutPalace.Index){ case 0: uISetNextStatus(UIS_MENU_GROUP_SEL); break; case 1: uISetNextStatus(UIS_MENU_USER_SEL); break; case 2: uISetNextStatus(UIS_MENU_MAIL_SEL); break; case 3: uISetNextStatus(UIS_MENU_SYS_SEL); break; case 4: uISetNextStatus(UIS_MENU_XINBIAO_MAIN); break; case 5: uISetNextStatus(UIS_MENU_INFO_SEL); break; case 6: uISetNextStatus(UIS_MENU_BLE_MAIN); break; case 7: uISetNextStatus(UIS_MENU_FRIEND_SEL); break; } uiPushStack(sutPalace.Index); } else if(MKEY_VALUE_ESC==key){ uISetNextStatus(UIS_STANDBY); } } /****************************主菜单显示部分结束*************************************/ /*****************************群组选择/成员选择部分开始*********************************/ bool uiSwitchLock=false; bool isUiSwitchReady(void){return uiSwitchLock;} static char GUListBoxInited=0; static char SelMachine=0; static void ReFlashItemGU(char type); static void UserAssistAdd(void); void numGUFlash(int index, int total){ char info[10]; int x; snprintf(info, sizeof(info), "%03d", total); x=GLCD_WIDTH-strlen(info)*16; guiClearRect(x, UI_STATUS_ITEM_Y, GLCD_WIDTH-1, UI_STATUS_ITEM_Y+24, guiGetForeColor()); guiShowStr(x, UI_STATUS_ITEM_Y+1, info, FONT_MODE_16X16, REVERSED_NO, guiGetBackColor(), guiGetForeColor()); } bool setHandleToZero=true; void uiShowGUSel(char StatusUpdate,unsigned int exeInterval,char type){ static char machine; static unsigned int timer; unsigned short timeout; char temp; if(StatusUpdate) machine=0; switch(machine){ case 0: if(sutPocStatus.logined == 0){//not login guiShowMessageBox(" 请先登录 "); uTimerStart(&timer, 1000); machine=1; }else{ uiSwitchLock=true; if(type==0) appSleepCtl(ASLEEP_GGROUP, 1);//要获取群组信息,不让休眠,记得超时或获取成功或获取失败后需要释放 else if(type==1)appSleepCtl(ASLEEP_GUSER, 1); else appSleepCtl(ASLEEP_GFRIEND,1); UiassistStart(0); machine=2; setHandleToZero=true; } break; case 1: if(uTimerExpired(&timer)){ uISetNextStatus(UIS_STANDBY); } break; case 2: temp=getAssistResult(); if(temp){//??è?íê3é guiClearAll(guiGetBackColor()); if(type==0){ guiShowCaption(30,"群组选择",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); //0 uiMenuShowBottomIndacitor("确定", "返回"); }else if(type==1){ guiShowCaption(30,"用户选择",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); //0 uiMenuShowBottomIndacitor("单呼", "返回"); }else { guiShowCaption(30,"好友选择",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); //0 uiMenuShowBottomIndacitor("呼叫", "返回"); } ReFlashItemGU(type); uiMenuShowBottomLine(); machine=3; //获取成功后退出释放休眠 if(type==0) appSleepCtl(ASLEEP_GGROUP, 0); else if(type==1)appSleepCtl(ASLEEP_GUSER, 0); else appSleepCtl(ASLEEP_GFRIEND,0); uiSwitchLock=false; } break; } if(machine != 3) return; UserAssistAdd(); LeftMoveSelectedItem(&sutListBox); } void GroupSelResponse(){ unsigned int key; char buf[50]; int i; key=getKeyValue(); switch(SelMachine){ case 0: if(GUListBoxInited==0) break;//还未初始化listbox时,不执行按键响应 if(sutListBox.handle==0 && MKEY_VALUE_UP==key){ UiassistStart(1); SelMachine=1; }else if(((sutListBox.handle+1) == sutListBox.itemnum) && (MKEY_VALUE_DOWN==key)){ setHandleToZero=true; UiassistStart(2); SelMachine=2; } key=ListBoxResponse(&sutListBox); if(MKEY_VALUE_ESC==key){ uiAssist.status=0; if(getStackStruct()->FastUiChange)uISetNextStatus(UIS_STANDBY); else uISetNextStatus(UIS_MENU_MAIN); appSleepCtl(ASLEEP_GGROUP, 0);//按键退出后释放休眠 GUListBoxInited=0; uiSwitchLock=false; }else if(MKEY_VALUE_MENU==key){ if(0 == sutPocStatus.ListCurOnlineNum) break; /////////////////////////////////////// UiassistEnd(0); sutApp.groupTTSEnable=1; snprintf(buf, sizeof(buf),"AT+POC=090000%08x\r\n",sutPocStatus.AllGroups[sutListBox.handle].ID); msgAtSend(buf); MSG_INFO(1,buf); snprintf(buf, sizeof(buf),"进入:%s",sutPocStatus.AllGroups[sutListBox.handle].name); MSG_INFO(1,buf); uISetNextStatus(UIS_STANDBY); SelMachine=0; } break; } } void UserSelResponse(){ char buf[50]; unsigned int key; key=getKeyValue(); switch(SelMachine){ case 0: if(GUListBoxInited==0) break;//还未初始化listbox时,不执行按键响应 if(sutListBox.handle==0 && MKEY_VALUE_UP==key){ UiassistStart(1); SelMachine=1; }else if((sutListBox.handle+1) == sutListBox.itemnum && (MKEY_VALUE_DOWN==key)){ setHandleToZero=true; UiassistStart(2); SelMachine=2; } key=ListBoxResponse(&sutListBox); if(MKEY_VALUE_ESC==key){ uiAssist.status=0; if(getStackStruct()->FastUiChange)uISetNextStatus(UIS_STANDBY); else uISetNextStatus(UIS_MENU_MAIN); appSleepCtl(ASLEEP_GUSER, 0);//按键退出后释放休眠 GUListBoxInited=0; uiSwitchLock=false; }else if(MKEY_VALUE_MENU==key){ if(0 == sutPocStatus.ListCurOnlineNum) break; UiassistEnd(0); snprintf(buf, sizeof(buf),"AT+POC=0A0000%08x\r\n",sutPocStatus.AllUsers[sutListBox.handle].ID); msgAtSend(buf); MSG_INFO(1, buf); snprintf(buf, sizeof(buf),"呼叫:%s",sutPocStatus.AllUsers[sutListBox.handle].name); MSG_INFO(1, buf); uISetNextStatus(UIS_STANDBY); SelMachine=0; } break; } } void FriendSelResponse(){ char buf[50]; unsigned int key; key=getKeyValue(); switch(SelMachine){ case 0: if(GUListBoxInited==0) break;//还未初始化listbox时,不执行按键响应 if(sutListBox.handle==0 && MKEY_VALUE_UP==key){ UiassistStart(1); SelMachine=1; }else if((sutListBox.handle+1) == sutListBox.itemnum && (MKEY_VALUE_DOWN==key)){ setHandleToZero=true; UiassistStart(2); SelMachine=2; } key=ListBoxResponse(&sutListBox); if(MKEY_VALUE_ESC==key){ uiAssist.status=0; if(getStackStruct()->FastUiChange)uISetNextStatus(UIS_STANDBY); else uISetNextStatus(UIS_MENU_MAIN); appSleepCtl(ASLEEP_GFRIEND, 0);//按键退出后释放休眠 GUListBoxInited=0; uiSwitchLock=false; }else if(MKEY_VALUE_MENU==key){ if(0 == sutPocStatus.ListCurOnlineNum) break; UiassistEnd(0); if(sutPocStatus.AllUsers[sutListBox.handle].status==1)break; snprintf(buf, sizeof(buf),"AT+POC=0A0000%08x\r\n",sutPocStatus.AllUsers[sutListBox.handle].ID); msgAtSend(buf); MSG_INFO(1, buf); snprintf(buf, sizeof(buf),"呼叫:%s",sutPocStatus.AllUsers[sutListBox.handle].name); MSG_INFO(1, buf); uISetNextStatus(UIS_STANDBY); SelMachine=0; } break; } } static void UserAssistAdd(void){ switch(SelMachine){ case 1: if(getAssistResult()){ if(sutUIstatus.Status==UIS_MENU_GROUP_SEL)ReFlashItemGU(0); else if(sutUIstatus.Status==UIS_MENU_USER_SEL)ReFlashItemGU(1); else ReFlashItemGU(2); SelMachine=0; } break; case 2: if(getAssistResult()){ if(sutUIstatus.Status==UIS_MENU_GROUP_SEL)ReFlashItemGU(0); else if(sutUIstatus.Status==UIS_MENU_USER_SEL)ReFlashItemGU(1); else ReFlashItemGU(2); SelMachine=0; } break; } } static void ReFlashItemGU(char type){ static unsigned short susCt=0; static const char *accIconFileName[]={ "/ext/prepack/Group1.bmp", "/ext/prepack/Group2.bmp", "/ext/prepack/people1.bmp", "/ext/prepack/people2.bmp", "/ext/prepack/people3.bmp", "" }; static char *icons[4];//3//3 int i; unsigned short timeout; static const char *NullGU=""; static char *GUName[POC_ALL_GROUPS_NUM+1]; //5 static char GUFeatures[POC_ALL_GROUPS_NUM+1];//5 unsigned int showHandle; char info[30]; if(type==0){ icons[0]=accIconFileName[0]; icons[1]=accIconFileName[1]; }else{ icons[0]=accIconFileName[2]; icons[1]=accIconFileName[3]; icons[2]=accIconFileName[4]; } icons[3]=accIconFileName[5]; for(i=0;i<=POC_ALL_GROUPS_NUM;i++){ GUName[i]=NullGU; GUFeatures[i]=0; } for(i=0;i=GPS_TABLE_NUM) tempGpsIndex=0; }else if(type==2){ if(tempGpsIndex>0) tempGpsIndex--; else tempGpsIndex=GPS_TABLE_NUM-1; }else return; gpsTimeValue=getGPSTimeValue(tempGpsIndex); if(gpsTimeValue==0) snprintf(buf, sizeof(buf), "定位上传设置:关闭"); else snprintf(buf, sizeof(buf), "定位上传设置:%d秒",gpsTimeValue); guiClearRect(0,y,GLCD_WIDTH-1, y+12,guiGetBackColor()); guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } static locationXYFlash(char flash){ char buf[50]; unsigned short y=UI_CONTENT_SHOW_Y+2; // if(gpsInfo.update==0 && flash==0) return; // gpsInfo.update=0; guiClearRect(0, y,GLCD_WIDTH-1, y+12+5+12,guiGetBackColor()); snprintf(buf, sizeof(buf), "纬度 S:%d.%05d",sutGpsInfo.latitue/1000000,sutGpsInfo.latitue%1000000); guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); y+=12+5; snprintf(buf, sizeof(buf), "经度 W:%d.%05d",sutGpsInfo.longitue/1000000,sutGpsInfo.longitue%1000000); guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } /*****************************定位设置部分结束*********************************/ /*******************************终端信息开始**********************************/ unsigned char sysInfoType; static void sysInfoFlash(void){ unsigned short x,y; char buf[50]; unsigned char LineSpace=12+4; unsigned char NeedSpace=0; int len; char yunyingshang=0; x=0,y=UI_CONTENT_SHOW_Y+5; guiClearRect(0,y,GLCD_WIDTH-1,UI_BOTTOM_LINE_Y-1,guiGetBackColor()); NeedSpace=0; if(sysInfoType==0){ //终端编码 snprintf(buf,sizeof(buf),"PSN:%lu", sutApp.UserInfo.psn); len=strlen(buf); if(len>17){ y+=LineSpace; NeedSpace=LineSpace; guiShowStr(x+56,y,buf+17,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); buf[17]=0; y-=LineSpace; } guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace;y+=NeedSpace; //账号 snprintf(buf,sizeof(buf),"账号:%s", sutApp.UserInfo.OtherId); len=strlen(buf); if(len>17){ y+=LineSpace; NeedSpace=LineSpace; guiShowStr(x+56,y,buf+17,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); buf[17]=0; y-=LineSpace; } guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace;y+=NeedSpace; //应用版本 snprintf(buf, sizeof(buf),"应用版本:%s",OHPOC_VERSION); guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; //内部版本 snprintf(buf, sizeof(buf),"内部版本:%d",CUSTOMER_CODE); guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); }else if(sysInfoType==1){ //对讲平台 snprintf(buf, sizeof(buf),"对讲平台:%s", OHPOC_POC_PLATFORM); guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; //对讲版本号 NeedSpace=0; snprintf(buf, sizeof(buf),"对讲版本:%s",sutApp.pocVersion); len=strlen(buf); if(len>15){ y+=LineSpace; NeedSpace=LineSpace; guiShowStr(0,y,buf+15,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); buf[15]=0; y-=LineSpace; } guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; y+=NeedSpace; //模块 memset(buf,sizeof(buf),0); snprintf(buf,sizeof(buf),"模块:%s", sutApp.modemVer); len=strlen(buf); if(len>16){ y+=LineSpace; guiShowStr(x+32,y,buf+16,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); buf[16]=0; y-=LineSpace; } guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); }else if(sysInfoType==2){ NeedSpace=0; snprintf(buf, sizeof(buf),"ICCID:"); guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; //终端编码 memset(buf,0,sizeof(buf)); switch(sutApp.copstype){ case 46000: case 46002: case 46007: yunyingshang=1; break; case 46001: case 46006: yunyingshang=2; break; case 46003: case 46005: case 46008: case 46009: case 46010: case 46011: yunyingshang=3; break; default: yunyingshang=0; break; } if(LSAPI_SIM_GetICCID(buf)==0&&yunyingshang!=0){ strncpy(sutApp.ICCID, buf,sizeof(sutApp.ICCID)); if(yunyingshang!=1){ sutApp.ICCID[19]=0; } snprintf(buf, sizeof(buf),"%s",sutApp.ICCID); //guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); }else{ snprintf(buf, sizeof(buf),"未知"); //guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); } len=strlen(buf); if(len>15){ y+=LineSpace; NeedSpace=LineSpace; guiShowStr(0,y,buf+15,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); buf[15]=0; y-=LineSpace; } guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; y+=NeedSpace; //IMEI snprintf(buf, sizeof(buf),"IMEI:"); guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; memset(buf,0,sizeof(buf)); if(LSAPI_SIM_GetIMEI(buf)==0){ guiShowStr(0,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); }else{ guiShowStr(0,y,"未知",FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); } }else if(sysInfoType==3){ //显示服务器 //对讲IP //getPIPAddr();getGIPAddr(); guiShowStr(x,y,"交换服务器:",FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+= LineSpace; snprintf(buf, sizeof(buf),"%s",showPIP); guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; //GPS IP guiShowStr(x,y,"定位服务器:",FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+= LineSpace; snprintf(buf, sizeof(buf),"%s",showGIP); guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); y+=LineSpace; snprintf(buf, sizeof(buf),"端口:%d",newPara.gpsPort); guiShowStr(x,y,buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK,guiGetBackColor()); } } void uiShowInformation(char update){ if(update){ sysInfoType=0; msgAtSend("AT+POC=7D0000\r\n"); guiClearAll(guiGetBackColor()); guiShowCaption(0,"终端信息",UI_STATUS_BAR_HEIGH,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor(NULL, "返回"); sysInfoFlash(); } } void uiShowInformationResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(sutUIstatus.LastStatus); else if(MKEY_VALUE_DOWN==key){ if(++sysInfoType>2) sysInfoType=0; sysInfoFlash(); }else if(MKEY_VALUE_UP==key){ if(sysInfoType==0) sysInfoType=2; else sysInfoType--; sysInfoFlash(); }else if(MKEY_VALUE_CB_IP==key){ sysInfoType=3; sysInfoFlash(); } } /*****************************终端信息结束**********************************/ static const char *commonIcon2[]={ "/ext/prepack/APN.bmp", "/ext/prepack/APN1.bmp", "" }; /*****************************LCD设置开始**********************************/ unsigned char lcdTmpIndex; static void lcdTimeFlash(char type){ char buf[50]; unsigned short x=4,y=56,value; if(type==0) guiShowStr(x+20, y, "背光时间:", FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); else if(type==1){ if(++lcdTmpIndex>=5) lcdTmpIndex=0; }else if(type==2){ if(lcdTmpIndex>0) lcdTmpIndex--; else lcdTmpIndex=4; } value=newPara.lcdParaList[lcdTmpIndex]; MSG_INFO(1,"lcdTmpIndex==%d,value===%d",lcdTmpIndex,value); if(value==0) snprintf(buf, sizeof(buf), " 常亮 "); else snprintf(buf, sizeof(buf), "%3d 秒", value); guiShowStr(x+80, y, buf, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } void uiShowLcdSel(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"LCD设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); lcdTmpIndex=newPara.lcdParaDefaultIndex; lcdTimeFlash(0); uiMenuShowBottomIndacitor("保存", "返回"); } } void uiShowLcdSelResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL); else if(MKEY_VALUE_DOWN==key)lcdTimeFlash(1); else if(MKEY_VALUE_UP==key) lcdTimeFlash(2); else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; if(lcdTmpIndex != newPara.lcdParaDefaultIndex){ newPara.lcdParaDefaultIndex=lcdTmpIndex; MSG_INFO(1, "LCD TimeUpdate"); backLightReset(); sysIniSave("lcd"); } uISetNextStatus(UIS_MENU_SYS_SEL); } } /*****************************LCD设置结束**********************************/ /*****************************网络设置开始**********************************/ const unsigned char netModeSetTable[3]={1,2,4};//设置制式:AUTH,2G,4G /*输入制式源始值,返回索引值对应值*/ unsigned char getNetModeIndex(unsigned char netModeValue){ unsigned char i; for(i=0;i=sizeof(netModeSetTable)) return 0xff; else return netModeSetTable[netModeIndex]; } /*输入制式索引值,发送对应该命令给模块*/ void netModeSetCmd(unsigned char netMode){ char buf[30]; snprintf(buf, sizeof(buf), "AT+CTEC=%d,%d\r\n",ctecCurrentSet, netMode); msgAtSend(buf); } #define NET_MODE_NUM 3 void uiShowNetSel(char StatusUpdate){ static const char *netMode[NET_MODE_NUM+1]={ "AUTO", "2G", "4G", "" }; char Features[NET_MODE_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"网络设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iok_back=1; if(sutListBox.handle*2 != newPara.netMode){ newPara.netMode=sutListBox.handle*2; MSG_INFO(1, "netMode update:%d", newPara.netMode); sysIniSave("NetSel"); netModeSetCmd(newPara.netMode); } uISetNextStatus(UIS_MENU_SYS_SEL); } } /*****************************网络设置结束**********************************/ /*****************************卡选择设置开始**********************************/ #define SIM_MODE_NUM 2 void uiShowSimSel(char StatusUpdate){ static const char *simMode[SIM_MODE_NUM+1]={ "卡1", "卡2", "" }; char Features[SIM_MODE_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"SIM设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iFastUiChange)uISetNextStatus(UIS_STANDBY); else uISetNextStatus(UIS_MENU_SYS_SEL); }else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; if(sutListBox.handle != sutApp.simSel){ snprintf(buf, sizeof(buf), "AT+SIMCROSS=%d\r\n",sutListBox.handle); msgAtSend(buf); guiShowMessageBox("请重启设备"); msgAtSend("AT+TRB\r\n"); LSAPI_OSI_ThreadSleep(100); CTL_POWER_HOLD(false); for(;;){ MSG_INFO(1, "card changed, wait user reboot"); CTL_POWER_HOLD(false); LSAPI_OSI_ThreadSleep(1000); } } uISetNextStatus(UIS_MENU_SYS_SEL); } } /*****************************卡选择设置结束**********************************/ /*****************************功耗设置开始**********************************/ typedef enum{ PMODE_DEFAULT_LOW, PMODE_SUPER_LOW, PMODE_NORMAL }PWR_ENUMDEF; //低功耗模式 #define MODE_LOW_PWR_NONE_4G 5 #define MODE_LOW_PWR_IS_4G 25 //超长待机模式 #define MODE_LONG_LOW_PWR_NONE_4G 5 #define MODE_LONG_LOW_PWR_IS_4G 55 //常规模式 #define MODE_NORMAL__NONE_4G 5 #define MODE_NORMAL__IS_4G 5 //终端放弃设置模式,由服务器决定使用什么 #define MODE_AUTO____NONE_4G 0 #define MODE_AUTO____IS_4G 0 //默认功耗模式 #define MODE_PWR_DEFAULT_NONE_4G MODE_LOW_PWR_NONE_4G #define MODE_PWR_DEFAULT_IS_4G MODE_LOW_PWR_IS_4G const char ZZD_PWRMODE[3]={2,0,3}; void pwrModeSetCmd(unsigned char pwrMode){ char buf[30]; memset(buf,0,sizeof(buf)); snprintf(buf, sizeof(buf), "AT+POC=3D0000%02d\r\n",ZZD_PWRMODE[pwrMode]); msgAtSend(buf); } void pwrModeAckHandler(unsigned char seg1, unsigned char seg2){ if(seg1==MODE_PWR_DEFAULT_NONE_4G && seg2==MODE_PWR_DEFAULT_IS_4G && newPara.pwrMode != PMODE_DEFAULT_LOW){ goto SAVE_PWR_MODE; }else if(seg1==MODE_LONG_LOW_PWR_NONE_4G && seg2==MODE_LONG_LOW_PWR_IS_4G && newPara.pwrMode != PMODE_SUPER_LOW){ goto SAVE_PWR_MODE; }else if(seg1==MODE_NORMAL__NONE_4G && seg2==MODE_NORMAL__IS_4G && newPara.pwrMode != PMODE_NORMAL){ goto SAVE_PWR_MODE; }else if(seg2!=MODE_LOW_PWR_IS_4G&&seg2!=MODE_LONG_LOW_PWR_IS_4G&& seg2!=MODE_NORMAL__IS_4G){ //Seg2 3个模式都不满足则切换为默认模式 newPara.pwrMode = PMODE_DEFAULT_LOW; goto SAVE_PWR_MODE; } return; SAVE_PWR_MODE: sysIniSave("workPwr"); pwrModeSetCmd(newPara.pwrMode); } #define PWR_MODE_NUM 3 void uiShowPwrSel(char StatusUpdate){ static const char *pwrMode[PWR_MODE_NUM+1]={ "常规省电模式", "高性能模式", "超长待机模式", "", }; char Features[PWR_MODE_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"功耗设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iok_back=1; if(sutListBox.handle != newPara.pwrMode){ newPara.pwrMode=sutListBox.handle; MSG_INFO(1, "pwrMode update:%d", newPara.pwrMode); sysIniSave("pwrSel"); pwrModeSetCmd(newPara.pwrMode); } uISetNextStatus(UIS_MENU_SYS_SEL); } } /*****************************功耗设置结束**********************************/ /*****************************服务器设置输入密码开始**********************************/ void uiShowServerPassSel(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"密码验证",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); NumEditInit(&sutNumEdit,(GLCD_WIDTH-6*8)/2,(GLCD_HEIGHT-16)/2,"000000"); NumEditShow(&sutNumEdit); uiMenuShowBottomIndacitor("[P1]加值", "[P2]移动"); } } void uiShowServerSelPassResponse(void){ unsigned short key=getKeyValue(); NumEditResponse(&sutNumEdit); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY); else if(MKEY_VALUE_MENU==key){ if(memcmp(sutNumEdit.buffer, getMenuKey(), 6)==0) uISetNextStatus(UIS_MENU_SYS_SERVER); else{ guiShowMessageBox("密码错误"); LSAPI_OSI_ThreadSleep(1000); getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_SYS_FACTORY); } } } /*****************************服务器设置输入密码结束**********************************/ /*****************************服务器设置开始**********************************/ void uiShowServerSel(char StatusUpdate){ static const char *serIcons[]={ "Ser.bmp", "Sersel.bmp", "" }; static const char *serName[]={ "杭州服务器", "山东服务器", "IP分发服务器", "集群服务器", "自定义服务器", "", }; char Features[5]; unsigned char tempSer,i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"服务器列表",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); tempSer=newPara.serList.defaultuse; for(i=0;i<=SERVER_UR;i++){ if(i==tempSer) Features[i]=1; else Features[i]=0; } ListBoxInit(&sutListBox,serName,0,serIcons,Features,0); } } void uiShowServerSelResponse(void){ unsigned char tempSer; char buf[50],buf1[100]; unsigned short key=ListBoxResponse(&sutListBox); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL); else if(MKEY_VALUE_MENU==key){ tempSer=sutListBox.handle; if(tempSer != newPara.serList.defaultuse){ newPara.serList.defaultuse=tempSer; sysIniSave("serverSel"); getGIPAddr(); snprintf(buf, sizeof(buf), "ip=%s;domain=%s;",getPIPAddr(),getDOMAINAddr()); AscStrTurnHexStr(buf,buf1); msgAtSend("AT+POC=010000"); msgAtSend(buf1); msgAtSend("\r\n"); LSAPI_OSI_ThreadSleep(100); msgAtSend("AT+POC=040000\r\n"); } uISetNextStatus(UIS_STANDBY ); } } /*****************************服务器设置结束**********************************/ /*****************************版本设置开始**********************************/ unsigned char fotaStep; unsigned int fotaTick; void fotaStepSet(unsigned char newStep){ fotaStep=newStep; } void fotaMsgShow(char *msg){ #ifdef USE_12X12_FONT_ONLY int len=guiGetStrXLen((char *)msg,FONT_MODE_16X16); #else int len=guiGetStrXLen((char *)msg,FONT_MODE_16X16); #endif guiClearRect(0, 60, GLCD_WIDTH-1, 60+16,guiGetBackColor()); #ifdef USE_12X12_FONT_ONLY guiShowStr((GLCD_WIDTH-len)/2,60+2, msg,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); #else guiShowStr((GLCD_WIDTH-len)/2,60, msg,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); #endif } void fotaMsgShow2(char *msg1, char *msg2){ guiClearRect(0, 45, GLCD_WIDTH-1, 45+16+2+16,guiGetBackColor()); int len=guiGetStrXLen((char *)msg1,FONT_MODE_16X16); guiShowStr((GLCD_WIDTH-len)/2,45, msg1,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); len=guiGetStrXLen((char *)msg2,FONT_MODE_16X16); guiShowStr((GLCD_WIDTH-len)/2,45+16+2, msg2,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } void uiShowVersionSel(char StatusUpdate){ char buf[50]; if(StatusUpdate){ sutApp.fotaVersion[0]=0; guiClearAll(guiGetBackColor()); guiShowCaption(0,"版本更新",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); msgAtSend("AT+FOTA?\r\n"); fotaStep=0; sutApp.fotaStatus=0; fotaMsgShow("正在检测版本"); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确定", "返回"); uTimerStart(&fotaTick, 2000); } switch(fotaStep){ case 0: if(sutApp.fotaStatus==1){ fotaMsgShow("无更新版本"); fotaStep=4; break; }else if(sutApp.fotaStatus==2){ fotaMsgShow("是否更新到:"); snprintf(buf, sizeof(buf), "%s",sutApp.fotaVersion); fotaMsgShow(buf); fotaStep=1; break; } if(uTimerExpired(&fotaTick)){ fotaMsgShow("检测超时"); fotaStep=4; } break; case 1://等待用户确定 break; case 2://用户确定后等待结果 if(sutApp.fotaStatus==3){ fotaMsgShow("升级失败"); fotaStep=4; break; }else if(sutApp.fotaStatus==4){ sutApp.fotaStatus=0;//否则会一直刷新本消息 fotaMsgShow("正在下载"); break; }else if(sutApp.fotaStatus==5){ fotaMsgShow("下载成功"); fotaStep=3; break; } if(uTimerExpired(&fotaTick)){ fotaMsgShow("超时退出"); fotaStep=4; } break; case 3://升级成功,等待重启 LSAPI_OSI_ThreadSleep(1000); fotaStep=6; fotaMsgShow2("确定将关机,再","开机需约60秒"); //msgAtSend("AT+POC=050000\r\n");//停止POC后复位 //MSG_INFO(1, "Stop poc"); //LSAPI_OSI_ThreadSleep(2000); //msgAtSend("AT+TRB\r\n"); //MSG_INFO(1, "Reset system!!!"); //while(1){LSAPI_OSI_ThreadSleep(1000);} break; case 4://延时显示2秒后退出 uTimerStart(&fotaTick, 2000); fotaStep=5; break; case 5://退出升级流程 if(uTimerExpired(&fotaTick)){ getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_SYS_FACTORY); } break; case 6://无更新版本 sutApp.timeOutCnt=0;//不让界面返回待机界面 break; } } void uiShowVersionSelResponse(void){ unsigned char key=getKeyValue(); if(fotaStep!=1 && fotaStep!=6) return; if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY); else if(MKEY_VALUE_MENU==key){ if(fotaStep==1){ fotaMsgShow("请勿断电!"); fotaStep=2; msgAtSend("AT+FOTA=1\r\n"); uTimerStart(&fotaTick, 10000); }else if(fotaStep==6){ paControl(false);//防止一直滴音 MSG_INFO(1, "Reset system!!!"); msgAtSend("AT+POC=050000\r\n"); msgAtSend("AT+TRB\r\n"); while(1){LSAPI_OSI_ThreadSleep(1000);} } } } /*****************************版本设置结束**********************************/ /*****************************工程设置开始*********************************/ void uiShowFactory(char flash){ static const char *apcPtr[]={ //"1.服务器设置", //"2.版本升级", "1.CSQ查看", "2.耳机MIC增益", // "5.耳机SPK增益", // "3.字库更新", "" }; if(flash){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"工程设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); uiMenuInit(&sutMenuSysSetup,apcPtr,FONT_MODE_16X16); } } void uiShowFactoryResponse(void){ unsigned short key; key=uiMenuResponse(&sutMenuSysSetup); if(MKEY_VALUE_MENU==key){ switch(sutMenuSysSetup.handle){ // case 0://服务器设置 // uISetNextStatus(UIS_MENU_SYS_SERVERPASS); // break; // case 1://版本升级 // uISetNextStatus(UIS_MENU_SYS_VERSION); // break; case 0://CSQ查看 uISetNextStatus(UIS_MENU_SYS_CSQ); break; case 1://设置mic增益 uISetNextStatus(UIS_MENU_SYS_MIC); break; //case 4://耳机SPK增益 // uISetNextStatus(UIS_MENU_SYS_SPK); // break; /* case 2://字库更新 uISetNextStatus(UIS_MENU_SYS_FONT); break; */ } if(sutMenuSysSetup.handle<=2) uiPushStack(sutMenuSysSetup.handle); }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL); } /*****************************工程设置结束***********************************/ /*****************************提示音设置开始********************************/ unsigned char noteSetTmp; static void switchFlash(void){ char info[30]; unsigned short x,y,len; if(noteSetTmp==0) snprintf(info, sizeof(info), "关闭"); else snprintf(info, sizeof(info), "打开"); len=guiGetStrXLen((char *)info, FONT_MODE_16X16); x=(GLCD_WIDTH-len)/2; y=UI_CONTENT_SHOW_Y+(GLCD_HEIGHT-UI_CONTENT_SHOW_Y)/2-12; guiShowStr(x,y,info, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } void uiShowNoteSel(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"提示音设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); noteSetTmp=newPara.KeySound; switchFlash(); uiMenuShowBottomIndacitor("保存", "返回"); } } void uiShowNoteSelResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL); else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; if(newPara.KeySound != noteSetTmp){ newPara.KeySound=noteSetTmp; #ifndef ENABLE_PWM_BEEP if(noteSetTmp==0) msgAtSend("AT+TONES=0\r\n"); else msgAtSend("AT+TONES=1\r\n"); #endif sysIniSave("noteSel"); } uISetNextStatus(UIS_MENU_SYS_SEL); }else if(MKEY_VALUE_DOWN || MKEY_VALUE_UP){ if(noteSetTmp==0) noteSetTmp=1; else noteSetTmp=0; switchFlash(); } } /*****************************提示音设置结束********************************/ /*****************************关机界面提示开始**********************************/ void uiShowShutDown(char update){ if(update){ lcdBackLightApi(1); guiClearAll(guiGetBackColor()); guiShowCaption(0,"关机",UI_STATUS_BAR_HEIGH,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); guiShowMessageBox("确定关机?"); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确定", "取消"); } } void uiShowShutDownResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key){ if(sutApp.waitEscReleased==0) uISetNextStatus(UIS_STANDBY); }else if(MKEY_VALUE_MENU==key){ MSG_INFO(1, "Power is off!"); appSleepCtl(ASLEEP_PWR, 1); } } /*****************************关机界面提示结束**********************************/ /*****************************CSQ查看开始********************************/ void CSQShow(unsigned int exeInterval,char StatusUpdate){ char info[30]; static int g_iCSQ=-1,cnt=1000; int y=UI_CONTENT_SHOW_Y+(GLCD_HEIGHT-UI_CONTENT_SHOW_Y)/2-12; if(g_iCSQ!=sutApp.g_iCSQ || StatusUpdate){ g_iCSQ=sutApp.g_iCSQ; snprintf(info, sizeof(info), "CSQ:%d ", g_iCSQ); guiShowStr(GLCD_HEIGHT/2-24,y,info, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } if(++cnt<(1500/exeInterval)) return; cnt=0; msgAtSend("AT+CSQ\r\n"); } void uiShowCsqSel(char StatusUpdate,unsigned int exeInterval){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"CSQ查看",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor(NULL, "返回"); } CSQShow(exeInterval,StatusUpdate); } void uiShowCsqSelResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY); } /*****************************CSQ查看结束********************************/ /*******************************MIC/SPK查看************************************/ unsigned char micSpkTmp; void MicSpkShow(void){ char info[30]; unsigned short x,y,len; snprintf(info, sizeof(info), "%d ",micSpkTmp+1); len=guiGetStrXLen((char *)info, FONT_MODE_16X16); x=(GLCD_WIDTH-len)/2; y=UI_CONTENT_SHOW_Y+(GLCD_HEIGHT-UI_CONTENT_SHOW_Y)/2-12; guiShowStr(x,y,info, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } void uiShowMicSel(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"耳机MIC增益",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确定", "返回"); micSpkTmp=newPara.micGain; MicSpkShow(); } } void uiShowMicSelResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_DOWN==key){ if(micSpkTmp==0) micSpkTmp=MIC_GAIN_NUM-1; else micSpkTmp--; MicSpkShow(); }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY); else if(MKEY_VALUE_MENU==key){ if(micSpkTmp!= newPara.micGain){ newPara.micGain=micSpkTmp; sysIniSave("micSel"); if(sutApp.earLev!=0) VolMicUpdate(); } getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_SYS_FACTORY); } } void uiShowSpkSel(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"耳机SPK增益",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确定", "返回"); micSpkTmp=newPara.spkGain; MicSpkShow(); } } void uiShowSpkSelResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_DOWN==key){ if(micSpkTmp==0) micSpkTmp=SPK_GAIN_NUM-1; else micSpkTmp--; MicSpkShow(); }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY); else if(MKEY_VALUE_MENU==key){ if(micSpkTmp!= newPara.spkGain){ newPara.spkGain=micSpkTmp; sysIniSave("spkSel"); if(sutApp.earLev!=0) VolSpkUpdate(); } getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_SYS_FACTORY); } } /******************************MIC/SPK查看结束*********************************/ /******************************fota更新生辟字库**********************************/ #include "lsapi_http.h" #define FONT_16_FILE HZK_16_NEW_FILE #define FONT_16_MD5 "HZK16_Ext_md5.txt" #define FONT_12_FILE HZK_12_NEW_FILE #define FONT_12_MD5 "HZK12_Ext_md5.txt" LSAPI_OSI_Thread_t *fontThread=NULL; short fontLoadStatus; bool fontResult; HttpInfoSet httpFont; //return:false, not finished, true, done //status:1:busy //status:-1:get 16 file failed //status:-2:16 file len err //status:-3:16 file format err //status:-4:16 ok, get 12 file failed //status:-5:16 ok, get 12 file len err //status:-6:16 ok, get 12 file fotmat err //status:0 16,12 ok bool httpFontGetStatus(short *status){//获取更新结果接口 if(fontResult==true) *status=fontLoadStatus; return fontResult; } static void fontEntry(void *param); bool httpFontGetStart(void){//开启更新接口 fontResult=false; if(NULL != fontThread) return true; fontLoadStatus=-1; fontThread=LSAPI_OSI_ThreadCreate("lteEntry", fontEntry,NULL,LSAPI_OSI_PRIORITY_NORMAL,1024*10,4); if(NULL==fontThread) return false; } void fontSaveData(unsigned char *data, unsigned int len){ int fd; char filename[30]; if(data[0]==12){ extFontFileCtl(data[0],false); snprintf(filename,sizeof(filename), "%s",FONT_12_FILE); }else if(data[0]==16){ extFontFileCtl(data[0],false); snprintf(filename,sizeof(filename), "%s",FONT_16_FILE); } else return; fd=LSAPI_FS_Open(filename, LSAPI_FS_O_RDWR | LSAPI_FS_O_CREAT | LSAPI_FS_O_TRUNC,0x0); if(fd<0){ extFontFileCtl(data[0],true); return; } LSAPI_FS_Write(fd, data, len); LSAPI_FS_Close(fd); extFontFileCtl(data[0],true); } bool checkFileMd5(char type, unsigned char *md5, unsigned int len){ int fd; char filename[30]; unsigned char rmd5[32]; if(type==0)snprintf(filename,sizeof(filename), "%s",FONT_16_MD5); else if(type==1)snprintf(filename,sizeof(filename), "%s",FONT_12_MD5); else return false; fd=LSAPI_FS_Open(filename, LSAPI_FS_O_RDONLY,0); if(fd<0){ MSG_WARN(1, "'%s' open failed to read", filename); return false; } LSAPI_FS_Read(fd, rmd5, sizeof(rmd5)); LSAPI_FS_Close(fd); if(0==memcmp(rmd5, md5, len)) return true; else return false; } void fontSaveMd5(char type, unsigned char *md5, unsigned int len){ int fd; char filename[30]; if(type==0)snprintf(filename,sizeof(filename), "%s",FONT_16_MD5); else if(type==1)snprintf(filename,sizeof(filename), "%s",FONT_12_MD5); else return; fd=LSAPI_FS_Open(filename, LSAPI_FS_O_RDWR | LSAPI_FS_O_CREAT | LSAPI_FS_O_TRUNC,0); if(fd<0){ MSG_WARN(1, "'%s' open failed to save", filename); return; } LSAPI_FS_Write(fd, md5, len); LSAPI_FS_Close(fd); } static void fontEntry(void *param){ bool font12_noneed_update=true; bool font16_noneed_update=true; char type=0; unsigned int md5_len; unsigned char rmd5[32]; bool needClear=true; //get 16 md5 MSG_INFO(1,"try get 16 md5"); memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1; snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_16_MD5); if(LSAPI_HTTP_GET(&httpFont)){ fontLoadStatus=-2; goto FONT_END; } //ana 16 md5 if(httpFont.recvlen!=32){ fontLoadStatus=-3; goto FONT_END; } md5_len=httpFont.recvlen; memcpy(rmd5, httpFont.RecvData, md5_len); LSAPI_HTTP_ParaClear(&httpFont); font16_noneed_update=checkFileMd5(type, rmd5, md5_len); if(false==font16_noneed_update){ MSG_INFO(1,"try get 16 file"); //get 16 first memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1; snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_16_FILE); if(LSAPI_HTTP_GET(&httpFont)){//尝试获取差分包 fontLoadStatus=-4; goto FONT_END; } if(httpFont.recvlen<35){//1+[2+32].... fontLoadStatus=-5; goto FONT_END; }else if(httpFont.RecvData[0]!=16 || (httpFont.recvlen-1)%34){ fontLoadStatus=-6; goto FONT_END; } fontSaveData(httpFont.RecvData, httpFont.recvlen); fontSaveMd5(type, rmd5, md5_len); LSAPI_HTTP_ParaClear(&httpFont); } type=1; //get 12 md5 MSG_INFO(1,"try get 12 md5"); memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1; snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_12_MD5); if(LSAPI_HTTP_GET(&httpFont)){ fontLoadStatus=-7; goto FONT_END; } //ana 12 md5 if(httpFont.recvlen!=32){ fontLoadStatus=-8; goto FONT_END; } md5_len=httpFont.recvlen; memcpy(rmd5, httpFont.RecvData, md5_len); LSAPI_HTTP_ParaClear(&httpFont); font12_noneed_update=checkFileMd5(type, rmd5, md5_len); if(false==font12_noneed_update){ MSG_INFO(1,"try get 12 file"); //get 12 then memset(&httpFont, 0, sizeof(httpFont));httpFont.cid=1; snprintf(httpFont.url, sizeof(httpFont.url),"http://120.77.66.129/higos/extFonts/%s",FONT_12_FILE); if(LSAPI_HTTP_GET(&httpFont)){//尝试获取差分包 fontLoadStatus=-9; goto FONT_END; } if(httpFont.recvlen<27){//1+[2+24].... fontLoadStatus=-10; goto FONT_END; }else if(httpFont.RecvData[0]!=12 || (httpFont.recvlen-1)%26){ fontLoadStatus=-11; goto FONT_END; } fontSaveData(httpFont.RecvData, httpFont.recvlen); fontSaveMd5(type, rmd5, md5_len); LSAPI_HTTP_ParaClear(&httpFont); needClear=false; }else needClear=false; if(font12_noneed_update==true && font16_noneed_update==true) fontLoadStatus=0; else fontLoadStatus=1; FONT_END: fontThread=NULL; fontResult=true; if(needClear==true) LSAPI_HTTP_ParaClear(&httpFont); LSAPI_OSI_ThreadExit(); } //6、UI接口界面(供参考) char fontUpdateStatus=0; void uiShowFontUpdate(char StatusUpdate){ static unsigned int timer; char info[30]; short status; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"字库更新",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); fontUpdateStatus=0; guiShowMessageBox("确定更新?"); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确定", "返回"); } if(fontUpdateStatus==1){ if(true==httpFontGetStatus(&status)){ if(status==1){ guiShowMessageBox("更新成功"); uTimerStart(&timer, 2000); }else if(status==0){ guiShowMessageBox("无需更新"); uTimerStart(&timer, 2000); }else{ snprintf(info,sizeof(info), "更新失败:%d",status); guiShowMessageBox(info); uTimerStart(&timer, 2000); } fontUpdateStatus=2; } }else if(fontUpdateStatus==2){ if(uTimerExpired(&timer)){ getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_SYS_FACTORY); } } } void uiShowFontUpdateResponse(){ unsigned short key=getKeyValue(); if(fontUpdateStatus!=0) return; if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_FACTORY); else if(MKEY_VALUE_MENU==key){ httpFontGetStart(); fontUpdateStatus=1; guiShowMessageBox("正在更新"); } } /******************************fota更新生辟字库结束***********************************/ #ifdef USE_LEFT_MOVING /***************************主界面滚动显示**********************************/ #define MOVING_ITME_NUM 3 //显示三条项目 #define MAX_ROW_BYTE (20+1+2) //最多显示20个字节,10个中文 #define MAX_SHOW_BYTE 12 //最多一次性显示10个字节 void leftMoveStr(char *name, unsigned short len){ char temp[3]; unsigned char move=1; unsigned short i; if(name[0] > 0x80) move=2; for(i=0;i0x80){ if(i+2>cpsize){//装不下了,停止 break; } des[i]=src[i]; des[i+1]=src[i+1]; i++; }else des[i]=src[i]; } des[i]=0; } void showbufdata(char type, unsigned char *data, int len){ char info[100],buf[3]; int i; sprintf(info, "D[%d]%c:",len,type); for(i=0;iMAX_SHOW_BYTE) needMove=1; else needMove=0; if(*sum != tsum || reset){ guiClearRect(0, showY, GLCD_WIDTH-1, showY+16,guiGetBackColor()); guiShowStr(showX, showY+2, &indicators[i][0], FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } showX += 30; if(needMove==0){ if(*sum != tsum || reset){//内容发生了变化 //只显示一次即可 snprintf(showPtr, MAX_ROW_BYTE, "%s", ptr); guiClearRect(showX, showY, GLCD_WIDTH-1, showY+16,guiGetBackColor()); guiShowStr(showX, showY, showPtr, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } }else{//做移动处理 if(*sum != tsum) memcpy(showPtr, ptr, MAX_ROW_BYTE); else leftMoveStr(showPtr, strlen(showPtr)); getRealShow(showMax, showPtr,MAX_SHOW_BYTE); guiClearRect(showX, showY, GLCD_WIDTH-1, showY+16,guiGetBackColor()); guiShowStr(showX,showY, showMax, FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } *sum=tsum; } } #endif /*****************************提示音设置开始********************************/ #define LOCK_MODE_NUM 2 void uiShowLockUpdate(char StatusUpdate){ static const char *lockMode[LOCK_MODE_NUM+1]={ "锁按键", "锁按键+PTT", "" }; char Features[LOCK_MODE_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"键锁设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iok_back=1; if(newPara.lockType != sutListBox.handle){ newPara.lockType=sutListBox.handle; sysIniSave("lock"); } uISetNextStatus(UIS_MENU_SYS_SEL); } } /*****************************提示音设置结束********************************/ /*****************************蓝牙主部分开始*********************************/ void uiShowBleMenuSysSetup(char flash){ static const char *apcPtr[]={ "1.蓝牙开关", "2.蓝牙配对", "3.指环配对", "4.喇叭音量", "5.话筒音量", "6.蓝牙初始化", "7.指环初始化", "" }; if(flash){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"蓝牙设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); uiMenuInit(&sutMenuSysSetup,apcPtr,FONT_MODE_16X16); } } void sysBleSetResponse(void){ unsigned short key; key=uiMenuResponse(&sutMenuSysSetup); if(MKEY_VALUE_MENU==key){ switch(sutMenuSysSetup.handle){ case 0: uISetNextStatus(UIS_MENU_BLE_ENABLE); break; case 1: uISetNextStatus(UIS_MENU_BLE_MATCH); break; case 2: uISetNextStatus(UIS_MENU_RING_MATCH); break; case 3: uISetNextStatus(UIS_MENU_BLESPK_SEL); break; case 4: uISetNextStatus(UIS_MENU_BLEMIC_SEL); break; case 5: uISetNextStatus(UIS_MENU_BLE_REBOOT); break; case 6: uISetNextStatus(UIS_MENU_RING_REBOOT); break; } if(sutMenuSysSetup.handle<=6) uiPushStack(sutMenuSysSetup.handle); }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_MAIN); } /*****************************蓝牙主部分结束*********************************/ static const char *BoolMode[NORMAL_BOOL_NUM+1]={ "开启", "关闭", "" }; /*****************************蓝牙开关开始********************************/ void uiShowBleEnableUpdate(char StatusUpdate){ char Features[NORMAL_BOOL_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"蓝牙开关",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iok_back=1; if(newPara.BleEnable != sutListBox.handle){ newPara.BleEnable=sutListBox.handle; if(newPara.BleEnable)BLE_Open(); else BLE_Close(); sysIniSave("bleenable"); } uISetNextStatus(UIS_MENU_BLE_MAIN); } } /*****************************蓝牙开关结束********************************/ static int UiDlycnt=0; /*****************************蓝牙耳机配对开始********************************/ void uiShowBleMacth(char StatusUpdate){ char info[20]; short y=GLCD_HEIGHT/2; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"蓝牙配对",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("进入配对", "返回"); UserTempIndex=0; UiDlycnt=0; } if(UserTempIndex){ if(UiDlycnt%(1000/APP_SUB_DIV_TIME)==0){ Ble_SendAT(Ble_IO2AT,sizeof(Ble_IO2AT)); snprintf(info, sizeof(info),"正在匹配%02d",UiDlycnt/(1000/APP_SUB_DIV_TIME)); guiShowStr(50, y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); } if(++UiDlycnt>20000/APP_SUB_DIV_TIME){ UiDlycnt=0; BT_Match_IOctr(0); UserTempIndex=0; uISetNextStatus(UIS_MENU_BLE_MAIN); } } } void uiShowBleMacthUpdateResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN); else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; UserTempIndex=1; BT_Match_IOctr(1); } } /*****************************蓝牙配对耳机结束********************************/ /*****************************指环配对开始********************************/ //UserTempIndex void StartTimerCnt(){ } void uiShowRingUpdate(char StatusUpdate){ short y=GLCD_HEIGHT/2; char info[20]; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"指环配对",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("进入配对", "返回"); UserTempIndex=0; UiDlycnt=0; } if(UserTempIndex){ if(UiDlycnt%(1000/APP_SUB_DIV_TIME)==0){ snprintf(info, sizeof(info),"正在匹配%02d",UiDlycnt/(1000/APP_SUB_DIV_TIME)); guiShowStr(50, y,info, FONT_MODE_16X16, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); } if(++UiDlycnt>10000/APP_SUB_DIV_TIME){ UiDlycnt=0; Ble_Match_IOCTR(0); UserTempIndex=0; uISetNextStatus(UIS_MENU_BLE_MAIN); } } } void uiShowRingUpdateResponse(void){ //static int timer=0; unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) { UserTempIndex=0; Ble_Match_IOCTR(0); uISetNextStatus(UIS_MENU_BLE_MAIN); } else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; UserTempIndex=1; Ble_Match_IOCTR(1); } } /*****************************指环配对结束********************************/ #define BLEAUD_NUM 16 static BleAudioLvFlash(char dir,char type){ char buf[50]; unsigned short y=70; if(dir==0){ UserTempIndex=newPara.BleSpkLv; }else if(dir==1){ if(++UserTempIndex>BLEAUD_NUM) UserTempIndex=0; }else if(dir==2){ if(UserTempIndex>0) UserTempIndex--; else UserTempIndex=BLEAUD_NUM; }else return; if(!type) snprintf(buf, sizeof(buf), "喇叭音量:%02d",UserTempIndex); else snprintf(buf, sizeof(buf), "话筒音量:%02d",UserTempIndex); guiClearRect(0,y,GLCD_WIDTH-1, y+24,guiGetBackColor()); guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } /*****************************蓝牙耳机SPK 开始***********************************/ void uiShowBleSpkUpdate(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"喇叭音量",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); BleAudioLvFlash(0,0); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); } } void uiShowBleSpkUpdateResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN); else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,0); else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,0); else if(MKEY_VALUE_MENU==key){ newPara.BleSpkLv=UserTempIndex; sysIniSave("lock"); getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_BLE_MAIN); } } /*****************************蓝牙耳机SPK 结束***********************************/ /*****************************蓝牙耳机MIC 开始***********************************/ void uiShowBleMicUpdate(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"话筒音量",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); BleAudioLvFlash(0,1); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); } } void uiShowBleMicUpdateResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN); else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,1); else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,1); else if(MKEY_VALUE_MENU==key){ newPara.BleMicLv=UserTempIndex; sysIniSave("lock"); getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_BLE_MAIN); } } /*****************************蓝牙耳机MIC 结束***********************************/ /*****************************蓝牙初始化开始***********************************/ void uiShowBleInitUpdate(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"蓝牙初始化",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); BleAudioLvFlash(0,1); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); } } void uiShowBleInitUpdateResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN); else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,1); else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,1); else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_BLE_MAIN); } } /*****************************蓝牙初始化 结束***********************************/ /*****************************指环初始化 开始***********************************/ void uiShowRingInitUpdate(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"指环初始化",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); BleAudioLvFlash(0,1); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); } } void uiShowRingInitUpdateResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_BLE_MAIN); else if(MKEY_VALUE_UP==key)BleAudioLvFlash(1,1); else if(MKEY_VALUE_DOWN==key)BleAudioLvFlash(2,1); else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_BLE_MAIN); } } /*****************************指环初始化 结束***********************************/ /* UIS_MENU_XINBIAO_MAIN, UIS_MENU_GPS_ENABLE, UIS_MENU_GPS_STATION,//GPS 站点 UIS_MENU_XINBIAO_INFO, UIS_MENU_XINBIAO_LIVE, UIS_MENU_XINBIAO_SENDMODE, UIS_MENU_XINBIAO_TIME, UIS_MENU_XINBIAO_IP, UIS_MENU_XINBIAO_LISTCLEAR, */ /*****************************信标主部分开始*********************************/ void uiShowXINBIAOMenuSysSetup(char flash){ static const char *apcPtr[]={ "1.gps开关", "2.站点设置", "3.信标详情", "4.实时信标", "5.信标发送模式", "6.定时时间", "7.上传网关", "8.清除列表", "" }; if(flash){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"信标设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); uiMenuInit(&sutMenuSysSetup,apcPtr,FONT_MODE_16X16); } } void sysXINBIAOSetResponse(void){ unsigned short key; key=uiMenuResponse(&sutMenuSysSetup); if(MKEY_VALUE_MENU==key){ switch(sutMenuSysSetup.handle){ case 0: uISetNextStatus(UIS_MENU_GPS_ENABLE); break; case 1: uISetNextStatus(UIS_MENU_GPS_STATION); break; case 2: uISetNextStatus(UIS_MENU_XINBIAO_INFO); break; case 3: uISetNextStatus(UIS_MENU_XINBIAO_LIVE); break; case 4: uISetNextStatus(UIS_MENU_XINBIAO_SENDMODE); break; case 5: uISetNextStatus(UIS_MENU_XINBIAO_TIME); break; case 6: uISetNextStatus(UIS_MENU_XINBIAO_IP); break; case 7: uISetNextStatus(UIS_MENU_XINBIAO_LISTCLEAR); break; } if(sutMenuSysSetup.handle<=7) uiPushStack(sutMenuSysSetup.handle); }else if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_MAIN); } /*****************************信标主部分结束*********************************/ /*****************************站点开关开始********************************/ void uiShowXINBIAOStationUpdate(char StatusUpdate){ char Features[NORMAL_BOOL_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"站点设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iok_back=1; if(newPara.Xinbiao_station != sutListBox.handle){ newPara.Xinbiao_station=sutListBox.handle; sysIniSave("bleenable"); } uISetNextStatus(UIS_MENU_XINBIAO_MAIN); } } /*****************************站点开关结束********************************/ /*****************************信标详情开始********************************/ void uiShowXINBIAOPageShow(char dir){ short y=0; char Showbuf[22]; y=LIST_TOPY; //LIST_ITEM_HEGH if(dir==0)UserTempIndex=0; else if(dir==1){ if(++UserTempIndex>sut_xinbiao_info.Max_id)UserTempIndex=0; }else if(dir==2){ if(--UserTempIndex==0)UserTempIndex=sut_xinbiao_info.Max_id-1; } snprintf(Showbuf,sizeof(Showbuf),"ID号:%03d",sut_xinbiaopage.xb_id); guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor()); y+=LIST_ITEM_HEGH; snprintf(Showbuf,sizeof(Showbuf),"名字:%s",sut_xinbiaopage.xb_CallName); guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor()); y+=LIST_ITEM_HEGH; //guiClearRect(0, y,GLCD_WIDTH-1, y+12+5+12,guiGetBackColor()); snprintf(Showbuf, sizeof(Showbuf), "纬度 S:%d.%05d",sut_xinbiaopage.xb_latitue/1000000,sut_xinbiaopage.xb_latitue%1000000); guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); y+=LIST_ITEM_HEGH; snprintf(Showbuf, sizeof(Showbuf), "经度 W:%d.%05d",sut_xinbiaopage.xb_longitue/1000000,sut_xinbiaopage.xb_longitue%1000000); guiShowStr(30,y, Showbuf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); y+=LIST_ITEM_HEGH; snprintf(Showbuf,sizeof(Showbuf),"航向:%s",sut_xinbiaopage.xb_heading); guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor()); y+=LIST_ITEM_HEGH; snprintf(Showbuf,sizeof(Showbuf),"方向:%s",sut_xinbiaopage.xb_dir); guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor()); y+=LIST_ITEM_HEGH; snprintf(Showbuf,sizeof(Showbuf),"海拔:%s",sut_xinbiaopage.xb_elevation); guiShowStr(0,y,Showbuf,FONT_MODE_16X16,REVERSED_NO,COLOR_BLACK,guiGetBackColor()); y+=LIST_ITEM_HEGH; } void uiShowXINBIAOInfoUpdate(char StatusUpdate){ char Features[NORMAL_BOOL_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"信标详情",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); UserTempIndex=0; uiShowXINBIAOPageShow(0); uiMenuShowBottomIndacitor("详情", "返回"); } } /*****************************信标详情结束********************************/ /*****************************实时信标开关开始********************************/ void uiShowXINBIAOEnableLive(char StatusUpdate){ char Features[NORMAL_BOOL_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"实时信标",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iok_back=1; if(newPara.Xinbiao_LiveUpdate != sutListBox.handle){ newPara.Xinbiao_LiveUpdate=sutListBox.handle; sysIniSave("bleenable"); } uISetNextStatus(UIS_MENU_XINBIAO_MAIN); } } /*****************************实时信标开关结束********************************/ /*****************************信标发送开始********************************/ void uiShowXINBIAOTriggerMode(char StatusUpdate){ char Features[3]; unsigned char i; static const char *xinbiaoMode[3+1]={ "PTT联动", "定时发送", "PTT联动+定时", "" }; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"信标发送",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;i<3;i++){ if(i==newPara.Xinbiao_SendMode) Features[i]=1; else Features[i]=0; } ListBoxInit(&sutListBox,xinbiaoMode,0,commonIcon2,Features,0); uiMenuShowBottomIndacitor("保存", "返回"); } } void uiShowXINBIAOTriggerModeResponse(void){ unsigned short key=ListBoxResponse(&sutListBox); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN); else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; if(newPara.Xinbiao_SendMode != sutListBox.handle){ newPara.Xinbiao_SendMode=sutListBox.handle; sysIniSave("bleenable"); } uISetNextStatus(UIS_MENU_XINBIAO_MAIN); } } /*****************************信标发送结束********************************/ /*****************************信标时间开始********************************/ static XinbiaoTimeFlash(char dir){ char buf[50]; unsigned short y=70; if(dir==0){ UserTempIndex=newPara.Xinbiao_Time; }else if(dir==1){ if(++UserTempIndex>10) UserTempIndex=0; }else if(dir==2){ if(UserTempIndex>0) UserTempIndex--; else UserTempIndex=10; }else return; snprintf(buf, sizeof(buf), "%02d 秒",(UserTempIndex+1)*5); guiClearRect(0,y,GLCD_WIDTH-1, y+24,guiGetBackColor()); guiShowStr(30,y, buf,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor()); } void uiShowXinbiaoTimeUpdate(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"定时时间",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); XinbiaoTimeFlash(0); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); } } void uiShowXinbiaoTimeUpdateResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN); else if(MKEY_VALUE_UP==key)XinbiaoTimeFlash(1); else if(MKEY_VALUE_DOWN==key)XinbiaoTimeFlash(2); else if(MKEY_VALUE_MENU==key){ newPara.Xinbiao_Time=UserTempIndex; sysIniSave("lock"); getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_XINBIAO_MAIN); } } /*****************************信标时间结束********************************/ /*****************************上传网关开始********************************/ void uiShowXINBIAOGateway(char StatusUpdate){ char Features[NORMAL_BOOL_NUM]; unsigned char i; if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"上传网关",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); uiMenuShowBottomLine(); for(i=0;iok_back=1; if(newPara.Xinbiao_IpEnable != sutListBox.handle){ newPara.Xinbiao_IpEnable=sutListBox.handle; sysIniSave("bleenable"); } uISetNextStatus(UIS_MENU_XINBIAO_MAIN); } } /*****************************上传网关结束********************************/ /*****************************清除列表开始********************************/ void uiShowXinbiaoClearlist(char StatusUpdate){ if(StatusUpdate){ guiClearAll(guiGetBackColor()); guiShowCaption(0,"清除列表",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_16X16); BleAudioLvFlash(0,1); uiMenuShowBottomLine(); uiMenuShowBottomIndacitor("确认", "返回"); } } void uiShowXinbiaoClearlistResponse(void){ unsigned short key=getKeyValue(); if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_XINBIAO_MAIN); else if(MKEY_VALUE_MENU==key){ getStackStruct()->ok_back=1; uISetNextStatus(UIS_MENU_XINBIAO_MAIN); } } /*****************************清除列表结束********************************/