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

127 lines
3.2 KiB
C

#include "jsonunpack.h"
#include "cjson.h"
#include <string.h>
#include <rtthread.h>
#include "data.h"
#include <easyflash.h>
#include <stdlib.h>
#include "data.h"
#include "os-app.h"
#include "main.h"
char config_list[16][32] = {NULL};
int config_list_size = 0;
// 用于远程出厂设置时保留配置
char backdevice_id[12] = {0};
char backnetdrv[12] = {0};
void JsonUnPacket (int index, char *buff)
{
// 读取Json 数据类型
char * packMsg = (char *) buff;
cJSON *root = NULL, *list = NULL;
root = cJSON_Parse (packMsg);
DownDataType_t type = (DownDataType_t) 0;
char * p, *key, *value;
int list_size;
TypeIndexMail_t mail;
p = cJSON_GetStringValue (cJSON_GetObjectItem (root, "type"));
type = (DownDataType_t) cDownType2Index (p);
rt_kprintf("down :%s<%d>\r\n",p,type);
switch (type)
{
case DownRun : // 开度提闸
// rt_kprintf ("open:%u mm/10\r\n", datak);
// //SluiceData[gMqttDrv.rx_index].opt = 1; // 执行操作闸门
// SluiceData[gMqttDrv.rx_index - 1].sopen = datak / 10;
// mail.Type = MAIL_SLUICE_OPT;
// mail.index = gMqttDrv.rx_index - 1;
// rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
// // 回复应答
// mail.Type = MAIL_COMM_SLACK;
// mail.index = gMqttDrv.rx_index;
// rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
break;
case DownStop :
break;
case DownOpen :
break;
case DownClose :
break;
case DownRegistAns :
break;
case DownHeartAns :
break;
case DownUpdate :
rt_memset (SysData.fileName, 0, 32);
p = cJSON_GetStringValue (cJSON_GetObjectItem (root, "file"));
rt_sprintf (SysData.fileName, "%s", p) ;
// 启动升级线程
// 回复应答
mail.Type = MAIL_COMM_UPACK;
mail.index = index + 1; // 0通道用来升级的通道
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
rt_thread_mdelay (2000); // 等待2s 进入升级线程
UpgradeThreadStart();
break;
case DownReboot :
HAL_NVIC_SystemReset();
break;
case DownConfig: // 设置参数
// 读取参数列表
list = cJSON_GetObjectItem (root, "list");
list_size = cJSON_GetArraySize (list);
for (int i = 0; i < list_size; i++)
{
key = cJSON_GetStringValue (cJSON_GetArrayItem (list, i));
value = cJSON_GetStringValue (cJSON_GetObjectItem (root, key));
if ( (ef_get_env (key) != NULL) && (value != NULL))
{
ef_set_env (key, value);
}
}
mail.Type = MAIL_COMM_ACK;
mail.index = index + 1; // 0通道用来升级的通道
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
break;
case DownRead: // 读取参数
list = cJSON_GetObjectItem (root, "list");
config_list_size = cJSON_GetArraySize (list);
for (int i = 0; i < config_list_size; i++)
{
key = cJSON_GetStringValue (cJSON_GetArrayItem (list, i));
rt_sprintf(config_list[i],"%s",key);
}
mail.Type = MAIL_COMM_READPARA;
mail.index = index + 1; // 0通道用来升级的通道
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
// 读取参数列表
break;
case DownFact:
p = ef_get_env("device_id");
rt_sprintf(backdevice_id,"%s",p);
p = ef_get_env("net_drv") ;
rt_sprintf(backnetdrv,"%s",p);
ef_env_set_default();
ef_set_env("device_id",backdevice_id) ;
ef_set_env("net_drv",backnetdrv) ;
mail.Type = MAIL_COMM_ACK;
mail.index = index + 1; // 0通道用来升级的通道
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
break;
default:
break;
}
cJSON_Delete (root);
}