Browse Source

v3.1.4 | 增加更详细的报错信息

try_support_dt100n
zhaohe 4 weeks ago
parent
commit
4bfb23c8a5
  1. 53
      app_protocols/apperrorcode/app_errorcode_mgr.hpp
  2. 7
      appsrc/appbase/appevent/app_warning_promopt_event.hpp
  3. 10
      appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp
  4. 3
      appsrc/appcomponents/canchannel/com/zscanprotocol_com.hpp
  5. 2
      appsrc/appconfig/basic/zappversion.hpp
  6. 8
      appsrc/baseservice/app_event_bus.hpp
  7. 9
      appsrc/baseservice/front_msg_processer/front_msg_processer.cpp
  8. 12
      appsrc/baseservice/iflytop_front_end_service/iflytop_front_end_service.cpp
  9. 175
      appsrc/internationalization.cpp
  10. 24
      appsrc/internationalization.hpp
  11. 2
      appsrc/service/app/add_liquid_service.cpp
  12. 2
      appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp
  13. 2
      appsrc/service/app/drain_liquid_service.cpp
  14. 63
      appsrc/service/app_core.cpp
  15. 177
      appsrc/service/debug_page_test_service.cpp
  16. 25
      appsrc/service/debug_page_test_service.hpp
  17. 4
      appsrc/service/device_monitor_service.cpp
  18. 5
      appsrc/service/disinfection_logs_service.cpp
  19. 12
      appsrc/service/hardware/device_io_ctrl_service.cpp

53
app_protocols/apperrorcode/app_errorcode_mgr.hpp

@ -12,37 +12,36 @@
namespace iflytop { namespace iflytop {
using namespace std; using namespace std;
class EcodeInfo {
public:
int code;
string info;
EcodeInfo(int code, const string& info) : code(code), info(info) {}
};
// class EcodeInfo {
// public:
// int code;
// string info;
// EcodeInfo(int code, const string& info) : code(code), info(info) {}
// };
class AppEcodeInfoMgr {
map<int, shared_ptr<EcodeInfo>> ecodeInfoMap;
// class AppEcodeInfoMgr {
// map<int, shared_ptr<EcodeInfo>> ecodeInfoMap;
public:
static AppEcodeInfoMgr& ins() {
static AppEcodeInfoMgr instance;
static bool inited = false;
if (!inited) {
inited = true;
}
return instance;
}
// public:
// static AppEcodeInfoMgr& ins() {
// static AppEcodeInfoMgr instance;
// static bool inited = false;
// if (!inited) {
// inited = true;
// }
// return instance;
// }
void regEcodeInfo(int code, const string& info) { ecodeInfoMap[code] = make_shared<EcodeInfo>(code, info); }
// void regEcodeInfo(int code, const string& info) { ecodeInfoMap[code] = make_shared<EcodeInfo>(code, info); }
string getEcodeInfo(int code) {
auto it = ecodeInfoMap.find(code);
if (it != ecodeInfoMap.end()) {
return it->second->info;
}
return fmt::format("unkown({})", code);
}
};
// string getEcodeInfo(int code) {
// auto it = ecodeInfoMap.find(code);
// if (it != ecodeInfoMap.end()) {
// return it->second->info;
// }
// return fmt::format("unkown({})", code);
// }
// };
static inline string ecode2str(int32_t ecode) { return AppEcodeInfoMgr::ins().getEcodeInfo(ecode); }
} // namespace iflytop } // namespace iflytop

7
appsrc/appbase/appevent/app_warning_promopt_event.hpp

@ -8,12 +8,11 @@ class AppWarningPromoptEvent : public IAppEvent {
string description; string description;
string traceinfo; string traceinfo;
// ecode2str(appWarningPromoptEvent->getEcode()), extmessage
public: public:
AppWarningPromoptEvent(int ecode) : IAppEvent(AppEventType::AppWarningPromoptEvent), ecode(ecode) { description = ecode2str(ecode); }
AppWarningPromoptEvent(int ecode, string description) : IAppEvent(AppEventType::AppWarningPromoptEvent), ecode(ecode), description(description) { traceinfo = ""; }
AppWarningPromoptEvent(const appexception &e) : IAppEvent(AppEventType::AppWarningPromoptEvent) { AppWarningPromoptEvent(const appexception &e) : IAppEvent(AppEventType::AppWarningPromoptEvent) {
ecode = e.ecode; ecode = e.ecode;
description = ecode2str(ecode);
description = e.what();
traceinfo = e.traceinfo; traceinfo = e.traceinfo;
} }
virtual ~AppWarningPromoptEvent() {} virtual ~AppWarningPromoptEvent() {}
@ -24,7 +23,7 @@ class AppWarningPromoptEvent : public IAppEvent {
/******************************************************************************* /*******************************************************************************
* JSON * * JSON *
*******************************************************************************/ *******************************************************************************/
NLOHMANN_DEFINE_TYPE_INTRUSIVE(AppWarningPromoptEvent, uuid,type, ecode, traceinfo, description);
NLOHMANN_DEFINE_TYPE_INTRUSIVE(AppWarningPromoptEvent, uuid, type, ecode, traceinfo, description);
virtual json toJson() { return json(*this); } virtual json toJson() { return json(*this); }
}; };

10
appsrc/appcomponents/canchannel/com/zscanprotocol_com.cpp

@ -5,6 +5,7 @@
#include "app_protocols/appexception/appexception.hpp" #include "app_protocols/appexception/appexception.hpp"
#include "appcomponents/linuxsocket/unix_socket.hpp" #include "appcomponents/linuxsocket/unix_socket.hpp"
#include "iflytop/core/basic/zbin.hpp" #include "iflytop/core/basic/zbin.hpp"
#include "internationalization.hpp"
#include "tdcan_protocol.hpp" #include "tdcan_protocol.hpp"
using namespace iflytop; using namespace iflytop;
@ -103,7 +104,7 @@ shared_ptr<Receipt> ZSCanProtocolCom::base_callcmd(int32_t to, int32_t cmdid, ui
if (m_receipt_frame->ptype == kerror_receipt) { if (m_receipt_frame->ptype == kerror_receipt) {
int32_t ecode = *(int32_t *)m_receipt_frame->params; int32_t ecode = *(int32_t *)m_receipt_frame->params;
THROW_APP_EXCEPTION(ecode, ecode2str(ecode).c_str());
THROW_APP_EXCEPTION(ecode, Internationalization::ecode2description(ecode, cmdid, to, param, paramLen));
} }
shared_ptr<Receipt> receipt = make_shared<Receipt>(); shared_ptr<Receipt> receipt = make_shared<Receipt>();
@ -117,7 +118,7 @@ shared_ptr<Receipt> ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t
lock_guard<mutex> lock(m_lock); lock_guard<mutex> lock(m_lock);
usleep(10 * 1000); usleep(10 * 1000);
logger->debug("tx [to:{}, cmd:{}, param:{}({}) ] overtime:{}", to, cmdid, StringUtils().bytesToString((uint8_t *)param, paramLen), paramLen, overtime); logger->debug("tx [to:{}, cmd:{}, param:{}({}) ] overtime:{}", to, cmdid, StringUtils().bytesToString((uint8_t *)param, paramLen), paramLen, overtime);
int32_t ecode;
for (size_t i = 0; i <= 5; i++) { for (size_t i = 0; i <= 5; i++) {
try { try {
shared_ptr<Receipt> receipt = base_callcmd(to, cmdid, param, paramLen, overtime); shared_ptr<Receipt> receipt = base_callcmd(to, cmdid, param, paramLen, overtime);
@ -129,12 +130,14 @@ shared_ptr<Receipt> ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t
} }
logger->warn("systemctl restart iflytoptdcan.service"); logger->warn("systemctl restart iflytoptdcan.service");
system("systemctl restart iflytoptdcan.service"); system("systemctl restart iflytoptdcan.service");
ecode = e.ecode;
usleep(1000 * 1000); usleep(1000 * 1000);
continue; continue;
} else if (e.ecode == kerr_subdevice_overtime) { } else if (e.ecode == kerr_subdevice_overtime) {
if (i != 0) { if (i != 0) {
logger->warn("tx [to:{}, cmd:{}, param:{}({}) ] subdevice overtime, try again {}", to, cmdid, StringUtils().bytesToString((uint8_t *)param, paramLen), paramLen, i); logger->warn("tx [to:{}, cmd:{}, param:{}({}) ] subdevice overtime, try again {}", to, cmdid, StringUtils().bytesToString((uint8_t *)param, paramLen), paramLen, i);
} }
ecode = e.ecode;
usleep(1000 * 1000); usleep(1000 * 1000);
continue; continue;
} }
@ -143,7 +146,7 @@ shared_ptr<Receipt> ZSCanProtocolCom::callcmd(int32_t to, int32_t cmdid, uint8_t
break; break;
} }
THROW_APP_EXCEPTION(kerr_overtime, "overtime");
THROW_APP_EXCEPTION(ecode, Internationalization::ecode2description(ecode, cmdid, to, param, paramLen));
return nullptr; return nullptr;
} }
shared_ptr<Receipt> ZSCanProtocolCom::callcmd0(int32_t to, int32_t cmdid, int32_t overtime) { return callcmd(to, cmdid, nullptr, 0, overtime); } shared_ptr<Receipt> ZSCanProtocolCom::callcmd0(int32_t to, int32_t cmdid, int32_t overtime) { return callcmd(to, cmdid, nullptr, 0, overtime); }
@ -183,7 +186,6 @@ shared_ptr<Receipt> ZSCanProtocolCom::callcmd5(int32_t to, int32_t cmdid, int32_
return callcmd(to, cmdid, (uint8_t *)param, 20, overtime); return callcmd(to, cmdid, (uint8_t *)param, 20, overtime);
} }
string ZSCanProtocolCom::ecode2str(int ecode) { return AppEcodeInfoMgr::ins().getEcodeInfo(ecode); }
void ZSCanProtocolCom::callOnReport(uint8_t from, uint8_t *hex, uint32_t hexlen) { void ZSCanProtocolCom::callOnReport(uint8_t from, uint8_t *hex, uint32_t hexlen) {
shared_ptr<ZBin> hexbin = make_shared<ZBin>(hex, hexlen); shared_ptr<ZBin> hexbin = make_shared<ZBin>(hex, hexlen);

3
appsrc/appcomponents/canchannel/com/zscanprotocol_com.hpp

@ -24,7 +24,6 @@ using namespace std;
namespace zscanprotocol { namespace zscanprotocol {
#define TDCAN_DEFUALT_OVERTIME 1000 #define TDCAN_DEFUALT_OVERTIME 1000
typedef function<string(int ecode)> ecode2str_t;
class RxReceiptContext { class RxReceiptContext {
public: public:
@ -98,7 +97,7 @@ class ZSCanProtocolCom {
void callOnReport(uint8_t from, uint8_t *hex, uint32_t hexlen); void callOnReport(uint8_t from, uint8_t *hex, uint32_t hexlen);
private: private:
string ecode2str(int ecode);
// string ecode2str(int ecode);
shared_ptr<Receipt> base_callcmd(int32_t to, int32_t cmdid, uint8_t *param, int32_t paramLen, int32_t overtime); shared_ptr<Receipt> base_callcmd(int32_t to, int32_t cmdid, uint8_t *param, int32_t paramLen, int32_t overtime);
}; };
} // namespace zscanprotocol } // namespace zscanprotocol

2
appsrc/appconfig/basic/zappversion.hpp

@ -1,3 +1,3 @@
#pragma once #pragma once
#define VERSION "3.1.3"
#define VERSION "3.1.4"
#define PROJECT_NAME "TRANSMIT_DM" #define PROJECT_NAME "TRANSMIT_DM"

8
appsrc/baseservice/app_event_bus.hpp

@ -14,6 +14,7 @@
#include "appbase/appbase.hpp" #include "appbase/appbase.hpp"
#include "appbase/appevent/app_events.hpp" #include "appbase/appevent/app_events.hpp"
#include "appconfig/appconfig.hpp" #include "appconfig/appconfig.hpp"
#include "internationalization.hpp"
// //
namespace iflytop { namespace iflytop {
@ -40,7 +41,12 @@ class AppEventBus : public enable_shared_from_this<AppEventBus> {
} }
void push(shared_ptr<IAppEvent> event); void push(shared_ptr<IAppEvent> event);
void pushWarningPromptEvent(int ecode) { push(make_shared<AppWarningPromoptEvent>(ecode)); }
void pushWarningPromptEvent(int ecode, string description = "") {
if (description.empty()) {
description = Internationalization::ecode2description(ecode);
}
push(make_shared<AppWarningPromoptEvent>(ecode, description));
}
void pushWarningPromptEvent(appexception e) { push(make_shared<AppWarningPromoptEvent>(e)); } void pushWarningPromptEvent(appexception e) { push(make_shared<AppWarningPromoptEvent>(e)); }
void pushPromoptEvent(string info) { push(make_shared<AppPromoptEvent>(info)); } void pushPromoptEvent(string info) { push(make_shared<AppPromoptEvent>(info)); }

9
appsrc/baseservice/front_msg_processer/front_msg_processer.cpp

@ -1,6 +1,7 @@
#include "front_msg_processer.hpp" #include "front_msg_processer.hpp"
#include "iflytop/core/error/error_code.hpp" #include "iflytop/core/error/error_code.hpp"
#include "internationalization.hpp"
using namespace iflytop; using namespace iflytop;
@ -174,11 +175,13 @@ void FrontMsgProcesser::processMsg(shared_ptr<MsgProcessContext> cxt) {
m_msgProcesserMap[key]->fn(cxt); m_msgProcesserMap[key]->fn(cxt);
logger->debug(" call: end"); logger->debug(" call: end");
if (cxt->ackcode != 0) cxt->receipt["ackcode"] = cxt->ackcode; if (cxt->ackcode != 0) cxt->receipt["ackcode"] = cxt->ackcode;
if (int(cxt->receipt["ackcode"]) != 0) cxt->receipt["message"] = fmt::format("{}", ecode2str(cxt->receipt["ackcode"]) + cxt->ackcodeExtMessage);
if (int(cxt->receipt["ackcode"]) != 0) {
cxt->receipt["message"] = Internationalization::ecode2description(int(cxt->receipt["ackcode"]));
}
cxt->receipt["rely"] = cxt->rely; cxt->receipt["rely"] = cxt->rely;
} catch (const appexception& e) { } catch (const appexception& e) {
cxt->receipt["ackcode"] = e.ecode; cxt->receipt["ackcode"] = e.ecode;
cxt->receipt["message"] = fmt::format("{}", ecode2str(cxt->receipt["ackcode"]) + e.description);
cxt->receipt["message"] = e.what();
cxt->receipt["traceinfo"] = fmt::format("{}", e.traceinfo); cxt->receipt["traceinfo"] = fmt::format("{}", e.traceinfo);
logger->error("appexception: {}", e.what()); logger->error("appexception: {}", e.what());
} }
@ -186,7 +189,7 @@ void FrontMsgProcesser::processMsg(shared_ptr<MsgProcessContext> cxt) {
} else { } else {
logger->error("unknown command: {}", key); logger->error("unknown command: {}", key);
cxt->receipt["ackcode"] = err::kappe_cmd_not_support; cxt->receipt["ackcode"] = err::kappe_cmd_not_support;
cxt->receipt["message"] = fmt::format("{}", ecode2str(cxt->receipt["ackcode"]));
cxt->receipt["message"] = Internationalization::ecode2description(err::kappe_cmd_not_support);
} }
logger->debug("processMsg end"); logger->debug("processMsg end");
} }

12
appsrc/baseservice/iflytop_front_end_service/iflytop_front_end_service.cpp

@ -185,36 +185,36 @@ void IflytopFrontEndService::processRxMessage(weak_ptr<WebSocket> webSocket, str
// json parse error // json parse error
logger->error("process rx json failed,exception:{},{}", e.what(), msgtext); logger->error("process rx json failed,exception:{},{}", e.what(), msgtext);
receipt["ackcode"] = err::kappe_parse_json_err; receipt["ackcode"] = err::kappe_parse_json_err;
receipt["message"] = ecode2str(err::kappe_parse_json_err) + "," + e.what();
receipt["message"] = string("pase json fail, ") + e.what();
ws->sendText(receipt.dump(1)); ws->sendText(receipt.dump(1));
} catch (const detail::invalid_iterator& e) { } catch (const detail::invalid_iterator& e) {
// json parse error // json parse error
logger->error("process rx json failed,exception:{},{}", e.what(), msgtext); logger->error("process rx json failed,exception:{},{}", e.what(), msgtext);
receipt["ackcode"] = err::kappe_parse_json_err; receipt["ackcode"] = err::kappe_parse_json_err;
receipt["message"] = ecode2str(err::kappe_parse_json_err) + "," + e.what();
receipt["message"] = string("pase json fail, ") + e.what();
ws->sendText(receipt.dump(1)); ws->sendText(receipt.dump(1));
} catch (const detail::type_error& e) { } catch (const detail::type_error& e) {
// json parse error // json parse error
logger->error("process rx json failed,exception:{},{}", e.what(), msgtext); logger->error("process rx json failed,exception:{},{}", e.what(), msgtext);
receipt["ackcode"] = err::kappe_parse_json_err; receipt["ackcode"] = err::kappe_parse_json_err;
receipt["message"] = ecode2str(err::kappe_parse_json_err) + "," + e.what();
receipt["message"] = string("pase json fail, ") + e.what();
ws->sendText(receipt.dump(1)); ws->sendText(receipt.dump(1));
} catch (const detail::out_of_range& e) { } catch (const detail::out_of_range& e) {
// json parse error // json parse error
logger->error("process rx json failed,exception:{},{}", e.what(), msgtext); logger->error("process rx json failed,exception:{},{}", e.what(), msgtext);
receipt["ackcode"] = err::kappe_parse_json_err; receipt["ackcode"] = err::kappe_parse_json_err;
receipt["message"] = ecode2str(err::kappe_parse_json_err) + "," + e.what();
receipt["message"] = string("pase json fail, ") + e.what();
ws->sendText(receipt.dump(1)); ws->sendText(receipt.dump(1));
} catch (const detail::other_error& e) { } catch (const detail::other_error& e) {
// json parse error // json parse error
logger->error("process rx json failed,exception:{},{}", e.what(), msgtext); logger->error("process rx json failed,exception:{},{}", e.what(), msgtext);
receipt["ackcode"] = err::kappe_parse_json_err; receipt["ackcode"] = err::kappe_parse_json_err;
receipt["message"] = ecode2str(err::kappe_parse_json_err);
receipt["message"] = string("pase json fail, ");
ws->sendText(receipt.dump(1)); ws->sendText(receipt.dump(1));
} catch (const std::exception& e) { } catch (const std::exception& e) {
logger->error("process rx json failed,exception:{},{}", e.what(), msgtext); logger->error("process rx json failed,exception:{},{}", e.what(), msgtext);
receipt["ackcode"] = err::kappe_std_exception; receipt["ackcode"] = err::kappe_std_exception;
receipt["message"] = ecode2str(err::kappe_std_exception) + "," + e.what();
receipt["message"] = string("catch std exception") + "," + e.what();
ws->sendText(receipt.dump(1)); ws->sendText(receipt.dump(1));
} }

175
appsrc/internationalization.cpp

@ -0,0 +1,175 @@
#include "internationalization.hpp"
#include "app_protocols/apperrorcode/apperrorcode.hpp"
using namespace iflytop;
using namespace std;
using namespace transmit_disfection_protocol;
using namespace iflytop::err;
class EcodeInfo {
public:
int code;
string info;
EcodeInfo(int code, const string& info) : code(code), info(info) {}
};
class CmdInfo {
public:
int cmdid;
string info;
CmdInfo(int cmdid, const string& info) : cmdid(cmdid), info(info) {}
};
static EcodeInfo chEcodeInfo[] = {
{kerr_overtime, "通信超时"},
{kerr_invalid_param, "非法参数"},
{kerr_invalid_param_num, "参数数量错误"},
{kerr_subdevice_offline, "485总线设备异常"},
{kerr_function_not_support, "代码错误方法不支持"},
{kerr_subdevice_overtime, "485总线设备通信超时"},
{kerr_motor_reset_error, "电机复位错误"},
{kerr_motor_subdevice_offline, "电机子设备离线"},
{kerr_motor_driver_error, "电机驱动器错误"},
{kerr_motor_undervoltage_error, "电机欠压错误"},
{kerr_motor_unkown_error, "电机未知错误"},
{kerr_motor_overtemperature_flag, "电机过温"},
{kerr_motor_overtemperature_pre_warning_flag, "电机过温预警"},
{kerr_motor_short_to_ground_indicator_phase_A, "电机A相短接"},
{kerr_motor_short_to_ground_indicator_phase_B, "电机B相短接"},
{kerr_motor_open_load_indicator_phase_A, "电机A相过载"},
{kerr_motor_open_load_indicator_phase_B, "电机B相过载"},
{kerr_motor_standstill_indicator, "电机异常停止"},
{kerr_AirBlowerError, "空压机异常"},
{kerr_HeaterError, "加热片异常"},
{kerr_BlowerError, "鼓风机异常"},
{kerr_ProportionalValveError, "气密性测试专用空压机异常"},
{kappe_code_error, "代码错误"},
{kappe_component_cfg_not_find, "组件配置未找到"},
{kappe_cmd_not_support, "命令不支持"},
{kappe_parse_json_err, "解析json错误"},
{kappe_std_exception, "标准库异常"},
{kappe_db_operate_error, "数据库操作错误"},
{kappe_missing_param, "缺少参数"},
{kappe_param_num_err, "参数个数错误"},
{kappe_param_value_err, "参数值错误"},
{kappe_user_not_exist, "用户不存在"},
{kappe_passwd_error, "密码错误"},
{kappe_user_exist, "用户已存在"},
{kappe_disinfectant_insufficient, "消毒液不足"},
{kappe_the_bottom_of_the_device_has_water, "硬件仓内有液体"},
{kappe_the_evaporation_bin_has_water, "蒸发仓内有液体"},
{kappe_the_sensor_is_prehearting, "传感器正在预热"},
{kappe_not_detect_udisk, "未检测到U盘"},
{kappe_udisk_wr_fail, "U盘读写错误"},
{kappe_open_file_error, "文件操作错误"},
{kappe_adding_liquid_is_already_in_place, "液体已加到位"},
{kappe_adding_liquid_is_greater_than_the_maximum_capacity_of_the_device, "加液大于设备最大容量"},
{kappe_sensor_is_pre_hearting, "传感器正在预热"},
{kappe_state_is_busy, "设备忙"},
{kappe_is_adding_liquid, "加液中"},
{kappe_is_draining_liquid, "排液中"},
{kappe_is_disinfecting, "消毒中"},
{kappe_is_air_leak_detect_testing, "气密性测试中"},
{kappe_setting_id_outof_range, "设置ID超出范围"},
{kappe_exception_flag_is_setted, "设备硬件异常"},
{kappe_disinfection_state_is_wrong, "消毒状态错误"},
{kappe_liquid_ctrl_reboot, "液路板复位"},
{kappe_power_control_reboot, "功率板复位"},
{kappe_device_type_not_init, "设备未初始化"},
};
static CmdInfo cmdInfo[] = {
{kfn_read_board_info, "读取子板信息"},
{kfn_force_report, "强制上报"},
{kfn_read_sysinfo, "读取子板系统信息"},
{kfn_read_taskinfo, "读取子板任务信息"},
{kfn_heart_ping, "心跳PING"},
{kfn_clear_reset_flag, "清除复位标志"},
{kfn_enable_report, "启用上报"},
{kfn_reset_board, "复位子板"},
{kreport_heatpacket_pong, "心跳PONG"},
{kreport_exception_error, "异常错误上报"},
{kreport_device_reset, "设备复位上报"},
{kfn_pump_rotate, "泵机控制"},
{kfn_pump_stop, "泵机控制"},
{kfn_pump_set_ihold_irun_idelay, "泵机设置IHOLD参数"},
{kfn_pump_set_acc, "泵机设置加速参数"},
{kfn_pump_ping, "泵机PING"},
{kfn_pump_set_ramp, "泵机设置RAMP"},
{kfn_pump_set_tzw, "泵机设置TZW"},
{kfn_pump_set_subic_reg, "泵机设置子IC寄存器"},
{kfn_pump_get_subic_reg, "泵机获取子IC寄存器"},
{kfn_pump_is_run, "泵机是否在运行"},
{kfn_heater_ctrl, "加热片控制"},
{kfn_heater_ctrl_safe_valve, "加热片安全阀控制"},
{kfn_heater_read_ei, "读取加热片电流"},
{kfn_heater_read_temperature_data, "读取加热片温度数据"},
{kfn_heater_read_ei_adc_raw, "读取加热片电流ADC原始数据"},
{kfn_heater_read_temperature_data_adc_raw, "读取加热片温度数据ADC原始数据"},
{kfn_heater_is_open, "加热片是否开启"},
{kfn_h2o2_sensor_read_calibration_date, "读取H2O2传感器校准日期"},
{kfn_h2o2_sensor_read_sub_ic_errorcode, "读取H2O2传感器子IC错误码"},
{kfn_h2o2_sensor_read_sub_ic_reg, "读取H2O2传感器子IC寄存器"},
{kreport_h2o2_sensor_data, "H2O2传感器数据上报"},
{kfn_triple_warning_light_ctl, "三色警示灯控制"},
{kfn_triple_warning_light_read_state, "三色警示灯读取状态"},
{kfn_evaporation_tank_water_sensor_read_state, "读取蒸发仓水位传感器状态"},
{kfn_device_bottom_water_sensor_read_state, "读取设备底部水位传感器状态"},
{kreport_evaporation_bin_water_sensor, "蒸发仓水位传感器上报"},
{kreport_device_bottom_water_sensor, "设备底部水位传感器上报"},
{kfn_blower_ctrl, "风机控制"},
{kfn_blower_ctrl_safe_valve, "风机安全阀控制"},
{kfn_blower_read_ei, "读取风机电流"},
{kfn_blower_is_error, "读取风机电气异常状态"},
{kfn_blower_read_ei_adc_raw, "读取风机电流ADC原始数据"},
{kfn_blower_is_open, "读取风机是否开启"},
{kfn_air_compressor_ctrl, "空压机控制"},
{kfn_air_compressor_ctrl_safe_valve, "空压机安全阀控制"},
{kfn_air_compressor_read_ei, "读取空压机电流"},
{kfn_air_compressor_read_ei_adc_raw, "读取空压机电流ADC原始数据"},
{kfn_air_compressor_is_open, "读取空压机是否开启"},
{kfn_air_leak_detect_ac_ctrl, "空压机气密性测试控制"},
{kfn_air_leak_detect_ac_is_open, "空压机气密性测试是否开启"},
{kfn_psbus_read_data, "读取PSBUS数据"},
{kfn_psbus_scan, "扫描PSBUS设备"},
{kfn_psbus_start_report, "开始PSBUS设备上报"},
{kfn_psbus_stop_report, "停止PSBUS设备上报"},
{kreport_pressure_data, "压力数据上报"},
{kfn_proportional_set_valve, "设置比例阀"},
{kfn_proportional_read_pos, "读取比例阀位置"},
{kfn_proportional_is_busy, "比例阀是否忙碌"},
{kfn_air_leak_test_set_mode, "设置气密性测试模式"},
{kfn_air_leak_test_get_mode, "读取气密性测试模式"},
{kfn_ext_ch_selector_set_ch, "设置外部通道选择器通道"},
{kfn_ext_ch_selector_get_ch, "获取外部通道选择器通道"},
{kfn_set_add_fluid_channel_selector_valve, "设置加液通道选择阀"},
{kfn_disinfectant_bucket_level_sensor_read_level, "读取消毒液桶液位传感器"},
};
string Internationalization::ecode2description(int ecode) {
for (const auto& e : chEcodeInfo) {
if (e.code == ecode) {
return fmt::format("{}({})", e.info, e.code);
}
}
return fmt::format("错误码{}", ecode);
}
string Internationalization::cmdid2str(int cmdid) {
for (const auto& c : cmdInfo) {
if (c.cmdid == cmdid) {
return fmt::format("{}({})", c.info, c.cmdid);
}
}
return fmt::format("命令ID{}", cmdid);
}
string Internationalization::ecode2description(int ecode, int32_t toboard, int32_t cmdid, uint8_t* param, int32_t paramLen) { //
if (cmdid == kfn_proportional_set_valve) {
int32_t subid = ((int32_t*)param)[0];
return fmt::format("{},设置比例阀{}异常", ecode, subid);
}
return fmt::format("{},执行{}错误", ecode, cmdid2str(cmdid));
}

24
appsrc/internationalization.hpp

@ -0,0 +1,24 @@
#pragma once
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include "app_protocols/transmit_disfection_protocol/transmit_disfection_protocol.hpp"
#include "iflytop/core/spdlogfactory/logger_factory.hpp"
namespace iflytop {
using namespace std;
class Internationalization {
public:
static string cmdid2str(int cmdid);
static string ecode2description(int ecode);
static string ecode2description(int ecode, int32_t toboard, int32_t cmdid, uint8_t* param, int32_t paramLen);
};
} // namespace iflytop

2
appsrc/service/app/add_liquid_service.cpp

@ -133,7 +133,7 @@ void AddLiquidService::addLiquidWork(int stopatg, bool& errorflag) {
if (m_dics->WaterSensor_readDeviceBottom()) { if (m_dics->WaterSensor_readDeviceBottom()) {
logger->error("the bottom of the device has water"); logger->error("the bottom of the device has water");
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_the_bottom_of_the_device_has_water));
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_the_bottom_of_the_device_has_water);
errorflag = true; errorflag = true;
m_dics->AddLiquidPump_stop(); m_dics->AddLiquidPump_stop();
return; return;

2
appsrc/service/app/disinfection_ctrl/disinfection_ctrl_service.cpp

@ -332,7 +332,7 @@ void DisinfectionCtrlService::pushSnapshot(shared_ptr<DisinfectionStateSnapshot>
logger->info(tracecontent); logger->info(tracecontent);
AppEventBus::ins()->push(make_shared<AppDisinfectionSnapshotEvent>(ss)); AppEventBus::ins()->push(make_shared<AppDisinfectionSnapshotEvent>(ss));
if (ss->ecode != 0) { if (ss->ecode != 0) {
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(ss->ecode));
AppEventBus::ins()->pushWarningPromptEvent(ss->ecode);
} }
} }

2
appsrc/service/app/drain_liquid_service.cpp

@ -133,7 +133,7 @@ void DrainLiquidService::workThread() {
} }
if (m_dics->WaterSensor_readDeviceBottom()) { if (m_dics->WaterSensor_readDeviceBottom()) {
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_the_bottom_of_the_device_has_water));
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_the_bottom_of_the_device_has_water,"");
break; break;
} }

63
appsrc/service/app_core.cpp

@ -45,68 +45,7 @@ void AppCore::dosystem(string order, bool dump) {
} }
static void installEcodeInfo() { static void installEcodeInfo() {
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_overtime, "通信超时");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_invalid_param, "非法参数");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_invalid_param_num, "参数数量错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_subdevice_offline, "485总线设备异常");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_function_not_support, "代码错误方法不支持");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_subdevice_overtime, "485总线设备通信超时");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_reset_error, "电机复位错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_subdevice_offline, "电机子设备离线");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_driver_error, "电机驱动器错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_undervoltage_error, "电机欠压错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_unkown_error, "电机未知错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_overtemperature_flag, "电机过温");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_overtemperature_pre_warning_flag, "电机过温预警");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_short_to_ground_indicator_phase_A, "电机A相短接");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_short_to_ground_indicator_phase_B, "电机B相短接");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_open_load_indicator_phase_A, "电机A相过载");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_open_load_indicator_phase_B, "电机B相过载");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_motor_standstill_indicator, "电机异常停止");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_AirBlowerError, "空压机异常");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_HeaterError, "加热片异常");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_BlowerError, "鼓风机异常");
AppEcodeInfoMgr::ins().regEcodeInfo(kerr_ProportionalValveError, "气密性测试专用空压机异常");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_code_error, "代码错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_component_cfg_not_find, "组件配置未找到");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_cmd_not_support, "命令不支持");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_parse_json_err, "解析json错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_std_exception, "标准库异常");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_db_operate_error, "数据库操作错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_missing_param, "缺少参数");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_param_num_err, "参数个数错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_param_value_err, "参数值错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_user_not_exist, "用户不存在");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_passwd_error, "密码错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_user_exist, "用户已存在");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_disinfectant_insufficient, "消毒液不足");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_the_bottom_of_the_device_has_water, "硬件仓内有液体");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_the_evaporation_bin_has_water, "蒸发仓内有液体");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_the_sensor_is_prehearting, "传感器正在预热");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_not_detect_udisk, "未检测到U盘");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_udisk_wr_fail, "U盘读写错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_open_file_error, "文件操作错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_adding_liquid_is_already_in_place, "液体已加到位");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_adding_liquid_is_greater_than_the_maximum_capacity_of_the_device, "加液大于设备最大容量");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_sensor_is_pre_hearting, "传感器正在预热");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_state_is_busy, "设备忙");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_is_adding_liquid, "加液中");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_is_draining_liquid, "排液中");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_is_disinfecting, "消毒中");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_is_air_leak_detect_testing, "气密性测试中");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_setting_id_outof_range, "设置ID超出范围");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_exception_flag_is_setted, "设备硬件异常");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_disinfection_state_is_wrong, "消毒状态错误");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_liquid_ctrl_reboot, "液路板复位");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_power_control_reboot, "功率板复位");
AppEcodeInfoMgr::ins().regEcodeInfo(kappe_device_type_not_init, "设备未初始化");
} }
void AppCore::initialize() { void AppCore::initialize() {

177
appsrc/service/debug_page_test_service.cpp

@ -6,178 +6,83 @@ void DebugPageTestService::initialize() {
REG_CLASS("代码调试"); REG_CLASS("代码调试");
REG_EXTFN_VOID(enterTestMode, void(void)); REG_EXTFN_VOID(enterTestMode, void(void));
REG_EXTFN_DISPNAME(enterTestMode, "进入测试模式(不控制硬件)");
REG_EXTFN_VOID(exitTestMode, void(void)); REG_EXTFN_VOID(exitTestMode, void(void));
REG_EXTFN_DISPNAME(exitTestMode, "退出测试模式");
REG_EXTFN_VOID(startGenFakeH2O2Data, void(void));
REG_EXTFN_DISPNAME(startGenFakeH2O2Data, "开始生成H2O2数据");
REG_EXTFN(setInteralFakeSensorData, void(int32_t, int32_t, int32_t), ho2o, rs, rh);
REG_EXTFN_DISPNAME(setInteralFakeSensorData, "设置内部传感器数据");
REG_EXTFN(setExtWiredFakeSensor1Data, void(int32_t, int32_t, int32_t), ho2o, rs, rh);
REG_EXTFN_DISPNAME(setExtWiredFakeSensor1Data, "设置<外部>有线传感器[1]数据");
REG_EXTFN(setExtWiredFakeSensor2Data, void(int32_t, int32_t, int32_t), ho2o, rs, rh);
REG_EXTFN_DISPNAME(setExtWiredFakeSensor2Data, "设置<外部>有线传感器[2]数据");
REG_EXTFN_VOID(startGenFakeHighH2O2Data, void(void));
REG_EXTFN_DISPNAME(startGenFakeHighH2O2Data, "开始生成高H2O2数据");
REG_EXTFN_VOID(startGenFakeZeroH2O2Data, void(void));
REG_EXTFN_DISPNAME(startGenFakeZeroH2O2Data, "开始生成零H2O2数据");
REG_EXTFN_VOID(stopGenFakeH2O2Data, void(void)); REG_EXTFN_VOID(stopGenFakeH2O2Data, void(void));
REG_EXTFN_DISPNAME(stopGenFakeH2O2Data, "停止生成H2O2数据"); REG_EXTFN_DISPNAME(stopGenFakeH2O2Data, "停止生成H2O2数据");
REG_EXTFN_VOID(triggerAppWarningPromoptEvent, void(void)); REG_EXTFN_VOID(triggerAppWarningPromoptEvent, void(void));
REG_EXTFN_DISPNAME(triggerAppWarningPromoptEvent, "触发警告弹窗");
REG_EXTFN(triggerPromptEvent, void(string), message); REG_EXTFN(triggerPromptEvent, void(string), message);
// REG_EXTFN(test_int, int(json), param0);
// REG_EXTFN(test_int, int(SettingId), param0);
// REG_EXTFN(test_int, int(int), param0);
// REG_EXTFN(test_string, void(string), param0);
// REG_EXTFN(test_float, void(float), param0);
// REG_EXTFN(test_double, void(double), param0);
// REG_EXTFN(test_bool, void(bool), param0);
// REG_EXTFN(test_vector_int, void(vector<int>), param0);
// REG_EXTFN(test_vector_string, void(vector<string>), param0);
// REG_EXTFN(test_vector_double, void(vector<double>), param0);
// REG_EXTFN(test_vecto_json, void(vector<json>), param0);
// REG_EXTFN(test_vecto_bool, void(vector<bool>), param0);
// REG_EXTFN(test_vecto_enum, void(vector<SettingId>), param0);
REG_EXTFN_DISPNAME(triggerPromptEvent, "触发消息通知弹窗");
} }
void DebugPageTestService::test_json(shared_ptr<MsgProcessContext> cxt, json param0) {}
void DebugPageTestService::test_enum(shared_ptr<MsgProcessContext> cxt, SettingId param0) {}
void DebugPageTestService::test_int(shared_ptr<MsgProcessContext> cxt, int param0) {}
void DebugPageTestService::test_string(shared_ptr<MsgProcessContext> cxt, string param0) {}
void DebugPageTestService::test_float(shared_ptr<MsgProcessContext> cxt, float param0) {}
void DebugPageTestService::test_double(shared_ptr<MsgProcessContext> cxt, double param0) {}
void DebugPageTestService::test_bool(shared_ptr<MsgProcessContext> cxt, bool param0) {}
void DebugPageTestService::test_vector_int(shared_ptr<MsgProcessContext> cxt, vector<int> param0) {}
void DebugPageTestService::test_vector_string(shared_ptr<MsgProcessContext> cxt, vector<string> param0) {}
void DebugPageTestService::test_vector_double(shared_ptr<MsgProcessContext> cxt, vector<double> param0) {}
void DebugPageTestService::test_vecto_json(shared_ptr<MsgProcessContext> cxt, vector<json> param0) {}
void DebugPageTestService::test_vecto_bool(shared_ptr<MsgProcessContext> cxt, vector<bool> param0) {}
void DebugPageTestService::test_vecto_enum(shared_ptr<MsgProcessContext> cxt, vector<SettingId> param0) {}
// //
void DebugPageTestService::enterTestMode(shared_ptr<MsgProcessContext> cxt) { DS->setTestMode(true); } void DebugPageTestService::enterTestMode(shared_ptr<MsgProcessContext> cxt) { DS->setTestMode(true); }
void DebugPageTestService::exitTestMode(shared_ptr<MsgProcessContext> cxt) { DS->setTestMode(false); } void DebugPageTestService::exitTestMode(shared_ptr<MsgProcessContext> cxt) { DS->setTestMode(false); }
typedef struct {
float h2o2[3];
float rh[3];
float temp[3];
float rs[3];
bool random[3];
bool enable[3];
} fake_h2o2_data_cache_t;
#if 0
#endif
void DebugPageTestService::startGenFakeZeroH2O2Data(shared_ptr<MsgProcessContext> cxt) {
void DebugPageTestService::startGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt) {
if (m_genFakeH2O2DataThread) { if (m_genFakeH2O2DataThread) {
m_genFakeH2O2DataThread->join(); m_genFakeH2O2DataThread->join();
m_genFakeH2O2DataThread = nullptr; m_genFakeH2O2DataThread = nullptr;
} }
m_genFakeH2O2DataThread.reset(new Thread("genFakeH2O2DataThread", [this]() { m_genFakeH2O2DataThread.reset(new Thread("genFakeH2O2DataThread", [this]() {
memset(&reportData, 0, sizeof(reportData));
while (!ThisThread().getExitFlag()) { while (!ThisThread().getExitFlag()) {
ThisThread().sleepForMs(1000); ThisThread().sleepForMs(1000);
report_h2o2_data_t reportData;
reportData.rh = 50 * 10;
reportData.h2o2 = 0;
reportData.temp = 25 * 10; // 温度是整数,乘以10
reportData.rs = 50 * 10; // rs is in %RS, convert to float
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::Internal, 1, &reportData);
if (online[0]) {
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::Internal, 1, &reportData[0]);
} else if (online[1]) {
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::WiredExtSensor, 1, &reportData[1]);
} else if (online[2]) {
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::WiredExtSensor, 2, &reportData[2]);
}
} }
})); }));
} }
void DebugPageTestService::startGenFakeHighH2O2Data(shared_ptr<MsgProcessContext> cxt) {
void DebugPageTestService::stopGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt) {
if (m_genFakeH2O2DataThread) { if (m_genFakeH2O2DataThread) {
m_genFakeH2O2DataThread->join(); m_genFakeH2O2DataThread->join();
m_genFakeH2O2DataThread = nullptr; m_genFakeH2O2DataThread = nullptr;
} }
m_genFakeH2O2DataThread.reset(new Thread("genFakeH2O2DataThread", [this]() {
while (!ThisThread().getExitFlag()) {
ThisThread().sleepForMs(1000);
report_h2o2_data_t reportData;
reportData.rh = 50 * 10;
reportData.h2o2 = 400;
reportData.temp = 25 * 10; // 温度是整数,乘以10
reportData.rs = 50 * 10; // rs is in %RS, convert to float
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::Internal, 1, &reportData);
}
}));
} }
void DebugPageTestService::startGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt, json data) {
if (m_genFakeH2O2DataThread) {
m_genFakeH2O2DataThread->join();
m_genFakeH2O2DataThread = nullptr;
}
fake_h2o2_data_cache_t cache;
for (size_t i = 0; i < 3; i++) {
cache.h2o2[i] = data[i]["h2o2"];
cache.rh[i] = data[i]["rh"];
cache.temp[i] = data[i]["temp"];
cache.rs[i] = data[i]["rs"];
cache.random[i] = data[i]["random"];
cache.enable[i] = data[i]["enable"];
}
m_genFakeH2O2DataThread.reset(new Thread("genFakeH2O2DataThread", [this, cache]() {
while (!ThisThread().getExitFlag()) {
ThisThread().sleepForMs(1000);
for (size_t i = 0; i < 3; i++) {
if (cache.enable[i]) {
float h2o2 = cache.random[i] ? (rand() % 100) : cache.h2o2[i];
float rh = cache.random[i] ? (rand() % 100) : cache.rh[i];
float temp = cache.random[i] ? (rand() % 100) : cache.temp[i];
float rs = cache.random[i] ? (rand() % 100) : cache.rs[i];
logger->debug("genFakeH2O2DataThread: h2o2={}, rh={}, temp={}, rs={}", h2o2, rh, temp, rs);
report_h2o2_data_t reportData;
reportData.rh = rh * 10;
reportData.h2o2 = h2o2;
reportData.temp = temp * 10; // 温度是整数,乘以10
reportData.rs = rs * 10; // rs is in %RS, convert to float
if (i == 0) {
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::Internal, 1, &reportData);
} else if (i == 1) {
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::WiredExtSensor, 1, &reportData);
} else if (i == 2) {
h2o2SensorStateSyncService->updateH2o2SensorData(H2O2SensorType::WiredExtSensor, 2, &reportData);
}
}
}
}
}));
void DebugPageTestService::setExtWiredFakeSensor1Data(shared_ptr<MsgProcessContext> cxt, int32_t ho2o, int32_t rs, int32_t rh) {
reportData[1].h2o2 = ho2o;
reportData[1].rs = rs;
reportData[1].rh = rh;
online[1] = true;
} }
void DebugPageTestService::stopGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt) {
if (m_genFakeH2O2DataThread) {
m_genFakeH2O2DataThread->join();
m_genFakeH2O2DataThread = nullptr;
}
void DebugPageTestService::setExtWiredFakeSensor2Data(shared_ptr<MsgProcessContext> cxt, int32_t ho2o, int32_t rs, int32_t rh) {
reportData[2].h2o2 = ho2o;
reportData[2].rs = rs;
reportData[2].rh = rh;
online[2] = true;
} }
void DebugPageTestService::getGenFakeH2O2DataDemoJson(shared_ptr<MsgProcessContext> cxt) {
json ret;
ret["messageType"] = "Command";
ret["fnName"] = "startGenFakeH2O2Data";
ret["className"] = "DebugPageTestService";
ret["messageId"] = "123";
ret["timeStamp"] = 123;
ret["params"]["data"] = json::array();
for (size_t i = 0; i < 3; i++) {
json item;
item["h2o2"] = 0;
item["rh"] = 0;
item["temp"] = 0;
item["rs"] = 0;
item["random"] = true;
item["enable"] = true;
ret["params"]["data"].push_back(item);
}
cxt->rely = ret;
void DebugPageTestService::setInteralFakeSensorData(shared_ptr<MsgProcessContext> cxt, int32_t ho2o, int32_t rs, int32_t rh) {
reportData[0].h2o2 = ho2o;
reportData[0].rs = rs;
reportData[0].rh = rh;
online[0] = true;
} }
void DebugPageTestService::triggerAppWarningPromoptEvent(shared_ptr<MsgProcessContext> cxt) { // void DebugPageTestService::triggerAppWarningPromoptEvent(shared_ptr<MsgProcessContext> cxt) { //
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_disinfectant_insufficient);
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_disinfectant_insufficient,"");
} }
void DebugPageTestService::triggerPromptEvent(shared_ptr<MsgProcessContext> cxt, string message) { // void DebugPageTestService::triggerPromptEvent(shared_ptr<MsgProcessContext> cxt, string message) { //
AppEventBus::ins()->pushPromoptEvent(message); AppEventBus::ins()->pushPromoptEvent(message);

25
appsrc/service/debug_page_test_service.hpp

@ -17,6 +17,9 @@ class DebugPageTestService : public enable_shared_from_this<DebugPageTestService
unique_ptr<Thread> m_genFakeH2O2DataThread; unique_ptr<Thread> m_genFakeH2O2DataThread;
SERVICE(H2O2SensorStateSyncService, h2o2SensorStateSyncService); SERVICE(H2O2SensorStateSyncService, h2o2SensorStateSyncService);
report_h2o2_data_t reportData[3] = {0};
bool online[3] = {true, false, false};
public: public:
void initialize(); void initialize();
@ -27,26 +30,12 @@ class DebugPageTestService : public enable_shared_from_this<DebugPageTestService
void enterTestMode(shared_ptr<MsgProcessContext> cxt); void enterTestMode(shared_ptr<MsgProcessContext> cxt);
void exitTestMode(shared_ptr<MsgProcessContext> cxt); void exitTestMode(shared_ptr<MsgProcessContext> cxt);
void startGenFakeZeroH2O2Data(shared_ptr<MsgProcessContext> cxt);
void startGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt, json data);
void startGenFakeHighH2O2Data(shared_ptr<MsgProcessContext> cxt);
void startGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt);
void stopGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt); void stopGenFakeH2O2Data(shared_ptr<MsgProcessContext> cxt);
void getGenFakeH2O2DataDemoJson(shared_ptr<MsgProcessContext> cxt);
void test_json(shared_ptr<MsgProcessContext> cxt, json param0);
void test_enum(shared_ptr<MsgProcessContext> cxt, SettingId param0);
void test_int(shared_ptr<MsgProcessContext> cxt, int param0);
void test_string(shared_ptr<MsgProcessContext> cxt, string param0);
void test_float(shared_ptr<MsgProcessContext> cxt, float param0);
void test_double(shared_ptr<MsgProcessContext> cxt, double param0);
void test_bool(shared_ptr<MsgProcessContext> cxt, bool param0);
void test_vector_int(shared_ptr<MsgProcessContext> cxt, vector<int> param0);
void test_vector_string(shared_ptr<MsgProcessContext> cxt, vector<string> param0);
void test_vector_double(shared_ptr<MsgProcessContext> cxt, vector<double> param0);
void test_vecto_json(shared_ptr<MsgProcessContext> cxt, vector<json> param0);
void test_vecto_bool(shared_ptr<MsgProcessContext> cxt, vector<bool> param0);
void test_vecto_enum(shared_ptr<MsgProcessContext> cxt, vector<SettingId> param0);
void setInteralFakeSensorData(shared_ptr<MsgProcessContext> cxt, int32_t ho2o, int32_t rs, int32_t rh);
void setExtWiredFakeSensor1Data(shared_ptr<MsgProcessContext> cxt,int32_t ho2o, int32_t rs, int32_t rh);
void setExtWiredFakeSensor2Data(shared_ptr<MsgProcessContext> cxt,int32_t ho2o, int32_t rs, int32_t rh);
}; };
} // namespace iflytop } // namespace iflytop

4
appsrc/service/device_monitor_service.cpp

@ -30,7 +30,7 @@ void DeviceMonitorService::initialize() { //
logger->error("Evaporation bin water sensor triggered"); logger->error("Evaporation bin water sensor triggered");
triggerError = true; triggerError = true;
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_the_evaporation_bin_has_water));
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_the_evaporation_bin_has_water);
} }
} else { } else {
bool trigger = false; bool trigger = false;
@ -60,7 +60,7 @@ void DeviceMonitorService::initialize() { //
logger->error("Device bottom water sensor triggered"); logger->error("Device bottom water sensor triggered");
triggerError = true; triggerError = true;
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_the_bottom_of_the_device_has_water));
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_the_bottom_of_the_device_has_water);
} }
} else { } else {
bool trigger = false; bool trigger = false;

5
appsrc/service/disinfection_logs_service.cpp

@ -18,6 +18,7 @@
#include "appbase/utils/zsimplepdf.hpp" #include "appbase/utils/zsimplepdf.hpp"
#include "appdep/components/ziconv.hpp" #include "appdep/components/ziconv.hpp"
#include "utils/app_timeid_generator.hpp" #include "utils/app_timeid_generator.hpp"
#include "internationalization.hpp"
using namespace std; using namespace std;
using namespace iflytop; using namespace iflytop;
typedef DisinfectionRecordCSVHeader CSVHeader; typedef DisinfectionRecordCSVHeader CSVHeader;
@ -274,7 +275,7 @@ void DisinfectionLogsService::dumpDisinfectionRecord(string sessionId, list<shar
csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::time), /******************/ tu_sys::fmt(s->time, "%Y-%m-%d %H:%M:%S")); csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::time), /******************/ tu_sys::fmt(s->time, "%Y-%m-%d %H:%M:%S"));
if (s->ecode != 0) { if (s->ecode != 0) {
csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::state), /*****************/ "错误:" + ecode2str(s->ecode));
csv.addValue(lineNum, m_csvHeaderDict.getChName(CSVHeader::state), /*****************/ "错误:" + Internationalization::ecode2description(s->ecode));
lineNum++; lineNum++;
continue; continue;
} }
@ -373,7 +374,7 @@ void DisinfectionLogsService::dumpDisinfectionToPrinterLog(string sessionId, lis
if (snapshot->ecode != 0) { if (snapshot->ecode != 0) {
content += fmt::format("{}\n", AppTimeIdGenerator::format_zsystem_tp(snapshot->time)); content += fmt::format("{}\n", AppTimeIdGenerator::format_zsystem_tp(snapshot->time));
content += fmt::format("错误: {}\n", ecode2str(snapshot->ecode));
content += fmt::format("错误: {}\n", Internationalization::ecode2description(snapshot->ecode));
continue; continue;
} }

12
appsrc/service/hardware/device_io_ctrl_service.cpp

@ -1,4 +1,6 @@
#include "device_io_ctrl_service.hpp" #include "device_io_ctrl_service.hpp"
#include "internationalization.hpp"
using namespace iflytop; using namespace iflytop;
using namespace std; using namespace std;
using namespace core; using namespace core;
@ -42,7 +44,7 @@ static bool isInTestMode() {
void DeviceIoControlService::initialize() { void DeviceIoControlService::initialize() {
REG_CLASS("底层设备控制(Debug)"); REG_CLASS("底层设备控制(Debug)");
REG_FN_VOID(AddLiquidPump_addLiquid, void(void)); REG_FN_VOID(AddLiquidPump_addLiquid, void(void));
REG_FN(AddLiquidPump_run, void(int), rpm); REG_FN(AddLiquidPump_run, void(int), rpm);
REG_FN_VOID(AddLiquidPump_drainLiquid, void(void)); REG_FN_VOID(AddLiquidPump_drainLiquid, void(void));
@ -174,8 +176,8 @@ int DeviceIoControlService::processReportMsg(uint8_t from, uint8_t *hex, uint32_
processHeartReportMsg(from, ack); processHeartReportMsg(from, ack);
} else if (packet->fnid == kreport_exception_error) { } else if (packet->fnid == kreport_exception_error) {
report_exeception_data_t *ack = (report_exeception_data_t *)packet->params; report_exeception_data_t *ack = (report_exeception_data_t *)packet->params;
logger->error(" REPORT [Exception][FROM:{}] subid:{:x} ecode:{}", from, ack->subid, ecode2str(ack->ecode));
AppEventBus::ins()->pushWarningPromptEvent(ack->ecode);
logger->error(" REPORT [Exception][FROM:{}] subid:{:x} ecode:{}", from, ack->subid, Internationalization::ecode2description(ack->ecode));
AppEventBus::ins()->pushWarningPromptEvent(ack->ecode,"");
} else if (packet->fnid == kreport_pressure_data) { } else if (packet->fnid == kreport_pressure_data) {
report_pressure_data_t *ack = (report_pressure_data_t *)packet->params; report_pressure_data_t *ack = (report_pressure_data_t *)packet->params;
string info; string info;
@ -196,10 +198,10 @@ int DeviceIoControlService::processReportMsg(uint8_t from, uint8_t *hex, uint32_
logger->warn(" REPORT [DeviceReset][FROM:{}] reason:{}", from, packet->params[0]); logger->warn(" REPORT [DeviceReset][FROM:{}] reason:{}", from, packet->params[0]);
if (FIXBOARDID_LC_BOARD == from) { if (FIXBOARDID_LC_BOARD == from) {
logger->error("Detected board:{} is rebooting, push warning prompt.", from); logger->error("Detected board:{} is rebooting, push warning prompt.", from);
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_liquid_ctrl_reboot));
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_liquid_ctrl_reboot);
} else if (FIXBOARDID_PC_BOARD == from) { } else if (FIXBOARDID_PC_BOARD == from) {
logger->error("Detected board:{} is rebooting, push warning prompt.", from); logger->error("Detected board:{} is rebooting, push warning prompt.", from);
AppEventBus::ins()->push(make_shared<AppWarningPromoptEvent>(err::kappe_power_control_reboot));
AppEventBus::ins()->pushWarningPromptEvent(err::kappe_power_control_reboot);
} }
} else { } else {

Loading…
Cancel
Save