You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

701 lines
24 KiB
C

/* Includes ------------------------------------------------------------------*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "file.h"
#include "ca_main.h"
#include "debug.h"
#include "ca_param.h"
//cau初始化参数名
char *cauInitCfgName[7] = {"Range","Ratio","ZeroPoint","ChangeThreshold","HighLimit","LowLimit","chSwitch"};
int ip2array(char *ip, unsigned char arr[])
{
char *pstr = ip;
char *p1 = ip, *p2 = ip;
int n = 0;
while (*pstr != '\0')
{
if ((p2 = strchr(p1, '.')) != NULL)
{
*p2 = '\0';
arr[n++] = atoi(p1);
p1 = p2 + 1;
}
pstr++;
}
arr[n] = atoi(p1);
return 0;
}
//加载MQTT配置
int _param_load_mqtt_cfg(cJSON *pCfgJsRoot)
{
int ret = 0;
cJSON *pJson = cJSON_GetObjectItem(pCfgJsRoot, "MQTTConfig");
if (pJson == NULL)
{
LOG("cJSON_GetObjectItem fail");
return 1;
}
mqtt_param_t *pParam = &pparam_config->mqttCfg;
strcpy((char *)pParam->client_id,cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "ClientID")));
if (pParam->client_id[0] == '\0')
{
strcpy((char *)pParam->client_id, CSG_CLIENT_ID_DEFAULT);
ret = 1;
}
strcpy((char *)pParam->server_addr,cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "ServiceIP")));
if (pParam->server_addr[0] == '\0')
{
strcpy((char *)pParam->server_addr, CSG_SERVER_ADDRESS_DEFAULT);
ret = 1;
}
pParam->server_port = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "ServicePort"));
if (pParam->server_port < 1024)
{
pParam->server_port = CSG_SERVER_PORT_DEFAULT;
ret = 1;
}
strcpy((char *)pParam->password,cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "PassWord")));
if (pParam->password[0] == '\0')
{
strcpy((char *)pParam->password, CSG_PASSWORD_DEFAULT);
ret = 1;
}
strcpy((char *)pParam->user_name,cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "UserName")));
if (pParam->user_name[0] == '\0')
{
strcpy((char *)pParam->user_name, CSG_USER_NAME_DEFAULT);
ret = 1;
}
strcpy((char *)pParam->device_id,cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "DeviceID")));
if (pParam->device_id[0] == '\0')
{
strcpy((char *)pParam->device_id, CSG_DEVICE_ID_DEFAULT);
ret = 1;
}
pParam->keep_live_time = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "KeepAliveTime"));
if (pParam->keep_live_time < 0 || pParam->keep_live_time > 500)
{
pParam->keep_live_time = CSG_KEEP_LIVE_TIME_DEFAULT;
ret = 1;
}
return ret;
}
bool _param_save_mqtt_cfg(cJSON *pCfgJsRoot)
{
mqtt_param_t *pParam = &pparam_config->mqttCfg;
cJSON *pJson = cJSON_CreateObject();
if (pJson == NULL)
{
return -1;
}
cJSON_AddStringToObject(pJson,"ClientID",(char *)pParam->client_id);
cJSON_AddStringToObject(pJson,"ServiceIP",(char *)pParam->server_addr);
cJSON_AddNumberToObject(pJson, "ServicePort", pParam->server_port);
cJSON_AddStringToObject(pJson,"DeviceID",(char *)pParam->device_id);
cJSON_AddStringToObject(pJson,"PassWord",(char *)pParam->password);
cJSON_AddNumberToObject(pJson, "KeepAliveTime", pParam->keep_live_time);
cJSON_AddStringToObject(pJson,"UserName",(char *)pParam->user_name);
cJSON_AddItemToObject(pCfgJsRoot, "MQTTConfig", pJson);
return 0;
}
int _param_load_dev_cfg(cJSON *pCfgJsRoot)
{
int i;
cJSON *pJson = cJSON_GetObjectItem(pCfgJsRoot, "DevCfg");
if (pJson == NULL)
{
return -1;
}
pparam_config->devSize = cJSON_GetArraySize(pJson);
printh("devSize = %d\n", pparam_config->devSize);
for (i = 0; i < pparam_config->devSize; i++)
{
cJSON *pJsonArr = cJSON_GetArrayItem(pJson, i);//根据下标获取cjson对象数组中的对象
DevCfg_t *pParam = &pparam_config->devs[i];
pParam->enable = cJSON_GetNumberValue(cJSON_GetObjectItem(pJsonArr, "enable"));
pParam->space = cJSON_GetNumberValue(cJSON_GetObjectItem(pJsonArr, "space"));
pParam->level = cJSON_GetNumberValue(cJSON_GetObjectItem(pJsonArr, "level"));
strcpy((char *)pParam->devName, cJSON_GetStringValue(cJSON_GetObjectItem(pJsonArr, "devName")));
strcpy((char *)pParam->comProtocol, cJSON_GetStringValue(cJSON_GetObjectItem(pJsonArr, "comProtocol")));
strcpy((char *)pParam->portName, cJSON_GetStringValue(cJSON_GetObjectItem(pJsonArr, "portName")));
printh("设备名称=%s, 通讯协议=%s, 是否使能=%d, 采集间隔=%d, 优先级别=%d\n",pParam->devName,pParam->portName,\
pParam->enable,pParam->space,pParam->level);
}
return 0;
}
int _param_save_dev_cfg(cJSON *pJsRoot)
{
int i = 0;
cJSON *pJsonArr = cJSON_CreateArray();
if (pJsonArr == NULL)
{
printh("[%s:%d] JSON Create failed.\n", __FUNCTION__, __LINE__);
return -1;
}
for (i = 0; i < pparam_config->devSize && i < DEV_MAX_COUNT; i++)
{
DevCfg_t *pCfg = &pparam_config->devs[i];
cJSON *jPort = cJSON_CreateObject();
if (jPort == NULL)
{
printh("[%s:%d] JSON Create failed.\n", __FUNCTION__, __LINE__);
return -1;
}
cJSON_AddNumberToObject(jPort, "enable", pCfg->enable);
cJSON_AddNumberToObject(jPort, "space", pCfg->space);
cJSON_AddNumberToObject(jPort, "level", pCfg->level);
cJSON_AddStringToObject(jPort, "devName", (char *)pCfg->devName);
cJSON_AddStringToObject(jPort, "comProtocol", (char *)pCfg->comProtocol);
cJSON_AddStringToObject(jPort, "portName", (char *)pCfg->portName);
cJSON_AddItemToArray(pJsonArr, jPort);
}
cJSON_AddItemToObject(pJsRoot, "DevCfg", pJsonArr);
return 0;
}
int _param_load_cau_cfg(cJSON *pCfgJsRoot)
{
int i;
cJSON *pJson = cJSON_GetObjectItem(pCfgJsRoot, "CAUInit");
if (pJson == NULL)
{
return -1;
}
for (i = 0; i < 7; i++)
{
char *str =cJSON_GetStringValue(cJSON_GetObjectItem(pJson, cauInitCfgName[i]));
char *p = strsep(&str,",");
int j = 0;
while(p != NULL)
{
if(j >= 24) break;
//cau_param_t *pParam = &pparam_config->CAUInit[i];
if(i == 0)
{
pparam_config->cauParam[j].Range = atof(p);
}
else if(i == 1)
{
pparam_config->cauParam[j].Ratio = atof(p);
}
else if(i == 2)
{
pparam_config->cauParam[j].ZeroPoint = atof(p);
}
else if(i == 3)
{
pparam_config->cauParam[j].ChangeThreshold = atof(p);
}
else if(i == 4)
{
pparam_config->cauParam[j].HighLimit = atof(p);
}
else if(i == 5)
{
pparam_config->cauParam[j].LowLimit = atof(p);
}
else
{
pparam_config->cauParam[j].chSwitch = atoi(p);
}
p = strsep(&str, ",");
j++;
}
#if 0
printf("%s:\n", cauInitCfgName[i]);
for (int a = 0; a < 24; a++)
{
//for (int b = 0; b < 8; b++)
{
//printf("%f ", pparam_config->cauParam[a].Range);
}
}
//printf("\n");
#endif
}
return 0;
}
int _param_save_cau_cfg(cJSON *pJsRoot)
{
cJSON *jPort = cJSON_CreateObject();
if (jPort == NULL)
{
printh("[%s:%d] JSON Create failed.\n", __FUNCTION__, __LINE__);
return -1;
}
int i = 0,j = 0;
for(i = 0;i < 7;i ++)
{
char buf[1024] = {0};
for(j = 0;j < 24;j ++)
{
char temp[20] = {0};
switch (i)
{
case 0:
sprintf(temp,"%.1f,",pparam_config->cauParam[j].Range);
break;
case 1:
sprintf(temp,"%.1f,",pparam_config->cauParam[j].Ratio);
break;
case 2:
sprintf(temp,"%.1f,",pparam_config->cauParam[j].ZeroPoint);
break;
case 3:
sprintf(temp,"%.1f,",pparam_config->cauParam[j].ChangeThreshold);
break;
case 4:
sprintf(temp,"%.1f,",pparam_config->cauParam[j].HighLimit);
break;
case 5:
sprintf(temp,"%.1f,",pparam_config->cauParam[j].LowLimit);
break;
case 6:
sprintf(temp,"%d,",pparam_config->cauParam[j].chSwitch);
break;
}
strcat(buf,temp);
}
buf[strlen(buf)-1] = 0;
printh("%s:%s\n", cauInitCfgName[i], buf);
cJSON_AddStringToObject(jPort, cauInitCfgName[i], buf);
}
cJSON_AddItemToObject(pJsRoot, "CAUInit", jPort);
return 1;
}
int _param_load_gateway_cfg(cJSON *pCfgJsRoot)
{
cJSON *pJson = cJSON_GetObjectItem(pCfgJsRoot, "gateway");
if (pJson == NULL)
{
return -1;
}
GateWay_t *pParam = &pparam_config->gateway;
pParam->CommunicationMode = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "CommunicationMode"));
pParam->radioType = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "radioType"));
pParam->uploadSpace = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "uploadSpace"));
pParam->EnGPS = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "EnGPS"));
strcpy((char *)pParam->apn, cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "APN")));
char *pbuf = cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "Server1"));
ip2array(pbuf, pParam->ServerIP1);
pbuf = cJSON_GetStringValue(cJSON_GetObjectItem(pJson, "Server2"));
ip2array(pbuf, pParam->ServerIP2);
pParam->ServerIP1_Port = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "Server1Port"));
pParam->ServerIP2_Port = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "Server2Port"));
pParam->vBatChangeStart = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "vBatChangeStart"));
pParam->vBatChangeEnd = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "vBatChangeEnd"));
pParam->vscValue = cJSON_GetNumberValue(cJSON_GetObjectItem(pJson, "vscValue"));
printh("CommunicationMode=%d\n", pParam->CommunicationMode);
printh("radioType=%d\n", pParam->radioType);
printh("uploadSpace=%d\n", pParam->uploadSpace);
printh("EnGPS=%d\n", pParam->EnGPS);
printh("apn=%s\n", pParam->apn);
printh("ServerIP1:%d.%d.%d.%d\n", pParam->ServerIP1[0], pParam->ServerIP1[1], pParam->ServerIP1[2], pParam->ServerIP1[3]);
printh("ServerIP2:%d.%d.%d.%d\n", pParam->ServerIP2[0], pParam->ServerIP2[1], pParam->ServerIP2[2], pParam->ServerIP2[3]);
printh("ServerIP1_Port=%d\n", pParam->ServerIP1_Port);
printh("ServerIP2_Port=%d\n", pParam->ServerIP2_Port);
printh("vBatChangeStart=%d\n", pParam->vBatChangeStart);
printh("vBatChangeEnd=%d\n", pParam->vBatChangeEnd);
printh("vscValue=%d\n", pParam->vscValue);
//printf("CommunicationMode=%d\n", pParam->CommunicationMode);
return 0;
}
int _param_save_gateway_cfg(cJSON *pJsRoot)
{
int i;
GateWay_t *pParam = &pparam_config->gateway;
cJSON *pJson = cJSON_CreateObject();
if (pJson == NULL)
{
printh("[%s:%d] JSON Create failed.\n", __FUNCTION__, __LINE__);
return -1;
}
cJSON_AddStringToObject(pJson, "APN", (char *)pParam->apn);
cJSON_AddNumberToObject(pJson, "CommunicationMode", pParam->CommunicationMode);
cJSON_AddNumberToObject(pJson, "radioType", pParam->radioType);
cJSON_AddNumberToObject(pJson, "Server1Port", pParam->ServerIP1_Port);
cJSON_AddNumberToObject(pJson, "Server2Port", pParam->ServerIP2_Port);
cJSON_AddNumberToObject(pJson, "EnGPS", pParam->EnGPS);
cJSON_AddNumberToObject(pJson, "uploadSpace", pParam->uploadSpace);
cJSON_AddNumberToObject(pJson, "vBatChangeStart", pParam->vBatChangeStart);
cJSON_AddNumberToObject(pJson, "vBatChangeEnd", pParam->vBatChangeEnd);
cJSON_AddNumberToObject(pJson, "vscValue", pParam->vscValue);
char sbuf[32] = {0};
snprintf(sbuf, 31, "%d.%d.%d.%d", pParam->ServerIP1[0], pParam->ServerIP1[1], pParam->ServerIP1[2], pParam->ServerIP1[3]);
cJSON_AddStringToObject(pJson, "Server1", sbuf);
memset(sbuf,0,sizeof(sbuf));
snprintf(sbuf, 31, "%d.%d.%d.%d", pParam->ServerIP2[0], pParam->ServerIP2[1], pParam->ServerIP2[2], pParam->ServerIP2[3]);
cJSON_AddStringToObject(pJson, "Server2", sbuf);
memset(sbuf,0,sizeof(sbuf));
char buf[128] = {0};
for(i = 0;i < 8;i++)
{
sprintf(sbuf,"%d,",pParam->Switch[i]);
strcat(buf,sbuf);
}
buf[strlen(buf)-1] = 0;
cJSON_AddStringToObject(pJson, "Switch", buf);
cJSON_AddItemToObject(pJsRoot, "gateway", pJson);
if(pParam->radioType == 0)
{
system("cp /etc/network/S80SetEth0-net /etc/network/S80SetEth0");
}
else
{
system("cp /etc/network/S80SetEth0-ppp /etc/network/S80SetEth0");
}
return 0;
}
int _param_load_land_hex_cfg()
{
int i;
LandDevCfg_t *pParam = &pparam_config->landHexCfg;
for (i = 0; i < pparam_config->devSize; i++)
{
DevCfg_t *dev = &pparam_config->devs[i];
if (dev == NULL)
continue;
if(strcmp((char*)dev->devName,"DAU") == 0)
{
pParam->hfEn = dev->enable;
pParam->hfLeven = dev->level;
}
else if(strcmp((char*)dev->devName,"CAU1") == 0)
{
pParam->cau1En = dev->enable;
pParam->cau1level = dev->level;
pParam->cau1Space = dev->space;
}
else if(strcmp((char*)dev->devName,"CAU2") == 0)
{
pParam->cau2En = dev->enable;
pParam->cau2level = dev->level;
pParam->cau2Space = dev->space;
}
else if(strcmp((char*)dev->devName,"CAU3") == 0)
{
pParam->cau3En = dev->enable;
pParam->cau3level = dev->level;
pParam->cau3Space = dev->space;
}
else if(strcmp((char*)dev->devName,"EnvDev") == 0)
{
pParam->enDevLevel = dev->level;
pParam->enDevSpace = dev->space;
}
else if(strcmp((char*)dev->devName,"TempShake") == 0)
{
//DBG("温度振动JSON");
pParam->tempsnakeEn = dev->enable;
pParam->tempsnakelevel = dev->level;
pParam->tempsnakeSpace = dev->space;
}
}
pParam->cau1Ch1 = pparam_config->cauParam[0].chSwitch;
pParam->cau1Ch2 = pparam_config->cauParam[1].chSwitch;
pParam->cau1Ch3 = pparam_config->cauParam[2].chSwitch;
pParam->cau1Ch4 = pparam_config->cauParam[3].chSwitch;
pParam->cau1Ch5 = pparam_config->cauParam[4].chSwitch;
pParam->cau1Ch6 = pparam_config->cauParam[5].chSwitch;
pParam->cau1Ch7 = pparam_config->cauParam[6].chSwitch;
pParam->cau1Ch8 = pparam_config->cauParam[7].chSwitch;
pParam->cau2Ch1 = pparam_config->cauParam[8].chSwitch;
pParam->cau2Ch2 = pparam_config->cauParam[9].chSwitch;
pParam->cau2Ch3 = pparam_config->cauParam[10].chSwitch;
pParam->cau2Ch4 = pparam_config->cauParam[11].chSwitch;
pParam->cau2Ch5 = pparam_config->cauParam[12].chSwitch;
pParam->cau2Ch6 = pparam_config->cauParam[13].chSwitch;
pParam->cau2Ch7 = pparam_config->cauParam[14].chSwitch;
pParam->cau2Ch8 = pparam_config->cauParam[15].chSwitch;
pParam->cau3Ch1 = pparam_config->cauParam[16].chSwitch;
pParam->cau3Ch2 = pparam_config->cauParam[17].chSwitch;
pParam->cau3Ch3 = pparam_config->cauParam[18].chSwitch;
pParam->cau3Ch4 = pparam_config->cauParam[19].chSwitch;
pParam->cau3Ch5 = pparam_config->cauParam[20].chSwitch;
pParam->cau3Ch6 = pparam_config->cauParam[21].chSwitch;
pParam->cau3Ch7 = pparam_config->cauParam[22].chSwitch;
pParam->cau3Ch8 = pparam_config->cauParam[23].chSwitch;
pParam->tempsnakeType = pparam_config->tempSnakeCfg.devType;
pParam->tempLimit = pparam_config->tempSnakeCfg.TempLimit;
pParam->snakeLimit = pparam_config->tempSnakeCfg.ShakeLimit;
pParam->thEn = pparam_config->envDevCfg[0].enable;
pParam->thRs485Ch = pparam_config->envDevCfg[0].RS485Ch;
pParam->thAddr = pparam_config->envDevCfg[0].Addr;
pParam->waterEn = pparam_config->envDevCfg[1].enable;
pParam->waterRs485Ch = pparam_config->envDevCfg[1].RS485Ch;
pParam->waterAddr = pparam_config->envDevCfg[1].Addr;
pParam->o2En = pparam_config->envDevCfg[2].enable;
pParam->o2Rs485Ch = pparam_config->envDevCfg[2].RS485Ch;
pParam->o2Addr = pparam_config->envDevCfg[2].Addr;
pParam->ch4En = pparam_config->envDevCfg[3].enable;
pParam->ch4Rs485Ch = pparam_config->envDevCfg[3].RS485Ch;
pParam->ch4Addr = pparam_config->envDevCfg[3].Addr;
pParam->h2sEn = pparam_config->envDevCfg[4].enable;
pParam->h2sRs485Ch = pparam_config->envDevCfg[4].RS485Ch;
pParam->h2sAddr = pparam_config->envDevCfg[4].Addr;
pParam->co2En = pparam_config->envDevCfg[5].enable;
pParam->co2Rs485Ch = pparam_config->envDevCfg[5].RS485Ch;
pParam->co2Addr = pparam_config->envDevCfg[5].Addr;
pParam->cameraEn = pparam_config->cameraCfg.enable;
pParam->camera485Ch = pparam_config->cameraCfg.RS485Ch;
pParam->cameraDi = pparam_config->cameraCfg.di;
pParam->cameraTriger = pparam_config->cameraCfg.trigger;
pParam->cameraDelay = pparam_config->cameraCfg.delay;
pParam->cameraSize = pparam_config->cameraCfg.size;
return 0;
}
int _param_save_land_hex_cfg()
{
LandDevCfg_t *cfg = &pparam_config->landHexCfg;
int i = 0;
for (i = 0; i < pparam_config->devSize ; i++)
{
DevCfg_t *dev = &pparam_config->devs[i];
if (!dev)continue;
if(strcmp((char *)dev->devName,"DAU") == 0)
{
dev->enable = cfg->hfEn;
dev->level = cfg->hfLeven;
}
else if(strcmp((char *)dev->devName,"CAU1") == 0)
{
dev->enable = cfg->cau1En;
dev->level = cfg->cau1level;
dev->space = cfg->cau1Space;
}
else if(strcmp((char *)dev->devName,"CAU2") == 0)
{
dev->enable = cfg->cau2En;
dev->level = cfg->cau2level;
dev->space = cfg->cau2Space;
}
else if(strcmp((char *)dev->devName,"CAU3") == 0)
{
dev->enable = cfg->cau3En;
dev->level = cfg->cau3level;
dev->space = cfg->cau3Space;
}
else if(strcmp((char *)dev->devName,"EnvDev") == 0)
{
dev->level = cfg->enDevLevel;
dev->space = cfg->enDevSpace;
}
else if(strcmp((char *)dev->devName,"TempShake") == 0)
{
dev->enable = cfg->tempsnakeEn;
dev->level = cfg->tempsnakelevel;
dev->space = cfg->tempsnakeSpace;
}
}
pparam_config->cauParam[0].chSwitch = cfg->cau1Ch1;
pparam_config->cauParam[1].chSwitch = cfg->cau1Ch2;
pparam_config->cauParam[2].chSwitch = cfg->cau1Ch3;
pparam_config->cauParam[3].chSwitch = cfg->cau1Ch4;
pparam_config->cauParam[4].chSwitch = cfg->cau1Ch5;
pparam_config->cauParam[5].chSwitch = cfg->cau1Ch6;
pparam_config->cauParam[6].chSwitch = cfg->cau1Ch7;
pparam_config->cauParam[7].chSwitch = cfg->cau1Ch8;
pparam_config->cauParam[8].chSwitch = cfg->cau2Ch1;
pparam_config->cauParam[9].chSwitch = cfg->cau2Ch2;
pparam_config->cauParam[10].chSwitch = cfg->cau2Ch3;
pparam_config->cauParam[11].chSwitch = cfg->cau2Ch4;
pparam_config->cauParam[12].chSwitch = cfg->cau2Ch5;
pparam_config->cauParam[13].chSwitch = cfg->cau2Ch6;
pparam_config->cauParam[14].chSwitch = cfg->cau2Ch7;
pparam_config->cauParam[15].chSwitch = cfg->cau2Ch8;
pparam_config->cauParam[16].chSwitch = cfg->cau3Ch1;
pparam_config->cauParam[17].chSwitch = cfg->cau3Ch2;
pparam_config->cauParam[18].chSwitch = cfg->cau3Ch3;
pparam_config->cauParam[19].chSwitch = cfg->cau3Ch4;
pparam_config->cauParam[20].chSwitch = cfg->cau3Ch5;
pparam_config->cauParam[21].chSwitch = cfg->cau3Ch6;
pparam_config->cauParam[22].chSwitch = cfg->cau3Ch7;
pparam_config->cauParam[23].chSwitch = cfg->cau3Ch8;
pparam_config->tempSnakeCfg.devType = cfg->tempsnakeType;
pparam_config->tempSnakeCfg.TempLimit = cfg->tempLimit;
pparam_config->tempSnakeCfg.ShakeLimit = cfg->snakeLimit;
pparam_config->envDevCfg[0].enable = cfg->thEn;
pparam_config->envDevCfg[0].RS485Ch = cfg->thRs485Ch;
pparam_config->envDevCfg[0].Addr = cfg->thAddr;
pparam_config->envDevCfg[1].enable = cfg->waterEn;
pparam_config->envDevCfg[1].RS485Ch = cfg->waterRs485Ch;
pparam_config->envDevCfg[1].Addr = cfg->waterAddr;
pparam_config->envDevCfg[2].enable = cfg->o2En;
pparam_config->envDevCfg[2].RS485Ch = cfg->o2Rs485Ch;
pparam_config->envDevCfg[2].Addr = cfg->o2Addr;
pparam_config->envDevCfg[3].enable = cfg->ch4En;
pparam_config->envDevCfg[3].RS485Ch = cfg->ch4Rs485Ch ;
pparam_config->envDevCfg[3].Addr = cfg->ch4Addr;
pparam_config->envDevCfg[4].enable = cfg->h2sEn;
pparam_config->envDevCfg[4].RS485Ch = cfg->h2sRs485Ch;
pparam_config->envDevCfg[4].Addr = cfg->h2sAddr;
pparam_config->envDevCfg[5].enable = cfg->co2En;
pparam_config->envDevCfg[5].RS485Ch = cfg->co2Rs485Ch;
pparam_config->envDevCfg[5].Addr = cfg->co2Addr;
pparam_config->cameraCfg.enable = cfg->cameraEn;
pparam_config->cameraCfg.RS485Ch = cfg->camera485Ch;
pparam_config->cameraCfg.di = cfg->cameraDi;
pparam_config->cameraCfg.trigger = cfg->cameraTriger;
pparam_config->cameraCfg.delay = cfg->cameraDelay;
pparam_config->cameraCfg.size = cfg->cameraSize;
return 0;
}
int param_load()
{
int ret = 0;
cJSON *pCfgJsRoot = readJsonFromFile(CONFIG_FILE);
if(pCfgJsRoot == NULL)
{
printh("加载配置文件失败,尝试加载备用配置");
pCfgJsRoot = readJsonFromFile(BACK_CONFIG_FILE);
if (pCfgJsRoot == NULL)
{
printh("load file:%s failed\n", BACK_CONFIG_FILE);
return -1;
}
}
if(pparam_config)
{
free(pparam_config);
}
pparam_config = (ca_param_config_t *)calloc(1, sizeof(ca_param_config_t));
if (pparam_config == NULL)
{
printh("calloc struct(ca_param_config_t) failed\n");
return -1;
}
memset(pparam_config, 0, sizeof(ca_param_config_t));
if (_param_load_gateway_cfg(pCfgJsRoot) < 0)
{
return -1;
}
if (_param_load_dev_cfg(pCfgJsRoot) < 0)
{
return -1;
}
if (_param_load_cau_cfg(pCfgJsRoot) < 0)
{
return -1;
}
ret += _param_load_mqtt_cfg(pCfgJsRoot);
cJSON_Delete(pCfgJsRoot);
_param_load_land_hex_cfg();
if (ret > 0)
{
LOG("Param init failure,save again");
param_save();
}
return 0;
}
int param_save()
{
cJSON *pJsRoot = cJSON_CreateObject();
if (pJsRoot == NULL || pparam_config == NULL)
{
printh("[%s:%d] JSON Create failed.\n", __FUNCTION__, __LINE__);
return -1;
}
_param_save_land_hex_cfg();
do
{
if (_param_save_gateway_cfg(pJsRoot) < 0)
{
printh("_param_save_gateway_cfg failed\n");
break;
}
if (_param_save_dev_cfg(pJsRoot) < 0)
{
printh("_param_save_dev_cfg failed\n");
break;
}
if (_param_save_cau_cfg(pJsRoot) < 0)
{
printf("_param_save_dev_cfg failed\n");
break;
}
if (_param_save_mqtt_cfg(pJsRoot) < 0)
{
printf("_param_save_mqtt_cfg failed\n");
break;
}
saveJsonToFile(CONFIG_FILE, pJsRoot);
saveJsonToFile(BACK_CONFIG_FILE, pJsRoot);
} while(0);
cJSON_Delete(pJsRoot);
return 0;
}