#include "includes.h"
/****************************状态栏显示部分开始***********************************/
#define MIN_PWR_LEVEL 315 //低于此电压后不工作
#define WARN_PWR_LEVEL 325 //提示请充电电压
static const char *NullPtr="";
//显示信号强度
static void ShowSingle(int CSQ){
unsigned short x=SIGNAL_ICON_X;
unsigned short y=2;
if(sutApp.pocPpp == 0) guiShowBmp(x,y,"Single.bmp");
else guiShowBmp(x,y,"SingleOK.bmp");
//11 3格
x += 7;
if(CSQ<1 || CSQ==99){
guiClearRect(x,y+1,x+10,y+9,COLOR_STATUS_BAR);
}else if(CSQ<8){
guiDrawVLine(x+2,y+8,x,y,guiGetBackColor());
guiClearRect(x+2,y+1,x+10,y+9,COLOR_STATUS_BAR);
}else if(CSQ<16){
guiDrawVLine(x+2,y+8,x,y,guiGetBackColor());
guiDrawVLine(x,y+8,x+3,y,guiGetBackColor());
guiClearRect(x+6,y+1,x+10,y+9,COLOR_STATUS_BAR);
}else if(CSQ<22){
guiDrawVLine(x+2,y+8,x,y,guiGetBackColor());
guiDrawVLine(x,y+8,x+3,y,guiGetBackColor());
guiDrawVLine(x-2,y+8,x+6,y,guiGetBackColor());
guiClearRect(x+9,y+1,x+10,y+9,COLOR_STATUS_BAR);
}else{
guiDrawVLine(x+2,y+8,x,y,guiGetBackColor());
guiDrawVLine(x,y+8,x+3,y,guiGetBackColor());
guiDrawVLine(x-2,y+8,x+6,y,guiGetBackColor());
guiDrawVLine(x-4,y+8,x+9,y,guiGetBackColor());
}
#if 0
if(CSQ<1 || CSQ==99){
guiClearRect(7,3,21,11,COLOR_STATUS_BAR);
}else if(CSQ<8){
guiDrawVLine(9,10,7,2,guiGetBackColor());
guiClearRect(9,3,21,11,COLOR_STATUS_BAR);
}else if(CSQ<16){
guiDrawVLine(9,10,7,2,guiGetBackColor());
guiDrawVLine(7,10,10,2,guiGetBackColor());
guiClearRect(13,3,21,11,COLOR_STATUS_BAR);
}else if(CSQ<22){
guiDrawVLine(9,10,7,2,guiGetBackColor());
guiDrawVLine(7,10,10,2,guiGetBackColor());
guiDrawVLine(5,10,13,2,guiGetBackColor());
guiClearRect(16,3,21,11,COLOR_STATUS_BAR);
}else{
guiDrawVLine(9,10,7,2,guiGetBackColor());
guiDrawVLine(7,10,10,2,guiGetBackColor());
guiDrawVLine(5,10,13,2,guiGetBackColor());
guiDrawVLine(3,10,16,2,guiGetBackColor());
}
#endif
}
unsigned char netshowvalue=0xff;
//显示网络制式
static void Show_Net(unsigned char s_netshowvalue){
unsigned short y=0;
if(s_netshowvalue==0){
guiShowStr(NET_ICON_X, y+1,"2G", FONT_MODE_12X12, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR);
}else if(s_netshowvalue==4){
guiShowStr(NET_ICON_X, y+1,"4G", FONT_MODE_12X12, 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 auth:1;
unsigned char gpsF:1;
}TMP_GPS_DEF;
static TMP_GPS_DEF tmpGps;
unsigned short x=GPS_ICON_X,y=0;
if(tmpGps.located==gpsInfo.gpsLocated && tmpGps.auth==gpsInfo.bbAuth && tmpGps.gpsF==gpsInfo.gpsF && flash==0) return;
guiClearRect(x,y,x+GPS_ICON_WX,y+11,COLOR_STATUS_BAR);
if(gpsInfo.gpsF==0){//GPS未打开时
if(gpsInfo.bbAuth==1) guiShowBmp(x,y,"GPS3.bmp");//已鉴权
}else{//GPS已打开
if(gpsInfo.bbAuth==1) guiShowBmp(x,y,"GPS1.bmp");//已鉴权
else if(gpsInfo.bbAuth==1) guiShowBmp(x,y,"GPSA.bmp");//未鉴权
if(gpsInfo.gpsLocated==1) guiShowBmp(x+10,y,"GPS2.bmp");//已定位
}
tmpGps.located=gpsInfo.gpsLocated;
tmpGps.auth=gpsInfo.bbAuth;
tmpGps.gpsF=gpsInfo.gpsF;
}
//显示电量
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,y=2,h=y+2;
if(bat=400 4格
guiShowBmp(x,y,"VBAT1.bmp");
guiDrawVLine(h,h+5,x+4,y+1,guiGetBackColor());
guiDrawVLine(h,h+5,x+8,y+1,guiGetBackColor());
guiDrawVLine(h,h+5,x+12,y+1,guiGetBackColor());
guiDrawVLine(h,h+5,x+16,y+1,guiGetBackColor());//5.12
}
}
//显示时间
static void ShowTime(char flash,unsigned int exeInterval){
static unsigned short nextExe=0;
static unsigned char flag=0;
MY_CLOCK myclock;
char buf[30];
if(nextExe==0 || flash){
ohpocGetClock(&myclock);
if(flag){
snprintf(buf, sizeof(buf), "%02d:%02d",myclock.hour, myclock. min);
flag=0;
}else{
snprintf(buf, sizeof(buf), "%02d %02d",myclock.hour, myclock. min);
flag=1;
}
guiShowStr(TIME_ICON_X, 1,buf, FONT_MODE_12X12, REVERSED_NO,guiGetBackColor(),COLOR_STATUS_BAR);
}
if(++nextExe>=(1000/exeInterval)) nextExe=0;
}
//显示状态栏
void uiShowStatusBar(char flash,unsigned int exeInterval){
static unsigned char s_netshowvalue=0xff;
static unsigned char lastPPPStatus;
static int siCSQ;
static int siVbat;
static unsigned short batFirstShow=0;
static char lastEnable=0;
char tempFlash=flash;
if(sutApp.enableKey==0) return;
if(lastEnable==0){
lastEnable=1;
tempFlash=1;
guiFillRect(0, 0, GLCD_WIDTH-1, UI_STATUS_BAR_HEIGH-1,COLOR_STATUS_BAR);//清除第一区
}
//显示信号
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是否正常及鉴权情况
gpsIconShow(tempFlash);
//电量显示
if(batFirstShow < (1000/exeInterval)) {//开机前1秒显示一半电量
sutApp.g_iBAT=360;
batFirstShow++;
}else if(tempFlash || siVbat!=sutApp.g_iBAT || sutApp.g_iBAT < WARN_PWR_LEVEL){
siVbat=sutApp.g_iBAT;
ShowBatttery(sutApp.g_iBAT,exeInterval);
//MSG_INFO(1, "----%d", sutApp.g_iBAT);
}
//文本消息显示
ShowMessageFlag(0);
//GPS显示
//时间显示
ShowTime(tempFlash,exeInterval);
//显示锁,UI状态变化时更新
if(tempFlash && sutUIstatus.Status==UIS_STANDBY){
if(sutApp.keyLock==0) guiClearRect(72,110,72+17,110+17,guiGetBackColor());
else guiShowBmp(72,110, "lock.bmp");
}
}
/****************************状态栏显示部分结束***********************************/
/****************************待机界面显示部分开始***********************************/
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);
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[40];
static char firstRun=0;
static unsigned short dly=0;
char tmpStatus=status;
/*延时一下1秒后才显示后面的,如果直接登录了,就跳出延时*/
if(firstRun==0){
if((++dly>=(3*1000/exeInterval)) || sutPocStatus.logined!=0){
firstRun=1;
tmpStatus=1;
sutApp.enableKey=1;//延时按键操作完成
}else return;
}
/*逻辑处理开始*/
if(tmpStatus){
guiClearAll(guiGetBackColor());
guiShowCaption(0,"加速度语音系统", UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_12X12);
guiShowStr(1, UI_BOTTOM_SHOW_Y,"菜单", FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR, guiGetBackColor());
danhu=sutPocStatus.danHuStatus;
uiShowGuaDuan(danhu);
lastFlag=-1;
siCt=0;
return;
}
//更新单呼显示与否
if(sutPocStatus.danHuStatus != danhu){
danhu=sutPocStatus.danHuStatus;
uiShowGuaDuan(danhu);
}
//提示解锁
if(sutApp.lockShow!=0){
guiShowMessageBox("请先解锁!");
nwy_sleep(500);
guiClearRect(0,GLCD_HEIGHT/2-20,GLCD_WIDTH-1,GLCD_HEIGHT/2+20,guiGetBackColor());
lastFlag=-1;//让以下刷新一下
sutApp.lockShow=0;
}
//以下持续调用,以便动态更新信息
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());
uiShowHuaQuan("空闲",0);
sutPocStatus.statusChaned = 1;
}
break;
case ME_IAM_SPEAK://已登录,本机说话
if(Flag != lastFlag){
guiFillRect(0, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16,guiGetBackColor());
uiShowHuaQuan("本机在讲话",1);
}
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;//保证要刷新名字
}
uiShowCallUserName();
break;
}
if(Flag>0){//已登录
if(Flag != lastFlag && (lastFlag==-1 || ME_NO_LOGIN==lastFlag)){
uiShowGUName(1);
uiShowLearnGroup(1);
}else{
uiShowGUName(0);
uiShowLearnGroup(0);
}
}else{//未登录
snprintf(info, sizeof(info),"请等待网络连接.");
switch(siCt){//not finished yet
case 0:
strcat(info, " ");
guiShowStr(1, UI_CONTENT_SHOW_Y,info, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
break;
case (1000/APP_SUB_DIV_TIME):
strcat(info, ". ");
guiShowStr(1, UI_CONTENT_SHOW_Y,info, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
break;
case (2000/APP_SUB_DIV_TIME):
strcat(info, "..");
guiShowStr(1, UI_CONTENT_SHOW_Y,info, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
break;
}
//显示登录状态
uiShowOffLineMessage();
}
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;
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,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);
}
}
void uiShowLearnGName(const char *name){
guiShowBmp(2, UI_LEARN_SHOW_Y, "Group2.bmp");
guiClearRect(2+16, UI_LEARN_SHOW_Y, GLCD_WIDTH-1, UI_LEARN_SHOW_Y+16, guiGetBackColor());
guiShowStr(2+16, UI_LEARN_SHOW_Y, "学习组:", FONT_MODE_16X16, REVERSED_NO,guiGetForeColor(),guiGetBackColor());
guiShowStr(2+16+56, UI_LEARN_SHOW_Y,name, FONT_MODE_16X16, REVERSED_NO,guiGetForeColor(),guiGetBackColor());
}
static void uiShowGuaDuan(unsigned char danhu){
if(danhu==0) guiClearArea(GLCD_WIDTH-32, UI_BOTTOM_SHOW_Y, 32, 14, guiGetBackColor());
else guiShowStr(GLCD_WIDTH-32, UI_BOTTOM_SHOW_Y, "挂断", FONT_MODE_12X12, REVERSED_NO, COLOR_STATUS_BAR,guiGetBackColor());
}
static void uiShowGroup(const char* info){
unsigned int color=guiGetForeColor();
if(sutPocStatus.danHuStatus==0) guiShowBmp(2, UI_GROUP_SHOW_Y, "Group2.bmp");
else{
guiShowBmp(2, UI_GROUP_SHOW_Y, "Onecall.bmp");
color=COLOR_RED;
}
guiClearRect(2+16, UI_GROUP_SHOW_Y, GLCD_WIDTH-1, UI_GROUP_SHOW_Y+16, guiGetBackColor());
guiShowStr(2+16, UI_GROUP_SHOW_Y, "对讲组:", FONT_MODE_16X16, REVERSED_NO,color,guiGetBackColor());
guiShowStr(2+16+56, UI_GROUP_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,color,guiGetBackColor());
}
static void uiShowUser(const char* info){
guiShowBmp(2, UI_USER_SHOW_Y, "people2.bmp");
guiClearRect(2+16, UI_USER_SHOW_Y, GLCD_WIDTH-1, UI_USER_SHOW_Y+16, guiGetBackColor());
guiShowStr(2+16, UI_USER_SHOW_Y,"昵称:", FONT_MODE_16X16, REVERSED_NO,guiGetForeColor(),guiGetBackColor());
guiShowStr(2+16+40, UI_USER_SHOW_Y,info, FONT_MODE_16X16, REVERSED_NO,guiGetForeColor(),guiGetBackColor());
}
static void uiShowHuaQuan(const char* info,char type){
unsigned int color=guiGetForeColor();
if(type==0) guiShowBmp(2, UI_VOICE_SHOW_Y, "Phone.bmp");
else if(type==1){
color=COLOR_RED;
guiShowBmp(2, UI_VOICE_SHOW_Y, "Csend.bmp");
}else if(type==2){
guiShowBmp(2, UI_VOICE_SHOW_Y, "Creceive.bmp");
color=COLOR_DEEP_GREEN;
}
guiClearRect(2+16, UI_VOICE_SHOW_Y, GLCD_WIDTH-1, UI_VOICE_SHOW_Y+16, guiGetBackColor());
guiShowStr(2+16, UI_VOICE_SHOW_Y,info, FONT_MODE_16X16, 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_CONTENT_SHOW_Y+2+12;
guiClearRect(1,y, GLCD_WIDTH-1, y +12, guiGetBackColor());
guiShowStr(1, y,info, FONT_MODE_12X12, REVERSED_NO,COLOR_STATUS_BAR,guiGetBackColor());
}
}
/****************************待机界面显示部分结束***********************************/
#ifdef MAKE_IT_COMMON_VERSION
#define LEARN_TASK_SEG "消息列表"
#define LEARN_RANK_SEG "考勤信息"
#define LEARN_GROUP_SEG "群组选择"
#define LEARN_USER_SEG "成员选择"
#else
#define LEARN_TASK_SEG "学习任务"
#define LEARN_RANK_SEG "学习排名"
#define LEARN_GROUP_SEG "班级选择"
#define LEARN_USER_SEG "同学选择"
#endif
/****************************主菜单显示部分开始*************************************/
#include "Palace.h"
SUT_PALACE sutPalace;
void uiShowMenuMain(char update){
static const char *apcMenuMain[]={
#ifdef MAKE_IT_COMMON_VERSION
"消息列表",
"考勤信息",
"群组选择",
"成员选择",
"定位设置",
#else
"学习任务",
"学习排名",
"班级选择",
"同学选择",
"消息通知",
#endif
"系统信息",
""
};
if(update) PalaceInit(&sutPalace,apcMenuMain,"Palace","主菜单");
}
void MenuMainResponse(void){
unsigned short key;
key=PalaceResponse(&sutPalace);
if(MKEY_VALUE_MENU==key){
switch(sutPalace.Index){
case 0:
#ifndef MAKE_IT_COMMON_VERSION
uISetNextStatus(UIS_MENU_TASK_SEL);
#endif
break;
case 1:
#ifndef MAKE_IT_COMMON_VERSION
uISetNextStatus(UIS_MENU_RANK_SEL);
#endif
break;
case 2:
uISetNextStatus(UIS_MENU_CLASS_SEL);
break;
case 3:
uISetNextStatus(UIS_MENU_STUDENT_SEL);
break;
case 4:
uISetNextStatus(UIS_MENU_LOCATION_SEL);
break;
case 5:
uISetNextStatus(UIS_MENU_SYS_SEL);
break;
}
uiPushStack(sutPalace.Index);
}
else if(MKEY_VALUE_ESC==key){
uISetNextStatus(UIS_STANDBY);
}
}
/****************************主菜单显示部分结束*************************************/
/*****************************群组选择/成员选择部分开始*********************************/
static char GUListBoxInited=0;
static char SelMachine=0;
static void ReFlashItemGU(char type);
static void UserAssistAdd(void);
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{
if(type==0) appSleepCtl(ASLEEP_GGROUP, 1);//要获取群组信息,不让休眠,记得超时或获取成功或获取失败后需要释放
else appSleepCtl(ASLEEP_GUSER, 1);
UiassistStart(0);
machine=2;
}
break;
case 1:
if(uTimerExpired(&timer)){
uISetNextStatus(UIS_STANDBY);
}
break;
case 2:
temp=getAssistResult();
if(temp){//??è?íê3é
guiClearAll(guiGetBackColor());
if(type==0){
guiShowCaption(0,LEARN_GROUP_SEG,UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_12X12); //0
uiMenuShowBottomIndacitor("确定", "返回");
}else{
guiShowCaption(0,LEARN_USER_SEG,UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_12X12); //0
uiMenuShowBottomIndacitor("单呼", "返回");
}
ReFlashItemGU(type);
uiMenuShowBottomLine();
machine=3;
//获取成功后退出释放休眠
if(type==0) appSleepCtl(ASLEEP_GGROUP, 0);
else appSleepCtl(ASLEEP_GUSER, 0);
}
break;
}
if(machine != 3) return;
UserAssistAdd();
}
void GroupSelResponse(){
unsigned int key;
char buf[50];
int i;
key=getKeyValue();
switch(SelMachine){
case 0:
if(sutListBox.handle==0 && MKEY_VALUE_UP==key){
UiassistStart(1);
SelMachine=1;
}else if(((sutListBox.handle+1) == sutListBox.itemnum) && (MKEY_VALUE_DOWN==key)){
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;
}else if(MKEY_VALUE_MENU==key){
if(0 == sutPocStatus.ListCurOnlineNum) break;
///////////////////////////////////////
UiassistEnd(1);
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)){
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;
}else if(MKEY_VALUE_MENU==key){
if(0 == sutPocStatus.ListCurOnlineNum) 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_CLASS_SEL)ReFlashItemGU(0);
else ReFlashItemGU(1);
SelMachine=0;
}
break;
case 2:
if(getAssistResult()){
if(sutUIstatus.Status==UIS_MENU_CLASS_SEL)ReFlashItemGU(0);
else ReFlashItemGU(1);
SelMachine=0;
}
break;
}
}
static void ReFlashItemGU(char type){
static unsigned short susCt=0;
static const char *accIconFileName[]={
"Group1.bmp",
"Group2.bmp",
"people1.bmp",
"people2.bmp",
""
};
static char *icons[3];
int i;
unsigned short timeout;
static char *GUName[POC_ALL_GROUPS_NUM+1]; //5
static char GUFeatures[POC_ALL_GROUPS_NUM+1];//5
if(type==0){
icons[0]=accIconFileName[0];
icons[1]=accIconFileName[1];
}else{
icons[0]=accIconFileName[2];
icons[1]=accIconFileName[3];
}
icons[2]=accIconFileName[4];
for(i=0;i<=POC_ALL_GROUPS_NUM;i++){
GUName[i]=NullPtr;
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_12X12, 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",gpsInfo.Lat/1000000,gpsInfo.Lat%1000000);
guiShowStr(30,y, buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
y+=12+5;
snprintf(buf, sizeof(buf), "经度 W:%d.%05d",gpsInfo.Long/1000000,gpsInfo.Long%1000000);
guiShowStr(30,y, buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
}
/*****************************定位设置部分结束*********************************/
/*******************************终端信息开始**********************************/
unsigned char sysInfoType;
static void sysInfoFlash(void){
unsigned short x,y;
char buf[50];
unsigned char LineSpace=12+4;
int len;
x=2,y=UI_CONTENT_SHOW_Y+5;
guiClearRect(0,y,GLCD_WIDTH-1,UI_BOTTOM_LINE_Y-1,guiGetBackColor());
if(sysInfoType==0){
//终端型号
snprintf(buf, sizeof(buf),"终端型号:%s",OHPOC_APP_NAME);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+=LineSpace;
//终端编码
snprintf(buf, sizeof(buf),"终端编码:%lu",sutApp.account.psn);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+=LineSpace;
//应用版本
snprintf(buf, sizeof(buf),"应用版本:%s",OHPOC_VERSION);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+=LineSpace;
//内部版本
snprintf(buf, sizeof(buf),"内部版本:%d",CUSTOMER_CODE);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
}else if(sysInfoType==1){
//对讲版本号
snprintf(buf, sizeof(buf),"对讲版本:%s",sutApp.pocVersion);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+=LineSpace;
//模块
memset(buf,sizeof(buf),0);
snprintf(buf,sizeof(buf),"模块:%s", sutApp.modemVer);
len=strlen(buf);
if(len>20){
y+=LineSpace;
guiShowStr(x+32,y,buf+20,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
buf[20]=0;
y-=LineSpace;
}
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
}else if(sysInfoType==2){
//显示服务器
//对讲IP
//getPIPAddr();getGIPAddr();
guiShowStr(x,y,"交换服务器:",FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+= LineSpace;
snprintf(buf, sizeof(buf),"%s",showPIP);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+=LineSpace;
//GPS IP
guiShowStr(x,y,"定位服务器:",FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+= LineSpace;
snprintf(buf, sizeof(buf),"%s",showGIP);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
y+=LineSpace;
snprintf(buf, sizeof(buf),"端口:%d",newPara.gpsPort);
guiShowStr(x,y,buf,FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK,guiGetBackColor());
}
}
void uiShowInformation(char update){
if(update){
sysInfoType=0;
guiClearAll(guiGetBackColor());
guiShowCaption(0,"终端信息",UI_STATUS_BAR_HEIGH,guiGetBackColor(),guiGetForeColor(),FONT_MODE_12X12);
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 || MKEY_VALUE_UP==key){
if(sysInfoType==0) sysInfoType=1;
else sysInfoType=0;
sysInfoFlash();
}else if(MKEY_VALUE_CB_IP==key){
sysInfoType=2;
sysInfoFlash();
}
}
/*****************************终端信息结束**********************************/
/*******************************留音记录开始**********************************/
void uiShowVoiceInfo(char update){
static unsigned int timer;
static char *showInfo[3+1];
static char empty;
int i;
if(update){
guiClearAll(guiGetBackColor());
guiShowCaption(0,"留音记录",UI_STATUS_BAR_HEIGH,guiGetBackColor(),guiGetForeColor(),FONT_MODE_12X12);
uiMenuShowBottomLine();
uiMenuShowBottomIndacitor("播放", "返回");
sutApp.voiceInfo.update=0;
sutApp.voiceInfo.aNum=0;
sutApp.voiceInfo.vNum=0;
sutApp.voiceInfo.voiceValidNum=0;
sutApp.voiceInfo.voiceStatus=1;
empty=0;
msgAtSend("AT+VINFO?\r\n");
guiShowMessageBox("请稍后");
uTimerStart(&timer, 2000);
}
switch(sutApp.voiceInfo.voiceStatus){
case 1:
if(sutApp.voiceInfo.update!=0){
sutApp.voiceInfo.voiceStatus=2;
break;
}
if(uTimerExpired(&timer)){
showInfo[0]="空";
sutApp.voiceInfo.voiceStatus=2;
empty=1;
//MSG_INFO(1, "==>Empty");
}
break;
case 2:
if(empty==0) for(i=0;iok_back=1;
uISetNextStatus(sutUIstatus.LastStatus);
}
}
/*****************************SD卡检测结束***********************************/
static const char *commonIcon2[]={
"APN.bmp",
"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+25, y, "背光时间:", FONT_MODE_12X12, 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];
if(value==0) snprintf(buf, sizeof(buf), " 常亮 ");
else snprintf(buf, sizeof(buf), "%3d 秒", value);
guiShowStr(x+85, y, buf, FONT_MODE_12X12, 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_12X12);
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();
}
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 netModeIndex){
char buf[30];
unsigned char netModeValue=getNetModeValue(netModeIndex);
if(netModeValue==0xff){
MSG_ERR(1,"netMode index invalid:%d",netModeIndex);
return;
}
snprintf(buf, sizeof(buf), "AT$MYSYSINFO=%d\r\n",netModeValue);
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_12X12);
uiMenuShowBottomLine();
for(i=0;iok_back=1;
if(sutListBox.handle != newPara.netMode){
newPara.netMode=sutListBox.handle;
MSG_INFO(1, "netMode update:%d", newPara.netMode);
sysIniSave();
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_12X12);
uiMenuShowBottomLine();
for(i=0;iok_back=1;
if(sutListBox.handle != sutApp.simSel){
snprintf(buf, sizeof(buf), "AT+SSIM=%d\r\n",sutListBox.handle+1);
msgAtSend(buf);
guiShowMessageBox("请重启设备");
msgAtSend("AT+TRB=1\r\n");
nwy_sleep(100);
for(;;){
MSG_INFO(1, "card changed, wait user reboot");
CTL_POWER_HOLD(0);
nwy_sleep(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
static void pwrModeSetCmd(unsigned char pwrMode){
unsigned char seg1,seg2;
char buf[30];
if(pwrMode==PMODE_DEFAULT_LOW){
seg1=MODE_PWR_DEFAULT_NONE_4G;
seg2=MODE_PWR_DEFAULT_IS_4G;
}else if(pwrMode==PMODE_SUPER_LOW){
seg1=MODE_LONG_LOW_PWR_NONE_4G;
seg2=MODE_LONG_LOW_PWR_IS_4G;
}else if(pwrMode==PMODE_NORMAL){
seg1=MODE_NORMAL__NONE_4G;
seg2=MODE_NORMAL__IS_4G;
}else return;
snprintf(buf, sizeof(buf), "AT+UDP=%d,%d\r\n",seg1,seg2);
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();
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_12X12);
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();
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_12X12);
uiMenuShowBottomLine();
NumEditInit(&sutNumEdit,(GLCD_WIDTH-6*8)/2,(GLCD_HEIGHT-16)/2,"000000");
NumEditShow(&sutNumEdit);
uiMenuShowBottomIndacitor("[上]加值", "[下]移动");
}
}
void uiShowServerSelPassResponse(void){
unsigned short key=getKeyValue();
NumEditResponse(&sutNumEdit);
if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
else if(MKEY_VALUE_MENU==key){
if(memcmp(sutNumEdit.buffer, getMenuKey(), 6)==0) uISetNextStatus(UIS_MENU_SYS_SERVER);
else{
guiShowMessageBox("密码错误");
nwy_sleep(1000);
getStackStruct()->ok_back=1;
uISetNextStatus(UIS_MENU_SYS_SEL);
}
}
}
/*****************************服务器设置输入密码结束**********************************/
/*****************************服务器设置开始**********************************/
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_12X12);
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);
}
}
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();
getGIPAddr();
snprintf(buf, sizeof(buf), "ip=%s;domain=%s;",getPIPAddr(),getDOMAINAddr());
AscStrTurnHexStr(buf,buf1);
msgAtSend("AT+POC=010000");
msgAtSend(buf1);
msgAtSend("\r\n");
nwy_sleep(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){
int len=guiGetStrXLen((char *)msg,FONT_MODE_16X16);
guiClearRect(0, 60, GLCD_WIDTH-1, 60+16,guiGetBackColor());
guiShowStr((GLCD_WIDTH-len)/2,60, msg,FONT_MODE_16X16, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
}
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){
if(StatusUpdate){
sutApp.fotaVersion[0]=0;
guiClearAll(guiGetBackColor());
guiShowCaption(0,"版本更新",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_12X12);
msgAtSend("AT+FOTA?\r\n");
fotaStep=0;
fotaMsgShow("正在检测版本");
uiMenuShowBottomLine();
uiMenuShowBottomIndacitor("确定", "返回");
uTimerStart(&fotaTick, 500);
}
switch(fotaStep){
case 0:
if(uTimerExpired(&fotaTick)){
fotaMsgShow("检测超时");
fotaStep=4;
}
break;
case 1://等待用户确定
break;
case 2://用户确定后等待结果
if(uTimerExpired(&fotaTick)){
fotaMsgShow("超时退出");
fotaStep=4;
}
break;
case 3://下载成功
nwy_sleep(1000);
fotaStep=6;
fotaMsgShow2("确定将关机,需长按开","机键直至开机(约60秒)");
break;
case 4://延时显示2秒后退出
uTimerStart(&fotaTick, 2000);
fotaStep=5;
break;
case 5://退出升级流程
if(uTimerExpired(&fotaTick)) uISetNextStatus(UIS_MENU_SYS_SEL);
break;
case 6:
break;
}
}
void uiShowVersionSelResponse(void){
unsigned char key=getKeyValue();
if(fotaStep!=1 && fotaStep!=6) return;
if(MKEY_VALUE_ESC==key) uISetNextStatus(UIS_MENU_SYS_SEL);
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){
if(nwy_version_update(true)<0){
MSG_ERR(1, "nwy_version_update failed");
fotaMsgShow("升级异常");
fotaStep=5;
}
msgAtSend("AT+TRB=2\r\n");
MSG_INFO(1, "Reset system!!!");
while(1){nwy_sleep(1000);}
}
}
}
/*****************************版本设置结束**********************************/
/*****************************提示音设置开始********************************/
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_12X12);
x=(GLCD_WIDTH-len)/2;
y=UI_CONTENT_SHOW_Y+(GLCD_HEIGHT-UI_CONTENT_SHOW_Y)/2-12;
guiShowStr(x,y,info, FONT_MODE_12X12, REVERSED_NO, COLOR_BLACK, guiGetBackColor());
}
void uiShowNoteSel(char StatusUpdate){
if(StatusUpdate){
guiClearAll(guiGetBackColor());
guiShowCaption(0,"提示音设置",UI_STATUS_ITEM_Y+1,guiGetBackColor(),guiGetForeColor(),FONT_MODE_12X12);
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();
}
uISetNextStatus(UIS_MENU_SYS_SEL);
}else if(MKEY_VALUE_DOWN || MKEY_VALUE_UP){
if(noteSetTmp==0) noteSetTmp=1;
else noteSetTmp=0;
switchFlash();
}
}
/*****************************提示音设置结束********************************/