diff --git a/common/parameter_defination.hpp b/common/parameter_defination.hpp index 5e3c660..7ab4960 100644 --- a/common/parameter_defination.hpp +++ b/common/parameter_defination.hpp @@ -2,6 +2,7 @@ #define PARAMETER_DEFINATION_HPP_ #include +#include "scheduler/wave_feature_set.hpp" struct Param_01 { int mMode; // 0:登陆 1:更改密码 @@ -343,5 +344,18 @@ struct Param_62 { int mPackageFlag; Param_62() : MeasurementID(""),timeStart(""),timeEnd(""),mPackageFlag(0){}; }; - +struct Param_63 { + + int mMode; + bool partial; + std::vector cfg; + Param_63() : mMode(0),partial(false){}; +}; +struct Param_64 { + + int mMode; + bool partial; + std::vector cfg; + Param_64() : mMode(0),partial(false){}; +}; #endif // PARAMETER_DEFINATION_HPP_ diff --git a/jsonparse/communication_cmd.hpp b/jsonparse/communication_cmd.hpp index e131b4e..80a6198 100644 --- a/jsonparse/communication_cmd.hpp +++ b/jsonparse/communication_cmd.hpp @@ -71,6 +71,8 @@ public: std::string JsonCmd_Cgi_60(Param_60 ¶m); std::string JsonCmd_Cgi_61(Param_61 ¶m); std::string JsonCmd_Cgi_62(Param_62 ¶m); + std::string JsonCmd_Cgi_63(Param_63 ¶m); + std::string JsonCmd_Cgi_64(Param_64 ¶m); std::string JsonCmd_Cgi_default(); private: diff --git a/jsonparse/web_cmd_parse3.cpp b/jsonparse/web_cmd_parse3.cpp index ac7a101..cf749bf 100644 --- a/jsonparse/web_cmd_parse3.cpp +++ b/jsonparse/web_cmd_parse3.cpp @@ -9,6 +9,7 @@ #include "wifi_5g/wpa_client.h" #include "utility/calculation.hpp" #include "scheduler/schedule.hpp" +#include "scheduler/wave_feature_set.hpp" extern zlog_category_t *zct; extern const char *JSON_FIELD_CMD; @@ -954,3 +955,96 @@ std::string JsonData::JsonCmd_Cgi_62(Param_62 ¶m){ } return show_value_.write(jsonVal); } +std::string JsonData::JsonCmd_Cgi_63(Param_63 ¶m) +{ + Json::Value jsonVal; + jsonVal.clear(); + Json::Value jsBody; + jsonVal[JSON_FIELD_CMD] = "63"; + jsonVal["success"] = true; + jsonVal["message"] = ""; + if (param.mMode == 0) + { + std::vector cfg; + wave_feature_set_inst::instance().GetAllFeatureCfg(cfg); + if (cfg.size() > 0) + { + for (size_t i = 0; i < cfg.size(); i++) + { + Json::Value xyz_status; + xyz_status.append(cfg[i].x); + xyz_status.append(cfg[i].y); + xyz_status.append(cfg[i].z); + if (cfg[i].short_addr == 0) + { + jsBody["global"] = xyz_status; + }else{ + char buf[8] = {0}; + snprintf(buf, 8, "%02x%02x", UINT16_HIGH(cfg[i].short_addr), UINT16_LOW(cfg[i].short_addr)); + jsBody[buf] = xyz_status; + } + } + }else{ + jsonVal["success"] = false; + jsonVal["message"] = ""; + } + }else if(param.mMode == 1){ + if (param.partial) + { + zlog_info(zct, "63 short_addr = %d,x = %d,y = %d,z = %d", param.cfg[0].short_addr, param.cfg[0].x, param.cfg[0].y, param.cfg[0].z); + wave_feature_set_inst::instance().SetFeatureCfg(param.cfg[0].short_addr, param.cfg[0].x, param.cfg[0].y, param.cfg[0].z); + }else{ + wave_feature_set_inst::instance().SetAllFeatureCfg(param.cfg); + } + + } + jsonVal["cmdBody"] = jsBody; + return show_value_.write(jsonVal); +} +std::string JsonData::JsonCmd_Cgi_64(Param_64 ¶m) +{ + Json::Value jsonVal; + jsonVal.clear(); + Json::Value jsBody; + jsonVal[JSON_FIELD_CMD] = "64"; + jsonVal["success"] = true; + jsonVal["message"] = ""; + if (param.mMode == 0) + { + std::vector cfg; + wave_feature_set_inst::instance().GetAllWaveCfg(cfg); + zlog_info(zct,"cfg size = %d",cfg.size()); + if (cfg.size() > 0) + { + for (size_t i = 0; i < cfg.size(); i++) + { + Json::Value xyz_status; + xyz_status.append(cfg[i].x); + xyz_status.append(cfg[i].y); + xyz_status.append(cfg[i].z); + if (cfg[i].short_addr == 0) + { + jsBody["global"] = xyz_status; + }else{ + char buf[8] = {0}; + snprintf(buf, 8, "%02x%02x", UINT16_HIGH(cfg[i].short_addr), UINT16_LOW(cfg[i].short_addr)); + jsBody[buf] = xyz_status; + } + } + }else{ + jsonVal["success"] = false; + jsonVal["message"] = ""; + } + }else if(param.mMode == 1){ + if (param.partial) + { + zlog_info(zct, "64 short_addr = %d,x = %d,y = %d,z = %d", param.cfg[0].short_addr, param.cfg[0].x, param.cfg[0].y, param.cfg[0].z); + wave_feature_set_inst::instance().SetWaveCfg(param.cfg[0].short_addr, param.cfg[0].x, param.cfg[0].y, param.cfg[0].z); + }else{ + wave_feature_set_inst::instance().SetAllWaveCfg(param.cfg); + } + + } + jsonVal["cmdBody"] = jsBody; + return show_value_.write(jsonVal); +} \ No newline at end of file diff --git a/localserver/local_server.hpp b/localserver/local_server.hpp index 807bf30..82d19f4 100644 --- a/localserver/local_server.hpp +++ b/localserver/local_server.hpp @@ -51,7 +51,9 @@ enum WebCommand { kLostRecords = 59, kTransducerUpgrade = 60, kWaveRecords = 61, - kWaveReceive = 62 + kWaveReceive = 62, + kWaveSend = 63, + kFeatureSend = 64 }; class LocalServer { diff --git a/localserver/web_cmd.cpp b/localserver/web_cmd.cpp index 2281c90..60e551c 100644 --- a/localserver/web_cmd.cpp +++ b/localserver/web_cmd.cpp @@ -377,7 +377,7 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) { case kSchedulingConfiguration:{ JsonData jd; Param_58 param; - std::string type = recvBody["type"].asString(); + std::string type = recvBody["type"].asString(); if (0 == type.compare("SET")) { param.mMode = 1; } @@ -438,6 +438,78 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) { std::string data = jd.JsonCmd_Cgi_62(param); return data; }break; + case kWaveSend:{ + JsonData jd; + Param_63 param; + param.mMode = recvBody["sub_cmd"].asInt(); + param.partial = recvBody["partial"].asBool(); + if (param.mMode == 1) + { + for (const auto &key : recvBody.getMemberNames()) + { + if (key != "sub_cmd" && key != "partial") + { + FeatureEntryUploadCfg tmpCfg; + char *end_ptr; + if (key == "global") + { + tmpCfg.short_addr = 0; + }else{ + tmpCfg.short_addr = strtol(key.c_str(), &end_ptr, 16); + } + Json::Value xyz_status = recvBody[key]; + for (size_t i = 0; i < xyz_status.size(); ++i) { + if (i == 0) { + tmpCfg.x = xyz_status[i].asInt(); + } else if (i == 1) { + tmpCfg.y = xyz_status[i].asInt(); + } else if (i == 2) { + tmpCfg.z = xyz_status[i].asInt(); + } + } + param.cfg.push_back(tmpCfg); + } + } + } + std::string data = jd.JsonCmd_Cgi_63(param); + return data; + }break; + case kFeatureSend:{ + JsonData jd; + Param_64 param; + param.mMode = recvBody["sub_cmd"].asInt(); + param.partial = recvBody["partial"].asBool(); + if (param.mMode == 1) + { + for (const auto &key : recvBody.getMemberNames()) + { + if (key != "sub_cmd" && key != "partial") + { + FeatureEntryUploadCfg tmpCfg; + char *end_ptr; + if (key == "global") + { + tmpCfg.short_addr = 0; + }else{ + tmpCfg.short_addr = strtol(key.c_str(), &end_ptr, 16); + } + Json::Value xyz_status = recvBody[key]; + for (size_t i = 0; i < xyz_status.size(); ++i) { + if (i == 0) { + tmpCfg.x = xyz_status[i].asInt(); + } else if (i == 1) { + tmpCfg.y = xyz_status[i].asInt(); + } else if (i == 2) { + tmpCfg.z = xyz_status[i].asInt(); + } + } + param.cfg.push_back(tmpCfg); + } + } + } + std::string data = jd.JsonCmd_Cgi_64(param); + return data; + }break; default: JsonData jd; std::string data = jd.JsonCmd_Cgi_default(); diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index e78febe..4ff6593 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -53,11 +53,12 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { if (flag == 1) { zlog_info(zct, "DealDataNodeFeature %02x%02x, %d", pRecvData->ShortAddr[0], pRecvData->ShortAddr[1], flag); } - - if (bSendTimeStamp) //波形处理中 - return; + uint8_t Feature_x,Feature_y,Feature_z; + char *end_ptr; + uint16_t u_short_addr = strtol(buf, &end_ptr, 16); + wave_feature_set_inst::instance().GetFeatureCfg(u_short_addr,Feature_x,Feature_y,Feature_z); std::string strShortAddr = std::string(buf); - zlog_info(zct, "zigbeeShortAddr='%s'", strShortAddr.c_str()); + zlog_info(zct, "zigbeeShortAddr='%s',Feature_x = %d,Feature_y = %d,Feature_z = %d", strShortAddr.c_str(),Feature_x,Feature_y,Feature_z); char getLongAddr_sql[32] = {0}; //根据数据包中的传感器的短地址获取数据库中长地址(MAC),在下面判断该传感器是否存在,如果不存在则把数据包丢弃 sprintf(getLongAddr_sql, "zigbeeShortAddr='%s'", strShortAddr.c_str()); @@ -344,7 +345,10 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { valNodeFeature["Phase3"] = dataDymX.Phase3; valNodeFeature["Phase4"] = dataDymX.Phase4; valNodeFeature["timeStamp"] = nowTimetamp; - valNodeData.append(valNodeFeature); + if (Feature_x) + { + valNodeData.append(valNodeFeature); + } DataRecvDym dataDymY; DataExtract(pRecvData, 34, lowbit, n); @@ -431,7 +435,10 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { valNodeFeature["Phase3"] = dataDymY.Phase3; valNodeFeature["Phase4"] = dataDymY.Phase4; valNodeFeature["timeStamp"] = nowTimetamp; - valNodeData.append(valNodeFeature); + if (Feature_y) + { + valNodeData.append(valNodeFeature); + } DataRecvDym dataDymZ; DataExtract(pRecvData, 52, lowbit, n); @@ -528,7 +535,10 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { valNodeFeature["Phase3"] = dataDymZ.Phase3; valNodeFeature["Phase4"] = dataDymZ.Phase4; valNodeFeature["timeStamp"] = nowTimetamp; - valNodeData.append(valNodeFeature); + if (Feature_z) + { + valNodeData.append(valNodeFeature); + } memset(whereCon, 0, 1024); sprintf(whereCon, "MeasurementID='%s'", strMeasurementID.c_str()); diff --git a/uart/uart_parameter_config.cpp b/uart/uart_parameter_config.cpp index a2c0f09..8e7d104 100644 --- a/uart/uart_parameter_config.cpp +++ b/uart/uart_parameter_config.cpp @@ -9,6 +9,7 @@ #include #include "common/common_func.hpp" #include "minilzo/minilzo.h" +#include "scheduler/wave_feature_set.hpp" extern zlog_category_t* zct; extern zlog_category_t* zbt; @@ -559,14 +560,22 @@ int Uart::TaskResp(ScheduleTask scheduleTask){ { UpdateData[7] = UINT16_LOW(scheduleTask.duration); UpdateData[8] = UINT16_HIGH(scheduleTask.duration); - } - if (scheduleTask.cmd == MEAS_EVAL) + }else if (scheduleTask.cmd == MEAS_EVAL) { UpdateData[9] = UINT32_LOW_2(scheduleTask.timeStamp); UpdateData[10] = UINT32_LOW_1(scheduleTask.timeStamp); UpdateData[11] = UINT32_HIGH_2(scheduleTask.timeStamp); UpdateData[12] = UINT32_HIGH_1(scheduleTask.timeStamp); + }else if (scheduleTask.cmd == WAVE_CMD) + { + uint8_t x,y,z; + wave_feature_set_inst::instance().GetWaveCfg(scheduleTask.shortAddr,x,y,z); + zlog_info(zct,"wave x = %d,y = %d,z = %d\n",x,y,z); + UpdateData[17] = (x^1) & 0xFF; + UpdateData[18] = (y^1) & 0xFF; + UpdateData[19] = (z^1) & 0xFF; } + unsigned char tmp = 0x00; for (int k = 0; k < 99; k++) { tmp += UpdateData[k];