Browse Source

添加zenum

storage-in-realtime
zhaohe 12 months ago
parent
commit
0639859b11
  1. 2
      appdep/iflytop/core/components/zenum_template/enumtest.cpp
  2. 10
      appdep/iflytop/core/components/zenum_template/enumtest.hpp
  3. 61
      appdep/iflytop/core/components/zenum_template/zenum_template.hpp
  4. 2
      appsrc/appbase/appbean/disinfection_state.cpp
  5. 15
      appsrc/appbase/appbean/disinfection_state.hpp
  6. 2
      appsrc/appbase/appbean/setting_id.cpp
  7. 26
      appsrc/appbase/appbean/setting_id.hpp
  8. 3
      appsrc/appbase/dep.hpp
  9. 36
      appsrc/appbase/disinfection_state.hpp
  10. 89
      appsrc/baseservice/db/base/dbbase.cpp
  11. 74
      appsrc/baseservice/db/base/dbbase.hpp
  12. 6
      appsrc/main.cpp
  13. 53
      appsrc/service/app/disinfection_ctrl_service.cpp
  14. 2
      appsrc/service/app/disinfection_ctrl_service.hpp
  15. 16
      appsrc/service/disinfection_logs_service.cpp
  16. 2
      appsrc/service/disinfection_logs_service.hpp
  17. 0
      appsrc/service/hardware/device_ctrl_service.cpp
  18. 0
      appsrc/service/hardware/device_ctrl_service.hpp

2
appdep/iflytop/core/components/zenum_template/enumtest.cpp

@ -0,0 +1,2 @@
#include "enumtest.hpp"
ZENUM_IMPL(ETest, ETest_LIST);

10
appdep/iflytop/core/components/zenum_template/enumtest.hpp

@ -0,0 +1,10 @@
#include "iflytop/core/components/zenum_template/zenum_template.hpp"
#define ETest_LIST(type, marco) /**/ \
marco(type, a1) /**/ \
marco(type, a2) /**/ \
marco(type, a3) /**/ \
marco(type, a4) /**/ \
marco(type, a5)
ZENUM_DECLAR(ETest, ETest_LIST);

61
appdep/iflytop/core/components/zenum_template/zenum_template.hpp

@ -0,0 +1,61 @@
#pragma once
#include <sqlite3.h>
#include <stdio.h>
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <mutex>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include "iflytop/core/basic/nlohmann/json.hpp"
#define ZENUM_IMPL1(type, enumname) k##enumname,
#define ZENUM_IMPL2(type, enumname) const static type enumname;
#define ZENUM_IMPL3(type, enumname) const type type::enumname = {k##enumname};
#define ZENUM_TO_STR_IMPL(type, enumname) \
case k##enumname: \
return #enumname;
#define ZENUM_TO_ENUM_IMPL(type, enumname) \
if (str == #enumname) { \
return k##enumname; \
}
#define ZENUM_DECLAR(name, elist) \
namespace iflytop { \
using namespace std; \
using namespace nlohmann; \
class name { \
public: \
typedef enum { elist(name, ZENUM_IMPL1) kunkown } enum_val_t; \
enum_val_t id; \
elist(name, ZENUM_IMPL2) public : name() {} \
name(enum_val_t id) : id(id) {} \
name(string str) : id(toEnum(str)) {} \
enum_val_t getId() const { return id; } \
static string toString(enum_val_t enu) { \
switch (enu) { elist(name, ZENUM_TO_STR_IMPL) default : return "unknown"; } \
} \
static enum_val_t toEnum(string str) { elist(name, ZENUM_TO_ENUM_IMPL) return kunkown; } \
operator string() const { return toString(id); } \
operator int() const { return int(id); } \
bool operator==(const name& setid) const { return id == setid.id; } \
}; \
static inline void to_json(json& j, const name& setid) { j = setid.toString(setid.getId()); } \
static inline void from_json(const json& j, name& setid) { setid = name(string(j)); } \
}
#define ZENUM_IMPL(name, elist) \
namespace iflytop { \
elist(name, ZENUM_IMPL3) \
}

2
appsrc/appbase/appbean/disinfection_state.cpp

@ -0,0 +1,2 @@
#include "disinfection_state.hpp"
DisinfectionState_ZENUM_IMPL

15
appsrc/appbase/appbean/disinfection_state.hpp

@ -0,0 +1,15 @@
#include "iflytop/core/components/zenum_template/zenum_template.hpp"
#define DisinfectionState_ZENUM_IMPL ZENUM_IMPL(DisinfectionState, DisinfectionState_LIST)
#define DisinfectionState_LIST(type, marco) /**/ \
marco(type, idle) /**/ \
marco(type, preheat) /**/ \
marco(type, disinfection) /**/ \
marco(type, degradation) /**/ \
marco(type, finished) /**/ \
marco(type, dehumidification_before_disinfection) /**/ \
marco(type, dehumidification_after_disinfection) /**/ \
marco(type, empty_liquid_from_the_line) /**/
ZENUM_DECLAR(DisinfectionState, DisinfectionState_LIST);

2
appsrc/appbase/appbean/setting_id.cpp

@ -0,0 +1,2 @@
#include "setting_id.hpp"
SettingId_ZENUM_IMPL

26
appsrc/appbase/appbean/setting_id.hpp

@ -0,0 +1,26 @@
#include "iflytop/core/components/zenum_template/zenum_template.hpp"
#define SettingId_ZENUM_IMPL ZENUM_IMPL(SettingId, SettingId_LIST)
#define SettingId_LIST(type, marco) /**/ \
marco(type, stoped_gs) /**/ \
marco(type, continued_gs) /**/ \
marco(type, stoped_satur) /**/ \
marco(type, continued_satur) /**/ \
marco(type, max_humidity) /**/ \
marco(type, drainage_pump_speed) /**/ \
marco(type, injection_pump_speed) /**/ \
marco(type, pre_heat_time_s) /**/ \
marco(type, stoped_humi) /**/ \
marco(type, continued_humi) /**/ \
marco(type, proportional_valve_default_value) /**/ \
marco(type, record_period_min) /**/ \
marco(type, record_printer_period_min) /**/ \
marco(type, loglevel) /*消毒等级*/ \
marco(type, enable_bd_dehumidify) /*是否启用BD除湿*/ \
marco(type, bd_dehumidify_threshold) /*BD除湿阈值*/ \
marco(type, enable_ad_dehumidify) /*是否启用AD除湿*/ \
marco(type, ad_dehumidify_threshold) /*AD除湿阈值*/ \
marco(type, enable_ad_degrade) /*是否启用AD降解*/ \
marco(type, ad_degrade_threshold) /*AD降解阈值*/
ZENUM_DECLAR(SettingId, SettingId_LIST);

3
appsrc/appbase/dep.hpp

@ -18,4 +18,5 @@
#include "project_setting.hpp" #include "project_setting.hpp"
#include "project_setting_mgr.hpp" #include "project_setting_mgr.hpp"
#include "utils/zdictionary.hpp" #include "utils/zdictionary.hpp"
#include "disinfection_state.hpp"
#include "disinfection_state.hpp"
#include "appbase/appbean/setting_id.hpp"

36
appsrc/appbase/disinfection_state.hpp

@ -1,41 +1,7 @@
#pragma once #pragma once
#include <string> #include <string>
#include "appbase/appbean/disinfection_state.hpp"
namespace iflytop { namespace iflytop {
using namespace std; using namespace std;
typedef enum {
kstate_idle = 0, // 空闲
kstate_preheat = 1, // 预热
kstate_disinfection = 2, // 消毒中-工作
kstate_degradation = 4, // 降解中
kstate_finished = 5, // 结束
kstate_dehumidification_before_disinfection = 6, // 消毒前除湿
kstate_dehumidification_after_disinfection = 7, // 消毒后除湿
kstate_empty_liquid_from_the_line = 8, // 排空管路中的液体
} disinfection_state_t;
static inline string toString(disinfection_state_t state) {
switch (state) {
case kstate_idle:
return "idle";
case kstate_preheat:
return "preheat";
case kstate_disinfection:
return "disinfection";
case kstate_degradation:
return "degradation";
case kstate_finished:
return "finished";
case kstate_dehumidification_before_disinfection:
return "dehumidification_before_disinfection";
case kstate_dehumidification_after_disinfection:
return "dehumidification_after_disinfection";
case kstate_empty_liquid_from_the_line:
return "empty_liquid_from_the_line";
default:
return "unkown";
}
}
} // namespace iflytop } // namespace iflytop

89
appsrc/baseservice/db/base/dbbase.cpp

@ -1,91 +1,2 @@
#include "dbbase.hpp" #include "dbbase.hpp"
namespace iflytop {
using namespace std;
using namespace core;
using namespace nlohmann;
namespace db {
#define CR(val) \
case val: \
return #val;
#define STR2INT(val) \
if (str == #val) { \
return val; \
}
string SettingId::toString(settingid_t enu) {
switch (enu) {
CR(stoped_gs)
CR(continued_gs)
CR(stoped_satur)
CR(continued_satur)
CR(max_humidity)
CR(drainage_pump_speed)
CR(injection_pump_speed)
CR(pre_heat_time_s)
CR(stoped_humi)
CR(continued_humi)
CR(proportional_valve_default_value)
CR(record_period_min)
CR(record_printer_period_min)
CR(loglevel)
CR(enable_bd_dehumidify)
CR(bd_dehumidify_threshold)
CR(enable_ad_dehumidify)
CR(ad_dehumidify_threshold)
CR(enable_ad_degrade)
CR(ad_degrade_threshold)
default:
return "unknown";
}
}
SettingId::settingid_t SettingId::toEnum(string str) {
STR2INT(stoped_gs);
STR2INT(continued_gs);
STR2INT(stoped_satur);
STR2INT(continued_satur);
STR2INT(max_humidity);
STR2INT(drainage_pump_speed);
STR2INT(injection_pump_speed);
STR2INT(pre_heat_time_s);
STR2INT(stoped_humi);
STR2INT(continued_humi);
STR2INT(proportional_valve_default_value);
STR2INT(record_period_min);
STR2INT(record_printer_period_min);
STR2INT(loglevel);
STR2INT(enable_bd_dehumidify);
STR2INT(bd_dehumidify_threshold);
STR2INT(enable_ad_dehumidify);
STR2INT(ad_dehumidify_threshold);
STR2INT(enable_ad_degrade);
STR2INT(ad_degrade_threshold);
return (SettingId::settingid_t )0;
}
SettingId SettingId::kstoped_gs = {stoped_gs};
SettingId SettingId::kcontinued_gs = {continued_gs};
SettingId SettingId::kstoped_satur = {stoped_satur};
SettingId SettingId::kcontinued_satur = {continued_satur};
SettingId SettingId::kmax_humidity = {max_humidity};
SettingId SettingId::kdrainage_pump_speed = {drainage_pump_speed};
SettingId SettingId::kinjection_pump_speed = {injection_pump_speed};
SettingId SettingId::kpre_heat_time_s = {pre_heat_time_s};
SettingId SettingId::kstoped_humi = {stoped_humi};
SettingId SettingId::kcontinued_humi = {continued_humi};
SettingId SettingId::kproportional_valve_default_value = {proportional_valve_default_value};
SettingId SettingId::krecord_period_min = {record_period_min};
SettingId SettingId::krecord_printer_period_min = {record_printer_period_min};
SettingId SettingId::kloglevel = {loglevel};
SettingId SettingId::kenable_bd_dehumidify = {enable_bd_dehumidify};
SettingId SettingId::kbd_dehumidify_threshold = {bd_dehumidify_threshold};
SettingId SettingId::kenable_ad_dehumidify = {enable_ad_dehumidify};
SettingId SettingId::kad_dehumidify_threshold = {ad_dehumidify_threshold};
SettingId SettingId::kenable_ad_degrade = {enable_ad_degrade};
SettingId SettingId::kad_degrade_threshold = {ad_degrade_threshold};
} // namespace db
} // namespace iflytop

74
appsrc/baseservice/db/base/dbbase.hpp

@ -17,10 +17,6 @@
#include "appbase/dep.hpp" #include "appbase/dep.hpp"
#define USER_DB "user.db"
#define DISINFECTION_RECORD_DB "disinfection_record.db"
#define USER_BEHAVIOR_RECORD_DB "user_behavior_record.db"
/** /**
* @brief * @brief
* *
@ -51,76 +47,6 @@ using namespace core;
using namespace nlohmann; using namespace nlohmann;
namespace db { namespace db {
class SettingId {
public:
typedef enum {
stoped_gs,
continued_gs,
stoped_satur,
continued_satur,
max_humidity,
drainage_pump_speed,
injection_pump_speed,
pre_heat_time_s,
stoped_humi,
continued_humi,
proportional_valve_default_value,
record_period_min,
record_printer_period_min,
loglevel, // 消毒等级
enable_bd_dehumidify, // 是否启用BD除湿
bd_dehumidify_threshold, // BD除湿阈值
enable_ad_dehumidify, // 是否启用AD除湿
ad_dehumidify_threshold, // AD除湿阈值
enable_ad_degrade, // 是否启用AD降解
ad_degrade_threshold, // AD降解阈值
} settingid_t;
settingid_t id = stoped_gs;
static SettingId kstoped_gs;
static SettingId kcontinued_gs;
static SettingId kstoped_satur;
static SettingId kcontinued_satur;
static SettingId kmax_humidity;
static SettingId kdrainage_pump_speed;
static SettingId kinjection_pump_speed;
static SettingId kpre_heat_time_s;
static SettingId kstoped_humi;
static SettingId kcontinued_humi;
static SettingId kproportional_valve_default_value;
static SettingId krecord_period_min;
static SettingId krecord_printer_period_min;
static SettingId kloglevel;
static SettingId kenable_bd_dehumidify;
static SettingId kbd_dehumidify_threshold;
static SettingId kenable_ad_dehumidify;
static SettingId kad_dehumidify_threshold;
static SettingId kenable_ad_degrade;
static SettingId kad_degrade_threshold;
public:
SettingId() {}
SettingId(settingid_t id) : id(id) {}
SettingId(string str) : id(toEnum(str)) {}
settingid_t getId() const { return id; }
static string toString(settingid_t enu);
static settingid_t toEnum(string str);
operator string() const { return toString(id); }
// 等于
bool operator==(const SettingId& setid) const { return id == setid.id; }
};
static inline void to_json(json& j, const SettingId& setid) { j = setid.toString(setid.getId()); }
static inline void from_json(const json& j, SettingId& setid) { setid = SettingId(string(j)); }
} // namespace db } // namespace db
} // namespace iflytop } // namespace iflytop

6
appsrc/main.cpp

@ -50,7 +50,8 @@ int main(int argc, char *argv[]) {
main.run(argc, argv); main.run(argc, argv);
} }
} }
namespace iflytop {
}
void Main::onsignal(int signo) { exit(0); } void Main::onsignal(int signo) { exit(0); }
void Main::run(int argc, char *argv[]) { void Main::run(int argc, char *argv[]) {
// ::signal(SIGINT, Main::_onsignal); // ::signal(SIGINT, Main::_onsignal);
@ -58,6 +59,7 @@ void Main::run(int argc, char *argv[]) {
while (true) sleep(1000); while (true) sleep(1000);
} }
int Main::main(int argc, char *argv[]) { int Main::main(int argc, char *argv[]) {
/** /**
* @brief * @brief
*/ */
@ -73,8 +75,6 @@ int Main::main(int argc, char *argv[]) {
BUILD_AND_REG_SERRVICE(GConfig); BUILD_AND_REG_SERRVICE(GConfig);
GET_SERVICE(GConfig)->initialize(); GET_SERVICE(GConfig)->initialize();
/** /**
* @brief * @brief
*/ */

53
appsrc/service/app/disinfection_ctrl_service.cpp

@ -3,27 +3,28 @@ using namespace iflytop;
#define SETTING_DB SettingDBDao::ins() #define SETTING_DB SettingDBDao::ins()
#define FORMULA_DB FormulaDBDao::ins() #define FORMULA_DB FormulaDBDao::ins()
static string disinfectionState2DisplayName(disinfection_state_t state) {
switch (state) {
case kstate_idle:
return "空闲";
case kstate_preheat:
return "预热";
case kstate_disinfection:
return "消毒中";
case kstate_degradation:
return "降解中";
case kstate_finished:
return "消毒完成";
case kstate_dehumidification_before_disinfection:
return "消毒前除湿";
case kstate_dehumidification_after_disinfection:
return "消毒后除湿";
case kstate_empty_liquid_from_the_line:
return "排空管路";
default:
return "未知";
}
static string toDisplayName(DisinfectionState state) {
return "";
// switch (state) {
// case kstate_idle:
// return "空闲";
// case kstate_preheat:
// return "预热";
// case kstate_disinfection:
// return "消毒中";
// case kstate_degradation:
// return "降解中";
// case kstate_finished:
// return "消毒完成";
// case kstate_dehumidification_before_disinfection:
// return "消毒前除湿";
// case kstate_dehumidification_after_disinfection:
// return "消毒后除湿";
// case kstate_empty_liquid_from_the_line:
// return "排空管路";
// default:
// return "未知";
// }
} }
void DisinfectionCtrlService::initialize() { void DisinfectionCtrlService::initialize() {
@ -44,7 +45,7 @@ void DisinfectionCtrlService::fn_start(shared_ptr<MsgProcessContext> cxt) {
for (auto& setting : allrealtimesetting) { for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = setting->val; m_realtimeCfg[string(setting->setting_id)] = setting->val;
} }
m_state = kstate_preheat;
// m_state = kstate_preheat;
} }
void DisinfectionCtrlService::fn_startWithFormula(shared_ptr<MsgProcessContext> cxt) { // void DisinfectionCtrlService::fn_startWithFormula(shared_ptr<MsgProcessContext> cxt) { //
m_formulaid = cxt->params["formula_id"]; m_formulaid = cxt->params["formula_id"];
@ -55,11 +56,11 @@ void DisinfectionCtrlService::fn_startWithFormula(shared_ptr<MsgProcessContext>
for (auto& setting : allrealtimesetting) { for (auto& setting : allrealtimesetting) {
m_realtimeCfg[string(setting->setting_id)] = m_defaultFormulaJson[string(setting->setting_id)]; m_realtimeCfg[string(setting->setting_id)] = m_defaultFormulaJson[string(setting->setting_id)];
} }
m_state = kstate_preheat;
// m_state = kstate_preheat;
} }
void DisinfectionCtrlService::fn_stop(shared_ptr<MsgProcessContext> cxt) { void DisinfectionCtrlService::fn_stop(shared_ptr<MsgProcessContext> cxt) {
m_formulaid = ""; m_formulaid = "";
m_state = kstate_idle;
m_state = DisinfectionState::idle;
} }
void DisinfectionCtrlService::fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt) { void DisinfectionCtrlService::fn_getRealtimeConfig(shared_ptr<MsgProcessContext> cxt) {
@ -75,8 +76,8 @@ void DisinfectionCtrlService::fn_setRealtimeConfig(shared_ptr<MsgProcessContext>
} }
void DisinfectionCtrlService::fn_getState(shared_ptr<MsgProcessContext> cxt) { void DisinfectionCtrlService::fn_getState(shared_ptr<MsgProcessContext> cxt) {
json& rely = cxt->content; json& rely = cxt->content;
rely["statedisplayName"] = disinfectionState2DisplayName(m_state);
rely["state"] = toString(m_state);
rely["statedisplayName"] = toDisplayName(m_state);
rely["state"] = string(m_state);
rely["curStateRemainTimeS"] = 60; rely["curStateRemainTimeS"] = 60;
rely["tlog"] = "12.0"; rely["tlog"] = "12.0";
rely["nlog"] = "3.0"; rely["nlog"] = "3.0";

2
appsrc/service/app/disinfection_ctrl_service.hpp

@ -21,7 +21,7 @@ class DisinfectionCtrlService : public enable_shared_from_this<DisinfectionCtrlS
shared_ptr<DeviceStateService> m_ds; shared_ptr<DeviceStateService> m_ds;
shared_ptr<GConfig> m_gConfig; shared_ptr<GConfig> m_gConfig;
disinfection_state_t m_state = kstate_idle;
DisinfectionState m_state = DisinfectionState::idle;
map<string, string> m_realtimeCfg; map<string, string> m_realtimeCfg;
json m_defaultFormulaJson; json m_defaultFormulaJson;

16
appsrc/service/disinfection_logs_service.cpp

@ -158,14 +158,14 @@ void DisinfectionLogsService::initialize() {
m_csvHeaderDict.insert(kpumpvel, "喷液泵(g/min)"); m_csvHeaderDict.insert(kpumpvel, "喷液泵(g/min)");
m_csvHeaderDict.insert(kreamintime, "预计剩余时间"); m_csvHeaderDict.insert(kreamintime, "预计剩余时间");
m_dmStateDict.insert(kstate_idle, "空闲");
m_dmStateDict.insert(kstate_preheat, "预热");
m_dmStateDict.insert(kstate_disinfection, "消毒");
m_dmStateDict.insert(kstate_degradation, "讲解");
m_dmStateDict.insert(kstate_finished, "消毒结束");
m_dmStateDict.insert(kstate_dehumidification_before_disinfection, "消毒前除湿");
m_dmStateDict.insert(kstate_empty_liquid_from_the_line, "清空管路");
m_dmStateDict.insert(kstate_dehumidification_after_disinfection, "消毒后除湿");
m_dmStateDict.insert(DisinfectionState::idle, "空闲");
m_dmStateDict.insert(DisinfectionState::preheat, "预热");
m_dmStateDict.insert(DisinfectionState::disinfection, "消毒");
m_dmStateDict.insert(DisinfectionState::degradation, "讲解");
m_dmStateDict.insert(DisinfectionState::finished, "消毒结束");
m_dmStateDict.insert(DisinfectionState::dehumidification_before_disinfection, "消毒前除湿");
m_dmStateDict.insert(DisinfectionState::empty_liquid_from_the_line, "清空管路");
m_dmStateDict.insert(DisinfectionState::dehumidification_after_disinfection, "消毒后除湿");
// TODO: 检查指令iconv是否可用 // TODO: 检查指令iconv是否可用
} }

2
appsrc/service/disinfection_logs_service.hpp

@ -18,7 +18,7 @@ namespace iflytop {
class StateSnapshot { class StateSnapshot {
public: public:
disinfection_state_t state;
DisinfectionState state;
zsystem_tp time; zsystem_tp time;
int32_t h2o2[MAX_SUPPORT_SENSOR]; // ppm int32_t h2o2[MAX_SUPPORT_SENSOR]; // ppm

0
appsrc/baseservice/device_ctrl_service.cpp → appsrc/service/hardware/device_ctrl_service.cpp

0
appsrc/baseservice/device_ctrl_service.hpp → appsrc/service/hardware/device_ctrl_service.hpp

Loading…
Cancel
Save