1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/pkg/paho-mqtt/include/paho_mqtt.h

198 lines
3.8 KiB
C

/*
* Copyright (C) 2019 Javier FILEIV <javier.fileiv@gmail.com>
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*
*/
/**
* @addtogroup pkg_paho_mqtt
* @{
*
* @file
* @brief Network MQTT interface definitions
*
* @author Javier FILEIV <javier.fileiv@gmail.com>
*/
#ifndef PAHO_MQTT_H
#define PAHO_MQTT_H
#include "mutex.h"
#include "thread.h"
#include "net/sock/tcp.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief RIOT's mqtt paho thread priority
*/
#ifndef MQTT_THREAD_PRIORITY
#define MQTT_THREAD_PRIORITY (THREAD_PRIORITY_MAIN - 1)
#endif
/**
* @brief RIOT's mqtt paho thread stack size
*/
#ifndef MQTT_THREAD_STACKSIZE
#define MQTT_THREAD_STACKSIZE (THREAD_STACKSIZE_LARGE)
#endif
/**
* @brief MQTT thread YIELD polling time in msecs
*/
#ifndef MQTT_YIELD_POLLING_MS
#define MQTT_YIELD_POLLING_MS (30)
#endif
/**
* @brief struct to get time references within mqtt paho
*
*/
typedef struct {
uint32_t timeout; /**< timeout in ms */
uint32_t time_set; /**< set time in ms */
} Timer;
/**
* @brief Initialize timer struct
*
* @param timer timer to init
*/
void TimerInit(Timer *timer);
/**
* @brief is timer expired?
*
* @param timer timer to check
*
* @return 1 if timer expired, 0 otherwise
*/
char TimerIsExpired(Timer *timer);
/**
* @brief start timer set to milli seconds
*
* @param timer timer to start
* @param msecs time to set in msecs
*/
void TimerCountdownMS(Timer *timer, unsigned int msecs);
/**
* @brief start timer set to seconds
*
* @param timer timer to start
* @param secs time to set in secs
*/
void TimerCountdown(Timer *timer, unsigned int secs);
/**
* @brief Returns millisecs left in timer
*
* @param timer timer to check
*
* @return msecs left
*/
int TimerLeftMS(Timer *timer);
/**
* @brief Network struct within mqtt paho
*/
typedef struct Network {
sock_tcp_t sock; /**< socket number */
/**
* @brief read internal function
*/
int (*mqttread) (struct Network*, unsigned char*, int, int);
/**
* @brief write internal function
*/
int (*mqttwrite) (struct Network*, unsigned char*, int, int);
} Network;
/**
* @brief Initialize network struct
*
* @param n network struct
*/
void NetworkInit(Network *n);
/**
* @brief Connect network to host
*
* @param n network struct
* @param address_ip IP address to connect to
* @param port_number port to connect to
*
* @return 0 if success, !=0 otherwise
*/
int NetworkConnect(Network *n, char* address_ip, int port_number);
/**
* @brief Disconnect network
*
* @param n network struct
*/
void NetworkDisconnect(Network *n);
/**
* @brief Mutex struct within mqtt paho
*/
typedef struct {
mutex_t lock; /**< MQTT thread mutex*/
} Mutex;
/**
* @brief Initialize mutex struct
*
* @param mutex pointer
*/
void MutexInit(Mutex *mutex);
/**
* @brief Locks mutex struct
*
* @param mutex pointer
*
* @return 0 if success, !=0 otherwise
*/
int MutexLock(Mutex *mutex);
/**
* @brief Unlocks mutex struct
*
* @param mutex pointer
*
* @return 0 if success, !=0 otherwise
*/
int MutexUnlock(Mutex *mutex);
/**
* @brief Thread struct within mqtt paho
*/
typedef struct {
char stack[MQTT_THREAD_STACKSIZE]; /**< stack for MQTT thread*/
kernel_pid_t pid; /**< MQTT thread pid*/
} Thread;
/**
* @brief Start new thread
*
* @param thread to start
* @param fn pointer function to execute
* @param arg arguments to pass to that fn
*
* @return 0 if success, !=0 otherwise
*/
int ThreadStart(Thread *thread, void (*fn)(void *), void *arg);
#ifdef __cplusplus
}
#endif
#endif /* PAHO_MQTT_H */
/** @} */