cmcu为stm32h743IIt6
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

604 lines
23 KiB

/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-10-20 Administrator the first version
*/
/* DATA_comm.c */
#include <rtthread.h>
#include <rtdevice.h>
#include "cjson.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "data_comm.h"
#include "language.h"
#include "Variable.h"
#include "SC828_DATA_table.h"
#include "DB_SQLite.h"
#define DBG_TAG "dat_comm"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
rt_mq_t proc_mq;
//static struct proc_request *req;
char cjson_falg=0;//是否解析cjson
char *json_buffer=NULL;//
/**
*
* @param src
* @param start
* @param end
* @param buf
* @param buf_len
* @return 0 -1
*/
int extract_between(const char *src, const char *start, const char *end, char *buf, size_t buf_len)
{
const char *p1, *p2;
size_t len;
p1 = strstr(src, start);
if (!p1) return -1;
p1 += strlen(start); // 跳过起始子串
p2 = strstr(p1, end);
if (!p2) return -1;
len = p2 - p1;
if (len >= buf_len) len = buf_len - 1;
memcpy(buf, p1, len);
buf[len] = '\0';
return 0;
}
// 提取字符串并安全拷贝
#define GET_STRING(dst, obj, key, size) do { \
cJSON* _item = cJSON_GetObjectItem(obj, key); \
if (cJSON_IsString(_item) && _item->valuestring != NULL) { \
strncpy(dst, _item->valuestring, (size) - 1); \
(dst)[(size) - 1] = '\0'; \
} \
} while(0)
// 提取浮点数
#define GET_FLOAT_VAR(var, obj, key, default_val)do { \
cJSON *_item = cJSON_GetObjectItem((obj), (key)); \
(var) = (_item && cJSON_IsNumber(_item)) ? (float)(_item->valuedouble) : (default_val); \
} while(0)
// 提取整数(int 类型)
#define GET_INT_VAR(var, obj, key, default_val) do { \
cJSON* _item = cJSON_GetObjectItem(obj, key); \
(var) = cJSON_IsNumber(_item) ? (int)_item->valueint : (default_val); \
} while(0)
#define GET_INT_FROM_ANY(var, obj, key, default_val)do { \
cJSON *_item = cJSON_GetObjectItem((obj), (key)); \
if (_item) { \
if (cJSON_IsNumber(_item)) { \
(var) = (int)(_item->valueint); \
} else if (cJSON_IsString(_item) && _item->valuestring) { \
(var) = atoi(_item->valuestring); \
} else { \
(var) = (default_val); \
} \
} else { \
(var) = (default_val); \
} \
} while(0)
// ===== cJSON分析 =====//
void pasre_DAT(const char *api, const char *json_str)
{
cJSON *root=cJSON_Parse(json_str);
cJSON *dat=cJSON_CreateObject();
if(json_buffer)
{
free(json_buffer);
json_buffer=NULL;
}
if(strlen(json_str)>10)
{
cjson_falg=1;
//判断json解析是否成功
if(!root)
{
rt_kprintf("JSON parse error :%s\n",cJSON_GetErrorPtr());
cJSON_Delete(root);
cJSON_Delete(dat);
return;
}
}
if (strcmp(api, "SC800") == 0)
{// 处理 SC800
cJSON_AddItemToObject(dat,"Name",cJSON_CreateString(machine_name));
cJSON_AddItemToObject(dat,"Station",cJSON_CreateString(machine_ID));
cJSON_AddItemToObject(dat,"SYSKEY",cJSON_CreateString(machine_ID));
cJSON_AddItemToObject(dat,"Groups",cJSON_CreateString(machine_ID));
}
2 weeks ago
else if (strcmp(api, "SC801") == 0)
{// 处理 SC801系统信息
char systime[18] = {0}; // 初始化为 0
rt_snprintf(systime, sizeof(systime),"%d-%d-%d_%d:%d:%d",
sys_time[5], sys_time[4], sys_time[3],sys_time[2],sys_time[1], sys_time[0]);
cJSON_AddItemToObject(dat,"SYSTEMP",cJSON_CreateNumber(sys_temperature));
cJSON_AddItemToObject(dat,"SYSHUM",cJSON_CreateNumber(sys_humidity));
cJSON_AddItemToObject(dat,"SYSTIME",cJSON_CreateString(systime));
cJSON_AddItemToObject(dat,"NAME",cJSON_CreateString(machine_name));
cJSON_AddItemToObject(dat,"PBAT",cJSON_CreateNumber(pow_bat));
cJSON_AddItemToObject(dat,"PCODE",cJSON_CreateNumber(pow_code));
cJSON_AddItemToObject(dat,"PDEV1",cJSON_CreateNumber(pow_dev1));
cJSON_AddItemToObject(dat,"PDEV2",cJSON_CreateNumber(pow_dev2));
cJSON_AddItemToObject(dat,"VAR",cJSON_CreateString(sys_var));
}
else if (strcmp(api, "SC810") == 0)
{
char Work_[25];
char Dye_[25];
char STime_[25];
char pTime_[10];
// 字符串赋值
GET_STRING(Work_, root, "Work", sizeof(Work_));
GET_STRING(Dye_, root, "Dye", sizeof(Dye_));
GET_STRING(STime_, root, "STime", sizeof(STime_));
GET_STRING(pTime_, root, "Time", sizeof(pTime_));
// 定义足够大的缓冲区
char sql[512] = {0}; // 初始化为 0
// 安全格式化
rt_snprintf(sql, sizeof(sql),"INSERT INTO WorkOrder(WorkOrder,DYELOT,ReDye,StartTime,Time)"
"VALUES('%s','%s',0,'%s','%s')",Work_, Dye_, STime_,pTime_);
if( db_send_command(DB_CMD_EXEC, sql, 500)==RT_EOK) //
{
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work_));
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(0));
}
}
else if (strcmp(api, "SC811") == 0)
{//工单明细
char Work_[25];
char Dye_[25];
char StepID_[4];
char SIDS1_[4];
int StepN_;
int P1_;
int P2_;
int P3_;
int P4_;
int P5_;
int P1S1_;
int P2S1_;
int P3S1_;
int P4S1_;
int P5S1_;
// 字符串赋值
GET_STRING(Work_, root, "Work", sizeof(Work_));
GET_STRING(Dye_, root, "Dye", sizeof(Dye_));
GET_STRING(StepID_, root, "StepID", sizeof(StepID_));
GET_STRING(SIDS1_, root, "SIDS1", sizeof(SIDS1_));
//整数
GET_INT_FROM_ANY(StepN_, root, "Step", 0);
GET_INT_FROM_ANY(P1_, root, "P1", 0);
GET_INT_FROM_ANY(P2_, root, "P2", 0);
GET_INT_FROM_ANY(P3_, root, "P3", 0);
GET_INT_FROM_ANY(P4_, root, "P4", 0);
GET_INT_FROM_ANY(P5_, root, "P5", 0);
GET_INT_FROM_ANY(P1S1_, root, "P1S1",0);
GET_INT_FROM_ANY(P2S1_, root, "P2S1",0);
GET_INT_FROM_ANY(P3S1_, root, "P3S1",0);
GET_INT_FROM_ANY(P4S1_, root, "P4S1",0);
GET_INT_FROM_ANY(P5S1_, root, "P5S1",0);
// 定义足够大的缓冲区
char sql[512] = {0}; // 初始化为 0
// 安全格式化
rt_snprintf(sql, sizeof(sql),"INSERT INTO WorkorderSteps(WorkOrder,DYELOT,ReDye,Step,StepID,P1,P2,P3,P4,P5,StepID_S1,P1_S1,P2_S1,P3_S1,P4_S1,P5_S1)"
"VALUES('%s','%s',0,%d,'%s',%d,%d,%d,%d,%d,'%s',%d,%d,%d,%d,%d)",Work_, Dye_, StepN_,StepID_,P1_, P2_, P3_, P4_, P5_,SIDS1_,P1S1_,P2S1_,P3S1_,P4S1_,P5S1_ );
if( db_send_command(DB_CMD_EXEC, sql, 500)==RT_EOK) //
{
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work_));
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(0));
cJSON_AddItemToObject(dat,"Step",cJSON_CreateNumber(StepN_));
}
}
else if (strcmp(api, "SC812") == 0)
{//工单设定
char Work_[25];
int Pump_;
int Blower_;
int ClothWheel_;
int Swing_;
int Nozzle_;
// 字符串赋值
GET_STRING(Work_, root, "WorkOrder", sizeof(Work_));
//整数
GET_INT_FROM_ANY(Pump_, root, "PumpSpeed", 0);
GET_INT_FROM_ANY(Blower_, root, "Blower", 0);
GET_INT_FROM_ANY(ClothWheel_, root, "ClothWheel", 0);
GET_INT_FROM_ANY(Swing_, root, "Swing", 0);
GET_INT_FROM_ANY(Nozzle_, root, "Nozzle", 0);
// 定义足够大的缓冲区
char sql[512] = {0}; // 初始化为 0
// 安全格式化
rt_snprintf(sql, sizeof(sql),"INSERT OR IGNORE INTO WorkOrderSet(WorkOrder,ReDye,PumpSpeed,Blower,ClothWheel,Swing,Nozzle)"
"VALUES('%s',0,%d,%d,%d,%d,%d)",Work_, Pump_,Blower_,ClothWheel_, Swing_, Nozzle_);
if( db_send_command(DB_CMD_EXEC, sql, 500)==RT_EOK) //
{
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work_));
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(0));
}
}
else if (strcmp(api, "SC813") == 0)
{//领料单插入
char Work_[25];
char Dye_[25];
char ProductCode_[15];
char ProductName_[15];
char Grams_[8];
int ProductType_;
int StepN_;
//字符
GET_STRING(Work_, root, "Work", sizeof(Work_));
GET_STRING(Dye_, root, "Dye", sizeof(Dye_));
GET_STRING(ProductName_, root, "ProductName", sizeof(ProductName_));
GET_STRING(ProductCode_, root, "ProductCode", sizeof(ProductCode_));
GET_STRING(Grams_, root, "Grams", sizeof(Grams_));
//整数
GET_INT_FROM_ANY(StepN_, root, "Step", 0);
GET_INT_FROM_ANY(ProductType_, root, "ProductType", 0);
// 定义足够大的缓冲区
char sql[512] = {0}; // 初始化为 0
// 安全格式化
rt_snprintf(sql, sizeof(sql),"INSERT OR IGNORE INTO Dyelot(WorkOrder,Dyelot,ReDye,Step,ProductCode,ProductName,ProductType,Grams)"
"VALUES('%s','%s',0,%d,%s,%s,%d,%s)",Work_, Dye_,StepN_,ProductCode_,ProductName_ ,ProductType_,Grams_);
if( db_send_command(DB_CMD_EXEC, sql, 500)==RT_EOK) //
{
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work_));
cJSON_AddItemToObject(dat,"Dye",cJSON_CreateString(Dye_));
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(0));
cJSON_AddItemToObject(dat,"Step",cJSON_CreateNumber(StepN_));
}
}
else if (strcmp(api, "SC820") == 0)
{//设置系统时间
char Time_[25];
GET_STRING(Time_, root, "Work", sizeof(Time_));
char systime[18] = {0}; // 初始化为 0
rt_snprintf(systime, sizeof(systime),"%d-%d-%d_%d:%d:%d",
sys_time[5], sys_time[4], sys_time[3],sys_time[2],sys_time[1], sys_time[0]);
cJSON_AddItemToObject(dat,"time",cJSON_CreateString(systime));
}
else if (strcmp(api, "SC821") == 0)
{
char ins_[8];
GET_STRING(ins_, root, "INSTRUCTION", sizeof(ins_));
if (strcmp(ins_, "START") == 0)
{
GET_STRING(Work, root, "Work", sizeof(Work));
DATA_INSTRUCTION_START(Work);
}
else if (strcmp(ins_, "STOP") == 0)
{
DATA_INSTRUCTION_STOP();
}
else if (strcmp(ins_, "PAUSE") == 0)
{}
else if (strcmp(ins_, "CONTINUE") == 0)
{}
else if (strcmp(ins_, "JUMP") == 0)
{}
else if (strcmp(ins_, "INSERT") == 0)
{
}
else if (strcmp(ins_, "EDIT") == 0)
{//编辑
int ID_s;
GET_INT_FROM_ANY(ID_s,root, "ID",0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter1, root, "P1", 0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter2, root, "P2", 0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter3, root, "P3", 0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter4, root, "P4", 0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter5, root, "P5", 0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter1_S1, root, "P1S1",0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter2_S1, root, "P2S1",0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter3_S1, root, "P3S1",0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter4_S1, root, "P4S1",0);
GET_INT_FROM_ANY(step_table[ID_s-1].Parameter5_S1, root, "P5S1",0);
step_table[ID_s-1].Parameter1_S2 = 0;
step_table[ID_s-1].Parameter2_S2 = 0;
step_table[ID_s-1].Parameter3_S2 = 0;
step_table[ID_s-1].Parameter4_S2 = 0;
step_table[ID_s-1].Parameter5_S2 = 0;
step_table[ID_s-1].Parameter1_S3 = 0;
step_table[ID_s-1].Parameter2_S3 = 0;
step_table[ID_s-1].Parameter3_S3 = 0;
step_table[ID_s-1].Parameter4_S3 = 0;
step_table[ID_s-1].Parameter5_S3 = 0;
GET_STRING(step_table[ID_s-1].StepID, root, "StepID", 3);
GET_STRING(step_table[ID_s-1].StepID_S1, root, "SIDS1", 3);
rt_snprintf(step_table[ID_s-1].StepID_S2, 3,"000");
rt_snprintf(step_table[ID_s-1].StepID_S3, 3,"000");
}
else if (strcmp(ins_, "DELETE") == 0)
{//删除
int ID_s;
GET_INT_FROM_ANY(ID_s,root, "ID",0);
if (!(ID_s < 0 || ID_s >= 99))
{
// 1. 如果不是最后一项,将 [index+1, 98] 前移一位到 [index, 97]
if (ID_s < 98) {
memmove(&step_table[ID_s],&step_table[ID_s + 1],(98 - ID_s) * sizeof(IO_STEP_DATA));
}
}
// 2. 末尾(最后一个位置)填入空步骤
step_table[99].RUN = 0;
step_table[99].Parameter1 = 0;
step_table[99].Parameter2 = 0;
step_table[99].Parameter3 = 0;
step_table[99].Parameter4 = 0;
step_table[99].Parameter5 = 0;
step_table[99].Parameter1_S1 = 0;
step_table[99].Parameter2_S1 = 0;
step_table[99].Parameter3_S1 = 0;
step_table[99].Parameter4_S1 = 0;
step_table[99].Parameter5_S1 = 0;
step_table[99].Parameter1_S2 = 0;
step_table[99].Parameter2_S2 = 0;
step_table[99].Parameter3_S2 = 0;
step_table[99].Parameter4_S2 = 0;
step_table[99].Parameter5_S2 = 0;
step_table[99].Parameter1_S3 = 0;
step_table[99].Parameter2_S3 = 0;
step_table[99].Parameter3_S3 = 0;
step_table[99].Parameter4_S3 = 0;
step_table[99].Parameter5_S3 = 0;
rt_snprintf(step_table[99].StepID, 3,"000");
rt_snprintf(step_table[99].StepID_S1, 3,"000");
rt_snprintf(step_table[99].StepID_S2, 3,"000");
rt_snprintf(step_table[99].StepID_S3, 3,"000");
}
else
{}
}
else if (strcmp(api, "SC822") == 0)
{
printf("Processing:SC822\n");
}
else if (strcmp(api, "SC827") == 0)
{
printf("Processing:SC827\n");
}
else if (strcmp(api, "SC828") == 0)
{
printf("Processing:SC828\n");
}
else if (strcmp(api, "SC829") == 0)
{//锁定自动
char NAME_[4];
char VALUE_[4];
GET_STRING(NAME_, root, "NAME", sizeof(NAME_));
GET_STRING(VALUE_, root, "VALUE", sizeof(VALUE_));
if (strcmp(NAME_, "LOCK") == 0) {
if (strcmp(VALUE_, "True") == 0)
{MACHINE_LOCK=1;}else{MACHINE_LOCK=0;}
}
if (strcmp(NAME_, "AUTO") == 0) {
if (strcmp(VALUE_, "True") == 0)
{MACHINE_AUTO=1;}else{MACHINE_AUTO=0;}
}
cJSON_AddItemToObject(dat,"NAME",cJSON_CreateString(NAME_));
cJSON_AddItemToObject(dat,"VALUE",cJSON_CreateString(VALUE_));
}
else if (strcmp(api, "SC830") == 0)
{//当前信息
cJSON_AddItemToObject(dat,"ERR",cJSON_CreateBool(MACHINE_ERR));
cJSON_AddItemToObject(dat,"LOCK",cJSON_CreateBool(MACHINE_LOCK));
cJSON_AddItemToObject(dat,"Status",cJSON_CreateString(Message));
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work));
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye));
cJSON_AddItemToObject(dat,"Process",cJSON_CreateString(Process));
cJSON_AddItemToObject(dat,"Step",cJSON_CreateString(Step));
cJSON_AddItemToObject(dat,"User",cJSON_CreateBool(MACHINE_USER));
2 weeks ago
cJSON_AddItemToObject(dat,"UserB",cJSON_CreateString("False"));
cJSON_AddItemToObject(dat,"InfoS",cJSON_CreateNumber(UserInfoStart));
cJSON_AddItemToObject(dat,"Info",cJSON_CreateString(Info));
cJSON_AddItemToObject(dat,"RUN",cJSON_CreateNumber(RUN));
cJSON_AddItemToObject(dat,"STEPID",cJSON_CreateNumber(STEPID));
cJSON_AddItemToObject(dat,"CALL",cJSON_CreateBool(MACHINE_CALL));
cJSON_AddItemToObject(dat,"MST",cJSON_CreateNumber(MST));
cJSON_AddItemToObject(dat,"MTT",cJSON_CreateNumber(MTT));
cJSON_AddItemToObject(dat,"MTL",cJSON_CreateNumber(MTL));
cJSON_AddItemToObject(dat,"MTH",cJSON_CreateNumber(MTH));
cJSON_AddItemToObject(dat,"MUT",cJSON_CreateNumber(MUT));
cJSON_AddItemToObject(dat,"STTA",cJSON_CreateNumber(STTA));
cJSON_AddItemToObject(dat,"STLA",cJSON_CreateNumber(STLA));
cJSON_AddItemToObject(dat,"STTB",cJSON_CreateNumber(STTB));
cJSON_AddItemToObject(dat,"STLB",cJSON_CreateNumber(STLB));
cJSON_AddItemToObject(dat,"STTC",cJSON_CreateNumber(STTC));
cJSON_AddItemToObject(dat,"STLC",cJSON_CreateNumber(STLC));
}
else if (strcmp(api, "SC831") == 0)
{//当前步骤信息
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work));
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye));
}
else if (strcmp(api, "SC832") == 0)
{//当前细节信息
cJSON_AddItemToObject(dat,"Pump",cJSON_CreateNumber(Pump));//泵
cJSON_AddItemToObject(dat,"TC",cJSON_CreateNumber(TC));//温度比例
cJSON_AddItemToObject(dat,"Fan",cJSON_CreateNumber(Fan));//风机
cJSON_AddItemToObject(dat,"Pull",cJSON_CreateNumber(Pull));//提布
cJSON_AddItemToObject(dat,"Swing",cJSON_CreateNumber(Swing));//摆布
cJSON_AddItemToObject(dat,"STA",cJSON_CreateNumber(STA));//料1
cJSON_AddItemToObject(dat,"STB",cJSON_CreateNumber(STB));//料2
cJSON_AddItemToObject(dat,"STC",cJSON_CreateNumber(STC));//料3
}
else if (strcmp(api, "SC833") == 0)
{//当前领料单信息
cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work));
cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye));
}
else if (strcmp(api, "SC851") == 0)
{//创建数组
cJSON *Dev = cJSON_CreateArray();
for (int i = 0; i < DIO_TABLE_SIZE; i++) {
cJSON* item = cJSON_CreateObject();
// 添加 IO 编号
cJSON_AddItemToObject(item, "P", cJSON_CreateNumber(dio_table[i].pin));
// 添加默认值
cJSON_AddItemToObject(item, "D", cJSON_CreateNumber(dio_table[i].current_state));
// 添加枚举名称(字符串形式)
//cJSON_AddStringToObject(item, "str_enum_name", lang_get_str(dio_table[i].name));
// 将当前项添加到数组中
cJSON_AddItemToArray(Dev, item);
}
cJSON_AddItemToObject(dat,"DIO",Dev);
}
else if (strcmp(api, "SC852") == 0)
{//创建数组
cJSON *Dev = cJSON_CreateArray();
for (int i = 0; i < AIO_TABLE_SIZE; i++) {
cJSON* item = cJSON_CreateObject();
// 添加 IO 编号
cJSON_AddNumberToObject(item, "P", aio_table[i].pin);
// 添加默认值
cJSON_AddNumberToObject(item, "A", aio_table[i].current_Value);
// 将当前项添加到数组中
cJSON_AddItemToArray(Dev, item);
}
cJSON_AddItemToObject(dat,"A",Dev);
}
else if (strcmp(api, "SC853") == 0)
{//创建数组
cJSON *Dev = cJSON_CreateArray();
for (int i = 0; i < DATA_TABLE_SIZE; i++) {
cJSON* item = cJSON_CreateObject();
// 添加 IO 编号
cJSON_AddNumberToObject(item, "P", data_table[i].pin);
// 添加默认值
cJSON_AddNumberToObject(item, "M", data_table[i].current_data);
// 将当前项添加到数组中
cJSON_AddItemToArray(Dev, item);
}
cJSON_AddItemToObject(dat,"M",Dev);
}
else if (strcmp(api, "SC854") == 0) {
printf("Processing:SC854\n");
}
else if (strcmp(api, "SC855") == 0) {
printf("Processing:SC855\n");
}
else if (strcmp(api, "SC859") == 0) {
printf("Processing:SC859\n");
}
else if (strcmp(api, "SC861") == 0) {
printf("Processing:SC861\n");
}
else if (strcmp(api, "SC862") == 0) {
printf("Processing:SC862\n");
}
else {
memcpy(DATA_api,"SC999",5);
}
json_buffer=cJSON_PrintUnformatted(dat);
cJSON_Delete(root);
cJSON_Delete(dat);
}
void proc_thread_entry(void *parameter)
{
struct proc_request *req;
while (1)
{
// 接收请求指针
if (rt_mq_recv(proc_mq, &req, sizeof(req), RT_WAITING_FOREVER) >= RT_EOK)
{
if (!req) continue;
memcpy(DATA_api,req->input,5);
extract_between(req->input, "[", "]", DATA_machins, sizeof(DATA_machins));
if(strcmp(DATA_machins,machine_ID)==0)
{
//处理输入数据
char *p=strstr(req->input,"]");
if(!p)
{
cjson_falg=0;
}else {
p += strlen("]");
}
//处理指令分析
pasre_DAT(DATA_api,p);
// 回复
int16_t total_len = strlen(machine_ID) + strlen(json_buffer) + 8;
char t_buffer[total_len];
snprintf(t_buffer,total_len,"%s[%s]%s\n",DATA_api,machine_ID,json_buffer);
req->output_len = rt_snprintf(req->output, sizeof(req->output),t_buffer);
}else{
req->output_len=0;
}
2 weeks ago
//清空输入队列
for(int16_t i=0;i<MAX_INPUT_LEN;i++)
{
req->input[i]=0;
}
// 通知 UART 线程可以发送了
if (req->sem)
{
rt_sem_release(req->sem);
}
}
}
}
extern struct rt_memheap sram_DTCMRAM;
static struct rt_thread dat_comm_thread;
static void *dat_comm_stack __attribute__((aligned(4)))= RT_NULL ;
int data_comm_init(void)
{
rt_err_t dat_err;
proc_mq = rt_mq_create("proc_mq", sizeof(struct proc_request*), 5, RT_IPC_FLAG_FIFO);
if (proc_mq == RT_NULL)
{
LOG_E("Failed to create message queue!\n");
return -1;
}
dat_comm_stack = rt_memheap_alloc(&sram_DTCMRAM, 1024*6);
dat_err = rt_thread_init(&dat_comm_thread, "dat_comm", proc_thread_entry, RT_NULL,dat_comm_stack, 1024*6, 15, 10);
if(dat_err != RT_EOK)
{
LOG_E("Failed to create cJSON thread!");
return -1;
}else{
LOG_I("Create cJSON thread");
}
rt_thread_startup(&dat_comm_thread);
return 0;
}
INIT_APP_EXPORT(data_comm_init);