Files

165 lines
4.7 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.
#ifndef SUB_COMM_TASK_H
#define SUB_COMM_TASK_H
#include <stdint.h>
#include "publicdata/type.h"
/* ======================== 副板遥控(YK) 点位定义 ======================== */
/* 说明:
* - 副板 YK 代表“主板下发到副板的输出控制命令”;
* - 当前定义的 DO11~DO16 对应副板继电器 K1~K6(协议命令 0x02);
* - 预留点位用于后续扩展,不影响现有协议与数据结构布局。 */
typedef enum
{
/* 实际点位:DO11 ~ DO16(副板输出) */
E_SUB_YK_DO11 = 0,
E_SUB_YK_DO12,
E_SUB_YK_DO13,
E_SUB_YK_DO14,
E_SUB_YK_DO15,
E_SUB_YK_DO16,
/* 预留点位:便于后续扩展(副板输出) */
E_SUB_YK_RSVD1,
E_SUB_YK_RSVD2,
E_SUB_YK_RSVD3,
E_SUB_YK_RSVD4,
E_SUB_YK_RSVD5,
E_SUB_YK_RSVD6,
E_SUB_YK_NUM
} E_SUB_YK_TYPE;
typedef union
{
/* 按 bit 存储的命令缓存(节省空间):
* - 低 12 bit 对应 E_SUB_YK_TYPE 的 12 个点位;
* - bit 取值:0=CMD_OFF1=CMD_ON
* - u8_bytes 便于协议层直接取字节序列(低字节在前)。 */
uint16_t u16_bits;
U8_T u8_bytes[2];
struct
{
/* bit-field 视图(与枚举顺序一一对应) */
uint16_t do11 : 1; /* DO11 / K1 */
uint16_t do12 : 1; /* DO12 / K2 */
uint16_t do13 : 1; /* DO13 / K3 */
uint16_t do14 : 1; /* DO14 / K4 */
uint16_t do15 : 1; /* DO15 / K5 */
uint16_t do16 : 1; /* DO16 / K6 */
uint16_t rsvd1 : 1; /* 预留1 */
uint16_t rsvd2 : 1; /* 预留2 */
uint16_t rsvd3 : 1; /* 预留3 */
uint16_t rsvd4 : 1; /* 预留4 */
uint16_t rsvd5 : 1; /* 预留5 */
uint16_t rsvd6 : 1; /* 预留6 */
uint16_t _pad : 4; /* 对齐到 16bit */
} b_yk;
} U_SUB_YK_DATA;
/* ======================== 副板遥信(YX) 点位定义 ======================== */
/* 说明:
* - 副板 YX 代表“从副板采集回来的输入状态”;
* - 当前包含:
* 1) YX13~YX2210 路 DI 输入检测
* 2) DIP1~DIP6:6 路拨码开关位(用于副板地址/模式等)
* - 具体编码由协议命令 0x01 的数据域决定(在 sub_comm_task.c 中实现映射)。 */
typedef enum
{
/* 实际点位:YX13 ~ YX22(副板输入) */
E_SUB_YX_13 = 0,
E_SUB_YX_14,
E_SUB_YX_15,
E_SUB_YX_16,
E_SUB_YX_17,
E_SUB_YX_18,
E_SUB_YX_19,
E_SUB_YX_20,
E_SUB_YX_21,
E_SUB_YX_22,
/* 拨码位:6 位 */
E_SUB_DIP_1,
E_SUB_DIP_2,
E_SUB_DIP_3,
E_SUB_DIP_4,
E_SUB_DIP_5,
E_SUB_DIP_6,
/* 预留位:8 bit(用于后续扩展副板DI/状态位) */
E_SUB_YX_RSVD1,
E_SUB_YX_RSVD2,
E_SUB_YX_RSVD3,
E_SUB_YX_RSVD4,
E_SUB_YX_RSVD5,
E_SUB_YX_RSVD6,
E_SUB_YX_RSVD7,
E_SUB_YX_RSVD8,
E_SUB_YX_NUM
} E_SUB_YX_TYPE;
typedef union
{
/* 按 bit 存储的采集缓存(节省空间):
* - 低 24 bit 对应 E_SUB_YX_TYPE 的点位(16个有效 + 8个预留);
* - bit 取值:0/1
* - u8_bytes 便于协议层直接取字节序列(低字节在前)。 */
uint32_t u32_bits;
U8_T u8_bytes[4];
struct
{
/* bit-field 视图(与枚举顺序一一对应) */
uint16_t yx13 : 1;
uint16_t yx14 : 1;
uint16_t yx15 : 1;
uint16_t yx16 : 1;
uint16_t yx17 : 1;
uint16_t yx18 : 1;
uint16_t yx19 : 1;
uint16_t yx20 : 1;
uint16_t yx21 : 1;
uint16_t yx22 : 1;
uint16_t dip1 : 1;
uint16_t dip2 : 1;
uint16_t dip3 : 1;
uint16_t dip4 : 1;
uint16_t dip5 : 1;
uint16_t dip6 : 1;
uint16_t rsvd1 : 1;
uint16_t rsvd2 : 1;
uint16_t rsvd3 : 1;
uint16_t rsvd4 : 1;
uint16_t rsvd5 : 1;
uint16_t rsvd6 : 1;
uint16_t rsvd7 : 1;
uint16_t rsvd8 : 1;
uint16_t _pad : 8; /* 对齐到 32bit */
} b_yx;
} U_SUB_YX_DATA;
/* 缓存访问接口:
* - YK:上层写入命令缓存;副板通信线程负责周期下发(协议实现后接入)
* - YX:副板通信线程刷新采集缓存;上层读取缓存即可 */
/**
* @brief 写入副板遥控(YK)命令缓存。
* @note 该函数只更新缓存;真正的串口下发由 SubComm 线程周期执行。
*/
void v_sub_comm_yk_set(E_SUB_YK_TYPE e_type, E_CMD e_cmd);
/**
* @brief 读取副板遥控(YK)命令缓存(用于调试或回显)。
*/
E_CMD e_sub_comm_yk_get(E_SUB_YK_TYPE e_type);
/**
* @brief 读取副板遥信(YX)/拨码(DIP)采集缓存。
* @return 0/1 状态值
*/
U8_T u8_sub_comm_yx_get(E_SUB_YX_TYPE e_type);
void v_sub_comm_task(void *arg);
U8_T u8_sub_comm_get_gun_num(void);
#endif