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