/* * 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 #include #include #include #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_ */