|  |  |  | /*
 | 
					
						
							|  |  |  |  * 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 "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"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rt_mq_t proc_mq; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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) = 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) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // ===== 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)>4) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |          cjson_falg=1; | 
					
						
							|  |  |  |       //判断json解析是否成功
 | 
					
						
							|  |  |  |          if(!root) | 
					
						
							|  |  |  |          { | 
					
						
							|  |  |  |              rt_kprintf("JSON parse error :%s\n",cJSON_GetErrorPtr()); | 
					
						
							|  |  |  |              cJSON_Delete(root); | 
					
						
							|  |  |  |         //  return "JSON parse error\n";
 | 
					
						
							|  |  |  |          } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (strcmp(api, "SC810") == 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (strcmp(api, "SC811") == 0) | 
					
						
							|  |  |  |     {//工单明细
 | 
					
						
							|  |  |  |                 // === 解析整数变量 StepN ===
 | 
					
						
							|  |  |  |                 GET_INT_VAR(StepN, root, "StepN", 0); | 
					
						
							|  |  |  |                 // 字符串赋值
 | 
					
						
							|  |  |  |                 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_STRING(SIDS2,  root, "SIDS2",  sizeof(SIDS2)); | 
					
						
							|  |  |  |                 GET_STRING(SIDS3,  root, "SIDS3",  sizeof(SIDS3)); | 
					
						
							|  |  |  |                 // 浮点数赋值
 | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P1,   root, "P1",   0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P2,   root, "P2",   0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P3,   root, "P3",   0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P4,   root, "P4",   0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P5,   root, "P5",   0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P1S1, root, "P1S1", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P2S1, root, "P2S1", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P3S1, root, "P3S1", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P4S1, root, "P4S1", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P5S1, root, "P5S1", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P1S2, root, "P1S2", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P2S2, root, "P2S2", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P3S2, root, "P3S2", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P4S2, root, "P4S2", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P5S2, root, "P5S2", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P1S3, root, "P1S3", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P2S3, root, "P2S3", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P3S3, root, "P3S3", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P4S3, root, "P4S3", 0.0f); | 
					
						
							|  |  |  |                 GET_FLOAT_VAR(P5S3, root, "P5S3", 0.0f); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 cJSON_AddItemToObject(dat,"Work",cJSON_CreateString(Work)); | 
					
						
							|  |  |  |                 cJSON_AddItemToObject(dat,"ReDye",cJSON_CreateNumber(Redye)); | 
					
						
							|  |  |  |                 cJSON_AddItemToObject(dat,"StepN",cJSON_CreateNumber(StepN)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (strcmp(api, "SC812") == 0) { | 
					
						
							|  |  |  |             printf("Processing:SC812\n"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (strcmp(api, "SC813") == 0) { | 
					
						
							|  |  |  |             printf("Processing:SC813\n"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (strcmp(api, "SC820") == 0) { | 
					
						
							|  |  |  |             printf("Processing:SC820\n"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     else if (strcmp(api, "SC821") == 0) { | 
					
						
							|  |  |  |             printf("Processing:SC821\n"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     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) { | 
					
						
							|  |  |  |             printf("Processing:SC829\n"); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     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)); | 
					
						
							|  |  |  |         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, "[", "]", machine_ID, sizeof(machine_ID)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             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); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // 通知 UART 线程可以发送了
 | 
					
						
							|  |  |  |             if (req->sem) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 rt_sem_release(req->sem); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int data_comm_init(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     proc_mq = rt_mq_create("proc_mq", sizeof(struct proc_request*), 5, RT_IPC_FLAG_FIFO); | 
					
						
							|  |  |  |     if (proc_mq == RT_NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         rt_kprintf("Failed to create message queue!\n"); | 
					
						
							|  |  |  |         return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     rt_thread_t tid = rt_thread_create("data_comm", proc_thread_entry, RT_NULL, | 
					
						
							|  |  |  |                                        1024*5, 20, 10); | 
					
						
							|  |  |  |     if (tid != RT_NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         rt_thread_startup(tid); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | //INIT_COMPONENT_EXPORT(data_comm_init);
 |