IoT_SCV_CH584M/bsp/inc/bsp_valve.h

163 lines
5.3 KiB
C
Raw Normal View History

2025-05-13 17:29:54 +08:00
/*
* @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-12 15:55:38
* @LastEditors : stark1898y 1658608470@qq.com
* @LastEditTime : 2025-02-24 16:39:07
* @FilePath : \BLE_TYQ_CH584M\BSP\inc\bsp_valve.h
* @Description :
*
* Copyright (c) 2024 by yzy, All Rights Reserved.
*/
#ifndef __BSP_VALVE_H__
#define __BSP_VALVE_H__
#include "CONFIG.h"
extern tmosTaskID vavle_task_id;
#define VAVLE_RX_DATA_EVT (0x0001 << 0)
#define VAVLE_TX_DATA_EVT (0x0001 << 1)
#define VAVLE_CLOSE_START_EVT (0x0001 << 2) // 关阀,开始准备
#define VAVLE_CLOSE_ACTION_EVT (0x0001 << 3) // 关阀,动作
#define VAVLE_CLOSE_END_EVT (0x0001 << 4) // 关阀结束
#define VAVLE_OPEN_START_EVT (0x0001 << 5) // 开阀,开始准备
#define VAVLE_OPEN_ACTION_EVT (0x0001 << 6) // 开阀,动作
#define VAVLE_OPEN_END_EVT (0x0001 << 9) // 开阀结束
#define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 7) // 低电压提醒
#define VAVLE_LOOP_DECT_EVT (0x0001 << 8) // 循环检测
#define VAVLE_LOW_VBAT_LED_OFF_EVT (0x0001 << 10) // 低电压LED关闭事件
2025-05-13 17:29:54 +08:00
2025-05-22 14:08:24 +08:00
#define VAVLE_TIMER_CLOSE_EVT (0x0001 << 11) // 定时关阀事件
#define VAVLE_ALARM_LED_REFRESH_EVT (0x0001 << 12) // 报警LED刷新事件
2025-05-13 17:29:54 +08:00
2025-05-22 14:08:24 +08:00
#define VALVE_LOW_VBAT_ALARM_PERIOD_MS (1600 * 60 * 10)
#define VALVE_DECT_PERIOD_MS (1600 * 60 * 10)
#define VALVE_ALARM_LED_REFRESH_PERIOD_MS (1000) // 报警LED刷新周期1秒
2025-05-13 17:29:54 +08:00
#define CHARGE_TIME_MS (1500)
2025-05-13 17:29:54 +08:00
// 2.2V
#define LOW_VABAT_ALARM_VALUE 24
2025-05-13 17:29:54 +08:00
#define LOW_VABAT_CLOSE_VALUE 22
2025-05-13 17:29:54 +08:00
#define FRAME_HEADER 0xAA
#define FRAME_TAIL 0x55
// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55
typedef enum
{
kCmdCfg = 0X01,
kCmdCloseVavle, // 关阀
kCmdOpenVavle, // 开阀
kCmdData, // 命令数据(心跳数据)
kValveCmdOverPressure, // 超压关阀
kValveCmdUnderPressure, // 欠压关阀
kValveCmdOverCurrent, // 过流关阀
kValveCmdMicroLeak, // 微漏关阀
kValveCmdTimer, // 定时关阀
kValveCmdOpenWithStove, // 开灶开阀
kValveCmdCloseWithStove, // 关灶关阀
kValveCmdOverTemperature, // 超温关阀
kValveCmdDelayClose, // 延时关阀
kValveCmdManualClose, // 手动关阀
KValveCmdTimeSet, // 设置定时关阀时间
kValveCmdTimeResp, // 设置定时关阀时间响应
kValveCmdLowBatClose, // 低电量关阀
kValveCmdManualOpen, // 手动开阀
2025-05-13 17:29:54 +08:00
} TeFrameCmd;
typedef struct __attribute__((packed))
{
TeFrameCmd cmd; // CMD/DATA
uint8_t len; // DATA_LEN
// TsValveData data;
uint8_t data[];
} TsFrameData;
typedef struct __attribute__((packed))
{
uint8_t len;
uint8_t buf[64];
} TsRawFrameData;
extern TsRawFrameData RelyData;
// 阀门类型
typedef enum
{
kTyq = 0X01,
kZbf,
kDcf,
} TeVavleType;
typedef enum
{
kOpened= 0,
2025-05-13 17:29:54 +08:00
kClosed,
kDisconnect,
kLocked, // 阀门锁定状态
2025-05-13 17:29:54 +08:00
} TeValveSwitchStatus;
typedef struct __attribute__((packed))
{
// uint8_t valve_id;
// uint8_t valve_mac[6];
// uint8_t connct_status; // 1B 阀门连接状态 电磁阀BLE控制盒 0=未连接 1=已连接
uint8_t switch_status; // 1B 阀门开关状态 0=未知 1=关闭, 2=打开
int8_t temp; // 1B 阀门温度 有符号整数 25 ℃
2025-05-13 17:29:54 +08:00
uint32_t in_pressure; // 4B 阀门入口压力 Pa
uint32_t out_pressure; // 4B 阀门出口压力 Pa
uint32_t atm_pressure; // 4B 阀门大气压力 Pa
uint8_t type; // 阀门类型
uint8_t bat; // 1B 电池电压 30=3V,18=1.8V
uint8_t humi; // 1B 阀门湿度 %RH
2025-05-13 17:29:54 +08:00
int8_t rssi;
uint8_t Lock; // 1B 阀门锁状态 0=解锁 1=锁定
2025-05-13 17:29:54 +08:00
} TsValveData;
extern TsValveData gValveData;
typedef struct __attribute__((packed))
{
uint32_t timer_minutes; // 设置的定时分钟数0表示未激活
uint32_t start_time; // 定时器启动时的时间戳
uint8_t is_active; // 定时器是否激活 0=未激活 1=激活
} TsTimerCloseState;
extern TsTimerCloseState gTimerCloseState;
extern TeFrameCmd gValveCloseReason;
extern TeFrameCmd gValveOpenReason;
2025-05-13 17:29:54 +08:00
uint8_t CheckSum(const uint8_t *data, size_t len);
void BSP_VAVLE_Init(void);
TsFrameData* BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len);
uint8_t GenerateRawFrame(TsRawFrameData *pRawData, uint8_t cmd, const uint8_t *p_src, uint8_t src_len);
void BSP_VALVE_Generate_Data(TsRawFrameData *pRawData, TeFrameCmd cmd);
2025-05-13 17:29:54 +08:00
void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, uint8_t status);
void BSP_VALVE_Generate_UploadData(TsRawFrameData *pRawData);
uint8_t BSP_VALVE_Close(TeFrameCmd close_reason);
uint8_t BSP_VALVE_Open(TeFrameCmd open_reason);
uint8_t BSP_VALVE_Lock(TeFrameCmd lock_reason); // 锁定阀门
uint8_t BSP_VALVE_Unlock(void); // 解锁阀门
uint8_t BSP_VALVE_CheckHazardCleared(void); // 检查隐患是否已排除
static uint8_t BSP_VALVE_SetTimerClose(uint32_t minutes);
static uint8_t BSP_VALVE_CancelTimerClose(void);
static uint32_t BSP_VALVE_GetRemainingMinutes(void);
2025-05-13 17:29:54 +08:00
#endif // ! __BSP_VALVE_H__