5 changed files with 164 additions and 1 deletions
-
4appsrc/service/app/drain_liquid_service.cpp
-
2appsrc/service/hardware/device_ctrl_service.cpp
-
89appsrc/service/hardware/warning_light_controler.cpp
-
68appsrc/service/hardware/warning_light_controler.hpp
-
2appsrc/service/main_control_service.cpp
@ -0,0 +1,89 @@ |
|||||
|
#include "warning_light_controler.hpp"
|
||||
|
|
||||
|
using namespace iflytop; |
||||
|
using namespace std; |
||||
|
|
||||
|
void WarningLightControler::workThread() { |
||||
|
ThisThread thisThread; |
||||
|
|
||||
|
int cnt = 0; |
||||
|
while (!thisThread.getExitFlag()) { |
||||
|
thisThread.sleepForMs(100); |
||||
|
|
||||
|
lightState_t nexState = inferTheCurrentLightingState(); |
||||
|
if (m_nowState != nexState) { |
||||
|
changeLightState(nexState); |
||||
|
} |
||||
|
cnt++; |
||||
|
// 1s调用一次
|
||||
|
if (cnt % 10 == 0) { |
||||
|
beepCtrl(m_nowState); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void WarningLightControler::initialize() { |
||||
|
GET_TO_SERVICE(dcs); |
||||
|
m_thread.reset(new Thread("LightCtrlServiceThread", std::bind(&WarningLightControler::workThread, this))); |
||||
|
} |
||||
|
|
||||
|
void WarningLightControler::beepCtrl(lightState_t state) { |
||||
|
switch (state) { |
||||
|
case kstate_warning: |
||||
|
m_beepState = !m_beepState; |
||||
|
dcs->WarningLight_setState(255, 0, 0, m_beepState ? 255 : 0); |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void WarningLightControler::changeLightState(lightState_t state) { |
||||
|
m_nowState = state; |
||||
|
|
||||
|
switch (m_nowState) { |
||||
|
case kstate_idle: |
||||
|
// 绿色
|
||||
|
dcs->WarningLight_setState(0, 255, 0, 0); |
||||
|
break; |
||||
|
case kstate_work: |
||||
|
// 黄色
|
||||
|
dcs->WarningLight_setState(0, 0, 255, 0); |
||||
|
break; |
||||
|
case kstate_warning: |
||||
|
// 红色
|
||||
|
dcs->WarningLight_setState(255, 0, 0, 0); |
||||
|
break; |
||||
|
default: |
||||
|
break; |
||||
|
} |
||||
|
|
||||
|
// #if (defined PROJECT_TYPE_PIPE_DISINFECTION)
|
||||
|
// switch (m_nowState) {
|
||||
|
// case kstate_idle:
|
||||
|
// // 绿色
|
||||
|
// m_deviceIoControlService->warningLightCtrl(0, 255, 0, 0);
|
||||
|
// break;
|
||||
|
// case kstate_work:
|
||||
|
// // 黄色
|
||||
|
// m_deviceIoControlService->warningLightCtrl(255, 255, 0, 0);
|
||||
|
// break;
|
||||
|
// case kstate_warning:
|
||||
|
// // 红色
|
||||
|
// m_deviceIoControlService->warningLightCtrl(255, 0, 0, 0);
|
||||
|
// break;
|
||||
|
// default:
|
||||
|
// break;
|
||||
|
// }
|
||||
|
// #endif
|
||||
|
} |
||||
|
|
||||
|
WarningLightControler::lightState_t WarningLightControler::inferTheCurrentLightingState() { |
||||
|
if (m_warningFlag) { |
||||
|
return kstate_warning; |
||||
|
} |
||||
|
if (m_workFlag) { |
||||
|
return kstate_work; |
||||
|
} |
||||
|
return kstate_idle; |
||||
|
} |
@ -0,0 +1,68 @@ |
|||||
|
#pragma once
|
||||
|
#include <fstream>
|
||||
|
#include <iostream>
|
||||
|
#include <list>
|
||||
|
#include <map>
|
||||
|
#include <memory>
|
||||
|
#include <set>
|
||||
|
#include <sstream>
|
||||
|
#include <string>
|
||||
|
#include <vector>
|
||||
|
//
|
||||
|
#include "baseservice/baseservice.hpp"
|
||||
|
#include "device_ctrl_service.hpp"
|
||||
|
//
|
||||
|
#include "base/can_packet_dumper.hpp"
|
||||
|
#include "base/h2o2_sensor_data_mgr.hpp"
|
||||
|
//
|
||||
|
#include "appcomponents/algo/moving_average_filter.hpp"
|
||||
|
/**
|
||||
|
* @brief |
||||
|
* |
||||
|
* service: WarningLightControler |
||||
|
* |
||||
|
* 监听事件: |
||||
|
* 依赖状态: |
||||
|
* 依赖服务: |
||||
|
* 作用: |
||||
|
* |
||||
|
*/ |
||||
|
|
||||
|
namespace iflytop { |
||||
|
using namespace std; |
||||
|
using namespace core; |
||||
|
|
||||
|
class WarningLightControler : public enable_shared_from_this<WarningLightControler> { |
||||
|
THISCLASS(WarningLightControler); |
||||
|
|
||||
|
public: |
||||
|
typedef enum { |
||||
|
kstate_uninit, |
||||
|
kstate_idle, |
||||
|
kstate_work, |
||||
|
kstate_warning, |
||||
|
} lightState_t; |
||||
|
|
||||
|
private: |
||||
|
shared_ptr<DeviceIoControlService> dcs; |
||||
|
unique_ptr<Thread> m_thread; |
||||
|
|
||||
|
bool m_workFlag = false; |
||||
|
bool m_warningFlag = false; |
||||
|
lightState_t m_nowState = kstate_uninit; |
||||
|
bool m_beepState = false; |
||||
|
|
||||
|
public: |
||||
|
void initialize(); |
||||
|
|
||||
|
void setworkFlag(bool flag) { m_workFlag = flag; } |
||||
|
void setwarningFlag(bool flag) { m_warningFlag = flag; } |
||||
|
|
||||
|
private: |
||||
|
void workThread(); |
||||
|
lightState_t inferTheCurrentLightingState(); |
||||
|
void changeLightState(lightState_t state); |
||||
|
void beepCtrl(lightState_t state); |
||||
|
}; |
||||
|
|
||||
|
}; // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue