114 lines
3.0 KiB
C
114 lines
3.0 KiB
C
/*
|
|
* Copyright (c) 2018 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/** @file mqtt_os.h
|
|
*
|
|
* @brief MQTT Client depends on certain OS specific functionality. The needed
|
|
* methods are mapped here and should be implemented based on OS in use.
|
|
*
|
|
* @details Memory management, mutex, logging and wall clock are the needed
|
|
* functionality for MQTT module. The needed interfaces are defined
|
|
* in the OS. OS specific port of the interface shall be provided.
|
|
*
|
|
*/
|
|
|
|
#ifndef MQTT_OS_H_
|
|
#define MQTT_OS_H_
|
|
|
|
#include <stddef.h>
|
|
#include <kernel.h>
|
|
#include <sys/mutex.h>
|
|
|
|
#include <net/net_core.h>
|
|
|
|
#include "mqtt_internal.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**@brief Method to get trace logs from the module. */
|
|
#define MQTT_TRC(...) NET_DBG(__VA_ARGS__)
|
|
|
|
/**@brief Method to error logs from the module. */
|
|
#define MQTT_ERR(...) NET_ERR(__VA_ARGS__)
|
|
|
|
/**@brief Method to hexdump trace logs from the module. */
|
|
#define MQTT_HEXDUMP_TRC(_data, _length, _str) NET_HEXDUMP_DBG(_data, _length, _str)
|
|
|
|
/**@brief Method to hexdump error logs from the module. */
|
|
#define MQTT_HEXDUMP_ERR(_data, _length, _str) NET_HEXDUMP_ERR(_data, _length, _str)
|
|
|
|
/**@brief Method to hexdump warning logs from the module. */
|
|
#define MQTT_HEXDUMP_WARN(_data, _length, _str) NET_HEXDUMP_WARN(_data, _length, _str)
|
|
|
|
/**@brief Method to hexdump info logs from the module. */
|
|
#define MQTT_HEXDUMP_INFO(_data, _length, _str) NETHEXDUMP_INFO(_data, _length, _str)
|
|
|
|
/**@brief Initialize the mutex for the module, if any.
|
|
*
|
|
* @details This method is called during module initialization @ref mqtt_init.
|
|
*/
|
|
static inline void mqtt_mutex_init(struct mqtt_client *client)
|
|
{
|
|
sys_mutex_init(&client->internal.mutex);
|
|
}
|
|
|
|
/**@brief Acquire lock on the module specific mutex, if any.
|
|
*
|
|
* @details This is assumed to be a blocking method until the acquisition
|
|
* of the mutex succeeds.
|
|
*/
|
|
static inline void mqtt_mutex_lock(struct mqtt_client *client)
|
|
{
|
|
int ret = sys_mutex_lock(&client->internal.mutex, K_FOREVER);
|
|
|
|
__ASSERT(ret == 0, "sys_mutex_lock failed with %d", ret);
|
|
(void)ret;
|
|
}
|
|
|
|
/**@brief Release the lock on the module specific mutex, if any.
|
|
*/
|
|
static inline void mqtt_mutex_unlock(struct mqtt_client *client)
|
|
{
|
|
int ret = sys_mutex_unlock(&client->internal.mutex);
|
|
|
|
__ASSERT(ret == 0, "sys_mutex_unlock failed with %d", ret);
|
|
(void)ret;
|
|
}
|
|
|
|
/**@brief Method to get the sys tick or a wall clock in millisecond resolution.
|
|
*
|
|
* @retval Current wall clock or sys tick value in milliseconds.
|
|
*/
|
|
static inline uint32_t mqtt_sys_tick_in_ms_get(void)
|
|
{
|
|
return k_uptime_get_32();
|
|
}
|
|
|
|
/**@brief Method to get elapsed time in milliseconds since the last activity.
|
|
*
|
|
* @param[in] last_activity The value since elapsed time is requested.
|
|
*
|
|
* @retval Time elapsed since last_activity time.
|
|
*/
|
|
static inline uint32_t mqtt_elapsed_time_in_ms_get(uint32_t last_activity)
|
|
{
|
|
int32_t diff = k_uptime_get_32() - last_activity;
|
|
|
|
if (diff < 0) {
|
|
return 0;
|
|
}
|
|
|
|
return diff;
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* MQTT_OS_H_ */
|