/***************************************************************************** SetSystemPara.c *****************************************************************************/ #include "includes.h" SUT_MENU sutMenuSysSetup; unsigned char Net_temp_flag; SUT_LCDGPS_SEND_DATA sutLcdGpsSendData; char ReadApnData(unsigned char *source,unsigned char witchone,char *apnapn,char *apnname,char *apnpass); const static unsigned short g_ausTimeOut[5]={10,30,60,300,0}; static const char*g_ausNetOut[]={" Auto","2G+3G"," 4G "}; int ApnFileIndex; /*************************************************************************/ unsigned int g_uiGpsStat = 1; unsigned int g_iLCDFlag=0; SUT_LCD_PARAM sutLcdParam; unsigned short g_UpdatePocCount; char showApnTable[2*APN_NUM][31]; char *APNNAME[APN_NUM+1]= { "APN1", "APN2", "APN3", "APN4", "" }; void SetAPNShow(int update) { #if 1 int i; static const char *accIconFileName[]={ "APN.bmp", "APN1.bmp", "" }; static char GroupsFeatures[APN_NUM]; if(update){ if(showApn!=1) { ShowMessageBox("禁止修改"); os_dly_wait(200); UISetNextStatus(UIS_MENU_SYS_SET); return; } if(validApnNum==1) { ShowMessageBox("配置文件无APN"); os_dly_wait(200); UISetNextStatus(UIS_MENU_SYS_SET); return; } GuiClearAll(); ShowCaption("设置APN",2);// GuiDrawHLine(0,159,20,1); //设置Features 将决定选择图标 GroupsFeatures[sutProductPara.APNIndex]=1; ListBoxInit(&sutListBox,APNNAME,0,accIconFileName,GroupsFeatures); //---------------------------- GuiDrawHLine(0,159,104,1); GuiShowStr(0,110,"[OK]切换 [P1]详情",0x01); } #else int i; static unsigned short susCt=0; static const char *accIconFileName[]={"APN.bmp","APN1.bmp",""}; unsigned char buf[300]; static char NullGroup=0; static char GroupsFeatures[APN_NUM]; static char *APNAPN[APN_NUM]; char NullPtr[]=""; if(update){ susCt=0; GuiClearAll(); ShowCaption("设置APN",1);// GuiDrawHLine(0,159,20,1); ReadFileData(ApnFileIndex,0,sizeof(buf),buf); for(i=0;i<3;i++) {//读取三组接入点名称 if(ReadApnData(buf, i, &showApn[i][0], 0,0)) { return; } } //付给用于显示的指针 APNAPN[0]=&showApn[0][0]; APNAPN[1]=&showApn[1][0]; APNAPN[2]=&showApn[2][0]; APNAPN[3]=NullPtr; APNAPN[4]=NullPtr; //---------------------------- for(i=0;i maxLen) { strcpy(temp, &showApnTable[2*showIndex][maxLen]); snprintf(buf, sizeof(buf), "%s",temp); buf[len-maxLen]=0; GuiShowStr(1,y+16*i++,buf,0x01); } len=strlen(showApnTable[2*showIndex+1]); memcpy(temp, showApnTable[2*showIndex+1], maxLen); temp[maxLen]=0; snprintf(buf, sizeof(buf), "Pass:%s",temp); GuiShowStr(1,y+16*i++,buf,0x01); if(len > maxLen) { strcpy(temp, &showApnTable[2*showIndex+1][maxLen]); snprintf(buf, sizeof(buf), "%s",temp); buf[len-maxLen]=0; GuiShowStr(1,y+16*i++,buf,0x01); } } void SetApnDetailShow(int update) { char buf[40]; if(update) { GuiClearAll(); ShowCaption("APN详情",2);// GuiDrawHLine(0,159,20,1); showIndex=0; ShowAPNMessage(showIndex); //---------------------------- GuiDrawHLine(0,159,104,1); GuiShowStr(0,110,"[EXIT]返回 ",0x01); } } void SetApnDetailResponse(void) { if(KEY_PANEL_DOWN==g_ulKeyValue) { showIndex++; if(showIndex >= validApnNum) showIndex=0; ShowAPNMessage(showIndex); }else if(KEY_PANEL_UP==g_ulKeyValue) { if(showIndex==0) showIndex=validApnNum; if(showIndex > 0) showIndex--; ShowAPNMessage(showIndex); } else if(KEY_PANEL_EXIT==g_ulKeyValue) UISetNextStatus(UIS_SET_APN); } void MakeGpsSendData(void) { unsigned char *data=(unsigned char *)&sutLcdGpsSendData; memset(data, 0, sizeof(SUT_LCDGPS_SEND_DATA)); data[0] = (sutGpsInfo.latitue>>24)&0xFF; data[1] = (sutGpsInfo.latitue>>16)&0xFF; data[2] = (sutGpsInfo.latitue>>8)&0xFF; data[3] = (sutGpsInfo.latitue)&0xFF; data[4] = (sutGpsInfo.longitue>>24)&0xFF; data[5] = (sutGpsInfo.longitue>>16)&0xFF; data[6] = (sutGpsInfo.longitue>>8)&0xFF; data[7] = (sutGpsInfo.longitue)&0xFF; } /***************************************************** 深圳北纬22.33 东经114.07 经过试验数据比较准确,但是东西南北不知道 ******************************************************/ void GetCoordinates(unsigned char type) { //type 0 UI时调用 // 1 上传时调用 char buf[30]; //char buf0[15]={0}; char buf1[8]; char buf2[4]={0}; char temp[3]; char temp1[3]; char temp2[5]; char temp3[5]; int i,num,num1,w,j; double Jnum1,Jnum2,Jnum3;//有小数位 8位有效 double Wnum1,Wnum2,Wnum3;//有小数位 8位有效 // char* g_cGetlongitude; // char* g_cGetlatitude; MakeGpsSendData(); AscStrTurnHexStr((char *)sutLcdGpsSendData.JJJJ,buf1); memset(temp, 0, sizeof(temp)); for(i=0;i<3;i++){ temp[i]=buf1[i]; } j=atoi(temp); memset(temp2, 0, sizeof(temp2)); for(i=0;i<6;i++){ temp2[i]=buf1[i+3]; } num=atoi(temp2); Jnum1=num/1000; Jnum1 /=60; Jnum2 = (num%1000)*60; Jnum2 /=3600000; Jnum3=Jnum1+Jnum2; //sutLcdGpsSendData.j=j*1000000+Jnum3*1000000; // sutLcdGpsSendData.j = (j+Jnum3)*1000000; //Getlongitude; //Getlatitude; sutGpsInfo.testJD = j*1000000+Jnum3*1000000;//上传时使用 // if(type == 0){//UI时要显示 // sprintf(buf,"经度 %s: %d.%05d","W",j,(unsigned int)(Jnum3*100000)); // GuiShowStr(0,40,buf,0x01); // } AscStrTurnHexStr((char *)sutLcdGpsSendData.WWWW,buf2); for(i=0;i<3;i++){ temp1[i]=buf2[i]; } w=atoi(temp1); for(i=0;i<6;i++){//5 temp3[i]=buf2[i+3]; } num1=atoi(temp3); Wnum1=num1/1000; Wnum1 /=60; Wnum2 = (num1%1000)*60; Wnum2 /=3600000; Wnum3=Wnum1+Wnum2; sutGpsInfo.testWD = w*1000000+Wnum3*1000000; if(type == 0){//UI时要显示 snprintf(buf, sizeof(buf)," 纬度 %s: %.3d.%05d","S",w,(unsigned int)(Wnum3*100000)); GuiShowStr(0,24,buf,0x01); snprintf(buf, sizeof(buf)," 经度 %s: %d.%05d","W",j,(unsigned int)(Jnum3*100000)); GuiShowStr(0,40,buf,0x01); } } void SetGPSTimeShowDetail(unsigned char timeIndex) { unsigned short tempTime; char buf[10]; tempTime = GPS_TimeTable[timeIndex]; if(tempTime==0) { GuiShowStr(100,56," 关闭 ",0x01);//130 GuiReverseRect(108,56,16*2,16); }else { snprintf(buf, sizeof(buf)," %02d 秒",tempTime); GuiShowStr(100,56,buf,0x01);//130 GuiReverseRect(108,56,16,16); } } /*********************************************************/ void SetGPSShow(int update) { static unsigned short susCt=0; if(update){ GuiClearAll(); ShowCaption("北斗设置",1);// GuiShowStr(0,56,"北斗上传设置: 秒",0x01); //sutGpsInfo.SendTime GuiDrawHLine(0,159,20,1); GetCoordinates(0); sutGpsInfo.GPS_TimeIndexBackup = sutProductPara.m_GPS_TimeIndex; SetGPSTimeShowDetail(sutGpsInfo.GPS_TimeIndexBackup); GuiDrawHLine(0,159,104,1); susCt=0; } if(susCt==0){ GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01); }else if(susCt==200){ GuiShowStr(0,110,"[M]保存 [EXIT]退出",0x01); } if(++susCt>=400)susCt=0; } void SetGPSResponse(void) { switch(g_ulKeyValue) { case KEY_PANEL_UP: case KEY_PANEL_DOWN: if(g_ulKeyValue==KEY_PANEL_UP) { if(sutGpsInfo.GPS_TimeIndexBackup<(sizeof(GPS_TimeTable)-1)) sutGpsInfo.GPS_TimeIndexBackup++; else sutGpsInfo.GPS_TimeIndexBackup=0; }else{ if(sutGpsInfo.GPS_TimeIndexBackup==0) sutGpsInfo.GPS_TimeIndexBackup=sizeof(GPS_TimeTable)-1; else sutGpsInfo.GPS_TimeIndexBackup--; } SetGPSTimeShowDetail(sutGpsInfo.GPS_TimeIndexBackup); break; case KEY_PANEL_MENU: if(sutGpsInfo.GPS_TimeIndexBackup != sutProductPara.m_GPS_TimeIndex) {//changed sutProductPara.m_GPS_TimeIndex = sutGpsInfo.GPS_TimeIndexBackup; GpsTimeUpdate(); SaveProductParaToFlash("MENU_SWGPS"); } UISetNextStatus(UIS_STANDBY); break; case KEY_PANEL_EXIT: UISetNextStatus(UIS_MENU_SYS_SET);break; //case KEY_PANEL_MENU: UISetNextStatus(UIS_MENU_MAIN);break; } } void SetLCDShow(int update) { static unsigned short susCt=0; char buf[10]; char buf1[6]; int x=4;//4 int i; if(update==1){ for(i=0;i<5;i++)sutLcdParam.SetTime[i]=g_ausTimeOut[i]; sutLcdParam.SetTimeIndex=sutLcdParam.OnTimeIndex; GuiClearAll(); ShowCaption("LCD设置",1);//0 GuiDrawHLine(0,159,20,1); GuiShowStr(x,56," 背光时间: ",1); if(sutLcdParam.SetTimeIndex==4) snprintf(buf, sizeof(buf),"常亮 "); else snprintf(buf, sizeof(buf),"%3d 秒",sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]); GuiShowStr(x+(16*5),56,buf,1); GuiReverseRect(x+(16*5),56,32,16); snprintf(buf1, sizeof(buf1),"%3d",sutLcdParam.SetTimeIndex); SlwTrace(INF,buf1,1); GuiDrawHLine(0,159,104,1); susCt=0; //return; }else if(update == 2){ if(sutLcdParam.SetTimeIndex==4) snprintf(buf, sizeof(buf),"常亮 "); else snprintf(buf, sizeof(buf),"%3d 秒",sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]); GuiShowStr(x+(16*5),56,buf,1); GuiReverseRect(x+(16*5),56,32,16); GuiDrawHLine(0,159,104,1); } if(susCt==0){ GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01); }else if(susCt==200){ GuiShowStr(0,110,"[M]保存 [EXIT]退出",0x01); } if(++susCt>=400)susCt=0; } void SetLCDResponse(void) { int FileIndex; unsigned long key; char Buf[10]; int x=4;//4 //TimeOut[] // key=ListBoxResponse(&sutListBox); switch(g_ulKeyValue){ case KEY_PANEL_UP: if(++sutLcdParam.SetTimeIndex>=5)sutLcdParam.SetTimeIndex=0; SetLCDShow(2);//0 break; case KEY_PANEL_DOWN: if(sutLcdParam.SetTimeIndex>0)sutLcdParam.SetTimeIndex--; else sutLcdParam.SetTimeIndex=4; SetLCDShow(2);//0 break; case KEY_PANEL_MENU: g_iLCDFlag=1; sutLcdParam.OnTime=sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]; sutLcdParam.OnTimeIndex=sutLcdParam.SetTimeIndex; FileIndex=GetFileIndex("LcdParam.ini"); ModifyFileData(FileIndex,0,sizeof(SUT_LCD_PARAM),(unsigned char *)&sutLcdParam); UISetNextStatus(UIS_MENU_SYS_SET); break; case KEY_PANEL_EXIT: UISetNextStatus(UIS_MENU_SYS_SET); break; // case KEY_PANEL_MENU: // UISetNextStatus(UIS_MENU_MAIN); // break; } // //-- // if(KEY_PANEL_UP==key){ // Index++; // if(Index==5)Index=0; // GuiClearArea(32, 56, 170, 24); // sprintf(Buf,"LCD定时:%d秒",TimeOut[Index]); // GuiShowStr(32,56,Buf,1); // } // //-- // if(KEY_PANEL_DOWN==key){ // if(Index==0)Index=5; // Index--; // GuiClearArea(32, 56, 170, 24); // sprintf(Buf,"LCD定时:%d秒",TimeOut[Index]); // GuiShowStr(32,56,Buf,1); // } // //-- // if(KEY_PANEL_OK==key){ // g_LCDFlag=1; // g_LCDTimeCt = TimeOut[Index]+5; // g_LCDTemp=TimeOut[Index]+5; // } // if(KEY_PANEL_EXIT==key)UISetNextStatus(UIS_STANDBY); // else if(KEY_PANEL_MENU==key)UISetNextStatus(UIS_MENU_MAIN); } unsigned char modemProcessFlash=0; MODEM_UPDATE_DEF m_updStatus; unsigned char m_process=0; int m_updateTimeout=0; char updateStart=0; void UpdateStatus(MODEM_UPDATE_DEF status) { modemProcessFlash=1; m_updStatus=status; m_updateTimeout=0; } void SetUpIntercomVerShow(int update) { char buf[19]; if(update){ GuiClearAll(); ShowCaption("升级对讲版本",1);// GuiDrawHLine(0,159,20,1); GuiShowStr(16,56,"升级到最新版本? ",1); GuiDrawHLine(0,159,104,1); GuiShowStr(0,110,"[M]升级 [EXIT]退出",0x01); } if(updateStart) { if(++m_updateTimeout>2000) { m_updateTimeout=0; UpdateStatus(MODEM_STATUS_TIMEOUT); } } if(modemProcessFlash==0) return; modemProcessFlash=0; switch(m_updStatus) { case MODEM_STATUS_TRIGGER://正在启动更新 GuiShowStr(16,22,"正在启动更新...",1); TriggerHttpOn(MODE_HTTP_MODEM); break; case MODEM_STATUS_READY://启动成功,获取最新版本 GuiShowStr(16,42,"正在获取版本...",1); break; case MODEM_STATUS_CMD_VER_ERR://指令失败 GuiShowStr(16,62,"获取失败/版本错误.",1); UpdateStatus(MODEM_STATUS_REBOOT); break; case MODEM_STATUS_NO_NEWVER://没有最新版本 GuiShowStr(16,62,"没有最新版本...",1); UpdateStatus(MODEM_STATUS_REBOOT); break; case MODEM_STATUS_LOADING://正在下载 GuiShowStr(16,62,"正在下载",1); snprintf(buf, sizeof(buf), ">>%d%%", m_process); GuiShowStr(16,82,buf,1); break; case MODEM_STATUS_SER_ERR://服务器应答出问题:如没有目标谁的 GuiShowStr(16,102,"没有文件/其它错误",1); UpdateStatus(MODEM_STATUS_REBOOT); break; case MODEM_STATUS_DONE://下载完成 GuiShowStr(16,102,"下载完成,正在安装",1); break; case MODEM_STATUS_INSTALLED://安装完成 GuiShowStr(16,102,"安装完成,升级完成",1); UpdateStatus(MODEM_STATUS_REBOOT); break; case MODEM_STATUS_TIMEOUT: GuiShowStr(16,22,"超时无响应...",1); UpdateStatus(MODEM_STATUS_REBOOT); break; case MODEM_STATUS_REBOOT: LCD_BL_HIGH; os_dly_wait(200); modemPwrOffNow=1; // while(1) // { // os_dly_wait(100); // IWDG_ReloadCounter(); // } break; } } void SetUpIntercomVerResponse(void) { if(updateStart) return; if(KEY_PANEL_MENU==g_ulKeyValue) { if(sutGpsStatus.PPPStatus != OPEN) { ShowMessageBox("无网络"); os_dly_wait(100); UISetNextStatus(UIS_MENU_SYS_SET); return; } updateStart++; GuiClearArea(0, 22, LCD_WIDTH-1, LCD_HEIGHT-22); UpdateStatus(MODEM_STATUS_TRIGGER); } if(KEY_PANEL_EXIT==g_ulKeyValue) UISetNextStatus(UIS_MENU_SYS_SET); } char GetApnPara(unsigned char *source, unsigned char whitchOne,unsigned short *accessP, unsigned short *account,unsigned short *passw) { unsigned char *ptr=source; unsigned char getFlag=0; unsigned short i,noteAddress[9];//总共3组,共9个;号 if(whitchOne >=3) return 1;//只有3组值 i=0; while(*ptr != 0) { if(*ptr == ';') { if(getFlag < 9) { noteAddress[getFlag++]=i; }else{ //收够了 break; } } i++; ptr++; } if(getFlag != 9) return 2;//资源文件内容有错误 switch(whitchOne) { case 0:*accessP=0;*account=noteAddress[0]+1;*passw=noteAddress[1]+1;break; case 1:*accessP=noteAddress[2]+1;*account=noteAddress[3]+1;*passw=noteAddress[4]+1;break; case 2:*accessP=noteAddress[5]+1;*account=noteAddress[6]+1;*passw=noteAddress[7]+1;break; } return 0; } char ReadApnData(unsigned char *source,unsigned char witchone,char *apnapn,char *apnname,char *apnpass) {//从缓存中获取数据段,一次一组 unsigned char *accessPV,*accountV,*passwV; unsigned short accessP,account,passw; unsigned short i; char buf[30]; if(GetApnPara(source, witchone, &accessP, &account, &passw)) { SlwTrace(INF, "HGS.apn dataErr",1);//如果初始化失败,则直接使用内存中的了 return 1; } accessPV=source+accessP; accountV=source+account; passwV=source+passw; //accesspoint if(apnapn != 0) { if(*accessPV == ';') apnapn[0] = 0;//空数据段 else{ for(i=0;i30) tempLen=30; memcpy(name, finalData, tempLen); name[tempLen]=0; tempLen=strlen(finalData+j); if(tempLen>30) tempLen=30; memcpy(pass, finalData+j, tempLen); pass[tempLen]=0; return 1; } int HgsApnLen; unsigned char validApnNum; void APNFileInit(void) { char tempData[400];//3组APN,每组中每参数30个 char name[APN_LEN+1]; char pass[APN_LEN+1]; int tempLen,i; ApnFileIndex=GetFileIndex("HGS.apn"); if(ApnFileIndex == -1) { printf("No HGS.apn file\r\n"); goto READ_EXIT; } HgsApnLen=GetFileLen(ApnFileIndex); if(HgsApnLen==0) { printf("HGS.apn empty\r\n"); goto READ_EXIT; } //读出数据 if(HgsApnLen > sizeof(tempData)) { printf("Hgs.apn len=%d,should <=%d\r\n",HgsApnLen,sizeof(tempData)); HgsApnLen=sizeof(tempData); } tempLen=ReadFileData(ApnFileIndex,0,HgsApnLen,(u8*)tempData); //检测是否显示APN tempLen=GetParaFromStr(tempData, "APNSHOW", name); if(tempLen==0) { showApn=1;//没有字段,则设置为显示菜单 printf("No 'APNSHOW'\r\n"); }else{ showApn=atoi(name); } printf("APNSHOW:%d\r\n",showApn); READ_EXIT: //读取APN参数到table if(ApnFileIndex==-1 || HgsApnLen==0) {//资源文件错误,则只有一个默认APN goto SET_ONLY_ONE; }else{ //读出数据 for(i=0;i=3)Net_temp_flag=0; SetNetShow(2);//0 break; case KEY_PANEL_DOWN: if(Net_temp_flag>0)Net_temp_flag--; else Net_temp_flag=2; SetNetShow(2);//0 break; case KEY_PANEL_MENU: sutProductPara.g_net=Net_temp_flag; GetMododexWithCard(); SaveProductParaToFlash("MENU_SWGPS"); UISetNextStatus(UIS_MENU_SYS_SET); break; case KEY_PANEL_EXIT: UISetNextStatus(UIS_MENU_SYS_SET); break; } } #endif #if 0 void SetNetShow(int update) { static const char *apcMenuSysSetup[]={ "网模自动", "2G+3G", "4G模式", "" }; if(update){ GuiClearAll(); ShowNetCaption(sutProductPara.g_net); GuiDrawHLine(0,159,20,1); MenuInit(&sutMenuSysSetup,apcMenuSysSetup); return; } } #else void SetNetShow(int update) { //const char *p=GetCaptionByMododex[Mododrex_Net]; static unsigned short susCt=0; char buf[10]; char buf2[20]; int x=12;//4 if(update==1){ GuiClearAll(); //ShowNetCaption(sutProductPara.g_net); Mododrex_Net ShowCaption("网络设置",1); GuiDrawHLine(0,159,20,1); GuiShowStr(x,56," 网络选择: ",1); snprintf(buf2,sizeof(buf2),"MODE:%s",GetCaptionByMododex(Mododrex_Net)); //GuiShowStr(x,86,buf2,1); ShowCaption(buf2,86); snprintf(buf, sizeof(buf),"%s",g_ausNetOut[sutProductPara.g_net]); GuiShowStr(x+(16*5),56,buf,1); GuiReverseRect(x+(16*5),56,40,16);//5 GuiDrawHLine(0,159,104,1); susCt=0; }else if(update == 2){ snprintf(buf, sizeof(buf),"%s",g_ausNetOut[Net_temp_flag]); GuiShowStr(x+(16*5),56,buf,1); GuiReverseRect(x+(16*5),56,40,16);//5 GuiDrawHLine(0,159,104,1); } if(susCt==0){ GuiShowStr(0,110,"[上]选择 [下]选择 ",0x01); }else if(susCt==200){ GuiShowStr(0,110,"[M]保存 [EXIT]退出",0x01); } if(++susCt>=400)susCt=0; } #endif void ShowNetCaption(unsigned char g_net) { switch(g_net) { case 0: ShowCaption("当前(Auto)",1); // break; case 1: ShowCaption("当前(2G+3G)",1); // break; case 2: ShowCaption("当前(4g模式)",1); // break; default: break; } } void GetMododexWithCard(void) { char buf[30]; //根据CardType和ModeSetup转换为Mododex值的一个表 static const unsigned char MododrxTable[3][3]={{11,24,5},{2,8,5},{17,21,5}}; snprintf(buf,sizeof(buf),"AT+MODODREX=%d\r\n",MododrxTable[thisYunYingShang][sutProductPara.g_net]); ModemSendAT(buf); } const char *GetCaptionByMododex(unsigned int mododex) { static const char *CaptionTable[]={ "", "UMTS ONLY",//1 "AUTO(LTE)", "CDMA AND GSM", "AUTO(TDS)", "LTE ONLY", "TDS ONLY", "TDS WCDMA", "TDS GSM WCDMA", "TDS WCDMA LTE", "HDR ONLY", "AUTO (TELECOM)", "AUTO(HDR)", "CDMA HDR LTE", "CDMA HDR", "CDMA ONLY", "AUTO(TDS,LTE)", "AUTO(LTE,WCDMA)", "AUTO(WCDMA,GSM)", "AUTO(WCDMA,LTE)", "LTE WCDMA ONLY", "WCDMA GSM ONLY", "LTE AND TDS", "LTE GSM ONLY", "CDMA HDR WCDMA GSM", "GSM ONLY", }; return CaptionTable[mododex]; }