initial commit

This commit is contained in:
2024-12-15 00:34:01 +06:00
commit 31efbc726f
1576 changed files with 657692 additions and 0 deletions

View File

@@ -0,0 +1,225 @@
/**
******************************************************************************
* @file MQTTClient.h
* @author
* @version
* @brief This file provides user interface for MQTT client.
******************************************************************************
* @attention
*
* This module is a confidential and proprietary property of RealTek and possession or use of this module requires written permission of RealTek.
*
* Copyright(c) 2016, Realtek Semiconductor Corporation. All rights reserved.
******************************************************************************
*/
#if !defined(__MQTT_CLIENT_C_)
#define __MQTT_CLIENT_C_
/** @addtogroup mqtt MQTT
* @ingroup network
* @brief MQTT client functions
* @{
*/
#if defined(__cplusplus)
extern "C" {
#endif
#if defined(WIN32_DLL) || defined(WIN64_DLL)
#define DLLImport __declspec(dllimport)
#define DLLExport __declspec(dllexport)
#elif defined(LINUX_SO)
#define DLLImport extern
#define DLLExport __attribute__ ((visibility ("default")))
#else
#define DLLImport
#define DLLExport
#endif
#include "../MQTTPacket/MQTTPacket.h"
#include "stdio.h"
#include "MQTTFreertos.h"
#define MQTT_TASK
#if !defined(MQTT_TASK)
#define WAIT_FOR_ACK
#endif
#define MQTT_SENDBUF_LEN 1024
#define MQTT_READBUF_LEN 1024
enum mqtt_status{
MQTT_START = 0,
MQTT_CONNECT = 1,
MQTT_SUBTOPIC = 2,
MQTT_RUNNING = 3
};
#if defined(MQTTCLIENT_PLATFORM_HEADER)
/* The following sequence of macros converts the MQTTCLIENT_PLATFORM_HEADER value
* into a string constant suitable for use with include.
*/
#define xstr(s) str(s)
#define str(s) #s
#include xstr(MQTTCLIENT_PLATFORM_HEADER)
#endif
#define MAX_PACKET_ID 65535 /* according to the MQTT specification - do not change! */
#if !defined(MAX_MESSAGE_HANDLERS)
#define MAX_MESSAGE_HANDLERS 5 /* redefinable - how many subscriptions do you want? */
#endif
enum QoS { QOS0, QOS1, QOS2 };
/* all failure return codes must be negative */
enum returnCode { BUFFER_OVERFLOW = -2, FAILURE = -1 };//, SUCCESS = 0
/* The Platform specific header must define the Network and Timer structures and functions
* which operate on them.
*
typedef struct Network
{
int (*mqttread)(Network*, unsigned char* read_buffer, int, int);
int (*mqttwrite)(Network*, unsigned char* send_buffer, int, int);
} Network;*/
/* The Timer structure must be defined in the platform specific header,
* and have the following functions to operate on it. */
extern void TimerInit(Timer*);
extern char TimerIsExpired(Timer*);
extern void TimerCountdownMS(Timer*, unsigned int);
extern void TimerCountdown(Timer*, unsigned int);
extern int TimerLeftMS(Timer*);
typedef struct MQTTMessage
{
enum QoS qos;
unsigned char retained;
unsigned char dup;
unsigned short id;
void *payload;
size_t payloadlen;
} MQTTMessage;
typedef struct MessageData
{
MQTTMessage* message;
MQTTString* topicName;
} MessageData;
typedef void (*messageHandler)(MessageData*);
typedef struct MQTTClient
{
unsigned int next_packetid,
command_timeout_ms;
size_t buf_size,
readbuf_size;
unsigned char *buf,
*readbuf;
unsigned int keepAliveInterval;
char ping_outstanding;
int isconnected;
struct MessageHandlers
{
const char* topicFilter;
void (*fp) (MessageData*);
} messageHandlers[MAX_MESSAGE_HANDLERS]; /* Message handlers are indexed by subscription topic */
void (*defaultMessageHandler) (MessageData*);
Network* ipstack;
Timer ping_timer;
Timer cmd_timer;
int mqttstatus;
} MQTTClient;
#define DefaultClient {0, 0, 0, 0, NULL, NULL, 0, 0, 0}
/**
* @brief Create an MQTT client object
* @param client : The context of MQTT client
* @param network : The Network context
* @param command_timeout_ms : The command timeout of MQTT
* @param sendbuf : The array of MQTT send buffer
* @param sendbuf_size : The size of send buffer
* @param readbuf : The array of MQTT receive buffer
* @param readbuf_size : The size of receive buffer
* @return none
*/
DLLExport void MQTTClientInit(MQTTClient* client, Network* network, unsigned int command_timeout_ms,
unsigned char* sendbuf, size_t sendbuf_size, unsigned char* readbuf, size_t readbuf_size);
/**
* @brief Send an MQTT connect packet down the network and wait for a Connack
* The nework object must be connected to the network endpoint before calling this function
* @param client c
* @param options : The connect options of MQTT
* @return 0 : success
* -1 : failed
*/
DLLExport int MQTTConnect(MQTTClient* client, MQTTPacket_connectData* options);
/**
* @brief Send an MQTT publish packet and wait for all acks to complete for all QoSs
* @param client : The context of MQTT client
* @param topic : The MQTT topic to publish
* @param message : The message to send
* @return 0 : success
* -1 : failed
*/
DLLExport int MQTTPublish(MQTTClient* client, const char*, MQTTMessage*);
/**
* @brief Send an MQTT subscribe packet and wait for suback before returning.
* @param client : The context of MQTT client
* @param topicFilter : The topic filter to subscribe
* @param QoS : The MQTT QOS value
* @param messageHandler : The MQTT message handler
* @return 0 : success
* -1 : failed
*/
DLLExport int MQTTSubscribe(MQTTClient* client, const char* topicFilter, enum QoS, messageHandler);
/**
* @brief Send an MQTT unsubscribe packet and wait for unsuback before returning.
* @param client : The context of MQTT client
* @param topicFilter : The topic filter to unsubscribe
* @return 0 : success
* -1 : failed
*/
DLLExport int MQTTUnsubscribe(MQTTClient* client, const char* topicFilter);
/**
* @brief Send an MQTT disconnect packet and close the connection
* @param client : The context of MQTT client
* @return 0 : success
* -1 : failed
*/
DLLExport int MQTTDisconnect(MQTTClient* client);
/**
* @brief MQTT receive packet background function
* @param client : The context of MQTT client
* @param time : The timeout of receive MQTT packets, in milliseconds
* @return 0 : success
* -1 : failed
*/
DLLExport int MQTTYield(MQTTClient* client, int time);
#if defined(MQTT_TASK)
void MQTTSetStatus(MQTTClient* c, int mqttstatus);
int MQTTDataHandle(MQTTClient* c, fd_set *readfd, MQTTPacket_connectData *connectData, messageHandler messageHandler, char* address, int port, char* topic);
#endif
#if defined(__cplusplus)
}
#endif
/*\@}*/
#endif