g0b1vetx-board/Board/network/jsonpacket.c
2584532475@qq.com 4a963bd78c 2024-05-31
2024-05-31 16:57:54 +08:00

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\"}");
}