Browse Source

添加风扇状态监控服务类

master
zhaohe 2 years ago
parent
commit
7a24218565
  1. 56
      app/MDK-ARM/app.uvguix.h_zha
  2. 12
      app/MDK-ARM/app.uvoptx
  3. 5
      app/MDK-ARM/app.uvprojx
  4. 2
      dep/libiflytop_micro
  5. 11
      src/device_io_service.cpp
  6. 10
      src/device_io_service.hpp
  7. 58
      src/fan_state_monitor.cpp
  8. 47
      src/fan_state_monitor.hpp
  9. 5
      src/umain.cpp

56
app/MDK-ARM/app.uvguix.h_zha
File diff suppressed because it is too large
View File

12
app/MDK-ARM/app.uvoptx

@ -1058,6 +1058,18 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>51</FileNumber>
<FileType>8</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\..\dep\libiflytop_micro\stm32\basic\zsignal.cpp</PathWithFileName>
<FilenameWithoutPath>zsignal.cpp</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>

5
app/MDK-ARM/app.uvprojx

@ -1275,6 +1275,11 @@
<FileType>8</FileType> <FileType>8</FileType>
<FilePath>..\..\dep\libiflytop_micro\stm32\component\tmp117\tmp117.cpp</FilePath> <FilePath>..\..\dep\libiflytop_micro\stm32\component\tmp117\tmp117.cpp</FilePath>
</File> </File>
<File>
<FileName>zsignal.cpp</FileName>
<FileType>8</FileType>
<FilePath>..\..\dep\libiflytop_micro\stm32\basic\zsignal.cpp</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

2
dep/libiflytop_micro

@ -1 +1 @@
Subproject commit bf2d8c1c5d3ab028b17d61e3dd6906231115bd82
Subproject commit 8a21b347ee6436e79cdc404bd3082946deade41f

11
src/device_io_service.cpp

@ -1,5 +1,6 @@
#include "device_io_service.hpp" #include "device_io_service.hpp"
#include "libiflytop_micro/stm32/basic/stm32_clock_utils.hpp"
extern "C" { extern "C" {
int fputc(int ch, FILE *stream) { int fputc(int ch, FILE *stream) {
uint8_t c = ch; uint8_t c = ch;
@ -12,6 +13,16 @@ using namespace iflytop;
namespace iflytop { namespace iflytop {
DeviceIoService deviceIoService; DeviceIoService deviceIoService;
} }
void DeviceIoService::fanInit(int freq) {
}
void DeviceIoService::fanSetDutyCycle(int fanIndex, uint16_t dutyCycle) {
}
bool *DeviceIoService::fanGetState(int fanIndex) { return &m_fanState[fanIndex]; }
/******************************************************************************* /*******************************************************************************
* * * *
*******************************************************************************/ *******************************************************************************/

10
src/device_io_service.hpp

@ -18,11 +18,21 @@ using namespace std;
class DeviceIoService : public IflytopMicroOS { class DeviceIoService : public IflytopMicroOS {
private: private:
/* data */ /* data */
bool m_fanState[5];
public: public:
DeviceIoService(/* args */) {} DeviceIoService(/* args */) {}
~DeviceIoService() {} ~DeviceIoService() {}
/******************************************************************************* /*******************************************************************************
* *
*******************************************************************************/
void fanInit(int freq);
void fanSetDutyCycle(int fanIndex, uint16_t dutyCycle);
bool *fanGetState(int fanIndex);
/*******************************************************************************
* * * *
*******************************************************************************/ *******************************************************************************/
void peltier_set_pwm(int pwm); void peltier_set_pwm(int pwm);

58
src/fan_state_monitor.cpp

@ -0,0 +1,58 @@
#include "fan_state_monitor.hpp"
#include "libiflytop_micro/stm32/basic/basic.h"
using namespace iflytop;
#define TAG "FAN_STATE_MONITOR"
void FanStateMonitor::initialize(IflytopMicroOS* os, GPIO_TypeDef* FB_GPIOx, uint16_t FB_GPIO_Pin, bool* fanstate) {
//
m_fanstate = fanstate;
}
void FanStateMonitor::doFanStateCheckPeriodicJob() {
/**
* @brief
*/
GPIO_PinState pinState = HAL_GPIO_ReadPin(m_FB_GPIOx, m_FB_GPIO_Pin);
if (HAL_GPIO_ReadPin(m_FB_GPIOx, m_FB_GPIO_Pin) != m_lastPinState) {
m_fanFBCount++;
m_lastPinState = pinState;
}
/**
* @brief 22
*/
if (m_os->hasPassedMS(m_fanOpenTicket) > 2000 && m_os->hasPassedMS(m_lastCallTicket) > 2000) {
if (m_fanFBCount == 0) {
ZLOGE(TAG, "Fan is not working!");
m_fanError = true;
}
m_lastCallTicket = m_os->getTicket();
m_fanFBCount = 0;
}
}
void FanStateMonitor::periodicJob() {
//
bool& fanstate = *m_fanstate;
if (fanstate != m_lastFanState) {
m_lastFanState = fanstate;
if (fanstate) {
/**
* @brief
*/
// 启动检查
m_fanOpenTicket = m_os->getTicket();
m_lastCallTicket = m_os->getTicket();
m_fanFBCount = 0;
m_fanError = false;
}
}
/**
* @brief
*/
if (fanstate) {
doFanStateCheckPeriodicJob();
}
}

47
src/fan_state_monitor.hpp

@ -0,0 +1,47 @@
#pragma once
#include "libiflytop_micro/stm32/basic/iflytop_micro_os.hpp"
#include "main.h"
namespace iflytop {
class FanStateMonitor {
GPIO_TypeDef* m_FB_GPIOx; // 风扇反馈引脚
uint16_t m_FB_GPIO_Pin; // 风扇反馈引脚
bool* m_fanstate; // 风扇当前是否正在工作
IflytopMicroOS* m_os; // 系统基础方法
uint16_t m_fanFBCount; // 风扇反馈计数
GPIO_PinState m_lastPinState; // 上次风扇反馈引脚状态,用来实现风扇反馈计数逻辑
uint32_t m_lastCallTicket = 0; // 上次调用周期性任务的时间戳
uint32_t m_fanOpenTicket = 0; // 风扇打开的时间戳
bool m_lastFanState = false; // 上次风扇状态,用来实现捕获风扇打开事件
bool m_fanError; // 风扇故障标志位
public:
FanStateMonitor(/* args */){};
~FanStateMonitor(){};
void initialize(IflytopMicroOS* os, GPIO_TypeDef* FB_GPIOx, uint16_t FB_GPIO_Pin, bool* fanstate);
/**
* @brief
*
* 1.
* 2. clearFanError()
* @return true
* @return false
*/
bool getFanError() { return m_fanError; }
bool clearFanError() { m_fanError = false; }
/*******************************************************************************
* *
*******************************************************************************/
/**
* @brief ,
*/
void periodicJob();
private:
void doFanStateCheckPeriodicJob();
};
} // namespace iflytop

5
src/umain.cpp

@ -9,7 +9,7 @@
#include "project_board.hpp" #include "project_board.hpp"
// //
#include "i2c.h" #include "i2c.h"
#include "libiflytop_micro\common\zsignal.hpp"
#include "libiflytop_micro\stm32\basic\zsignal.hpp"
#include "libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp" #include "libiflytop_micro\stm32\component\iflytop_can_slave_v1\iflytop_can_slave.hpp"
#include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp" #include "libiflytop_micro\stm32\component\tmp117\tmp117.hpp"
#define TAG "main" #define TAG "main"
@ -18,6 +18,8 @@ using namespace iflytop;
using namespace std; using namespace std;
class Main { class Main {
public: public:
signal_listener_t zsignal_listener[20];
TMC4361AImpl tmc4361motor1; TMC4361AImpl tmc4361motor1;
TMC2160Impl tmc2160motor1; TMC2160Impl tmc2160motor1;
TMP117 tmp117[4]; TMP117 tmp117[4];
@ -53,6 +55,7 @@ class Main {
}; };
void Main::initialize() { void Main::initialize() {
zsignal_init(zsignal_listener, ZARRAY_SIZE(zsignal_listener));
os = &deviceIoService; os = &deviceIoService;
/******************************************************************************* /*******************************************************************************
* * * *

Loading…
Cancel
Save