Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
/**
* @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);
	}
}
Esempio n. 5
0
/**
* @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;
}
Esempio n. 6
0
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;
}