Files
caocong 95916b9995 fix:修改UDP通讯中,取电变化上报机制
1、问题点:当RCU网络状态异常的情况下,网络还处于协商状态下,还未进入正常通讯环节时,取电变化不会进行判断。这会导致取电变化上报与实际产生取电状态时间点对不上。
2、将BLV_C1F_Module代码上传至Gitea,之前代码修改记录请查看 .\BasicCode\Readme.txt
2026-01-23 09:23:12 +08:00

167 lines
5.8 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 _MQTT_H
#define _MQTT_H
#include "CH57x_common.h" //CH57X 库包含头文件
#include "MQTTPacket.H"
#include "net.h"
#include "check_fun.h"
#include "SRAM_Variable_Address.h"
#include "BLV_Dev_Action.h"
#ifndef MQTT_EN
#define MQTT_EN 1
#endif
#define USER_NAME "34D0B8108D15&a1STn6qUB4r"
#define PASSWORD "d9c0248ec19854b56d7bb79c30e34c54d68875a6"
#define DOMAIN_NAME "a1STn6qUB4r.iot-as-mqtt.cn-shanghai.aliyuncs.com"
#define CLIENT_ID "34D0B8108D15|securemode=3,signmethod=hmacsha1|"
#define SUB_TOPIC "sub_topic"
#define PUB_TOPIC "pub_topic"
#define SRAM_MQTT_RECEIVE_START 0x030000 //MQTT接收缓存起始地址
#define SRAM_MQTT_RECEIVE_END 0x030FFF //MQTT接收缓存结束地址
#define SRAM_MQTT_RECEIVE_LEN 0x400 //MQTT单个接收缓存长度
#define CmdID_LEN 4
#define DeviceID_LEN 6
#define UTCTime_LEN 6
#define CMD_HEAD_ERROR 0x00 //指令头错误
#define CMD_SUCCESS 0x01 //执行成功
#define CMD_CRC_ERROR 0x02 //CRC验证失败
#define CMD_DEC_ERROR 0x03 //解密失败
#define CMD_DEV_NO 0xe1 //设备未激活
#define SRAM_MQTT_DEVICE_LIST_START 0x031000
#define SRAM_MQTT_DEVICE_LIST_END 0x0313FF
#define Struct_CFG_Dev_Freego_Name_Len 20 //名称长度限制
#define Struct_CFG_Dev_Freego_Map_LEN 24 //新增设备结构体长度 不包括参数类型02
#define CFG_Dev_Freego_Map_MAX 40 //支持的最大设备数 分配内存和tcp发送有1K的限制
#define HtolCpy(pdata, datau32) {pdata[0] = (datau32>>24)&0x000000ff;pdata[1] = (datau32>>16)&0x000000ff; \
pdata[2] = (datau32>>8)&0x000000ff;pdata[3] = (datau32>>0)&0x000000ff;pdata[4] = ((SysTick_1ms%1000)>>8); \
pdata[5] = (SysTick_1ms%1000);}//将u32的数按高字节存放在pdata
typedef enum
{
CMD_PKT,
CMDID_PKT,
DEVICE_ID_PKT = 5,
UTC_PKT = 11,
PRAM_PKT = 17,
}FREEG_PKT_E;
#pragma pack(1)
typedef struct
{
UINT8 init_flag:1; /* 初始化标志位 */
UINT8 con_flag:1; /* 已连接MQTT服务器标志位 */
UINT8 pub_flag:1; /* 已发布会话消息标志位 */
UINT8 sub_flag:1; /* 已订阅会话标志位 */
UINT8 tout_flag:1; /* 超时标志位 */
UINT8 domain_dns:1; //mqtt域名解析标志
UINT8 reconnect:2; //超时重连次数
UINT8 dns_en:1; //使能域名解析
UINT8 mqtt_socket:7; //存放mqtt 套接字
UINT16 packetid; /* 包ID */
UINT8 MyBuf[RECE_BUF_LEN]; /* 定义一个临时缓冲区 */
UINT8 des_ip[4]; //目标ip
uint16_t keepAliveInterval; //保持在线时间
UINT32 sour_port; //源端口
char* domain_name; //域名
char* clientID; //clientID
char *username; /* 用户名 */
char *password; /* 服务器登陆密码 */
char *sub_topic; /* 订阅的会话名,为了自发自收,应与发布的会话名相同 */
char *pub_topic; /* 发布的会话*/
UINT32 Sram_read_addr; //MQTT接收处理地址
UINT32 Sram_write_addr; //MQTT接收地址
uint8_t mqtt_sta; //2023-03-17
uint32_t wait_cot; //2023-03-17
uint8_t mqtt_cfail_num; //2023-03-17
}MQTT_INFO;
typedef struct
{
UINT8 publish[65]; //发布会话名
UINT8 sublish[65]; //订阅会话名
}MQTT_THEME; //mqtt主题
typedef struct
{
MQTT_THEME mqtt_theme; //主题
UINT8 domain_name[65]; //域名
UINT8 clientID[65]; //clientID
UINT8 username[65]; /* 用户名 */
UINT8 password[65]; /* 服务器登陆密码 */
}MQTT_BASIC_INFO; //mqtt基本参数
typedef struct
{
uint16_t keepAliveInterval; //保持在线时间
MQTT_BASIC_INFO* mqtt_basic_info; //mqtt基本参数
}MQTT_DATA;
//typedef struct CFG_Freego_Map_Add* CFG_Freego_Map_AddP; //新增映射表指针
//包括下一个节点指针 结构体大小是18个字节
typedef struct CFG_Freego_Map_Add
{
/*配置数据自带参数开始*/
uint8_t ServerDevType; //u8的设备类型包括本地自带设备和485设备
uint8_t ServerDevAddr; //u8的设备地址本地自带设备地址默认为0485设备地址需要填相应设备的实际地址
uint16_t FreegoDevOutputLoop; //回路地址 非场景 低字节为非零; 场景 高字节为非零
// uint8_t DevLoopAddr[4]; //设备回路地址 分别对应设备类型 设备地址 回路地址L 回路地址H
uint8_t DevLoopName[20]; //设备回路地址的别名
}__attribute__ ((__packed__))Struct_CFG_Freego_Map_Add; //配置数据新增映射表结构体
#pragma pack()
#if MQTT_EN
extern MQTT_INFO mqtt_info;
//extern MQTT_INFO mqtt_info2;
#endif
UINT8 Transport_Open(MQTT_INFO* Mqtt_info, UINT8* des_ip, UINT32 sour_port);
UINT8 Transport_Close(UINT8 S);
//void MQTT_Connect(UINT8 S, char *username,char *password);
void MQTT_Connect(UINT8 S, char* clientID, char *username, char *password, int keepAliveInterval);
void MQTT_Subscribe(UINT8 S, char *topic);
void MQTT_Unsubscribe(UINT8 S, char *topic);
//void MQTT_Publish(UINT8 S, char *topic, char *payload);
void MQTT_Publish(UINT8 S, char *topic, UINT8 *payload, int payloadlen, int qos);
void MQTT_Pingreq(UINT8 S);
void MQTT_Disconnect(UINT8 S);
void CH57xNET_CreatTcpSocket(void);
UINT8 MQTT_Init(MQTT_INFO* Mqtt_info, char* domain_name, UINT8* des_ip, char* clientID, char *username, char *password, char* sublish, int keepAliveInterval);
UINT8 MQTT_Flash_Parameter_Init(MQTT_INFO* Mqtt_info);
void MQTT_SET_SUB_Topic(MQTT_INFO* Mqtt_info, char* topic);
void MQTT_SET_PUB_Topic(MQTT_INFO* Mqtt_info, char* topic);
void MQTT_Receive_Processing(void);
#endif