You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
4.3 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "disinfection_ctl_service.hpp"
  2. using namespace iflytop;
  3. using namespace std;
  4. DisinfectionCtrlService::DisinfectionCtrlService() {}
  5. string DisinfectionCtrlService::createDisinfectionID() {
  6. struct tm tm = {0};
  7. time_t t = time(nullptr);
  8. if (t == -1) {
  9. logger->error("time(nullptr) failed");
  10. exit(-1);
  11. }
  12. struct tm* tmp = localtime_r(&t, &tm);
  13. if (!tmp) {
  14. logger->error("localtime_r failed");
  15. exit(-1);
  16. }
  17. // tm = *utctime::tm_increment_hour(&tm, 8);
  18. // logger->info("trace sendmsg_startCapture {}:{}", __FILE__, __LINE__);
  19. return fmt::format("{:0>4}-{:0>2}{:0>2}-{:0>2}{:0>2}{:0>2}", tm.tm_year + 1900, //
  20. tm.tm_mon + 1, //
  21. tm.tm_mday, //
  22. tm.tm_hour, //
  23. tm.tm_min, tm.tm_sec);
  24. }
  25. void DisinfectionCtrlService::initialize() { GET_TO_SERVICE(m_zcanHost); }
  26. void DisinfectionCtrlService::startDisinfection(int loglevel, float roomVol) {
  27. lock_guard<recursive_mutex> lock(lock_);
  28. if (m_disinfectionThread) {
  29. stopDisinfection();
  30. }
  31. m_disinfectionID = createDisinfectionID();
  32. m_remaintime = 20 * 60;
  33. m_isDisinfectionRunning = true;
  34. logger->info("startDisinfection {} {} {}", loglevel, roomVol, m_disinfectionID);
  35. m_drainingWorkState = 1;
  36. m_zcanHost->writeio(0, 1);
  37. m_zcanHost->writeio(1, 1);
  38. sleep(1);
  39. m_zcanHost->writeio(2, 1);
  40. m_zcanHost->writeio(3, 1);
  41. sleep(1);
  42. m_zcanHost->writeio(4, 1);
  43. m_zcanHost->writeio(5, 1);
  44. sleep(1);
  45. m_zcanHost->pumpctrl_c1004(2, 300, 1000);
  46. m_disinfectionThread.reset(new Thread("m_disinfectionThread", [this, loglevel]() {
  47. // do something
  48. // m_disinfectionThread->detach();
  49. ThisThread thisThread;
  50. // 发送开始拍照消息
  51. logger->info("start disinfection {}", m_disinfectionID);
  52. while (!thisThread.getExitFlag()) {
  53. m_remaintime--;
  54. if (m_remaintime == 0) {
  55. logger->info("disinfection finished {}", m_disinfectionID);
  56. break;
  57. }
  58. logger->info("disinfection running {} {}s", m_disinfectionID, m_remaintime);
  59. thisThread.sleepForMs(1000);
  60. }
  61. { m_isDisinfectionRunning = false; }
  62. }));
  63. }
  64. int DisinfectionCtrlService::getDisinfectionWorkState() { return m_disinfectionWorkState; }
  65. int DisinfectionCtrlService::getReplenishingFluidsWorkState() { return m_replenishingFluidsWorkState; }
  66. int DisinfectionCtrlService::getDrainingWorkState() { return m_drainingWorkState; }
  67. void DisinfectionCtrlService::pauseDisinfection() { m_drainingWorkState = 2; }
  68. void DisinfectionCtrlService::continueDisinfection() { m_drainingWorkState = 1; }
  69. void DisinfectionCtrlService::stopDisinfection() {
  70. lock_guard<recursive_mutex> lock(lock_);
  71. if (m_disinfectionThread) {
  72. m_disinfectionThread->join();
  73. m_disinfectionThread = nullptr;
  74. }
  75. m_remaintime = 0;
  76. logger->info("stop disinfection {}", m_disinfectionID);
  77. m_zcanHost->writeio(0, 0);
  78. m_zcanHost->writeio(1, 0);
  79. sleep(1);
  80. m_zcanHost->writeio(2, 0);
  81. m_zcanHost->writeio(3, 0);
  82. sleep(1);
  83. m_zcanHost->writeio(4, 0);
  84. m_zcanHost->writeio(5, 0);
  85. sleep(1);
  86. m_zcanHost->pumpctrl_c1004(2, 300, 0);
  87. m_drainingWorkState = 0;
  88. }
  89. bool DisinfectionCtrlService::isDisinfectionRunning() {
  90. lock_guard<recursive_mutex> lock(lock_);
  91. return m_isDisinfectionRunning;
  92. }
  93. int32_t DisinfectionCtrlService::getEstimatedRemainingTimeS() {
  94. lock_guard<recursive_mutex> lock(lock_);
  95. return m_remaintime;
  96. }
  97. string DisinfectionCtrlService::getDisinfectionID() {
  98. lock_guard<recursive_mutex> lock(lock_);
  99. return m_disinfectionID;
  100. }
  101. void DisinfectionCtrlService::startReplenishingFluids() {
  102. logger->info("startReplenishingFluids");
  103. m_zcanHost->pumpctrl_c1004(1, 300, 1000);
  104. m_replenishingFluidsWorkState = 1;
  105. }
  106. void DisinfectionCtrlService::stopReplenishingFluids() {
  107. logger->info("stopReplenishingFluids");
  108. m_zcanHost->pumpctrl_c1004(1, 300, 0);
  109. m_replenishingFluidsWorkState = 0;
  110. }
  111. void DisinfectionCtrlService::startDraining() {
  112. logger->info("startDraining");
  113. m_zcanHost->pumpctrl_c1004(1, 300, -1000);
  114. m_replenishingFluidsWorkState = 1;
  115. }
  116. void DisinfectionCtrlService::stopDraining() {
  117. logger->info("stopDraining");
  118. m_zcanHost->pumpctrl_c1004(1, 300, 0);
  119. m_replenishingFluidsWorkState = 0;
  120. }