Files

167 lines
5.8 KiB
C
Raw Permalink Normal View History

#ifndef _MQTT_H
#define _MQTT_H
#include "CH57x_common.h" //CH57X <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
#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<54><54><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
#define SRAM_MQTT_RECEIVE_END 0x030FFF //MQTT<54><54><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
#define SRAM_MQTT_RECEIVE_LEN 0x400 //MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><E6B3A4>
#define CmdID_LEN 4
#define DeviceID_LEN 6
#define UTCTime_LEN 6
#define CMD_HEAD_ERROR 0x00 //ָ<><D6B8>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
#define CMD_SUCCESS 0x01 //ִ<>гɹ<D0B3>
#define CMD_CRC_ERROR 0x02 //CRC<52><43>֤ʧ<D6A4><CAA7>
#define CMD_DEC_ERROR 0x03 //<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
#define CMD_DEV_NO 0xe1 //<2F>豸δ<E8B1B8><CEB4><EFBFBD><EFBFBD>
#define SRAM_MQTT_DEVICE_LIST_START 0x031000
#define SRAM_MQTT_DEVICE_LIST_END 0x0313FF
#define Struct_CFG_Dev_Freego_Name_Len 20 //<2F><><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Struct_CFG_Dev_Freego_Map_LEN 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5B3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>02
#define CFG_Dev_Freego_Map_MAX 40 //֧<>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8> <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>tcp<63><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1K<31><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#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);}//<2F><>u32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD>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; /* <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ */
UINT8 con_flag:1; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ */
UINT8 pub_flag:1; /* <20>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD><E1BBB0>Ϣ<EFBFBD><CFA2>־λ */
UINT8 sub_flag:1; /* <20>Ѷ<EFBFBD><D1B6>ĻỰ<C4BB><E1BBB0>־λ */
UINT8 tout_flag:1; /* <20><>ʱ<EFBFBD><CAB1>־λ */
UINT8 domain_dns:1; //mqtt<74><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
UINT8 reconnect:2; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 dns_en:1; //ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UINT8 mqtt_socket:7; //<2F><><EFBFBD><EFBFBD>mqtt <20>׽<EFBFBD><D7BD><EFBFBD>
UINT16 packetid; /* <20><>ID */
UINT8 MyBuf[RECE_BUF_LEN]; /* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
UINT8 des_ip[4]; //Ŀ<><C4BF>ip
uint16_t keepAliveInterval; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
UINT32 sour_port; //Դ<>˿<EFBFBD>
char* domain_name; //<2F><><EFBFBD><EFBFBD>
char* clientID; //clientID
char *username; /* <20>û<EFBFBD><C3BB><EFBFBD> */
char *password; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD> */
char *sub_topic; /* <20><><EFBFBD>ĵĻỰ<C4BB><E1BBB0><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>գ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EBB7A2><EFBFBD>ĻỰ<C4BB><E1BBB0><EFBFBD><EFBFBD>ͬ */
char *pub_topic; /* <20><><EFBFBD><EFBFBD><EFBFBD>ĻỰ*/
UINT32 Sram_read_addr; //MQTT<54><54><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD>ַ
UINT32 Sram_write_addr; //MQTT<54><54><EFBFBD>յ<EFBFBD>ַ
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]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1BBB0>
UINT8 sublish[65]; //<2F><><EFBFBD>ĻỰ<C4BB><E1BBB0>
}MQTT_THEME; //mqtt<74><74><EFBFBD><EFBFBD>
typedef struct
{
MQTT_THEME mqtt_theme; //<2F><><EFBFBD><EFBFBD>
UINT8 domain_name[65]; //<2F><><EFBFBD><EFBFBD>
UINT8 clientID[65]; //clientID
UINT8 username[65]; /* <20>û<EFBFBD><C3BB><EFBFBD> */
UINT8 password[65]; /* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD> */
}MQTT_BASIC_INFO; //mqtt<74><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
uint16_t keepAliveInterval; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
MQTT_BASIC_INFO* mqtt_basic_info; //mqtt<74><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}MQTT_DATA;
//typedef struct CFG_Freego_Map_Add* CFG_Freego_Map_AddP; //<2F><><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>ָ<EFBFBD><D6B8> <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD>С<EFBFBD><D0A1>18<31><38><EFBFBD>ֽ<EFBFBD>
typedef struct CFG_Freego_Map_Add
{
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
uint8_t ServerDevType; //u8<75><38><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><E8B1B8>485<38>
uint8_t ServerDevAddr; //u8<75><38><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><E8B1B8>ַĬ<D6B7><C4AC>Ϊ0<CEAA><30>485<38><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><E8B1B8>ʵ<EFBFBD>ʵ<EFBFBD>ַ
uint16_t FreegoDevOutputLoop; //<2F><>·<EFBFBD><C2B7>ַ <20>dz<EFBFBD><C7B3><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
// uint8_t DevLoopAddr[4]; //<2F><EFBFBD><E8B1B8>·<EFBFBD><C2B7>ַ <20>ֱ<EFBFBD><D6B1><EFBFBD>Ӧ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8>ַ <20><>·<EFBFBD><C2B7>ַL <20><>·<EFBFBD><C2B7>ַH
uint8_t DevLoopName[20]; //<2F><EFBFBD><E8B1B8>·<EFBFBD><C2B7>ַ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
}__attribute__ ((__packed__))Struct_CFG_Freego_Map_Add; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
#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