diff --git a/appdep/iflytop/core/components/zenum_template/enumtest.cpp b/appdep/iflytop/core/components/zenum_template/enumtest.cpp new file mode 100644 index 0000000..fab183f --- /dev/null +++ b/appdep/iflytop/core/components/zenum_template/enumtest.cpp @@ -0,0 +1,2 @@ +#include "enumtest.hpp" +ZENUM_IMPL(ETest, ETest_LIST); diff --git a/appdep/iflytop/core/components/zenum_template/enumtest.hpp b/appdep/iflytop/core/components/zenum_template/enumtest.hpp new file mode 100644 index 0000000..36cfb05 --- /dev/null +++ b/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); diff --git a/appdep/iflytop/core/components/zenum_template/zenum_template.hpp b/appdep/iflytop/core/components/zenum_template/zenum_template.hpp new file mode 100644 index 0000000..8821b14 --- /dev/null +++ b/appdep/iflytop/core/components/zenum_template/zenum_template.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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) \ + } diff --git a/appsrc/appbase/appbean/disinfection_state.cpp b/appsrc/appbase/appbean/disinfection_state.cpp new file mode 100644 index 0000000..71792d9 --- /dev/null +++ b/appsrc/appbase/appbean/disinfection_state.cpp @@ -0,0 +1,2 @@ +#include "disinfection_state.hpp" +DisinfectionState_ZENUM_IMPL \ No newline at end of file diff --git a/appsrc/appbase/appbean/disinfection_state.hpp b/appsrc/appbase/appbean/disinfection_state.hpp new file mode 100644 index 0000000..13f7ae0 --- /dev/null +++ b/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); diff --git a/appsrc/appbase/appbean/setting_id.cpp b/appsrc/appbase/appbean/setting_id.cpp new file mode 100644 index 0000000..8ef4f13 --- /dev/null +++ b/appsrc/appbase/appbean/setting_id.cpp @@ -0,0 +1,2 @@ +#include "setting_id.hpp" +SettingId_ZENUM_IMPL diff --git a/appsrc/appbase/appbean/setting_id.hpp b/appsrc/appbase/appbean/setting_id.hpp new file mode 100644 index 0000000..38e617a --- /dev/null +++ b/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); diff --git a/appsrc/appbase/dep.hpp b/appsrc/appbase/dep.hpp index b22a35f..5fa9c5e 100644 --- a/appsrc/appbase/dep.hpp +++ b/appsrc/appbase/dep.hpp @@ -18,4 +18,5 @@ #include "project_setting.hpp" #include "project_setting_mgr.hpp" #include "utils/zdictionary.hpp" -#include "disinfection_state.hpp" \ No newline at end of file +#include "disinfection_state.hpp" +#include "appbase/appbean/setting_id.hpp" diff --git a/appsrc/appbase/disinfection_state.hpp b/appsrc/appbase/disinfection_state.hpp index fc921b5..72bdfc5 100644 --- a/appsrc/appbase/disinfection_state.hpp +++ b/appsrc/appbase/disinfection_state.hpp @@ -1,41 +1,7 @@ #pragma once #include +#include "appbase/appbean/disinfection_state.hpp" namespace iflytop { 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 \ No newline at end of file diff --git a/appsrc/baseservice/db/base/dbbase.cpp b/appsrc/baseservice/db/base/dbbase.cpp index 2c97da0..eaa16ed 100644 --- a/appsrc/baseservice/db/base/dbbase.cpp +++ b/appsrc/baseservice/db/base/dbbase.cpp @@ -1,91 +1,2 @@ #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 diff --git a/appsrc/baseservice/db/base/dbbase.hpp b/appsrc/baseservice/db/base/dbbase.hpp index dc39cf5..56def2b 100644 --- a/appsrc/baseservice/db/base/dbbase.hpp +++ b/appsrc/baseservice/db/base/dbbase.hpp @@ -17,10 +17,6 @@ #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 * @@ -51,76 +47,6 @@ using namespace core; using namespace nlohmann; 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 iflytop \ No newline at end of file diff --git a/appsrc/main.cpp b/appsrc/main.cpp index 21e630d..1ea93b3 100644 --- a/appsrc/main.cpp +++ b/appsrc/main.cpp @@ -50,7 +50,8 @@ int main(int argc, char *argv[]) { main.run(argc, argv); } } - +namespace iflytop { +} void Main::onsignal(int signo) { exit(0); } void Main::run(int argc, char *argv[]) { // ::signal(SIGINT, Main::_onsignal); @@ -58,6 +59,7 @@ void Main::run(int argc, char *argv[]) { while (true) sleep(1000); } int Main::main(int argc, char *argv[]) { + /** * @brief 系统初始化 */ @@ -73,8 +75,6 @@ int Main::main(int argc, char *argv[]) { BUILD_AND_REG_SERRVICE(GConfig); GET_SERVICE(GConfig)->initialize(); - - /** * @brief */ diff --git a/appsrc/service/app/disinfection_ctrl_service.cpp b/appsrc/service/app/disinfection_ctrl_service.cpp index feefe9f..93ee054 100644 --- a/appsrc/service/app/disinfection_ctrl_service.cpp +++ b/appsrc/service/app/disinfection_ctrl_service.cpp @@ -3,27 +3,28 @@ using namespace iflytop; #define SETTING_DB SettingDBDao::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() { @@ -44,7 +45,7 @@ void DisinfectionCtrlService::fn_start(shared_ptr cxt) { for (auto& setting : allrealtimesetting) { m_realtimeCfg[string(setting->setting_id)] = setting->val; } - m_state = kstate_preheat; + // m_state = kstate_preheat; } void DisinfectionCtrlService::fn_startWithFormula(shared_ptr cxt) { // m_formulaid = cxt->params["formula_id"]; @@ -55,11 +56,11 @@ void DisinfectionCtrlService::fn_startWithFormula(shared_ptr for (auto& setting : allrealtimesetting) { 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 cxt) { m_formulaid = ""; - m_state = kstate_idle; + m_state = DisinfectionState::idle; } void DisinfectionCtrlService::fn_getRealtimeConfig(shared_ptr cxt) { @@ -75,8 +76,8 @@ void DisinfectionCtrlService::fn_setRealtimeConfig(shared_ptr } void DisinfectionCtrlService::fn_getState(shared_ptr cxt) { 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["tlog"] = "12.0"; rely["nlog"] = "3.0"; diff --git a/appsrc/service/app/disinfection_ctrl_service.hpp b/appsrc/service/app/disinfection_ctrl_service.hpp index ae33c7f..80e2f5b 100644 --- a/appsrc/service/app/disinfection_ctrl_service.hpp +++ b/appsrc/service/app/disinfection_ctrl_service.hpp @@ -21,7 +21,7 @@ class DisinfectionCtrlService : public enable_shared_from_this m_ds; shared_ptr m_gConfig; - disinfection_state_t m_state = kstate_idle; + DisinfectionState m_state = DisinfectionState::idle; map m_realtimeCfg; json m_defaultFormulaJson; diff --git a/appsrc/service/disinfection_logs_service.cpp b/appsrc/service/disinfection_logs_service.cpp index aa3e2c1..c02d501 100644 --- a/appsrc/service/disinfection_logs_service.cpp +++ b/appsrc/service/disinfection_logs_service.cpp @@ -158,14 +158,14 @@ void DisinfectionLogsService::initialize() { m_csvHeaderDict.insert(kpumpvel, "喷液泵(g/min)"); 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是否可用 } diff --git a/appsrc/service/disinfection_logs_service.hpp b/appsrc/service/disinfection_logs_service.hpp index 95500bd..d03ad4a 100644 --- a/appsrc/service/disinfection_logs_service.hpp +++ b/appsrc/service/disinfection_logs_service.hpp @@ -18,7 +18,7 @@ namespace iflytop { class StateSnapshot { public: - disinfection_state_t state; + DisinfectionState state; zsystem_tp time; int32_t h2o2[MAX_SUPPORT_SENSOR]; // ppm diff --git a/appsrc/baseservice/device_ctrl_service.cpp b/appsrc/service/hardware/device_ctrl_service.cpp similarity index 100% rename from appsrc/baseservice/device_ctrl_service.cpp rename to appsrc/service/hardware/device_ctrl_service.cpp diff --git a/appsrc/baseservice/device_ctrl_service.hpp b/appsrc/service/hardware/device_ctrl_service.hpp similarity index 100% rename from appsrc/baseservice/device_ctrl_service.hpp rename to appsrc/service/hardware/device_ctrl_service.hpp