Program Listing for File defs.h
↰ Return to documentation for file (include_public/anj/defs.h)
/*
* Copyright 2023-2026 AVSystem <avsystem@avsystem.com>
* AVSystem Anjay Lite LwM2M SDK
* All rights reserved.
*
* Licensed under AVSystem Anjay Lite LwM2M Client SDK - Non-Commercial License.
* See the attached LICENSE file for details.
*/
#include <anj/init.h>
#ifndef ANJ_DEFS_H
# define ANJ_DEFS_H
# include <assert.h>
# include <math.h>
# include <stdbool.h>
# include <stdint.h>
# include <stdlib.h>
# include <anj/time.h>
# ifdef __cplusplus
extern "C" {
# endif
# define ANJ_COAP_CODE_CLASS_MASK 0xE0
# define ANJ_COAP_CODE_CLASS_SHIFT 5
# define ANJ_COAP_CODE_DETAIL_MASK 0x1F
# define ANJ_COAP_CODE_DETAIL_SHIFT 0
# define ANJ_COAP_CODE(cls, detail) \
((((cls) << ANJ_COAP_CODE_CLASS_SHIFT) & ANJ_COAP_CODE_CLASS_MASK) \
| (((detail) << ANJ_COAP_CODE_DETAIL_SHIFT) \
& ANJ_COAP_CODE_DETAIL_MASK))
// clang-format off
#define ANJ_COAP_CODE_EMPTY ANJ_COAP_CODE(0, 0)
#define ANJ_COAP_CODE_GET ANJ_COAP_CODE(0, 1)
#define ANJ_COAP_CODE_POST ANJ_COAP_CODE(0, 2)
#define ANJ_COAP_CODE_PUT ANJ_COAP_CODE(0, 3)
#define ANJ_COAP_CODE_DELETE ANJ_COAP_CODE(0, 4)
#define ANJ_COAP_CODE_FETCH ANJ_COAP_CODE(0, 5)
#define ANJ_COAP_CODE_PATCH ANJ_COAP_CODE(0, 6)
#define ANJ_COAP_CODE_IPATCH ANJ_COAP_CODE(0, 7)
#define ANJ_COAP_CODE_CREATED ANJ_COAP_CODE(2, 1)
#define ANJ_COAP_CODE_DELETED ANJ_COAP_CODE(2, 2)
#define ANJ_COAP_CODE_VALID ANJ_COAP_CODE(2, 3)
#define ANJ_COAP_CODE_CHANGED ANJ_COAP_CODE(2, 4)
#define ANJ_COAP_CODE_CONTENT ANJ_COAP_CODE(2, 5)
#define ANJ_COAP_CODE_CONTINUE ANJ_COAP_CODE(2, 31)
#define ANJ_COAP_CODE_BAD_REQUEST ANJ_COAP_CODE(4, 0)
#define ANJ_COAP_CODE_UNAUTHORIZED ANJ_COAP_CODE(4, 1)
#define ANJ_COAP_CODE_BAD_OPTION ANJ_COAP_CODE(4, 2)
#define ANJ_COAP_CODE_FORBIDDEN ANJ_COAP_CODE(4, 3)
#define ANJ_COAP_CODE_NOT_FOUND ANJ_COAP_CODE(4, 4)
#define ANJ_COAP_CODE_METHOD_NOT_ALLOWED ANJ_COAP_CODE(4, 5)
#define ANJ_COAP_CODE_NOT_ACCEPTABLE ANJ_COAP_CODE(4, 6)
#define ANJ_COAP_CODE_REQUEST_ENTITY_INCOMPLETE ANJ_COAP_CODE(4, 8)
#define ANJ_COAP_CODE_PRECONDITION_FAILED ANJ_COAP_CODE(4, 12)
#define ANJ_COAP_CODE_REQUEST_ENTITY_TOO_LARGE ANJ_COAP_CODE(4, 13)
#define ANJ_COAP_CODE_UNSUPPORTED_CONTENT_FORMAT ANJ_COAP_CODE(4, 15)
#define ANJ_COAP_CODE_INTERNAL_SERVER_ERROR ANJ_COAP_CODE(5, 0)
#define ANJ_COAP_CODE_NOT_IMPLEMENTED ANJ_COAP_CODE(5, 1)
#define ANJ_COAP_CODE_BAD_GATEWAY ANJ_COAP_CODE(5, 2)
#define ANJ_COAP_CODE_SERVICE_UNAVAILABLE ANJ_COAP_CODE(5, 3)
#define ANJ_COAP_CODE_GATEWAY_TIMEOUT ANJ_COAP_CODE(5, 4)
#define ANJ_COAP_CODE_PROXYING_NOT_SUPPORTED ANJ_COAP_CODE(5, 5)
// clang-format on
# define ANJ_OBJ_ID_SECURITY 0U
# define ANJ_OBJ_ID_SERVER 1U
# define ANJ_OBJ_ID_ACCESS_CONTROL 2U
# define ANJ_OBJ_ID_DEVICE 3U
# define ANJ_OBJ_ID_FIRMWARE_UPDATE 5U
# define ANJ_OBJ_ID_OSCORE 21U
# define ANJ_I64_STR_MAX_LEN (sizeof("-9223372036854775808") - 1)
# define ANJ_U16_STR_MAX_LEN (sizeof("65535") - 1)
# define ANJ_U32_STR_MAX_LEN (sizeof("4294967295") - 1)
# define ANJ_U64_STR_MAX_LEN (sizeof("18446744073709551615") - 1)
# define ANJ_DOUBLE_STR_MAX_LEN (sizeof("-2.2250738585072014E-308") - 1)
# define ANJ_ATTR_UINT_NONE (UINT32_MAX)
# define ANJ_ATTR_DOUBLE_NONE (NAN)
# define ANJ_IO_NEED_NEXT_CALL 4
typedef uint16_t anj_oid_t;
typedef uint16_t anj_iid_t;
typedef uint16_t anj_rid_t;
typedef uint16_t anj_riid_t;
typedef struct anj_struct anj_t;
# ifdef ANJ_WITH_COAP_DOWNLOADER
typedef struct _anj_coap_downloader_struct anj_coap_downloader_t;
# endif // ANJ_WITH_COAP_DOWNLOADER
# ifdef ANJ_WITH_NTP
typedef struct _anj_ntp_struct anj_ntp_t;
# endif // ANJ_WITH_NTP
# define ANJ_SERVER_URI_MAX_SIZE 256
# define ANJ_DISABLE_TIMEOUT_DEFAULT_VALUE 86400
# define ANJ_COMMUNICATION_RETRY_RES_DEFAULT \
(anj_communication_retry_res_t) { \
.retry_count = 5, \
.retry_timer = 60, \
.seq_delay_timer = 24 * 60 * 60, \
.seq_retry_count = 1 \
}
# define ANJ_EXCHANGE_SERVER_REQUEST_TIMEOUT \
anj_time_duration_new(50, ANJ_TIME_UNIT_S)
# define ANJ_EXCHANGE_UDP_TX_PARAMS_DEFAULT \
(anj_exchange_udp_tx_params_t) { \
.ack_timeout = anj_time_duration_new(2, ANJ_TIME_UNIT_S), \
.ack_random_factor = 1.5, \
.max_retransmit = 4 \
}
typedef struct {
uint16_t retry_count;
uint32_t retry_timer;
uint32_t seq_delay_timer;
uint16_t seq_retry_count;
} anj_communication_retry_res_t;
typedef struct {
anj_time_duration_t ack_timeout;
double ack_random_factor;
uint16_t max_retransmit;
} anj_exchange_udp_tx_params_t;
typedef enum {
ANJ_ID_OID,
ANJ_ID_IID,
ANJ_ID_RID,
ANJ_ID_RIID,
ANJ_URI_PATH_MAX_LENGTH
} anj_id_type_t;
typedef struct {
uint16_t ids[ANJ_URI_PATH_MAX_LENGTH];
size_t uri_len;
} anj_uri_path_t;
typedef uint16_t anj_data_type_t;
# define ANJ_DATA_TYPE_NULL ((anj_data_type_t) 0)
# define ANJ_DATA_TYPE_BYTES ((anj_data_type_t) (1 << 0))
# define ANJ_DATA_TYPE_STRING ((anj_data_type_t) (1 << 1))
# define ANJ_DATA_TYPE_INT ((anj_data_type_t) (1 << 2))
# define ANJ_DATA_TYPE_DOUBLE ((anj_data_type_t) (1 << 3))
# define ANJ_DATA_TYPE_BOOL ((anj_data_type_t) (1 << 4))
# define ANJ_DATA_TYPE_OBJLNK ((anj_data_type_t) (1 << 5))
# define ANJ_DATA_TYPE_UINT ((anj_data_type_t) (1 << 6))
# define ANJ_DATA_TYPE_TIME ((anj_data_type_t) (1 << 7))
# define ANJ_DATA_TYPE_ANY \
((anj_data_type_t) (ANJ_DATA_TYPE_BYTES | ANJ_DATA_TYPE_STRING \
| ANJ_DATA_TYPE_INT | ANJ_DATA_TYPE_DOUBLE \
| ANJ_DATA_TYPE_BOOL | ANJ_DATA_TYPE_OBJLNK \
| ANJ_DATA_TYPE_UINT | ANJ_DATA_TYPE_TIME))
# ifdef ANJ_WITH_EXTERNAL_DATA
# define ANJ_DATA_TYPE_FLAG_EXTERNAL ((anj_data_type_t) (1 << 15))
# define ANJ_DATA_TYPE_EXTERNAL_BYTES \
((anj_data_type_t) (ANJ_DATA_TYPE_BYTES \
| ANJ_DATA_TYPE_FLAG_EXTERNAL))
# define ANJ_DATA_TYPE_EXTERNAL_STRING \
((anj_data_type_t) (ANJ_DATA_TYPE_STRING \
| ANJ_DATA_TYPE_FLAG_EXTERNAL))
typedef int anj_get_external_data_t(void *buffer,
size_t *inout_size,
size_t offset,
void *user_args);
typedef int anj_open_external_data_t(void *user_args);
typedef void anj_close_external_data_t(void *user_args);
# endif // ANJ_WITH_EXTERNAL_DATA
typedef struct {
const void *data;
size_t offset;
size_t chunk_length;
size_t full_length_hint;
} anj_bytes_or_string_value_t;
typedef struct {
anj_oid_t oid;
anj_iid_t iid;
} anj_objlnk_value_t;
# define ANJ_NULL_LINK \
(anj_objlnk_value_t) { \
.oid = ANJ_ID_INVALID, \
.iid = ANJ_ID_INVALID \
}
typedef union {
anj_bytes_or_string_value_t bytes_or_string;
# ifdef ANJ_WITH_EXTERNAL_DATA
struct {
anj_get_external_data_t *get_external_data;
anj_open_external_data_t *open_external_data;
anj_close_external_data_t *close_external_data;
void *user_args;
} external_data;
# endif // ANJ_WITH_EXTERNAL_DATA
int64_t int_value;
uint64_t uint_value;
double double_value;
bool bool_value;
anj_objlnk_value_t objlnk;
int64_t time_value;
} anj_res_value_t;
typedef struct anj_io_out_entry_struct {
anj_data_type_t type;
anj_res_value_t value;
anj_uri_path_t path;
double timestamp;
} anj_io_out_entry_t;
# ifdef __cplusplus
}
# endif
#endif // ANJ_DEFS_H