#include "jsonpacket.h" #include "cjson.h" #include #include #include "data.h" #include #include #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\"}"); }