/* UI具体界面在此文件中实现 */ #include "includes.h" /********************************UI状态机记录操作功能*************************/ UI_STACKDEF uiStack; UI_STACKDEF *getStackStruct(void){return &uiStack;} static void uiStackInit(void){ memset((unsigned char *)&uiStack, 0, sizeof(uiStack)); uiStack.ok_back=0; uiStack.top=-1; uiStack.FastUiChange=0; } short uiPushStack(unsigned char data){ if(uiStack.top==4) return 1; uiStack.top ++; uiStack.sta[uiStack.top]=data; return 0; } short uiPullStack(void){ unsigned char tmp; if(uiStack.top<0) return -1; else{ tmp=uiStack.sta[uiStack.top]; uiStack.top--; return tmp; } } /********************************UI状态切换功能*********************************/ UI_STATUSDEF sutUIstatus; void uISetNextStatus(unsigned char status){ sutUIstatus.LastStatus=sutUIstatus.NextStatus; sutUIstatus.NextStatus=status; } void uiDataInit(void){ memset((unsigned char *)&sutUIstatus, 0, sizeof(UI_STATUSDEF)); uISetNextStatus(UIS_STANDBY); } void uiLoop(unsigned int exeInterval){ char StatusUpdate=0; if(sutUIstatus.Status!=sutUIstatus.NextStatus){ sutUIstatus.LastStatus=sutUIstatus.Status; sutUIstatus.Status=sutUIstatus.NextStatus; sutUIstatus.ItemRefresh=1; StatusUpdate=1; } if(sutApp.forceUiFlash!=0){ StatusUpdate=1; sutApp.forceUiFlash=0; } uiShowStatusBar(StatusUpdate,exeInterval); switch(sutUIstatus.Status){ /***********0级:待机界面显示入口*************/ case UIS_STANDBY: uiStackInit(); uiShowMainInterface(StatusUpdate,exeInterval); break; /***********1级:主菜单界面显示入口*************/ case UIS_MENU_MAIN: uiShowMenuMain(StatusUpdate); break; /***********1.1级:群组选择界面显示入口*************/ case UIS_MENU_GROUP_SEL: uiShowGUSel(StatusUpdate,exeInterval,0); break; /***********1.2级:成员选择界面显示入口*************/ case UIS_MENU_USER_SEL: uiShowGUSel(StatusUpdate,exeInterval,1); break; /***********1.3级:文本信息界面显示入口*************/ case UIS_MENU_MAIL_SEL: uiShowMailBox(StatusUpdate); break; /***********1.4级:系统设置界面显示入口*************/ case UIS_MENU_SYS_SEL: uiShowMenuSysSetup(StatusUpdate); break; /***********1.5级:定位设置界面显示入口*************/ case UIS_MENU_LOCATION_SEL: uiShowMenuLocationSel(StatusUpdate); break; /***********1.6级:终端信息界面显示入口*************/ case UIS_MENU_INFO_SEL: uiShowInformation(StatusUpdate); break; /****************1.3.1文本消息菜单-消息读界面显示入口*/ case UIS_MENU_MAIL_READ: MessageReadShow(StatusUpdate); break; /****************1.3.2文本消息菜单-消息选项界面显示入口*/ case UIS_MENU_MAIL_OPTION: MessageOptionShow(StatusUpdate); break; /****************1.3.2.1文本消息菜单-消息删除界面显示入口*/ case UIS_MENU_MAIL_DEL: MessageDeletShow(StatusUpdate); break; /****************1.3.2.2文本消息菜单-消息格式化界面显示入口*/ case UIS_MENU_MAIL_FORMAT: MessageFormatShow(StatusUpdate); break; /***********1.4.1级:系统设置-LCD设置界面显示入口*************/ case UIS_MENU_SYS_LCD: uiShowLcdSel(StatusUpdate); break; /***********1.4.2级:系统设置-网络设置界面显示入口*************/ case UIS_MENU_SYS_NET: uiShowNetSel(StatusUpdate); break; /***********1.4.3级:系统设置-卡设置界面显示入口*************/ case UIS_MENU_SYS_SIM: uiShowSimSel(StatusUpdate); break; /***********1.4.4级:系统设置-功耗设置界面显示入口*************/ case UIS_MENU_SYS_PWR: uiShowPwrSel(StatusUpdate); break; /***********1.4.5.1级:系统设置-服务器密码设置界面显示入口*************/ case UIS_MENU_SYS_SERVERPASS: uiShowServerPassSel(StatusUpdate); break; /***********1.4.5.2级:系统设置-服务器设置界面显示入口*************/ case UIS_MENU_SYS_SERVER: uiShowServerSel(StatusUpdate); break; /***********1.4.6级:系统设置-版本设置界面显示入口*************/ case UIS_MENU_SYS_VERSION: uiShowVersionSel(StatusUpdate); break; /***********1.4.7级:系统设置-提示音设置界面显示入口*****************/ case UIS_MENU_SYS_NOTE: uiShowNoteSel(StatusUpdate); break; case UIS_MENU_SYS_FACTORY: uiShowFactory(StatusUpdate); break; case UIS_MENU_SHUT_PWR: uiShowShutDown(StatusUpdate); break; case UIS_MENU_SYS_CSQ: uiShowCsqSel(StatusUpdate,exeInterval); break; case UIS_MENU_SYS_MIC: uiShowMicSel(StatusUpdate); break; case UIS_MENU_SYS_SPK: uiShowSpkSel(StatusUpdate); break; case UIS_MENU_SYS_FONT: uiShowFontUpdate(StatusUpdate); break; case UIS_MENU_SYS_LOCK: uiShowLockUpdate(StatusUpdate); break; } } /********************************UI响应功能********************************/ void uiResponse(unsigned int exeInterval){ unsigned short key; if(0 != sutApp.gtTMode && sutUIstatus.Status!=UIS_MENU_SHUT_PWR) return;//关机界面允许接授键值 if(!isKeyPress()) return; /* not finished yet if(getKeyValue()==KEY_INFO){ if(g_uslockflag==1)return; uiStack.FastUiChange=1; UISetNextStatus(UIS_MENU_GROUP_SEL); }else if(getKeyValue()==KEY_FUNC){ if(g_uslockflag==1)return; uiStack.FastUiChange=1; UISetNextStatus(UIS_MENU_USER_SEL); } */ switch(sutUIstatus.Status){ /****************0级:待机界面响应******************/ case UIS_STANDBY: switch(getKeyValue()){ case MKEY_VALUE_DOWN: uISetNextStatus(UIS_MENU_MAIN); break; case MKEY_VALUE_ESC: if(sutPocStatus.danHuStatus!=0) msgAtSend("AT+POC=500000\r\n"); break; } break; /****************1级:主菜单界面响应***************/ case UIS_MENU_MAIN: MenuMainResponse(); break; /****************1.1级:群组选择界面响应*************/ case UIS_MENU_GROUP_SEL: GroupSelResponse(); break; /****************1.2级:成员选择界面响应*************/ case UIS_MENU_USER_SEL: UserSelResponse(); break; /****************1.3级:文本消息界面响应*************/ case UIS_MENU_MAIL_SEL: MessageResponse(); break; /****************1.4级:系统设置界面响应*/ case UIS_MENU_SYS_SEL: sysTemSetResponse(); break; /****************1.5级:定位设置界面响应*/ case UIS_MENU_LOCATION_SEL: loationSetResponse(); break; /****************1.6级:终端信息界面响应*/ case UIS_MENU_INFO_SEL: uiShowInformationResponse(); break; /****************1.3.1文本消息菜单-消息读响应*/ case UIS_MENU_MAIL_READ: MessageReadResponse(); break; /****************1.3.2文本消息菜单-消息选项响应*/ case UIS_MENU_MAIL_OPTION: MessageOptionResponse(); break; /****************1.3.2.1文本消息菜单-消息删除响应*/ case UIS_MENU_MAIL_DEL: MessageDeletResponse(); break; /****************1.3.2.2文本消息菜单-消息格式化响应*/ case UIS_MENU_MAIL_FORMAT: MessageFormatResponse(); break; /****************1.4.1系统设置子菜单-LCD设置响应*/ case UIS_MENU_SYS_LCD: uiShowLcdSelResponse(); break; /****************1.4.2系统设置子菜单-网络设置响应*/ case UIS_MENU_SYS_NET: uiShowNetSelResponse(); break; /****************1.4.3系统设置子菜单-卡设置响应*/ case UIS_MENU_SYS_SIM: uiShowSimSelResponse(); break; /****************1.4.4系统设置子菜单-功耗设置响应*/ case UIS_MENU_SYS_PWR: uiShowPwrSelResponse(); break; /****************1.4.5.1系统设置子菜单-服务器密码设置响应*/ case UIS_MENU_SYS_SERVERPASS: uiShowServerSelPassResponse(); break; /****************1.4.5.2系统设置子菜单-服务器设置响应*/ case UIS_MENU_SYS_SERVER: uiShowServerSelResponse(); break; /****************1.4.6系统设置子菜单-版本设置响应*/ case UIS_MENU_SYS_VERSION: uiShowVersionSelResponse(); break; case UIS_MENU_SYS_FACTORY: uiShowFactoryResponse(); break; /****************1.4.7系统设置子菜单-提示音设置响应*/ case UIS_MENU_SYS_NOTE: uiShowNoteSelResponse(); break; case UIS_MENU_SHUT_PWR: uiShowShutDownResponse(); break; case UIS_MENU_SYS_CSQ: uiShowCsqSelResponse(); break; case UIS_MENU_SYS_MIC: uiShowMicSelResponse(); break; case UIS_MENU_SYS_SPK: uiShowSpkSelResponse(); break; case UIS_MENU_SYS_FONT: uiShowFontUpdateResponse(); break; case UIS_MENU_SYS_LOCK: uiShowLockUpdateResponse(); break; } if(getKeyValue()==MKEY_VALUE_ESC) uiStack.esc=1; else uiStack.esc=0; } /**********************其它通用接口***********************************/ void uiMenuShowBottomLine(void){ guiDrawHLine(0,GLCD_WIDTH-1,UI_BOTTOM_LINE_Y,1,COLOR_STATUS_BAR); } void uiMenuShowBottomIndacitor(const char *infoLF, const char *infoRI){ short x,y; unsigned short len; y=UI_NOTE_LOCATION_Y; guiClearRect(0,y, GLCD_WIDTH-1, GLCD_HEIGHT-1,guiGetBackColor()); if(NULL != infoLF){ x=2; guiShowStr(x, y,infoLF, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); } if(NULL != infoRI){ len=strlen(infoRI)*8; x=GLCD_WIDTH-1-len; guiShowStr(x, y,infoRI, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor()); } } /* status: 0 超时10秒返回待机界面 else 直接返回界面界面 */ void uiTimeOutToStandby(char status, unsigned int timeinterval){ static short cnt=0; bool needBackToStandBy=false; if(sutApp.gtTMode !=0 || sutApp.gtMode != 0) return; if(0==status){ if(++sutApp.timeOutCnt<(10000/timeinterval)) return; sutApp.timeOutCnt=0; needBackToStandBy=true; }else needBackToStandBy=true; if(needBackToStandBy==false) return; MSG_INFO(1,"Back to standby"); if(sutUIstatus.Status==UIS_STANDBY) return; if(sutUIstatus.Status==UIS_MENU_GROUP_SEL){ appSleepCtl(ASLEEP_GGROUP, 0); }else if(sutUIstatus.Status==UIS_MENU_USER_SEL){ appSleepCtl(ASLEEP_GUSER, 0); } UiassistEnd(0); uISetNextStatus(UIS_STANDBY); }