254 lines
8.7 KiB
C
254 lines
8.7 KiB
C
#include "jsonpacket.h"
|
|
#include "cjson.h"
|
|
#include <string.h>
|
|
#include <rtthread.h>
|
|
#include "data.h"
|
|
#include <easyflash.h>
|
|
#include <stdlib.h>
|
|
|
|
#define PROTO_VER "FF_V3.0"
|
|
|
|
extern char config_list[16][32];
|
|
extern int config_list_size;
|
|
|
|
|
|
// 5 分钟流量站数据上报
|
|
int Json5MinFlowDataPacket (uint8_t * buffer)
|
|
{
|
|
char *result, * packMsg = (char *) buffer;
|
|
cJSON *root = NULL;
|
|
double dbl[6] = {3.14, 3.12, 3.33, 3.20, 3.12, 3.20};
|
|
int length;
|
|
char * p;
|
|
root = cJSON_CreateObject();
|
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("stand")); // 功能码
|
|
p = ef_get_env ("site_type");
|
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "pver", cJSON_CreateString (PROTO_VER)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "iccid", cJSON_CreateString (SysData.iccid)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "ver", cJSON_CreateString (GetVersion())); // 表示流量计
|
|
cJSON_AddItemToObject (root, "vol", cJSON_CreateNumber (12.3)); // 表示电池电压
|
|
cJSON_AddItemToObject (root, "temp", cJSON_CreateNumber (32.5)); // 表示流量计
|
|
p = ef_get_env ("net_drv");
|
|
cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString (p)); // 表示流量计
|
|
p = ef_get_env ("iap_app_filename");
|
|
cJSON_AddItemToObject (root, "filename", cJSON_CreateString (p)); // 表示电池电压
|
|
p = ef_get_env ("chancnt");
|
|
cJSON_AddItemToObject (root, "chancnt", cJSON_CreateString (p)); // 表示电池电压
|
|
//cJSON_AddItemToObject (root, "chancnt", cJSON_CreateNumber (1)); // 表示电池电压
|
|
// 瞬时流速
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = WaterData[i].thisSpeed;
|
|
}
|
|
cJSON * ArrNumSpeed = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "thisspeed", ArrNumSpeed);
|
|
|
|
// 瞬时流量
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = WaterData[i].thisFlow;
|
|
}
|
|
cJSON * ArrNumFlow = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "thisflow", ArrNumFlow);
|
|
|
|
// 累计流量
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = WaterData[i].ttWater;
|
|
}
|
|
cJSON * ArrNumTtflow = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "ttflow", ArrNumTtflow);
|
|
|
|
// 当前水位
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = (double)WaterData[i].thisLevel/100;
|
|
}
|
|
cJSON * ArrNumLeve = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "thisLeve", ArrNumLeve);
|
|
// 当前压力
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = WaterData[i].thisPress;
|
|
}
|
|
cJSON * ArrNumPress = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "thispress", ArrNumPress);
|
|
|
|
// 当前温度
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = WaterData[i].ttWater;
|
|
}
|
|
cJSON * ArrNumTemp = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "thistemp", ArrNumTemp);
|
|
|
|
// 当前测斜方向
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = IncData[i].dir;
|
|
}
|
|
cJSON * ArrNumIncDir = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "thisincdir", ArrNumIncDir);
|
|
|
|
// 当前测斜数据
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
dbl[i] = IncData[i].data;
|
|
}
|
|
cJSON * ArrNumIncData = cJSON_CreateDoubleArray (dbl, 6);
|
|
cJSON_AddItemToObject (root, "thisincdata", ArrNumIncData);
|
|
|
|
//---------------------------------------------以下不准修改
|
|
result = cJSON_PrintUnformatted (root);
|
|
strcpy (packMsg, result);
|
|
cJSON_free (result);
|
|
cJSON_Delete (root);
|
|
length = rt_strlen (packMsg);
|
|
return length;
|
|
}
|
|
// 5分钟闸门站数据上报
|
|
int JsonRegistDataPacket (uint8_t * buffer)
|
|
{
|
|
char *result, * packMsg = (char *) buffer;
|
|
cJSON *root = NULL;
|
|
char * p;
|
|
int length;
|
|
root = cJSON_CreateObject();
|
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("regist")); // 功能码
|
|
p = ef_get_env ("site_type");
|
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "pver", cJSON_CreateString (PROTO_VER)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "iccid", cJSON_CreateString (SysData.iccid)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "ver", cJSON_CreateString (VERSION)); // 表示流量计
|
|
p = ef_get_env ("net_drv");
|
|
cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString (p)); // 表示流量计
|
|
p = ef_get_env ("iap_app_filename");
|
|
//uint32_t max_open = atoi (p);
|
|
cJSON_AddItemToObject (root, "filename", cJSON_CreateString (p)); // 表示电池电压
|
|
|
|
//---------------------------------------------以下不准修改
|
|
result = cJSON_PrintUnformatted (root);
|
|
strcpy (packMsg, result);
|
|
cJSON_free (result);
|
|
cJSON_Delete (root);
|
|
length = rt_strlen (packMsg);
|
|
return length;
|
|
}
|
|
|
|
|
|
// 5分钟闸门站数据上报
|
|
int Json5MinSluiceDataPacket (uint8_t * buffer)
|
|
{
|
|
char *result, * packMsg = (char *) buffer;
|
|
cJSON *root = NULL;
|
|
char * p;
|
|
int length;
|
|
root = cJSON_CreateObject();
|
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("stand")); // 功能码
|
|
p = ef_get_env ("site_type");
|
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "pver", cJSON_CreateString (PROTO_VER)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "iccid", cJSON_CreateString (SysData.iccid)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "ver", cJSON_CreateString (VERSION)); // 表示流量计
|
|
p = ef_get_env ("net_drv");
|
|
cJSON_AddItemToObject (root, "netdrv", cJSON_CreateString (p)); // 表示流量计
|
|
p = ef_get_env ("iap_app_filename");
|
|
//uint32_t max_open = atoi (p);
|
|
cJSON_AddItemToObject (root, "filename", cJSON_CreateString (p)); // 表示电池电压
|
|
|
|
// 添加闸门相关数据
|
|
// 闸门当前开度
|
|
cJSON_AddItemToObject (root, "thisopen", cJSON_CreateNumber (SluiceData[0].gopen)); // 表示电池电压
|
|
// 闸门最大开度
|
|
p = ef_get_env ("max_open");
|
|
uint32_t max_open = atoi (p);
|
|
cJSON_AddItemToObject (root, "maxopen", cJSON_CreateNumber (max_open));
|
|
// 闸门A路荷重
|
|
cJSON_AddItemToObject (root, "aload", cJSON_CreateNumber (SluiceData[0].lload));
|
|
// 闸门B路荷重
|
|
cJSON_AddItemToObject (root, "bload", cJSON_CreateNumber (SluiceData[0].rload));
|
|
// 闸前水位
|
|
cJSON_AddItemToObject (root, "thisleve", cJSON_CreateNumber (WaterData[0].thisLevel));
|
|
// 闸门瞬时流速
|
|
cJSON_AddItemToObject (root, "thisspeed", cJSON_CreateNumber (WaterData[0].thisSpeed));
|
|
// 闸门累计流量
|
|
cJSON_AddItemToObject (root, "thisflow", cJSON_CreateNumber (WaterData[0].thisFlow));
|
|
// 闸门瞬时流量
|
|
cJSON_AddItemToObject (root, "ttflow", cJSON_CreateNumber (WaterData[0].ttWater));
|
|
// 闸门启动电流
|
|
cJSON_AddItemToObject (root, "current", cJSON_CreateNumber (SluiceData[0].currt));
|
|
// 闸门编码器最大值
|
|
p = ef_get_env ("max_ecode");
|
|
uint32_t max_code = atoi (p);
|
|
|
|
cJSON_AddItemToObject (root, "maxecode", cJSON_CreateNumber (max_code));
|
|
p = ef_get_env ("min_ecode");
|
|
uint32_t min_code = atoi (p);
|
|
// 闸门编码器最小值
|
|
cJSON_AddItemToObject (root, "minecode", cJSON_CreateNumber (min_code));
|
|
//---------------------------------------------以下不准修改
|
|
result = cJSON_PrintUnformatted (root);
|
|
strcpy (packMsg, result);
|
|
cJSON_free (result);
|
|
cJSON_Delete (root);
|
|
length = rt_strlen (packMsg);
|
|
return length;
|
|
}
|
|
|
|
// 心跳包,需要应答
|
|
int JsonHeartDatapacket (uint8_t * buffer)
|
|
{
|
|
char *result, * packMsg = (char *) buffer;
|
|
cJSON *root = NULL;
|
|
int length;
|
|
char *p;
|
|
root = cJSON_CreateObject();
|
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("heart")); // 功能码
|
|
p = ef_get_env ("site_type");
|
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
|
cJSON_AddItemToObject (root, "ecdState", cJSON_CreateNumber (SysData.ecdState)); // 编码器状态
|
|
cJSON_AddItemToObject (root, "flowState", cJSON_CreateNumber (SysData.flowState)); // 流量计状态
|
|
cJSON_AddItemToObject (root, "ldState", cJSON_CreateNumber (SysData.ldState)); // 荷重仪状态
|
|
cJSON_AddItemToObject (root, "scram", cJSON_CreateNumber (SysData.scram)); // 荷重仪状态
|
|
//---------------------------------------------以下不准修改
|
|
result = cJSON_PrintUnformatted (root);
|
|
strcpy (packMsg, result);
|
|
cJSON_free (result);
|
|
cJSON_Delete (root);
|
|
length = rt_strlen (packMsg);
|
|
return length;
|
|
}
|
|
|
|
|
|
int JsonConfigReadDataPacket(uint8_t* buffer)
|
|
{
|
|
char *result, * packMsg = (char *) buffer;
|
|
cJSON *root = NULL;
|
|
int length;
|
|
char *p;
|
|
root = cJSON_CreateObject();
|
|
cJSON_AddItemToObject (root, "func", cJSON_CreateString ("read_config")); // 功能码
|
|
p = ef_get_env ("site_type");
|
|
cJSON_AddItemToObject (root, "site_type", cJSON_CreateString (p)); // 表示流量计
|
|
|
|
for (int i =0 ;i < config_list_size;i++)
|
|
{
|
|
p = ef_get_env (config_list[i]);
|
|
cJSON_AddItemToObject (root, config_list[i], cJSON_CreateString (p)); // 表示流量计
|
|
}
|
|
//---------------------------------------------以下不准修改
|
|
result = cJSON_PrintUnformatted (root);
|
|
strcpy (packMsg, result);
|
|
cJSON_free (result);
|
|
cJSON_Delete (root);
|
|
length = rt_strlen (packMsg);
|
|
return length;
|
|
}
|
|
|
|
int JsonAckSuccPacket(char * buffer)
|
|
{
|
|
rt_sprintf(buffer,"{\"state\":\"ok\"}");
|
|
}
|
|
|