/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2024-04-18     GOATS       the first version
 */
#ifndef APPLICATIONS_WIRELESS_MQTT_H_
#define APPLICATIONS_WIRELESS_MQTT_H_

#include <LTE.h>

typedef struct
{
    char MQTT_ADDR[16];        // MQTT IP地址
    char MQTT_PORT[9];        // 端口
    char MQTT_CLI_ID[16];      // 客户端ID
    char MQTT_USERNAME[16];    // 用户名
    char MQTT_PWD[16];         // 密码
    rt_uint8_t MQTT_TOPIC;       // 订阅话题
    rt_uint8_t MQTT_STATUS;      // 连接状态：1已连接 0未连接
    rt_uint8_t MQTT_UPDATE_FLAG; // 配置更新标志位：1有更新 0无更新 2无改变
    rt_uint8_t log;   // log

    rt_uint8_t Key;

} MQTT_t; //  MQTT配置与状态


#define MQTT_PUBTOPIC "v1/devices/me/telemetry"
#define MQTT_SUBTOPIC "v1/devices/me/attributes"

void set_mqtt_log(uint8_t log);

//MQTT初始化
rt_uint8_t MQTT_init();

//获取MQTT连接状态
rt_uint8_t get_MQTT_Status_flag();

//MQTT心跳
void MQTT_Keep_Alive();

//MQTT重启
void MQTT_RE_init();

//发送电平信息
void MQTT_Send_Key(rt_uint16_t key);

//发送modbus数据
void MQTT_Send_Modbus(rt_uint16_t key);

//发送转速针数
void MQTT_Send_SpeedNeedle();

// 设置MQTT服务器IP地址
// @param rt_uint8_t addr MQTT服务器IP地址值
// @return void 无返回值
void set_MQTT_ADDR(char* addr); // 将addr值赋给全局MQTT结构体的MQTT_ADDR成员

// 获取MQTT服务器IP地址
// @return rt_uint8_t 返回MQTT服务器IP地址值
char* get_MQTT_ADDR(); // 返回全局MQTT结构体的MQTT_ADDR成员的值

// 设置MQTT服务器端口
// @param rt_uint8_t port MQTT服务器端口号
// @return void 无返回值
void set_MQTT_PORT(char* port); // 将port值赋给全局MQTT结构体的MQTT_PORT成员

// 获取MQTT服务器端口
// @return rt_uint8_t 返回MQTT服务器端口号
char* get_MQTT_PORT(); // 返回全局MQTT结构体的MQTT_PORT成员的值

// 设置MQTT客户端ID
// @param rt_uint8_t cli_id MQTT客户端ID值
// @return void 无返回值
void set_MQTT_CLI_ID(char* cli_id); // 将cli_id值赋给全局MQTT结构体的MQTT_CLI_ID成员

// 获取MQTT客户端ID
// @return rt_uint8_t 返回MQTT客户端ID值
char* get_MQTT_CLI_ID(); // 返回全局MQTT结构体的MQTT_CLI_ID成员的值

// 设置MQTT用户名
// @param rt_uint8_t username MQTT用户名值
// @return void 无返回值
void set_MQTT_USERNAME(char* username); // 将username值赋给全局MQTT结构体的MQTT_USERNAME成员

// 获取MQTT用户名
// @return rt_uint8_t 返回MQTT用户名值
char* get_MQTT_USERNAME(); // 返回全局MQTT结构体的MQTT_USERNAME成员的值

// 设置MQTT密码
// @param rt_uint8_t pwd MQTT密码值
// @return void 无返回值
void set_MQTT_PWD(char* pwd); // 将pwd值赋给全局MQTT结构体的MQTT_PWD成员

// 获取MQTT密码
// @return rt_uint8_t 返回MQTT密码值
char* get_MQTT_PWD(); // 返回全局MQTT结构体的MQTT_PWD成员的值

// 设置MQTT订阅话题
// @param rt_uint8_t topic MQTT订阅话题值
// @return void 无返回值
void set_MQTT_TOPIC(rt_uint8_t topic); // 将topic值赋给全局MQTT结构体的MQTT_TOPIC成员

// 获取MQTT订阅话题
// @return rt_uint8_t 返回MQTT订阅话题值
rt_uint8_t get_MQTT_TOPIC(); // 返回全局MQTT结构体的MQTT_TOPIC成员的值

// 设置MQTT连接状态
// @param rt_uint8_t status MQTT连接状态值（1已连接，0未连接）
// @return void 无返回值
void set_MQTT_STATUS(rt_uint8_t status); // 将status值赋给全局MQTT结构体的MQTT_STATUS成员

// 获取MQTT连接状态
// @return rt_uint8_t 返回MQTT连接状态值（1已连接，0未连接）
rt_uint8_t get_MQTT_STATUS(); // 返回全局MQTT结构体的MQTT_STATUS成员的值

// 设置MQTT配置更新标志位
// @param rt_uint8_t update_flag MQTT配置更新标志位值（1有更新，0无更新，2无改变）
// @return void 无返回值
void set_MQTT_UPDATE_FLAG(rt_uint8_t update_flag); // 将update_flag值赋给全局MQTT结构体的MQTT_UPDATE_FLAG成员

// 获取MQTT配置更新标志位
// @return rt_uint8_t 返回MQTT配置更新标志位值（1有更新，0无更新，2无改变）
rt_uint8_t get_MQTT_UPDATE_FLAG(); // 返回全局MQTT结构体的MQTT_UPDATE_FLAG成员的值

// 设置MQTT配置保存标志位
// @param rt_uint8_t save_flag MQTT配置保存标志位值（1已保存，0未保存，2无改变）
// @return void 无返回值
void set_MQTT_SAVE_FLAG(rt_uint8_t save_flag); // 将save_flag值赋给全局MQTT结构体的MQTT_SAVE_FLAG成员

// 获取MQTT配置保存标志位
// @return rt_uint8_t 返回MQTT配置保存标志位值（1已保存，0未保存，2无改变）
rt_uint8_t get_MQTT_SAVE_FLAG(); // 返回全局MQTT结构体的MQTT_SAVE_FLAG成员的值

// 设置/获取Key值
// @param rt_uint8_t key 要设置的Key值
// @return rt_uint8_t 返回当前的Key值
void set_MQTT_Key(rt_uint8_t key); // 将key值赋给全局MQTT结构体的Key成员

rt_uint8_t get_MQTT_Key(); // 返回全局MQTT结构体的Key成员的值


#endif /* APPLICATIONS_WIRELESS_MQTT_H_ */
