Anjay Lite
Loading...
Searching...
No Matches
init.h
Go to the documentation of this file.
1/*
2 * Copyright 2023-2026 AVSystem <avsystem@avsystem.com>
3 * AVSystem Anjay Lite LwM2M SDK
4 * All rights reserved.
5 *
6 * Licensed under AVSystem Anjay Lite LwM2M Client SDK - Non-Commercial License.
7 * See the attached LICENSE file for details.
8 */
9
23#ifndef ANJ_INIT_H
24#define ANJ_INIT_H
25
26#include <anj/anj_config.h> // IWYU pragma: export
27
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#if !defined(ANJ_NET_WITH_UDP) && !defined(ANJ_NET_WITH_DTLS) \
35 && !defined(ANJ_NET_WITH_NON_IP_BINDING)
36# error "at least one of ANJ_NET_WITH_UDP, ANJ_NET_WITH_DTLS, ANJ_NET_WITH_NON_IP_BINDING should be enabled"
37#endif // !defined(ANJ_NET_WITH_UDP) && !defined(ANJ_NET_WITH_DTLS) &&
38 // !defined(ANJ_NET_WITH_NON_IP_BINDING)
39
40#if defined(ANJ_WITH_CACHE) && ANJ_CACHE_ENTRIES_NUMBER <= 0
41# error "if response caching is enabled, number of cached entries has to be greater than 0"
42#endif // defined(ANJ_WITH_CACHE) && ANJ_CACHE_ENTRIES_NUMBER <= 0
43
44#if defined(ANJ_WITH_RST_AS_CANCEL_OBSERVE) && !defined(ANJ_WITH_OBSERVE)
45# error "RST as Cancel Observe only makes sense when Observations are supported"
46#endif // defined(ANJ_WITH_RST_AS_CANCEL_OBSERVE) && !defined(ANJ_WITH_OBSERVE)
47
48#if defined(ANJ_WITH_LWM2M_CBOR) && !defined(ANJ_WITH_LWM2M12)
49# error "ANJ_WITH_LWM2M_CBOR requires ANJ_WITH_LWM2M12 enabled"
50#endif // defined(ANJ_WITH_LWM2M_CBOR) && !defined(ANJ_WITH_LWM2M12)
51
52#if !defined(ANJ_WITH_SENML_CBOR) && !defined(ANJ_WITH_LWM2M_CBOR)
53# error "At least one of ANJ_WITH_SENML_CBOR or ANJ_WITH_LWM2M_CBOR must be enabled."
54#endif // !defined(ANJ_WITH_SENML_CBOR) && !defined(ANJ_WITH_LWM2M_CBOR)
55
56#if defined(ANJ_WITH_DISCOVER_ATTR) && !defined(ANJ_WITH_OBSERVE)
57# error "if discover attributes are enabled, observe module needs to be enabled"
58#endif // defined(ANJ_WITH_DISCOVER_ATTR) && !defined(ANJ_WITH_OBSERVE)
59
60#if defined(ANJ_WITH_COMPOSITE_OPERATIONS) \
61 && !defined(ANJ_DM_MAX_COMP_READ_ENTRIES)
62# error "if composite operations are enabled, their parameters have to be defined"
63#endif // defined(ANJ_WITH_COMPOSITE_OPERATIONS) &&
64 // !defined(ANJ_DM_MAX_COMP_READ_ENTRIES)
65
66#ifdef ANJ_WITH_OBSERVE
67# if !defined(ANJ_OBSERVE_MAX_OBSERVATIONS_NUMBER) \
68 || !defined(ANJ_OBSERVE_MAX_WRITE_ATTRIBUTES_NUMBER)
69# error "if observe module is enabled, its parameters has to be defined"
70# endif // !defined(ANJ_OBSERVE_MAX_OBSERVATIONS_NUMBER) ||
71 // !defined(ANJ_OBSERVE_MAX_WRITE_ATTRIBUTES_NUMBER)
72#endif // ANJ_WITH_OBSERVE
73
74#if defined(ANJ_WITH_OBSERVE_COMPOSITE) \
75 && (!defined(ANJ_WITH_OBSERVE) \
76 || !defined(ANJ_WITH_COMPOSITE_OPERATIONS))
77# error "if composite observations are enabled, observations and composite operations have to be enabled"
78#endif // defined(ANJ_WITH_OBSERVE_COMPOSITE) && (!defined(ANJ_WITH_OBSERVE) ||
79 // !defined(ANJ_WITH_COMPOSITE_OPERATIONS))
80
81#ifdef ANJ_WITH_LWM2M_SEND
82# if !defined(ANJ_LWM2M_SEND_QUEUE_SIZE)
83# error "if LwM2M Send module is enabled, its parameters has to be defined"
84# endif // !defined(ANJ_LWM2M_SEND_QUEUE_SIZE)
85#endif // ANJ_WITH_LWM2M_SEND
86
87#ifdef ANJ_WITH_DEFAULT_FOTA_OBJ
88# if !defined(ANJ_FOTA_WITH_PULL_METHOD) \
89 && !defined(ANJ_FOTA_WITH_PUSH_METHOD)
90# error "if FW Update object is enabled, at least one of push or pull methods needs to be enabled"
91# endif // !defined(ANJ_FOTA_WITH_PULL_METHOD) &&
92 // !defined(ANJ_FOTA_WITH_PUSH_METHOD)
93
94# if defined(ANJ_FOTA_WITH_PULL_METHOD) && !defined(ANJ_FOTA_WITH_COAP) \
95 && !defined(ANJ_FOTA_WITH_COAPS) && !defined(ANJ_FOTA_WITH_HTTP) \
96 && !defined(ANJ_FOTA_WITH_HTTPS) \
97 && !defined(ANJ_FOTA_WITH_COAP_TCP) \
98 && !defined(ANJ_FOTA_WITH_COAPS_TCP)
99# error "if pull method is enabled, at least one of CoAP, CoAPS, HTTP, HTTPS, TCP or TLS needs to be enabled"
100# endif // defined(ANJ_FOTA_WITH_PULL_METHOD) && !defined(ANJ_FOTA_WITH_COAP)
101 // && !defined(ANJ_FOTA_WITH_COAPS) && !defined(ANJ_FOTA_WITH_HTTP)
102 // && !defined(ANJ_FOTA_WITH_HTTPS) &&
103 // !defined(ANJ_FOTA_WITH_COAP_TCP) &&
104 // !defined(ANJ_FOTA_WITH_COAPS_TCP)
105#endif // ANJ_WITH_DEFAULT_FOTA_OBJ
106
107#ifdef ANJ_WITH_DEFAULT_SECURITY_OBJ
108# if !defined(ANJ_SEC_OBJ_MAX_PUBLIC_KEY_OR_IDENTITY_SIZE) \
109 || !defined(ANJ_SEC_OBJ_MAX_SERVER_PUBLIC_KEY_SIZE) \
110 || !defined(ANJ_SEC_OBJ_MAX_SECRET_KEY_SIZE)
111# error "if default Security Object is enabled, its parameters needs to be defined"
112# endif // !defined(ANJ_SEC_OBJ_MAX_PUBLIC_KEY_OR_IDENTITY_SIZE) ||
113 // !defined(ANJ_SEC_OBJ_MAX_SERVER_PUBLIC_KEY_SIZE) ||
114 // !defined(ANJ_SEC_OBJ_MAX_SECRET_KEY_SIZE)
115#endif // ANJ_WITH_DEFAULT_SECURITY_OBJ
116
117#ifdef ANJ_WITH_COAP_DOWNLOADER
118# if !defined(ANJ_COAP_DOWNLOADER_MAX_MSG_SIZE) \
119 || !defined(ANJ_COAP_DOWNLOADER_MAX_PATHS_NUMBER)
120# error "if CoAP Downloader module is enabled, its parameters has to be defined"
121# endif
122#endif // ANJ_WITH_COAP_DOWNLOADER
123
124#ifdef ANJ_LOG_FULL
125# define _ANJ_LOG_FULL_ENABLED 1
126#else // ANJ_LOG_FULL
127# define _ANJ_LOG_FULL_ENABLED 0
128#endif // ANJ_LOG_FULL
129
130#ifdef ANJ_LOG_MICRO
131# define _ANJ_LOG_MICRO_ENABLED 1
132#else // ANJ_LOG_MICRO
133# define _ANJ_LOG_MICRO_ENABLED 0
134#endif // ANJ_LOG_MICRO
135
136#ifdef ANJ_LOG_ALT_IMPL_HEADER
137# define _ANJ_LOG_ALT_IMPL_HEADER_ENABLED 1
138#else // ANJ_LOG_ALT_IMPL_HEADER
139# define _ANJ_LOG_ALT_IMPL_HEADER_ENABLED 0
140#endif // ANJ_LOG_ALT_IMPL_HEADER
141
142#define _ANJ_LOG_TYPES_ENABLED \
143 (_ANJ_LOG_FULL_ENABLED + _ANJ_LOG_MICRO_ENABLED \
144 + _ANJ_LOG_ALT_IMPL_HEADER_ENABLED)
145
146#if _ANJ_LOG_TYPES_ENABLED > 1
147# error "Only one logger type can be enabled at a time."
148#endif // _ANJ_LOG_TYPES_ENABLED > 1
149
150#ifdef ANJ_LOG_HANDLER_OUTPUT_STDERR
151# define _ANJ_LOG_HANDLER_OUTPUT_STDERR_ENABLED 1
152#else // ANJ_LOG_HANDLER_OUTPUT_STDERR
153# define _ANJ_LOG_HANDLER_OUTPUT_STDERR_ENABLED 0
154#endif // ANJ_LOG_HANDLER_OUTPUT_STDERR
155
156#ifdef ANJ_LOG_HANDLER_OUTPUT_ALT
157# define _ANJ_LOG_HANDLER_OUTPUT_ALT_ENABLED 1
158#else // ANJ_LOG_HANDLER_OUTPUT_ALT
159# define _ANJ_LOG_HANDLER_OUTPUT_ALT_ENABLED 0
160#endif // ANJ_LOG_HANDLER_OUTPUT_ALT
161
162#define _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED \
163 (_ANJ_LOG_HANDLER_OUTPUT_STDERR_ENABLED \
164 + _ANJ_LOG_HANDLER_OUTPUT_ALT_ENABLED)
165
166#if _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED > 1
167# error "Only one log handler output type can be enabled at a time."
168#endif // _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED > 1
169
170#if _ANJ_LOG_TYPES_ENABLED == 1
171# define _ANJ_LOG_ENABLED
172#endif // _ANJ_LOG_TYPES_ENABLED == 1
173
174#if defined(_ANJ_LOG_ENABLED) && !defined(ANJ_LOG_ALT_IMPL_HEADER)
175# define _ANJ_LOG_USES_BUILTIN_HANDLER_IMPL
176
177# if _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED == 0
178# error "Log handler output type must be defined when using built-in log handler implementation."
179# endif // _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED == 0
180
181# if !defined(ANJ_LOG_FORMATTER_BUF_SIZE) || ANJ_LOG_FORMATTER_BUF_SIZE <= 0
182# error "Log formatter buffer size must be greater than 0 when using built-in log handler implementation."
183# endif // !defined(ANJ_LOG_FORMATTER_BUF_SIZE) || ANJ_LOG_FORMATTER_BUF_SIZE
184 // <= 0
185#endif // defined(_ANJ_LOG_ENABLED) && !defined(ANJ_LOG_ALT_IMPL_HEADER)
186
187#if !defined(ANJ_WITH_SECURITY)
188# ifdef ANJ_WITH_CERTIFICATES
189# error "ANJ_WITH_CERTIFICATES requires secure network transport to be enabled"
190# endif // ANJ_WITH_CERTIFICATES
191# ifdef ANJ_WITH_EXTERNAL_CRYPTO_STORAGE
192# error "ANJ_WITH_EXTERNAL_CRYPTO_STORAGE requires secure network transport to be enabled"
193# endif // ANJ_WITH_EXTERNAL_CRYPTO_STORAGE
194#endif // !defined(ANJ_WITH_SECURITY)
195
196#ifdef ANJ_WITH_MBEDTLS
197
198# define ANJ_UINT32_MAX 4294967295U
199
200# if ANJ_MBEDTLS_PSK_IDENTITY_MAX_LEN < 0
201# error "Wrong max length for psk identity"
202# endif
203
204# if ANJ_MBEDTLS_HS_INITIAL_TIMEOUT_VALUE_MS < 0 \
205 || ANJ_MBEDTLS_HS_INITIAL_TIMEOUT_VALUE_MS > ANJ_UINT32_MAX \
206 || ANJ_MBEDTLS_HS_MAXIMUM_TIMEOUT_VALUE_MS < 0 \
207 || ANJ_MBEDTLS_HS_MAXIMUM_TIMEOUT_VALUE_MS > ANJ_UINT32_MAX
208# error "Wrong handshake timeout values"
209# endif
210
211# undef ANJ_UINT32_MAX
212
213#endif // ANJ_WITH_MBEDTLS
214
215#ifdef __cplusplus
216}
217#endif
218
221#endif // ANJ_INIT_H
Build-time configuration macros for Anjay Lite.