/***************************************************************************** SetSystemPara.c *****************************************************************************/ #include "includes.h" #define APN_NUM (4+1) #define WANT_APN_DETAIL 0 SUT_MENU sutMenuSysSetup; 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}; int ApnFileIndex; /*************************************************************************/ unsigned int g_uiGpsStat = 1; unsigned int g_iLCDFlag=0; SUT_LCD_PARAM sutLcdParam; unsigned int g_UpdataPocVersion=0; unsigned char startUp=0; unsigned short g_UpdatePocCount; char showApn[3][APN_LEN+1]; void SetAPNShow(int update) { 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>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[10]; char buf0[10]={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时要显示 sprintf(buf0," 纬度 %s: %.3d.%05d","S",w,(unsigned int)(Wnum3*100000)); GuiShowStr(0,24,buf0,0x01); sprintf(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 { sprintf(buf," %02d 秒",tempTime); GuiShowStr(100,56,buf,0x01);//130 GuiReverseRect(108,56,16,16); } } /*********************************************************/ void SetGPSShow(int update) { static unsigned short susCt=0; // char buf[10]; // char buf0[10]={0}; // char buf1[8]; // char buf2[4]={0}; // char buf3[2]; // char temp[3]; // char temp1[3]; // char temp2[5]; // char temp3[5]; // int i,num,num1; //AscStrToHexStr if(update){ GuiClearAll(); ShowCaption("GPS设置",1);// GuiShowStr(0,56," GPS上传设置: 秒",0x01); //sutGpsInfo.SendTime GuiDrawHLine(0,159,20,1); // GuiShowBmp(65,60,"GPS2.bmp"); 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,"[OK]切换 [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_OK: 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[6]; 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) sprintf(buf,"常亮"); else sprintf(buf,"%3d",sutLcdParam.SetTime[sutLcdParam.SetTimeIndex]); GuiShowStr(x+(16*5),56,buf,1); GuiReverseRect(x+(16*5),56,32,16); sprintf(buf1,"%3d",sutLcdParam.SetTimeIndex); SlwTrace(INF,buf1,1); GuiDrawHLine(0,159,104,1); susCt=0; //return; }else if(update == 2){ if(sutLcdParam.SetTimeIndex==4) sprintf(buf,"常亮"); else sprintf(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,"[OK]切换 [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_OK: 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); } void SetUpIntercomVerShow(int update) { char buf[19]; if(update){ GuiClearAll(); ShowCaption("升级对讲版本",1);// GuiDrawHLine(0,159,20,1); GuiShowStr(32,56,"是否升级?",1); GuiDrawHLine(0,159,104,1); GuiShowStr(0,110,"[OK]升级 [EXIT]退出",0x01); g_UpdataPocVersion =0; startUp=0; } if(g_UpdataPocVersion>0){ g_UpdatePocCount++; if(g_UpdatePocCount >= 130){//1S g_UpdatePocCount = 0; g_UpdataPocVersion--; }else return; sprintf(buf, " 请稍候 %d ", g_UpdataPocVersion); GuiShowStr(0,110,buf,0x01); if(g_UpdataPocVersion==0) { GuiClearArea(4, 56, 158, 24); SpeakerEnable(); GuiShowStr(10,44," 请重启对讲机! ",0x01); GuiShowStr(10,68," 并检查对讲版本号!",0x01); GuiShowStr(0,110," 可以重启设备 ",0x01); LCD_BL_HIGH; SpeakerEnable(); ModemSendAT("AT+ZTTS=1,\"EF53E54ECD912F54BE8B0759\"\r\n");//可以重启设备 } } } void SetUpIntercomVerResponse(void) { char buf[19]; if(KEY_PANEL_OK==g_ulKeyValue && !g_UpdataPocVersion && !startUp){ GuiClearArea(0, 22, 160, 80); SpeakerEnable(); ModemSendAT("AT+ZTTS=1,\"636B28570459067470656E63\"\r");//正在处理数据... UpdataPocVersion(); GuiShowStr(4,44," 正在处理数据... ",0x01); GuiShowStr(4,68," 请别断电!!! ",0x01); g_UpdataPocVersion=150; sprintf(buf, " 请稍候 %d ", g_UpdataPocVersion); GuiShowStr(0,110,buf,0x01); startUp=1; } if(startUp) return; if(KEY_PANEL_EXIT==g_ulKeyValue)UISetNextStatus(UIS_MENU_SYS_SET); else if(KEY_PANEL_MENU==g_ulKeyValue)UISetNextStatus(UIS_MENU_MAIN); } 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;i