IoT_SCV_CH584M/bsp/inc/bsp_valve.h

166 lines
5.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @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关闭事件
#define VAVLE_TIMER_CLOSE_EVT (0x0001 << 11) // 定时关阀事件
#define VAVLE_ALARM_LED_REFRESH_EVT (0x0001 << 12) // 报警LED刷新事件
#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秒
#define CHARGE_TIME_MS (1500)
// 2.2V
#define LOW_VABAT_ALARM_VALUE 24
#define LOW_VABAT_CLOSE_VALUE 22
#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, // 手动开阀
} 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,
kClosed,
kDisconnect,
kLocked, // 阀门锁定状态
} 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 ℃
uint32_t in_pressure; // 4B 阀门入口压力 Pa
uint32_t out_pressure; // 4B 阀门出口压力 Pa
uint32_t atm_pressure; // 4B 阀门大气压力 Pa
uint8_t type; // 阀门类型
uint16_t bat; // 2B 电池电压 30=3V,18=1.8V
uint8_t humi; // 1B 阀门湿度 %RH
int8_t rssi;
uint8_t Lock; // 1B 阀门锁状态 0=解锁 1=锁定
uint16_t over_pressure; // 2B 超压阈值 Pa
uint16_t under_pressure; // 2B 欠压阈值 Pa
uint8_t over_temp; // 1B 超温阈值 ℃
uint16_t delay_close_time; // 2B 延时关阀时间 分钟
} 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;
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);
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); // 检查隐患是否已排除
uint8_t BSP_VALVE_SetTimerClose(uint32_t minutes);
static uint8_t BSP_VALVE_CancelTimerClose(void);
static uint32_t BSP_VALVE_GetRemainingMinutes(void);
#endif // ! __BSP_VALVE_H__