127 lines
3.2 KiB
C
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);
|
|
}
|
|
|
|
|
|
|
|
|
|
|