diff --git a/README.md b/README.md index 39671ea..012101f 100644 --- a/README.md +++ b/README.md @@ -105,8 +105,12 @@ VERSION 2.0.0 3. 修改默认管理员姓名为admin,密码为8888 4. 重构数据 +VERSION 2.0.1 + 1. 修改当db文件损坏的时候,删除db文件 + TODO: 1.添加用户增加用户查重检查 - 2.添加 + 2.测试如果数据库文件损坏,设备的执行逻辑 + 3.驱动器注释掉参数刷新的代码 ``` \ No newline at end of file diff --git a/appsrc/appsetting/project_port/project_port.cpp b/appsrc/appsetting/project_port/project_port.cpp index 9ef29e1..a6c9460 100644 --- a/appsrc/appsetting/project_port/project_port.cpp +++ b/appsrc/appsetting/project_port/project_port.cpp @@ -51,20 +51,26 @@ void ProjectPort::initialize() { if (projectTypeName == PROJECT_LARGE_SPACE_DM) { logger->info("initProjectSetting large_space_disinfection_machine"); initProjectSetting(klarge_space_disinfection_machine); + deviceTypeInited = true; } else if (projectTypeName == PROJECT_SMALL_SPACE_DM) { logger->info("initProjectSetting small_space_disinfectio_machine"); initProjectSetting(ksmall_space_disinfection_machine); + deviceTypeInited = true; } else if (projectTypeName == PROJECT_PIPE_DM) { logger->info("initProjectSetting pipe_disinfection_machine"); initProjectSetting(kpipe_disinfection_machine); + deviceTypeInited = true; } else if (projectTypeName == PROJECT_DRAW_BAR_DM) { logger->info("initProjectSetting draw_bar_disinfection_box"); initProjectSetting(kdraw_bar_disinfection_box); + deviceTypeInited = true; } else { // THROW_APP_EXCEPTION(err::kappe_code_error, "ProjectPort::initialize: projectType not found"); - logger->error("project type not support:{}", projectTypeName); - exit(-1); + logger->error("project type not support:{},init as largeSpaceDM", projectTypeName); + initProjectSetting(klarge_space_disinfection_machine); + deviceTypeInited = false; } + logger->info("======================================================================="); } diff --git a/appsrc/appsetting/project_port/project_port.hpp b/appsrc/appsetting/project_port/project_port.hpp index f88e65f..a13e2dc 100644 --- a/appsrc/appsetting/project_port/project_port.hpp +++ b/appsrc/appsetting/project_port/project_port.hpp @@ -33,8 +33,9 @@ class ProjectPort { /* data */ shared_ptr gConfig; map componentIdMap; - string projectType = PROJECT_LARGE_SPACE_DM; - int projectTypeInt = klarge_space_disinfection_machine; + string projectType = PROJECT_LARGE_SPACE_DM; + int projectTypeInt = klarge_space_disinfection_machine; + bool deviceTypeInited = false; // // some properties @@ -59,6 +60,7 @@ class ProjectPort { bool isSmallSpaceDM() { return projectTypeInt == ksmall_space_disinfection_machine; } bool isPipeDM() { return projectTypeInt == kpipe_disinfection_machine; } bool isDrawBarDM() { return projectTypeInt == kdraw_bar_disinfection_box; } + bool isDeviceTypeInited() { return deviceTypeInited; } bool isProjectType(int id) { return id == projectTypeInt; } bool isProjectType(int id0, int id1) { return id0 == projectTypeInt || id1 == projectTypeInt; } diff --git a/appsrc/baseservice/db/user_behavior_record_dao.cpp b/appsrc/baseservice/db/user_behavior_record_dao.cpp index f38c214..0af7cb2 100644 --- a/appsrc/baseservice/db/user_behavior_record_dao.cpp +++ b/appsrc/baseservice/db/user_behavior_record_dao.cpp @@ -30,24 +30,30 @@ using namespace nlohmann; UserBehaviorRecordDao::UserBehaviorRecordDao(/* args */) {} void UserBehaviorRecordDao::initialize() { - mkdir("db", 0755); - auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); - user_behavior_record_table.sync_schema(); + mkdir("db", 0755); + bool suc = false; + do { + try { + logger->info("init user db"); + storage.sync_schema(); + suc = true; + } catch (const std::exception& e) { + logger->error("init {} db failed: {}", storage.filename(), e.what()); + system(fmt::format("rm -rf {}", storage.filename()).c_str()); + sleep(1); + } + } while (!suc); } int UserBehaviorRecordDao::getUserBehaviorRecordCount() { lock_guard lock(lock_); - auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); - user_behavior_record_table.sync_schema(); - return user_behavior_record_table.count(where(c(&UserBehaviorRecord::id) > 0)); + return storage.count(where(c(&UserBehaviorRecord::id) > 0)); } int UserBehaviorRecordDao::getUserBehaviorRecordTheFirstId() { lock_guard lock(lock_); - auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); - user_behavior_record_table.sync_schema(); - auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).asc()); + auto all = storage.get_all(order_by(&UserBehaviorRecord::id).asc()); if (all.size() == 0) { return -1; } @@ -57,10 +63,7 @@ int UserBehaviorRecordDao::getUserBehaviorRecordTheFirstId() { list> UserBehaviorRecordDao::getAllUserBehaviorRecord() { lock_guard lock(lock_); - auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); - user_behavior_record_table.sync_schema(); - - auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).desc()); + auto all = storage.get_all(order_by(&UserBehaviorRecord::id).desc()); list> user_behavior_records; for (auto& u : all) { @@ -74,10 +77,7 @@ json UserBehaviorRecordDao::getUserBehaviorRecordDescJson(int page, int page_siz json j_user_behavior_records; - auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); - user_behavior_record_table.sync_schema(); - - auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).desc()); + auto all = storage.get_all(order_by(&UserBehaviorRecord::id).desc()); int i = 0; @@ -121,23 +121,19 @@ static string getTime() { void UserBehaviorRecordDao::addUserBehaviorRecord(string name, int behavior, string behaviorinfo) { lock_guard lock(lock_); - auto user_behavior_record_table = make_storage(USER_BEHAVIOR_RECORD_DB, USER_BEHAVIOR_RECORD_STRUCT); - user_behavior_record_table.sync_schema(); UserBehaviorRecord u; u.usrName = name; u.behavior = behavior; u.behaviorinfo = behaviorinfo; u.date = getTime(); - user_behavior_record_table.insert(u); - user_behavior_record_table.sync_schema(); + storage.insert(u); - auto all = user_behavior_record_table.get_all(order_by(&UserBehaviorRecord::id).asc()); + auto all = storage.get_all(order_by(&UserBehaviorRecord::id).asc()); /** * @brief 如果记录总数量大于5000条,删除第一条 */ if (all.size() > USER_BEHAVIOR_RECORD_DB_MAX_RECORDS) { - user_behavior_record_table.remove_all(where(c(&UserBehaviorRecord::id) == all[0].id)); - user_behavior_record_table.sync_schema(); + storage.remove_all(where(c(&UserBehaviorRecord::id) == all[0].id)); } return; } diff --git a/appsrc/baseservice/db/user_behavior_record_dao.hpp b/appsrc/baseservice/db/user_behavior_record_dao.hpp index e989871..6624aba 100644 --- a/appsrc/baseservice/db/user_behavior_record_dao.hpp +++ b/appsrc/baseservice/db/user_behavior_record_dao.hpp @@ -38,6 +38,18 @@ struct UserBehaviorRecord { string behaviorinfo; }; +#define USER_BEHAVIOR_RECORD_TABLE \ + sqlite_orm::make_table("user_behavior_records", /**/ \ + sqlite_orm::make_column("id", &UserBehaviorRecord::id, sqlite_orm::primary_key().autoincrement()), /**/ \ + sqlite_orm::make_column("usrName", &UserBehaviorRecord::usrName), /**/ \ + sqlite_orm::make_column("date", &UserBehaviorRecord::date), /**/ \ + sqlite_orm::make_column("behavior", &UserBehaviorRecord::behavior), /**/ \ + sqlite_orm::make_column("behaviorinfo", &UserBehaviorRecord::behaviorinfo)) + +#define USER_BEHAVIOR_RECORD_STORAGE_MAKE() sqlite_orm::make_storage("db/user_behavior_record.db", USER_BEHAVIOR_RECORD_TABLE) + +using UserBehaviorRecordStorage = decltype(USER_BEHAVIOR_RECORD_STORAGE_MAKE()); + } // namespace db using namespace db; class UserBehaviorRecordDao : public enable_shared_from_this { @@ -45,6 +57,8 @@ class UserBehaviorRecordDao : public enable_shared_from_thisinfo("init user db"); - auto storage = make_storage(USER_DB_STRUCT); storage.sync_schema(); auto allusr = storage.get_all(); auto admin = storage.get_all(where(c(&User::roleType) == USR_ROLE_ADMIN)); @@ -54,7 +43,7 @@ void UserDao::init_usr_db() { suc = true; } catch (const std::exception& e) { logger->error("init user db failed: {}", e.what()); - system("rm -rf user.db"); + system(fmt::format("rm -rf {}", storage.filename()).c_str()); sleep(1); } } while (!suc); @@ -62,11 +51,9 @@ void UserDao::init_usr_db() { list> UserDao::getAllUser() { lock_guard lock(lock_); + list> users; - list> users; - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto all = usertable.get_all(); + auto all = storage.get_all(); for (auto& u : all) { users.push_back(make_shared(u)); } @@ -75,63 +62,52 @@ list> UserDao::getAllUser() { void UserDao::addUser(string name, string passwd, string roleType) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); logger->info("add user: {} {} {}", name, passwd, roleType); - usertable.insert(User{-1, name, passwd, roleType}); + storage.insert(User{-1, name, passwd, roleType}); } shared_ptr UserDao::updateUserRoleType(int id, string roleType) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto user = usertable.get_all(where(c(&User::id) == id)); + auto user = storage.get_all(where(c(&User::id) == id)); if (user.size() == 0) { logger->error("change user role fail, user not found"); return nullptr; } logger->info("change user role: {} {} -> {}", id, user[0].roleType, roleType); user[0].roleType = roleType; - usertable.update(user[0]); + storage.update(user[0]); return make_shared(user[0]); } shared_ptr UserDao::delUser(int id) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - - auto remove_user = usertable.get_all(where(c(&User::id) == id)); + auto remove_user = storage.get_all(where(c(&User::id) == id)); if (remove_user.size() == 0) { logger->error("remove user fail, user not found"); return nullptr; } logger->info("delete user: {}:{}", id, remove_user[0].name); - usertable.remove_all(where(c(&User::id) == id)); + storage.remove_all(where(c(&User::id) == id)); return make_shared(remove_user[0]); } shared_ptr UserDao::changePasswd(int id, string passwd) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto user = usertable.get_all(where(c(&User::id) == id)); + auto user = storage.get_all(where(c(&User::id) == id)); if (user.size() == 0) { logger->error("change passwd fail, user not found"); return nullptr; } logger->info("change passwd: {} {} -> {}", id, user[0].passwd, passwd); user[0].passwd = passwd; - usertable.update(user[0]); + storage.update(user[0]); return make_shared(user[0]); } shared_ptr UserDao::updateUserUid(int id, string name, string& oldname) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto user = usertable.get_all(where(c(&User::id) == id)); + auto user = storage.get_all(where(c(&User::id) == id)); if (user.size() == 0) { logger->error("change user name fail, user not found"); return nullptr; @@ -139,7 +115,7 @@ shared_ptr UserDao::updateUserUid(int id, string name, string& oldname oldname = user[0].name; logger->info("change user name: {} {} -> {}", id, user[0].name, name); user[0].name = name; - usertable.update(user[0]); + storage.update(user[0]); return make_shared(user[0]); } @@ -147,9 +123,8 @@ json UserDao::getAllUserJson() { lock_guard lock(lock_); json j_users; - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto all = usertable.get_all(); + + auto all = storage.get_all(); for (auto& u : all) { json j_user; j_user["id"] = u.id; @@ -164,9 +139,7 @@ json UserDao::getAllUserJson() { json UserDao::getUserJson(string name) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto user = usertable.get_all(where(c(&User::name) == name)); + auto user = storage.get_all(where(c(&User::name) == name)); if (user.size() == 0) { return json(); } @@ -181,9 +154,7 @@ json UserDao::getUserJson(string name) { shared_ptr UserDao::getUser(string name) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto user = usertable.get_all(where(c(&User::name) == name)); + auto user = storage.get_all(where(c(&User::name) == name)); if (user.size() == 0) { return nullptr; } @@ -193,9 +164,7 @@ shared_ptr UserDao::getUser(string name) { bool UserDao::isUserExist(string name) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto user = usertable.get_all(where(c(&User::name) == name)); + auto user = storage.get_all(where(c(&User::name) == name)); if (user.size() == 0) { return false; } @@ -204,9 +173,7 @@ bool UserDao::isUserExist(string name) { bool UserDao::ispasswdCorrect(string name, string passwd) { lock_guard lock(lock_); - auto usertable = make_storage(USER_DB_STRUCT); - usertable.sync_schema(); - auto user = usertable.get_all(where(c(&User::name) == name)); + auto user = storage.get_all(where(c(&User::name) == name)); if (user.size() == 0) { return false; } diff --git a/appsrc/baseservice/db/user_dao.hpp b/appsrc/baseservice/db/user_dao.hpp index db4de2d..e604b6c 100644 --- a/appsrc/baseservice/db/user_dao.hpp +++ b/appsrc/baseservice/db/user_dao.hpp @@ -22,38 +22,12 @@ #include "setting_db_dao.hpp" #include "user_behavior_des.hpp" -#define USER_DB "user.db" -#define DISINFECTION_RECORD_DB "disinfection_record.db" -#define USER_BEHAVIOR_RECORD_DB "user_behavior_record.db" - -/** - * @brief - * - * USER_DB - * table: user - * id uid passwd permission_level - * - * - * SETTING_DB - * table: setting - * id setting_name setting_name_ch val_upper_limit val_lower_limit permission_level val - * - * DISINFECTION_RECORD_DB - * table: disinfection_record - * id uuid uid date loglevel duration - * - * - * table: sensor_record - * id disinfection_id date heating_strip air_compressor sprinkler_pump disinfectant_volume h2o2_1 temp_1 humid_1 saturation_1 h2o2_2 temp_2 humid_2 - * saturation_2 h2o2_3 temp_3 humid_3 saturation_3 - * - */ - namespace iflytop { using namespace std; using namespace std; using namespace core; using namespace nlohmann; + namespace db { #define USR_ROLE_ADMIN "admin" @@ -67,12 +41,25 @@ struct User { string passwd; string roleType; // "admin/maintainer/usr/" }; + +#define USER_STORAGE_MAKE() \ + sqlite_orm::make_storage("db/user.db", sqlite_orm::make_table("users", /**/ \ + sqlite_orm::make_column("id", &User::id, sqlite_orm::primary_key().autoincrement()), /**/ \ + sqlite_orm::make_column("name", &User::name), /**/ \ + sqlite_orm::make_column("passwd", &User::passwd), /**/ \ + sqlite_orm::make_column("role", &User::roleType) /**/ \ + )) + +using UserStorage = decltype(USER_STORAGE_MAKE()); + } // namespace db + using namespace db; class UserDao : public enable_shared_from_this { THISCLASS(UserDao); recursive_mutex lock_; - bool inited = false; + bool inited = false; + UserStorage storage = USER_STORAGE_MAKE(); public: UserDao(); @@ -114,7 +101,6 @@ class UserDao : public enable_shared_from_this { shared_ptr updateUserRoleType(int id, string roleType); public: - void init_usr_db(); }; diff --git a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp index 44b0c54..f199653 100644 --- a/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp +++ b/appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp @@ -390,7 +390,7 @@ void DisinfectionCtrlService::processStateIdle(DisinfectionEvent* event) {} string DisinfectionCtrlService::createDisinfectionID() { struct tm tm = {0}; - time_t t = time(nullptr); + time_t t = ::time(nullptr); if (t == -1) { logger->error("time(nullptr) failed"); exit(-1); diff --git a/appsrc/service/hardware/device_io_ctrl_service.cpp b/appsrc/service/hardware/device_io_ctrl_service.cpp index 8d26055..9635d50 100644 --- a/appsrc/service/hardware/device_io_ctrl_service.cpp +++ b/appsrc/service/hardware/device_io_ctrl_service.cpp @@ -30,9 +30,10 @@ static bool isInTestMode() { // kdraw_bar_disinfection_box = 4, // 手持拉杆箱消毒机 // kh2o2_ext_sensor = 5, // 外部H2O2传感器 -#define CAN_MASTER TransmitDisinfectionCanMaster::ins() -#define GET_BOARDID() (ProjectPort::ins().getId(COMPONENT).boardId) -#define GET_SUBID() (ProjectPort::ins().getId(COMPONENT).subId) +#define CAN_MASTER TransmitDisinfectionCanMaster::ins() +#define GET_BOARDID() (ProjectPort::ins().getId(COMPONENT).boardId) +#define GET_SUBID() (ProjectPort::ins().getId(COMPONENT).subId) +#define VIRTUAL_DEVICE() (isInTestMode() || !ProjectPort::ins().isDeviceTypeInited()) void DeviceIoControlService::initialize() { GET_TO_SERVICE(m_config); @@ -74,7 +75,7 @@ void DeviceIoControlService::initialize() { REG_FN_VOID(SprayPumpPostPS_readPa, void(void)); REG_FN_VOID(AddLiquidPumpPostPS_readPa, void(void)); - if (isInTestMode()) { + if (VIRTUAL_DEVICE()) { logger->warn("run in pc, skip initialize device io control service"); return; } else { @@ -114,7 +115,7 @@ void DeviceIoControlService::initialize() { heartThread.reset(new Thread("heartThread", [this]() { while (true) { - if (isInTestMode()) { + if (VIRTUAL_DEVICE()) { std::this_thread::sleep_for(std::chrono::seconds(60)); continue; } @@ -228,25 +229,25 @@ int DeviceIoControlService::AddLiquidPump_addLiquid() { int pumpspeed = GET_SETTING(int, SettingId::drainage_pump_speed); logger->info(" AddLiquidPump_addLiquid, pumpspeed={}", pumpspeed); - if (!isInTestMode()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed); + if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed); return 0; } int DeviceIoControlService::AddLiquidPump_drainLiquid() { int pumpspeed = GET_SETTING(int, SettingId::drainage_pump_speed); logger->info(" AddLiquidPump_drainLiquid, pumpspeed={}", -pumpspeed); - if (!isInTestMode()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), -pumpspeed); + if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), -pumpspeed); return 0; } int DeviceIoControlService::AddLiquidPump_run(int rpm) { logger->info(" AddLiquidPump_run, rpm={}", rpm); - if (!isInTestMode()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); + if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); return 0; } int DeviceIoControlService::AddLiquidPump_stop() { logger->info(" AddLiquidPump_stop"); - if (!isInTestMode()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); + if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); return 0; } #undef COMPONENT @@ -256,17 +257,17 @@ int DeviceIoControlService::AddLiquidPump_stop() { int DeviceIoControlService::SprayPump_start(int32_t gpm) { int pumpspeed_rpm = ProjectPort::ins().gpm2speed(gpm); logger->info(" SprayPump_start, gpm={}, rpm={}", gpm, pumpspeed_rpm); - if (!isInTestMode()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed_rpm); + if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), pumpspeed_rpm); return 0; } int DeviceIoControlService::SprayPump_stop() { logger->info(" SprayPump_stop"); - if (!isInTestMode()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); + if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpStop(GET_BOARDID(), GET_SUBID()); return 0; } int DeviceIoControlService::SprayPump_startInRPM(int32_t rpm) { logger->info(" SprayPump_startInRPM, rpm={}", rpm); - if (!isInTestMode()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); + if (!VIRTUAL_DEVICE()) CAN_MASTER->pumpRotate(GET_BOARDID(), GET_SUBID(), rpm); return 0; } #undef COMPONENT @@ -275,18 +276,18 @@ int DeviceIoControlService::SprayPump_startInRPM(int32_t rpm) { #define COMPONENT HardwareComponent::Blower int DeviceIoControlService::Blower_ctrl(int power) { logger->info(" Blower_ctrl, power={}", power); - if (!isInTestMode()) CAN_MASTER->blowerCtrl(GET_BOARDID(), power); + if (!VIRTUAL_DEVICE()) CAN_MASTER->blowerCtrl(GET_BOARDID(), power); usleep(1000 * 1000); return 0; } int DeviceIoControlService::Blower_close() { logger->info(" Blower_close"); - if (!isInTestMode()) CAN_MASTER->blowerCtrl(GET_BOARDID(), 0); + if (!VIRTUAL_DEVICE()) CAN_MASTER->blowerCtrl(GET_BOARDID(), 0); return 0; } float DeviceIoControlService::Blower_readEI() { logger->info(" Blower_readEI"); - if (!isInTestMode()) return CAN_MASTER->blowerReadEI(GET_BOARDID()) / 1000.0; + if (!VIRTUAL_DEVICE()) return CAN_MASTER->blowerReadEI(GET_BOARDID()) / 1000.0; return 0; } #undef COMPONENT @@ -295,24 +296,24 @@ float DeviceIoControlService::Blower_readEI() { #define COMPONENT HardwareComponent::AirCompressor int DeviceIoControlService::AC_ctrl(int power) { logger->info(" AC_ctrl, power={}", power); - if (!isInTestMode()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); + if (!VIRTUAL_DEVICE()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); usleep(1000 * 1000); return 0; } int DeviceIoControlService::AC_ctrlNoDelay(int power) { logger->info(" AC_ctrl, power={}", power); - if (!isInTestMode()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); + if (!VIRTUAL_DEVICE()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), power); return 0; } int DeviceIoControlService::AC_close() { logger->info(" AC_close"); - if (!isInTestMode()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), 0); + if (!VIRTUAL_DEVICE()) CAN_MASTER->airCompressorCtrl(GET_BOARDID(), 0); return 0; } float DeviceIoControlService::AC_readEI() { // logger->info(" AC_readEI"); - if (!isInTestMode()) return CAN_MASTER->airCompressorReadEI(GET_BOARDID()) / 1000.0; + if (!VIRTUAL_DEVICE()) return CAN_MASTER->airCompressorReadEI(GET_BOARDID()) / 1000.0; return 0; } #undef COMPONENT @@ -321,23 +322,23 @@ float DeviceIoControlService::AC_readEI() { #define COMPONENT HardwareComponent::Heater int DeviceIoControlService::Heater_ctrl(int power) { logger->info(" Heater_ctrl, power={}", power); - if (!isInTestMode()) CAN_MASTER->heaterCtrl(GET_BOARDID(), power); + if (!VIRTUAL_DEVICE()) CAN_MASTER->heaterCtrl(GET_BOARDID(), power); usleep(1000 * 1000); return 0; } int DeviceIoControlService::Heater_close() { logger->info(" Heater_close"); - if (!isInTestMode()) CAN_MASTER->heaterCtrl(GET_BOARDID(), 0); + if (!VIRTUAL_DEVICE()) CAN_MASTER->heaterCtrl(GET_BOARDID(), 0); return 0; } float DeviceIoControlService::Heater_readEI() { // logger->info(" Heater_readEI"); - if (!isInTestMode()) return CAN_MASTER->heaterReadEI(GET_BOARDID()) / 1000.0; + if (!VIRTUAL_DEVICE()) return CAN_MASTER->heaterReadEI(GET_BOARDID()) / 1000.0; return 0; } float DeviceIoControlService::Heater_readTemperature() { // logger->info(" Heater_readTemperature"); - if (!isInTestMode()) return CAN_MASTER->heaterReadTemperature(GET_BOARDID()) / 10.0; + if (!VIRTUAL_DEVICE()) return CAN_MASTER->heaterReadTemperature(GET_BOARDID()) / 10.0; return 0; } #undef COMPONENT @@ -346,7 +347,7 @@ float DeviceIoControlService::Heater_readTemperature() { #define COMPONENT HardwareComponent::WarningLight int DeviceIoControlService::WarningLight_setState(int r, int g, int b, int warning) { // logger->debug(" WarningLight_setState, r={}, g={}, b={}, warning={}", r, g, b, warning); - if (!isInTestMode()) CAN_MASTER->warningLightSetState(GET_BOARDID(), r, g, b, warning); + if (!VIRTUAL_DEVICE()) CAN_MASTER->warningLightSetState(GET_BOARDID(), r, g, b, warning); return 0; } #undef COMPONENT @@ -360,11 +361,11 @@ int DeviceIoControlService::WarningLight_setState(int r, int g, int b, int warni int DeviceIoControlService::PosiPressureProp_setValve(int valveValue) { // valveValue = valveValue / 100.0 * 255; logger->info(" PosiPressureProp_setValve, valveValue={}", valveValue); - if (!isInTestMode()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); + if (!VIRTUAL_DEVICE()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); return 0; } int DeviceIoControlService::PosiPressureProp_readPos() { - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); pos = pos / 255.0 * 100; return pos; @@ -372,7 +373,7 @@ int DeviceIoControlService::PosiPressureProp_readPos() { return 0; } bool DeviceIoControlService::PosiPressureProp_isBusy() { - if (!isInTestMode()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); return false; } #undef COMPONENT @@ -381,11 +382,11 @@ bool DeviceIoControlService::PosiPressureProp_isBusy() { int DeviceIoControlService::NegaPressureProp_setValve(int valveValue) { valveValue = valveValue / 100.0 * 255; logger->info(" NegaPressureProp_setValve, valveValue={}", valveValue); - if (!isInTestMode()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); + if (!VIRTUAL_DEVICE()) CAN_MASTER->proportionalSetValve(GET_BOARDID(), GET_SUBID(), valveValue); return 0; } int DeviceIoControlService::NegaPressureProp_readPos() { - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int pos = CAN_MASTER->proportionalReadPos(GET_BOARDID(), GET_SUBID()); pos = pos / 255.0 * 100; return pos; @@ -393,7 +394,7 @@ int DeviceIoControlService::NegaPressureProp_readPos() { return 0; } bool DeviceIoControlService::NegaPressureProp_isBusy() { - if (!isInTestMode()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->proportionalIsBusy(GET_BOARDID(), GET_SUBID()); return false; } #undef COMPONENT @@ -402,11 +403,11 @@ bool DeviceIoControlService::NegaPressureProp_isBusy() { int DeviceIoControlService::AirLeakDetectTestModeCtrl_setMode(AirLeakTestMode mode) { logger->info(" AirLeakDetectTestModeCtrl_setMode, mode={}", mode); - if (!isInTestMode()) CAN_MASTER->airLeakDetectTestSetMode(GET_BOARDID(), mode.getId()); + if (!VIRTUAL_DEVICE()) CAN_MASTER->airLeakDetectTestSetMode(GET_BOARDID(), mode.getId()); return 0; } AirLeakTestMode DeviceIoControlService::AirLeakDetectTestModeCtrl_getMode() { - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int val = CAN_MASTER->airLeakDetectTestGetMode(GET_BOARDID()); return AirLeakTestMode(val); } @@ -419,12 +420,12 @@ AirLeakTestMode DeviceIoControlService::AirLeakDetectTestModeCtrl_getMode() { #define COMPONENT HardwareComponent::ExtChSelector int DeviceIoControlService::ExtChSelector_selectCh(int ch) { logger->info(" ExtChSelector_selectCh, ch={}", ch); - if (!isInTestMode()) CAN_MASTER->extChSelectorSetCh(GET_BOARDID(), ch); + if (!VIRTUAL_DEVICE()) CAN_MASTER->extChSelectorSetCh(GET_BOARDID(), ch); return 0; } bool DeviceIoControlService::ExtChSelector_isOnline() { - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { try { CAN_MASTER->extChSelectorGetCh(GET_BOARDID()); return true; @@ -436,7 +437,7 @@ bool DeviceIoControlService::ExtChSelector_isOnline() { } int DeviceIoControlService::ExtChSelector_trySelectCh(int ch) { logger->info(" ExtChSelector_trySelectCh, ch={}", ch); - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { try { ExtChSelector_selectCh(GET_BOARDID()); } catch (const std::exception &e) { @@ -452,21 +453,21 @@ int DeviceIoControlService::ExtChSelector_trySelectCh(int ch) { // 蒸发仓水浸 #define COMPONENT HardwareComponent::EvaporationBinWS bool DeviceIoControlService::WaterSensor_readEvaporationBin() { - if (!isInTestMode()) return CAN_MASTER->evaporationTankWSReadState(GET_BOARDID()); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->evaporationTankWSReadState(GET_BOARDID()); return false; } #undef COMPONENT #define COMPONENT HardwareComponent::DeviceBottomWS bool DeviceIoControlService::WaterSensor_readDeviceBottom() { - if (!isInTestMode()) return CAN_MASTER->bottomWSReadState(GET_BOARDID()); + if (!VIRTUAL_DEVICE()) return CAN_MASTER->bottomWSReadState(GET_BOARDID()); return false; } // 设备底部水浸 #undef COMPONENT #define COMPONENT HardwareComponent::ACPostPS int DeviceIoControlService::ACPostPS_readPa() { // - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().ACPostPS_To_Pa(val); } @@ -476,7 +477,7 @@ int DeviceIoControlService::ACPostPS_readPa() { // #define COMPONENT HardwareComponent::AirLeakDetectPS int DeviceIoControlService::AirLeakDetectPS_readPa() { // - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().AirLeakDetectPS_To_Pa(val); } @@ -486,7 +487,7 @@ int DeviceIoControlService::AirLeakDetectPS_readPa() { // #define COMPONENT HardwareComponent::LiquidWeightPS int DeviceIoControlService::LiquidWeightPS_readPa() { // - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().LiquidWeightPS_To_Pa(val); } @@ -496,7 +497,7 @@ int DeviceIoControlService::LiquidWeightPS_readPa() { // #define COMPONENT HardwareComponent::SprayPumpPostPS int DeviceIoControlService::SprayPumpPostPS_readPa() { // - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().SprayPumpPostPS_To_Pa(val); } @@ -506,7 +507,7 @@ int DeviceIoControlService::SprayPumpPostPS_readPa() { // #define COMPONENT HardwareComponent::AddLiquidPumpPostPS int DeviceIoControlService::AddLiquidPumpPostPS_readPa() { // - if (!isInTestMode()) { + if (!VIRTUAL_DEVICE()) { int32_t val = CAN_MASTER->psBusReadData(GET_BOARDID(), GET_SUBID()); return ProjectPort::ins().AddLiquidPumpPostPS_To_Pa(val); }