feat:修改设备类型

feat:修改为红外转发设备,将中弘网关协议转换为主机红外协议
This commit is contained in:
yeyangwen
2026-02-09 17:32:59 +08:00
parent 2285326a47
commit 13980737e3
1380 changed files with 504456 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
#ifndef _BOOTLOAD_FUNCTION_H_
#define _BOOTLOAD_FUNCTION_H_
#include "apt32f102.h"
#include "apt32f102_ifc.h"
#include "apt32f102_syscon.h"
#include "uart.h"
#define App_Procedure_Ready 0x66 //APP准备就绪标志位
#define APP_Flash_PageSize 0x100
#if DBG_LOG_EN
#define APP_Flash_StartAddr PROM_PageAdd96 //调试APP起始地址
#else
#define APP_Flash_StartAddr PROM_PageAdd40
#endif
#define APP_Flash_EndAddr PROM_PageAdd255
#define APP_FEATURE_Flash_Addr PROM_PageAdd255
#define MCU_EEPROM_PageSize 0x40
#define MCU_EEPROM_StartAddr DROM_PageAdd0
#define MCU_EEPROM_EndAddr (DROM_PageAdd31 + MCU_EEPROM_PageSize)
#define BCOMM_CMD_Handshake 0xC0
#define BCOMM_CMD_Jump 0xC1
#define BCOMM_CMD_SetInfo 0xC2
#define BCOMM_CMD_WriteFlash 0xC3
#define BCOMM_CMD_ReadFlash 0xC4
#define BCOMM_CMD_EraseFlash 0xC5
#define BCOMM_CMD_WriteEEPROM 0xC6
#define BCOMM_CMD_ReadEEPROM 0xC7
#define BCOMM_CMD_EraseEEPROM 0xC8
#define BCOMM_CMD_CheckData 0xC9
#define BCOMM_CMD_ReplySUCC 0x00
#define BCOMM_CMD_ReplyFAIL 0x01
#define BCOMM_ACKSize 300
#define BCOMM_ParaSize 280
typedef enum
{
BCOMM_FMT_TXAddr,
BCOMM_FMT_SN,
BCOMM_FMT_TYPE,
BCOMM_FMT_RXAddr,
BCOMM_FMT_LEN_L,
BCOMM_FMT_LEN_H,
BCOMM_FMT_CKS,
BCOMM_FMT_CMD,
BCOMM_FMT_PARAM,
}BOOT_COMM_FMT_e;
typedef struct{
U8_T jump_start;
U8_T sn;
U8_T cmd;
U8_T pc_addr;
U8_T ackBuffer[BCOMM_ACKSize];
U16_T ackLen;
U16_T ackValidity; //数据回复有效期
U32_T bootTimeout;
U32_T bootTick;
}BOOT_INFO_T;
typedef struct{
U8_T crcL_check;
U8_T crcH_check;
U8_T app_flag;
U8_T app_crc[241];
U16_T app_crc_size;
U16_T app_crc_len;
U32_T app_start_addr;
U32_T app_end_addr;
}APP_FEATURE_INFO_T; /*字节空间是256Byte*/
extern BOOT_INFO_T g_boot;
void Boot_Function_Init(void);
U8_T Boot_Comm_UpgradeProcess(U8_T *data,U16_T len);
void Boot_Time_Refresh(void);
void Boot_TimeOut_Task(void);
void Jump_To_APP(void);
U8_T Check_APP_Feature(void);
#endif

View File

@@ -0,0 +1,42 @@
#ifndef _DIP_SWITCH_H_
#define _DIP_SWITCH_H_
#include "apt32f102.h"
#include "apt32f102_gpio.h"
#define DIP_PRESS 0x00 //按键按下为低
#define DIP_LOOSEN 0x01 //按键松开为高
#define DIP_DELAY_COUNT 5 //扫描次数
#define DIP_SCAN_Time 20 //每次扫描时间
typedef enum
{
DIP_CH1,
DIP_CH2,
DIP_CH3,
DIP_CHN_MAX,
}DIP_CHN_e;
typedef enum
{
DIP_VAL_OFF, //松开
DIP_VAL_ON, //按下
}DIP_VAL_e;
typedef struct
{
U8_T delayCnt_ON[DIP_CHN_MAX];
U8_T delayCnt_OFF[DIP_CHN_MAX];
U8_T DIP_addr; //设备地址
U32_T DIP_val;
U32_T DIP_last_val;
}DIP_t;
extern DIP_t g_Dip;
void DIP_Switch_Init(void);
uint8_t DIP_GetSwitchState(uint8_t i);
void DIP_ScanTask(void);
#endif

View File

@@ -0,0 +1,93 @@
#ifndef _EEPROM_H_
#define _EEPROM_H_
#include "apt32f102.h"
/*地址范围0x10000000~0x100007FFDROM 每页64BYTE按页分配*/
#define EEPROM_MCUDevInfo_Address 0x10000000 //MCU 设备信息地址固定为0x10000000大小为0x40 此区域不可改动
/*APP*/
#define EEPROM_ParaInfo_Address 0x10000100
#define EEPROM_TOUCHPARA1_SaveAddr 0x10000200
#define EEPROM_TOUCHPARA2_SaveAddr 0x10000280
#define EEPROM_TOUCHPARA3_SaveAddr 0x10000300
/* EEPROM 保存数据格式:
* FLAG - 1Byte 保存标志位
* LEN - 2Byte 保存数据长度
* CHECK - 1Byte 保存数据校验
* DATA - nByte 保存数据内容
*
* */
/*APP*/
#define EEPROM_APP_SVAE_FLAG 0xA6
#define EEPROM_APP_DATA_Size_Max 100 //目前保存数据内容最长为100Byte
//#define EEPROM_PARA_Size 50
#define EEPROM_Offset_SaveFlag 0x00
#define EEPROM_Offset_Datalen 0x01
#define EEPROM_Offset_Check 0x03
#define EEPROM_Offset_Data 0x04
#define EEPROM_TempDifference_Default 0x09 //温差 - 默认为0x09
#define EEPROM_TempSelect_Default 0x00 //温度显示 - 默认摄氏度
#define EEPROM_TouchLevel_Default 0x01 //触摸按键等级 - 默认为0x01 中灵敏度
#define EEPROM_LangueSelect_Default 0x00 //显示语言 - 默认0x00中英文混合
#define ACTIVE_PORT 0x02 //主动端口
#define POLLING_PORT 0x01 //轮训端口
/*boot*/
#define EEPROM_SVAE_FLAG 0xAE
#define EEPROM_DATA_Size_Max 0x40 //目前保存数据内容最长为100Byte
#define EEPROM_PARA_Size 50
#define EEPROM_DEV_NAME_Size 32
typedef struct{
U8_T dev_addr; //设备地址
U8_T pipe_flag; //管制选择
U8_T temp_diff; //温差 0~18
U8_T temp_select; //温度显示单位选择 0x00:摄氏度 0x01:华氏度
U8_T backlight_en; //背光延时关闭标记 0x00:延时关 0x01:延时关闭开
U8_T key_sens_level; //按键灵敏度
U8_T langue_select; //设置显示语言
U8_T dev_port; //设备处于RCU的端口类型 1轮训端口 2主动端口 2024-12-16增加
}E_PARA_INFO;
typedef struct{
U8_T dev_addr; //设备地址
U8_T dev_type; //设备类型
U8_T dev_boot_ver; //设备Boot的软件版本号
U8_T dev_app_ver; //设备APP的软件版本号
U8_T dev_name_len; //设备名称的长度
U8_T dev_name[EEPROM_DEV_NAME_Size]; //设备名称
}E_MCU_DEV_INFO;
extern E_MCU_DEV_INFO g_mcu_dev;
extern E_PARA_INFO g_eeprom;
void EEPROM_Init(void);
U8_T EEPROM_CheckSum(U8_T *data,U16_T len);
U8_T EEPROM_ReadParaInfo(E_PARA_INFO *info);
U8_T EEPROM_WriteParaInfo(E_PARA_INFO *info);
U8_T EEPROM_ClearParaInfo(void);
U8_T EEPROM_Validate_ParaInfo(E_PARA_INFO *info);
void EEPROM_Default_ParaInfo(E_PARA_INFO *info);
/*boot*/
U8_T EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info);
U8_T EEPROM_WriteMCUDevInfo(E_MCU_DEV_INFO *info);
void EEPROM_Default_MCUDevInfo(E_MCU_DEV_INFO *info);
void EEPROM_Validate_MCUDevInfo(E_MCU_DEV_INFO *info);
#endif

View File

@@ -0,0 +1,105 @@
#ifndef __TEMPCTRL_UNIT_H__
#define __TEMPCTRL_UNIT_H__
#include "apt32f102_types_local.h"
/*温控相关宏定义开始*/
#define TEM_MIN_SET 0x10 //最低温度
#define TEM_MAX_SET 0x20 //最高温度
#define TEM_VALVE_OPEN 0x01 //阀开
#define TEM_VALVE_CLOSE 0x00 //阀关
#define FAN_LOW 0x00 //低风速
#define FAN_MID 0x01 //中风速
#define FAN_HIGH 0x02 //高风速
#define FAN_AUTO 0x03 //自动风
#define FAN_STOP 0x04 //停
#define MODEL_COLD 0x00 //制冷模式
#define MODEL_HOT 0x02 //制热模式
#define MODEL_WIND 0x04 //送风模式
#define MODEL_AUTO 0x06 //自动模式
#define TEMP_ON 0x01 //开机
#define TEMP_OFF 0x00 //关机
#define CARDIN 0x01 //插卡
#define CARDOUT 0x00 //拔卡
#define TEM_DEPARTTURE 0x09 //偏差温度标准
#define uint5_t(data) (data&0x1f)
#define TEMSTATECONVER(data) (*(U16_T *)&data) //实际u16的值
#define TEMTEMPCONVER(data) ((0x00 == data)?TEM_MAX_SET:data) //温控器温度转换为0就输出32度
/*温控相关宏定义结束*/
typedef struct
{
U32_T indoor_t : 8; //0~50(°C),室温
U32_T set_t : 8; //5~40°C设定温度
U32_T valve : 1; //阀门状态
U32_T fan : 3; //风速
U32_T mode : 3; //工作模式
U32_T on_off : 1; //开关机状态
U32_T reserved : 8;
}TemState_Struct;
typedef struct
{
TemState_Struct TemState_Now;
TemState_Struct TemStateLast; //温控器的上一个状态 用于输出屏幕
TemState_Struct TemState_Ctrller; //中宏网关读取到的温控状态
U8_T Temp_dirwind; //风向值,不做控制值只记录默认0
// U16_T IndoorTem;
// U16_T IndoorTemLast; //用于显示
//
// U16_T ReportTem; //用于上报
// U16_T ReportTemLast;
U8_T CardState; //插卡状态
U8_T CardFlag; //插卡状态改变标记
U8_T CardEn; //插卡状态功能启用标记
U8_T SceneNo; //场景编号
U8_T SceneFlag; //场景改变标记
U8_T TempChange_Flag; //状态改变标记
U8_T TempCtrller_Cnt; //发送次数
U8_T TempCtrllerChange_Flag;//状态改变下发网关标记
U32_T SceneNoTick;
U32_T Temp_SendTick; //温度定时上报间隔时间戳
U32_T TempChange_Tick;
U32_T TemQuery_1S_tick; //查询网关温控状态时间戳
}TempCtrl_Unit;
extern TempCtrl_Unit TempCtrl;
void Debug_Init(void);
void DisPlay_Task(void);
/*相关函数声明开始*/
void TemCtrl_Init(void); //初始化函数
void TemCtrl_Pro(void);
U8_T Ctrller_RecData_Processing(U8_T *RecData, U16_T Len);
void Ctrller_Query_AirFun(void);
void Ctrller_Query_AirState(void);
void Ctrller_Ctrl_AirState(void);
/*相关函数声明结束*/
#endif

152
Source/SYSTEM/inc/uart.h Normal file
View File

@@ -0,0 +1,152 @@
#ifndef _UART_H_
#define _UART_H_
#include "apt32f102.h"
#include "apt32f102_uart.h"
#define Recv_2400_TimeOut 3 //ms
#define Recv_9600_TimeOut 3 //ms
#define Recv_115200_TimeOut 3 //ms
#define USART_BUFFER_NUM 3
#define USART_BUFFER_SIZE 100
#define USART_SEND_SIZE 100
#define READ_RXLEVEL_STATE GPIO_Read_Status(GPIOB0,5) //RCU通讯485总线RX引脚
#define UART_SEND_BUFFER_NUM 10
#define UART_SEND_BUFFER_SIZE 20
#define UART_BUSBUSY 0x01 //总线繁忙
#define UART_BUSIDLE 0x00 //总线空闲
#define BUSSend_ValidTime1 60000 //数据有效期
#define BUSSend_ValidTime2 1000 //数据有效期
#define BUSSend_ValidTime3 300 //数据有效期
#define BUSSend_Cnt 1 //数据发送次数
#define BUSSend_Tick 300 //数据发送间隔
/*调试信息相关定义*/
#ifndef DBG_LOG_EN
#define DBG_LOG_EN 0 //DEBUG LOG 输出总开关
#endif
/*调试信息初始状态*/
#define DBG_OPT_Debug_STATUS 0 //临时调试信息打印开关
#define DBG_OPT_DEVICE_STATUS 0 //设备驱动层打印调试信息打印开关
#define DBG_OPT_SYS_STATUS 1 //系统调试信息打印开关
/*调试信息输出控制位*/
#define DBG_BIT_Debug_STATUS 2
#define DBG_BIT_DEVICE_STATUS 1
#define DBG_BIT_SYS_STATUS 0
#if DBG_LOG_EN
#define DBG_SendByte(data) UARTTxByte(UART2,data)
//#define DBG_Printf(data,len) UARTTransmit(UART2,data,len)
#define DBG_Printf(data,len) MCU485_SendData(data,len)
#else
#define DBG_SendByte(data) //UARTTxByte(UART1,data)
#define DBG_Printf
#endif
typedef U8_T (*Uart_prt)(U8_T *,U16_T);
typedef enum
{
UART_0,
UART_1,
UART_2,
UART_3,
UART_MAX,
}UART_IDX;
typedef enum
{
BUSSEND_SUCC = 0x00, //发送成功
BUSSEND_WAIT, //等待发送机会
DATA_END, //数据有效期结束
RETRY_END, //重发结束
LEN_ERR, //长度错误
}BUSSEND_REV;
typedef struct{
U8_T RecvBuffer[USART_BUFFER_SIZE];
U8_T Receiving;
U16_T RecvLen;
U32_T RecvTimeout;
U32_T RecvIdleTiming;
Uart_prt processing_cf; //处理函数指针
}UART_t;
typedef struct{ //总线繁忙判断
U8_T SendBuffer[USART_SEND_SIZE]; //发送缓冲
U8_T BusState_Flag; //总线繁忙标记位, 0x01:总线繁忙0x00:总线空闲
U8_T HighBit_Flag; //串口RX高电平标记位,默认是高电平0x01.
U8_T BUSBUSY_LOCK; //锁定总线繁忙状态
U8_T SendState; //当前发送状态
U8_T ResendCnt; //当前发送次数
U8_T ASend_Flag; //主动上报发送标记
U8_T TotalCnt; //发送总次数
U8_T SetBaudFlag; //设置波特率
U8_T Jump_Flag; //跳转标志位
U16_T SendLen; //发送缓冲区数据长度
U32_T Bus_DelayTime; //总线繁忙转换到空闲状态的随机延时时间
U32_T DataWait_Time; //上报数据间隔
U32_T DataValid_Time; //上报数据有效期
U32_T BusState_Tick; //总线繁忙状态判断时间戳
U32_T ASend_Tick; //主动上报发送间隔判断时间戳
U32_T BusbusyTimeout; //上报数据有效期判断时间戳
}MULIT_t;
extern MULIT_t m_send;
extern UART_t g_uart[3];
extern U32_T Dbg_Switch;
extern U8_T DealBuffer[USART_BUFFER_SIZE]; //数据处理缓冲
extern U16_T DealLen;
extern volatile int RS485_Comm_Flag,RS485_Comm_Start,RS485_Comm_End,RS485_Comming;
extern volatile int RS485_Comm_Flag1,RS485_Comm_Start1,RS485_Comm_End1,RS485_Comming1;
void UARTx_Init(UART_IDX uart_id, Uart_prt prt_cf);
void UART1_RecvINT_Processing(char data);
void UART1_TASK(void);
void UART2_TASK(void);
void UART0_RecvINT_Processing(char data);
void UART1_RecvINT_Processing(char data);
void UART2_RecvINT_Processing(char data);
void MCU485_SendData(U8_T *buff,U16_T len);
void Controller485_SendData(U8_T *buff,U16_T len);
void Dbg_Print(int DbgOptBit, const char *cmd, ...);
void Dbg_Println(int DbgOptBit, const char *cmd, ...);
void Dbg_Print_Buff(int DbgOptBit, const char *cmd, U8_T *buff,U16_T len);
void BusIdle_Task(void);
void BusBusy_Task(void);
void BUS485Send_Task(void);
U8_T MultSend_Task(U8_T *buff,U16_T len,U8_T DatSd);
U8_T BUS485_Send(U8_T *buff,U16_T len);
void Set_GroupSend(U8_T *data,U16_T sled,U8_T SCnt,U32_T indate,U32_T tim_val);
void Clear_SendFlag(void);
U8_T Get_BUS485_Send_State(void);
void BUS485_Jump_Boot(U8_T jump);
#endif

View File

@@ -0,0 +1,16 @@
#ifndef __UART_PROTOCOL_H__
#define __UART_PROTOCOL_H__
#include "apt32f102_types_local.h"
#include "uart.h"
#define Tem_Type 0x04 //温控器类型
void Rs485AskCtrlSend(U8_T* Recdata);
void Rs485_ASend(U32_T valtim);
U8_T IrSend_Rs485_Pro(U8_T *RecData, U16_T Len);
#endif