/*** * @Author: mbw * @Date: 2025-01-24 08:40:39 * @LastEditors: mbw && 1600520629@qq.com * @LastEditTime: 2025-02-14 11:06:11 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\bsp_h308.h * @Description: * @ * @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved. */ /*** * @Author: mbw * @Date: 2025-01-24 08:40:39 * @LastEditors: mbw && 1600520629@qq.com * @LastEditTime: 2025-01-25 17:18:45 * @FilePath: \JT-DT-YD4N02A_RTT_MRS-NT26K\bsp\inc\bsp_h308.h * @Description: * @ * @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved. */ #ifndef __BSP_H308_H__ #define __BSP_H308_H__ #include "board.h" #include "rtdef.h" #include "drv_gpio.h" #define TSET_BSP_H308 #define H308_SAMPLING_TIMS (8U) /*浓度异常采样周期*/ #define H308_SAMPLING_ABNORMAL (60U) #define H308_PWR_PIN GET_PIN(B, 9) #define H308_RST_PIN GET_PIN(C, 12) #define H308_PWR_ON rt_pin_write(H308_PWR_PIN, PIN_HIGH) #define H308_PWR_OFF rt_pin_write(H308_PWR_PIN, PIN_LOW) // #define H308_PWR_ON rt_pin_write(H308_PWR_PIN, PIN_LOW) // #define H308_PWR_OFF rt_pin_write(H308_PWR_PIN, PIN_HIGH) #define H308_RST_ON rt_pin_write(H308_RST_PIN, PIN_LOW) #define H308_RST_OFF rt_pin_write(H308_RST_PIN, PIN_HIGH) #define H308_THREAD_STACK_SIZE (2048) #define H308_THREAD_PRIORITY (7) #define H308_THREAD_TIMESLICE (5) typedef enum { // kH308Normal = 0, // 传感器工作正常 kH308TempCtrlErr, // 温控异常 kH308EnvTempErr, // 环境温度异常 kH308LaserWeak, // 激光信号弱 kH308LaserStrong, // 激光信号强 kH308LaserErr, // 激光信号异常 kH308LaserWeakErr, // 激光信号弱+激光信号异常 kH308LaserStrongErr, // 激光信号强+激光信号异常 } TeH308FaultCode; typedef enum { kH308Normal = 0, kH308Alarm = 1, kH308Fault, kH308EndOfLife, kH308Abnormal, } TeH308Status; typedef struct { char vol[16]; // 浓度 char temp[16]; // 温度 char laser_temp[16]; // 激光器温度 char signal_strength[16]; // 信号强度 char gain[16]; // 放大系数 char fault_code[4]; // 传感器状态 char checksum[4]; // 校验 } TsH308StrData; typedef struct __attribute__((packed)) { float lel; // 浓度 float temp; // 温度 float laser_temp; // 激光器温度 float signal_strength; // 信号强度 float gain; // 放大系数 rt_uint8_t fault_code; // 故障码 rt_uint8_t checksum; // 校验 } TsH308Data; typedef struct __attribute__((packed)) { uint8_t end_of_life; // 寿命到期 uint8_t last_life; // 上次状态 uint8_t to_be_calib; // 待标定 uint8_t alarm_value; // 报警器阈值 LEL uint8_t detection_flag; // 实时检测的标志 uint8_t fault_code; // 故障码 uint32_t expiration_seconds; // 传感器到期时间,s TeH308Status status_buffer[H308_SAMPLING_TIMS]; // 采样缓存数组 TsH308Data Data; } TsH308; extern TsH308 H308; int BSP_H308_Init(void); void H308_ShowData(TsH308Data data); uint8_t IS_H308_EndOfLife(void); #endif // !__BSP_H308_H__