int LoadDebugStatistics(void) { unsigned int i; int group; XINREF pf; char filename[200]; PrintLog(0," load statistics...\n"); for(group=1; group<=STATISGROUP_MAX; group++) { sprintf(filename, "%s%s", STATISTIC_SAVEPATH, NameSave[group-1]); pf = XinOpen(filename, 'r'); if(NULL == pf) continue; for(i=0; __start__statistic+i<__stop__statistic; i++) { if(__start__statistic[i].group == group) __start__statistic[i].count = XinReadInt(pf, __start__statistic[i].name, __start__statistic[i].count); } XinClose(pf); } SET_INIT_FLAG(LoadDebugStatistics); return 0; }
/** * @brief 载入校准参数文件 * @param file 文件名 * @param array 校准数组 * @param maxlen 校准数组最大长度 * @return 成功返回校准数组长度, 失败返回-1 */ static int LoadCalibFile(const char *file, struct ad_calib *array, int maxnum) { XINREF pf; int i, num, value; char name[32]; DebugPrint(0, " load %s...", file); pf = XinOpen(file, 'r'); if(NULL == pf) { DebugPrint(0, "no file\n"); return -1; } num = XinReadInt(pf, "num", 0); if(num < 2) { DebugPrint(0, "error\n"); goto mark_fail; } if(num > maxnum) num = maxnum; for(i=0; i<num; i++) { sprintf(name, "adv%d", i); value = XinReadInt(pf, name, -1); if(value < 0) { DebugPrint(0, "error %s\n", name); goto mark_fail; } array[i].adv = value; sprintf(name, "realv%d", i); value = XinReadInt(pf, name, -1000); if(value == -1000) { DebugPrint(0, "error %s\n", name); goto mark_fail; } array[i].realv = value; } DebugPrint(0, "ok\n"); XinClose(pf); return num; mark_fail: XinClose(pf); return -1; }
static void LoadPrdConfig(void) { char str[64], name[16]; XINREF pf; int i; memset(&PltConfig, 0, sizeof(PltConfig)); pf = XinOpen("/work/pltestprd.xin", 'r'); if(NULL == pf) { printf("load prd config failed\n"); return; } PltConfig.maxmet = XinReadInt(pf, "maxmet", DEFAULT_FILE_MET); if(PltConfig.maxmet <= 0 || PltConfig.maxmet > MAX_PLCMET) PltConfig.maxmet = DEFAULT_FILE_MET; PltConfig.maxprd = XinReadInt(pf, "maxprd", DEFAULT_FILE_PRD); if(PltConfig.maxprd <= 0 || PltConfig.maxprd > MAX_FILE_PRD) PltConfig.maxprd = DEFAULT_FILE_PRD; i = (PltConfig.maxmet*MET_DATA_LEN+PRD_HEAD_LEN)*PltConfig.maxprd + FILE_HEAD_LEN; if(i > LEN_FILE_CACHE) { ErrorLog("too much file len(%d)\n", i); PltConfig.maxmet = DEFAULT_FILE_MET; PltConfig.maxprd = DEFAULT_FILE_PRD; XinClose(pf); return; } PltConfig.prdcount = XinReadInt(pf, "count", 0); if(PltConfig.prdcount < 0 || PltConfig.prdcount > PltConfig.maxprd) { printf("invalid prd count\n"); PltConfig.prdcount = 0; XinClose(pf); return; } for(i=0; i<PltConfig.prdcount; i++) { sprintf(name, "prd%d", i+1); if(XinReadString(pf, name, str, 64) > 0) { StringToPrdTime(str, i); } } XinClose(pf); }
/** * @brief 保存统计量 */ static void SaveStatistics(void) { unsigned int i; int group; XINREF pf; char filename[200]; for(group=1; group<=STATISGROUP_MAX; group++) { sprintf(filename, "%s%s", STATISTIC_SAVEPATH, NameSave[group-1]); pf = XinOpen(filename, 'w'); if(NULL == pf) { ErrorLog("can not open %s for write\n", filename); continue; } for(i=0; __start__statistic+i<__stop__statistic; i++) { if(__start__statistic[i].group == group) XinWriteInt(pf, __start__statistic[i].name, __start__statistic[i].count, 0); } XinClose(pf); } }
/** * @brief 保存终端参数 * @return 0成功, 否则失败 */ int SaveParaTerm(void) { //SaveParaCamra(); //保存摄像头信息 XINREF pf; int bakup = 0; char str[48]; int i; DebugPrint(0, "Save paraterm\n"); pf = XinOpen(PARAM_SAVE_PATH "/term.xin", 'w'); if(NULL == pf) { PrintLog(0,"open param_path...\n"); goto mark_bakup; } mark_save: XinWriteInt( pf, "svraddrflag", ParaTermG.svraddr.net.chn, 0); IpToString(ParaTermG.svraddr.net.ip, str); XinWriteString(pf,"svraddrIp", str); XinWriteInt(pf, "svrport", ParaTermG.svraddr.net.port, 0); IpToString(ParaTermG.svraddr_1.net.ip, str); XinWriteString(pf,"svraddrIp2", str); XinWriteInt(pf, "svrport2", ParaTermG.svraddr_1.net.port, 0); IpToString(ParaTermG.svraddr_2.net.ip, str); XinWriteString(pf,"svraddrIp3", str); XinWriteInt(pf, "svrport3", ParaTermG.svraddr_2.net.port, 0); sms_phone_tounnor((unsigned char *)str, ParaTermG.sms_addr); XinWriteHex(pf,"smsaddr", (unsigned char *)str, 8); /*by ydl add 2011-03-21*/ IpToString(ParaTermG.gate_addr.net.ip, str); XinWriteString(pf,"gateaddr", str); XinWriteInt(pf, "gateport", ParaTermG.gate_addr.net.port, 0); XinWriteString(pf,"apn",ParaTermG.apn); XinWriteString( pf, "cdmausr", ParaTermG.cdma_usr); XinWriteString(pf, "cdmapwd", ParaTermG.cdma_pwd); XinWriteHex(pf, "norpwd", ParaTermG.nor_pwd,3); XinWriteHex(pf, "compwd", ParaTermG.com_pwd, 3); XinWriteHex(pf, "admpwd", ParaTermG.adm_pwd,3); XinWriteInt(pf,"search_device",ParaTermG.search_device,0); XinWriteInt(pf,"taskstarthour",ParaTermG.task_starthour,0); XinWriteInt(pf,"taskstartdev",ParaTermG.task_startdev,0); XinWriteInt(pf,"plcroutetype",ParaTermG.plc_route_type,0); XinWriteHex(pf,"gatelinewaste",ParaTermG.gate_linewaste,2); XinWriteInt(pf,"hourupimpdata",ParaTermG.hour_upimpdata,0); XinWriteInt(pf,"hourupdaydata",ParaTermG.hour_updaydata,0); XinWriteInt(pf,"alarmflag",ParaTermG.alarm_flag,0); unsigned char tmpbuf[16]; Cascade_AddrChange(ParaTermG.cascade_addr, tmpbuf,1); XinWriteHex(pf, "cascadeaddr", tmpbuf, 16); //XinWriteHex(pf, "cascadeaddr", ParaTermG.cascade_addr, 16); XinWriteInt(pf,"cascadeflag",ParaTermG.cascade_flag,0); XinWriteInt(pf,"dayreadmondata",ParaTermG.day_read_mondata,0); XinWriteInt(pf,"hourreadmondata",ParaTermG.hour_read_mondata,0); XinWriteInt(pf,"dayupmondata",ParaTermG.day_up_mondata,0); XinWriteInt(pf,"hourupmondata",ParaTermG.hour_up_mondata,0); //XinWriteHex(pf,"smsaddr", ParaTermG.sms_addr,16);//短信中心号码 Cascade_AddrChange(ParaTermG.peibian_addr,tmpbuf,0); XinWriteHex(pf,"peibian_addr",tmpbuf,4); XinWriteHex(pf, "ct", ParaTermG.ct,2); for(i=0;i<MAX_485PORT;i++){ sprintf((char *)tmpbuf,"baud%d",i); XinWriteInt(pf,(char *)tmpbuf,ParaTermG.port[i].baud,0); sprintf((char *)tmpbuf,"databits%d",i); XinWriteInt(pf, (char *)tmpbuf,ParaTermG.port[i].databits, 0);//默认为8 sprintf((char *)tmpbuf,"stopbits%d",i); XinWriteInt(pf, (char *)tmpbuf,ParaTermG.port[i].stopbits, 0);//默认为1 sprintf((char *)tmpbuf,"parity%d",i); XinWriteInt(pf, (char *)tmpbuf, ParaTermG.port[i].parity,0);//校验位 sprintf((char *)tmpbuf,"func%d",i); XinWriteInt(pf, (char *)tmpbuf, ParaTermG.port[i].func,0);//级联 } #if 0 int i; for (i=0; i<PORTCFG_NUM; i++) { printf(str, "port_valid%d", i); XinWriteInt(pf, str, ParaTermG.port[i].valid, 0); printf(str, "port_frame%d", i); XinWriteInt(pf, str, ParaTermG.port[i].frame, 0); printf(str, "port_baud%d", i); XinWriteInt(pf, str, ParaTermG.port[i].baud, 0); printf(str, "port_func%d", i); XinWriteInt(pf, str, ParaTermG.port[i].func, 0); } #endif XinClose(pf); /*end*/ mark_bakup: if(bakup) return 0; bakup = 1; pf = XinOpen(PARAM_BAK_PATH "/term.xin", 'w'); if(NULL == pf) { PrintLog(0,"open bak fail... \n"); return 1; } goto mark_save; }
int LoadParaTerm(void) { XINREF pf; char str[100]; int i; struct hostent *mast_host; struct in_addr *sin_addr; DebugPrint(0, " load param term..."); DebugPrint(0, " sizeof(term)=%d\r\n",sizeof(para_term_tG)); LoadDefParaTerm(); if(getuciConfigvar("sn",str) == 0) { PrintLog(0,"SN:%s\n",str); ParaTermG.deviceid[0] = str[0]-0x30; ParaTermG.deviceid[1] = str[1]-0x30; ParaTermG.deviceid[2] = str[2]-0x30; ParaTermG.deviceid[3] = str[3]-0x30; ParaTermG.deviceid[4] = str[4]-0x30; ParaTermG.deviceid[5] = str[5]-0x30; ParaTermG.deviceid[6] = str[6]-0x30; ParaTermG.deviceid[7] = str[7]-0x30; } if(getuciConfigvar("firststart",str) == 0) { ParaTermG.first_start = str[0]-0x30; } if(getuciConfigvar("musicmonth",str) == 0) { ParaTermG.Musicmonth = str[0]-0x30; } if(getuciConfigvar("master_addr",str) == 0) { PrintLog(0,"master_addr:%s\n",str); mast_host = gethostbyname(str); if(mast_host != NULL) { PrintLog(0,"Master IP Address :%s\n",inet_ntoa(*((struct in_addr *)mast_host->h_addr))); PrintLog(0,"Master HostName :%s\n",mast_host->h_name); sin_addr = (struct in_addr *)mast_host->h_addr; memcpy(ParaTermG.svraddr.net.ip,&sin_addr->s_addr,4); //ParaTermG.svraddr.net.ip[0] = sin_addr->s_addr.s_b1; //ParaTermG.svraddr.net.ip[1] = sin_addr->s_addr.s_b2; //ParaTermG.svraddr.net.ip[2] = sin_addr->s_addr.s_b3; //ParaTermG.svraddr.net.ip[3] = sin_addr->S_un_b.s_b4; } } if(getuciConfigvar("master_port",str) == 0) { PrintLog(0,"master_port:%s\n",str); ParaTermG.svraddr.net.port = atoi(str); } PrintLog(0,"music_volume:%s\n",str); if(getuciConfigvar("music_volume",str) == 0) { PrintLog(0,"music_volume:%s\n",str); ParaTermG.music_volume = atoi(str); setvolume(ParaTermG.music_volume); } else { PrintLog(0,"music_volume:%s\n",str); ParaTermG.music_volume = 20; setvolume(ParaTermG.music_volume); } sprintf(str,"ParaTermG.device_code = %s\n",ParaTermG.device_code); load_hardinfo(); pf = XinOpen(PARAM_SAVE_PATH "/term.xin", 'r'); if(NULL == pf) { pf = XinOpen(PARAM_BAK_PATH "/term.xin", 'r'); if(NULL == pf) { DebugPrint(0, "no file\n"); // SaveParaTerm(); return 1; } } /*读主站IP*/ ParaTermG.svraddr.net.chn = XinReadInt(pf, "svraddrflag",0x04);//读上行连接方式 if(XinReadString(pf, "svraddrIp", str, 24) > 0) { StringToIp(str, ParaTermG.svraddr.net.ip); } ParaTermG.svraddr.net.port = XinReadInt(pf, "svrport", 8300); /*读主站2IP*/ ParaTermG.svraddr_1.net.chn = XinReadInt(pf, "svraddrflag1",0x04);//读上行连接方式 if(XinReadString(pf, "svraddrIp1", str, 24) > 0) { StringToIp(str, ParaTermG.svraddr_1.net.ip); } ParaTermG.svraddr_1.net.port = XinReadInt(pf, "svrport1", 9001); /*读主站3IP*/ ParaTermG.svraddr_2.net.chn = XinReadInt(pf, "svraddrflag2",0x04);//读上行连接方式 if(XinReadString(pf, "svraddrIp2", str, 24) > 0) { StringToIp(str, ParaTermG.svraddr_2.net.ip); } ParaTermG.svraddr_2.net.port = XinReadInt(pf, "svrport2", 9001); /*读网关地址*/ if(XinReadString(pf, "gateaddr", str, 24) > 0) { StringToIp(str, ParaTermG.gate_addr.net.ip); } /*by ydl add 2011-03-21*/ ParaTermG.gate_addr.net.port = XinReadInt(pf, "gateport", 9001); /*读短信中心号码*/ //XinReadHex(pf, "smsaddr", str,16); int rtn; rtn = XinReadHex(pf, "smsaddr", (unsigned char *)str, 8); if (rtn != -1) { sms_phone_tonormal(rtn, (unsigned char *)str, ParaTermG.sms_addr); } XinReadString(pf, "apn", ParaTermG.apn,16); /*by ydl modify 2011-05-15*/ XinReadString( pf, "cdmausr", ParaTermG.cdma_usr,32 ); XinReadString(pf, "cdmapwd", ParaTermG.cdma_pwd, 32); XinReadHex(pf, "norpwd", ParaTermG.nor_pwd, 3);//普通密码 XinReadHex(pf, "compwd", ParaTermG.com_pwd, 3);//设置密码 XinReadHex(pf, "admpwd", ParaTermG.adm_pwd,3);//管理员密码 /*默认振铃次数*/ ParaTermG.search_device = XinReadInt( pf, "search_device", 0); /*任务开始时间*/ ParaTermG.task_starthour = XinReadInt(pf, "taskstarthour", 0x01); /*任务执行间隔*/ ParaTermG.task_startdev = XinReadInt(pf, "taskstartdev", 0x01);//间隔一小时 /*默认载波中继方式*/ ParaTermG.plc_route_type = XinReadInt( pf, "plcroutetype", 0x00);//自动中继 /*默认线损阀值*/ XinReadHex( pf, "gatelinewaste",ParaTermG.gate_linewaste, 2);// 1表示0.1% /*重点用户数据上传时间*///保存为BCD码例如,如果是12点,则保存的是12而不是0x12 ParaTermG.hour_upimpdata = XinReadInt( pf, "hourupimpdata", 0xFF);//不主动上传 /*日冻结上传时间*/ ParaTermG.hour_updaydata = XinReadInt( pf, "hourupdaydata", 0xFF);//不主动上传 /*告警使能控制字*/ ParaTermG.alarm_flag = XinReadInt( pf, "alarmflag", 0);//不告警 /*级联从终端地址*/ //XinReadHex(pf, "cascadeaddr", ParaTermG.cascade_addr, 16); unsigned char tmpbuf[16]; XinReadHex(pf, "cascadeaddr", tmpbuf, 16); Cascade_AddrChange(tmpbuf, ParaTermG.cascade_addr,1); //加载注册信息 ParaTermG.reg.autoflag = XinReadInt( pf, "AutoFlag", 0x01); //检查注册码是不是本机使用的 XinReadString(pf,"RegeCode",ParaTermG.reg.register_code,13); char tempregcode[13]; MakeRegisteCode(tempregcode); if(strcmp(ParaTermG.reg.register_code,tempregcode) == 0) //注册验证成功 { ParaTermG.reg.autoflag = 1; } else { ParaTermG.reg.autoflag = 0; } ParaTermG.reg.autoflag = 1; /*级联标记*/ ParaTermG.cascade_flag = XinReadInt( pf, "cascadeflag", 1);//默认为主集中器,且不允许级联 /*月末数据抄收开始时间*/ ParaTermG.day_read_mondata = XinReadInt( pf, "dayreadmondata", 0x01);//一号开始冻结 /*月末数据抄收开始时间*/ ParaTermG.hour_read_mondata = XinReadInt( pf, "hourreadmondata", 0x01);// 1点 /*月冻结上传开始时间*/ ParaTermG.day_up_mondata = XinReadInt( pf, "dayupmondata", 0x03); // 3号 ParaTermG.hour_up_mondata = XinReadInt( pf, "hourupmondata", 0x05);//5点上传 // printf("day_mont=%d,hour_mont=%d",ParaTermG.day_read_mondata,ParaTermG.hour_read_mondata); // printf("day_up_mont=%d,hour_up_mont=%d",ParaTermG.day_up_mondata,ParaTermG.hour_up_mondata); XinReadHex(pf,"peibian_addr",tmpbuf,4); Cascade_AddrChange(tmpbuf,ParaTermG.peibian_addr,0); XinReadHex(pf, "ct", ParaTermG.ct, 2);//配变CT for(i=0;i<MAX_485PORT;i++){ sprintf((char *)tmpbuf,"baud%d",i); ParaTermG.port[i].baud = XinReadInt(pf, (char *)tmpbuf, 4); //默认为1200 sprintf((char *)tmpbuf,"databits%d",i); ParaTermG.port[i].databits = XinReadInt(pf, (char *)tmpbuf, 8);//默认为8 sprintf((char *)tmpbuf,"stopbits%d",i); ParaTermG.port[i].stopbits = XinReadInt(pf, (char *)tmpbuf, 1);//默认为1 sprintf((char *)tmpbuf,"parity%d",i); ParaTermG.port[i].parity = XinReadInt(pf, (char *)tmpbuf, 1);//校验位 sprintf((char *)tmpbuf,"func%d",i); ParaTermG.port[i].func= XinReadInt(pf, (char *)tmpbuf, i);//端口功能 } DebugPrint(0, "ok\n"); XinClose(pf); return 0; }