blob: 56d7a67407178b56ff80856cfe54cd4b60047626 [file] [log] [blame]
/*
* Copyright (c) 2023 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef LWM2M_OBJ_SERVER_H_
#define LWM2M_OBJ_SERVER_H_
#include <stdint.h>
#include <stdbool.h>
#include <zephyr/sys_clock.h>
/* Server resource IDs */
#define SERVER_SHORT_SERVER_ID 0
#define SERVER_LIFETIME_ID 1
#define SERVER_DEFAULT_MIN_PERIOD_ID 2
#define SERVER_DEFAULT_MAX_PERIOD_ID 3
#define SERVER_DISABLE_ID 4
#define SERVER_DISABLE_TIMEOUT_ID 5
#define SERVER_STORE_NOTIFY_ID 6
#define SERVER_TRANSPORT_BINDING_ID 7
#define SERVER_REG_UPDATE_TRIGGER_ID 8
/* Server object version 1.1 resource IDs */
#define SERVER_BOOTSTRAP_UPDATE_TRIGGER_ID 9
#define SERVER_APN_LINK_ID 10
#define SERVER_TLS_DTLS_ALERT_CODE_ID 11
#define SERVER_LAST_BOOTSTRAPPED_ID 12
#define SERVER_REGISTRATION_PRIORITY_ORDER_ID 13
#define SERVER_INITIAL_REGISTRATION_DELAY_TIMER_ID 14
#define SERVER_REGISTRATION_FAILURE_BLOCK_ID 15
#define SERVER_BOOTSTRAP_ON_REGISTRATION_FAILURE_ID 16
#define SERVER_COMMUNICATION_RETRY_COUNT_ID 17
#define SERVER_COMMUNICATION_RETRY_TIMER_ID 18
#define SERVER_COMMUNICATION_SEQUENCE_DELAY_TIMER_ID 19
#define SERVER_COMMUNICATION_SEQUENCE_RETRY_TIMER_ID 20
#define SERVER_SMS_TRIGGER_ID 21
#define SERVER_PREFERRED_TRANSPORT_ID 22
#define SERVER_MUTE_SEND_ID 23
/**
* @brief Returns the default minimum period for an observation set for the server
* with object instance id given by @p obj_inst_id.
*
* @param[in] obj_inst_id Object instance id of the server object instance
* @return int32_t pmin value
*/
int32_t lwm2m_server_get_pmin(uint16_t obj_inst_id);
/**
* @brief Returns the default maximum period for an observation set for the server
* with object instance id given by @p obj_inst_id.
*
* @param[in] obj_inst_id Object instance id of the server object instance
* @return int32_t pmax value
*/
int32_t lwm2m_server_get_pmax(uint16_t obj_inst_id);
/**
* @brief Returns the Short Server ID of the server object instance with
* object instance id given by @p obj_inst_id.
*
* @param[in] obj_inst_id Object instance id of the server object
* @return SSID or negative in case not found
*/
int lwm2m_server_get_ssid(uint16_t obj_inst_id);
/**
* @brief Returns the object instance id of the server having ssid given by @p short_id.
*
* @param[in] short_id ssid of the server object
* @return Object instance id or negative in case not found
*/
int lwm2m_server_short_id_to_inst(uint16_t short_id);
/**
* @brief Check if given server instance is not disabled
*
* @param[in] obj_inst_id server instance
* @return true if not disabled, false otherwise.
*/
bool lwm2m_server_is_enabled(uint16_t obj_inst_id);
/**
* @brief Select server instance.
*
* Find possible server instance considering values on server data.
* Server candidates cannot be in disabled state and if priority values are set,
* those are compared and lowest values are considered first.
*
* If @ref obj_inst_id is NULL, this can be used to check if there are any server available.
*
* @param[out] obj_inst_id where selected server instance ID is written. Can be NULL.
* @return true if server instance was found, false otherwise.
*/
bool lwm2m_server_select(uint16_t *obj_inst_id);
/**
* @brief Disable server instance for a period of time.
*
* Timeout values can be calculated using kernel macros like K_SECONDS().
* Values like K_FOREVER or K_NO_WAIT are also accepted.
*
* @param timeout Timeout value.
* @return zero on success, negative error code otherwise.
*/
int lwm2m_server_disable(uint16_t obj_inst_id, k_timeout_t timeout);
/**
* @brief Get timepoint how long server instance is disabled.
*
* If server instance is not disabled, this still returns a valid timepoint
* that have already expired.
* If the instance id is not valid, the timepoint is set to K_FOREVER.
*
* @param obj_inst_id Server instance ID.
* @return timepoint
*/
k_timepoint_t lwm2m_server_get_disabled_time(uint16_t obj_inst_id);
/**
* @brief Get priority of given server instance.
*
* Lower values mean higher priority.
* If LwM2M server object version 1.1 is not enabled,
* this returns obj_inst_id as priority.
*
* @param obj_inst_id instance ID
* @return priority or UINT8_MAX if instance not found
*/
uint8_t lwm2m_server_get_prio(uint16_t obj_inst_id);
/**
* @brief Reset all disable-timers for all server instances.
*
*/
void lwm2m_server_reset_timestamps(void);
#if defined(CONFIG_LWM2M_SERVER_OBJECT_VERSION_1_1)
bool lwm2m_server_get_mute_send(uint16_t obj_inst_id);
#endif
#endif /* LWM2M_OBJ_SERVER_H_ */