Anjay Lite
Loading...
Searching...
No Matches
init.h
Go to the documentation of this file.
1/*
2 * Copyright 2023-2025 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_COAP_WITH_TCP) && !defined(ANJ_COAP_WITH_UDP)
35# error "At least one binding mode must be enabled"
36#endif // !defined(ANJ_COAP_WITH_TCP) && !defined(ANJ_COAP_WITH_UDP)
37
38#if defined(ANJ_COAP_WITH_UDP) && !defined(ANJ_NET_WITH_UDP)
39# error "if CoAP UDP binding is enabled, NET UDP has to be enabled too"
40#endif // defined(ANJ_COAP_WITH_UDP) && !defined(ANJ_NET_WITH_UDP)
41
42#if defined(ANJ_COAP_WITH_TCP) && !defined(ANJ_NET_WITH_TCP)
43# error "if CoAP TCP binding is enabled, NET TCP has to be enabled too"
44#endif // defined(ANJ_COAP_WITH_TCP) && !defined(ANJ_NET_WITH_TCP)
45
46#if defined(ANJ_WITH_CACHE) && !defined(ANJ_COAP_WITH_UDP)
47# error "Responses caching only makes sense for UDP"
48#endif // defined(ANJ_WITH_CACHE) && !defined(ANJ_COAP_WITH_UDP)
49
50#if defined(ANJ_WITH_CACHE) && ANJ_CACHE_ENTRIES_NUMBER <= 0
51# error "if response caching is enabled, number of cached entries has to be greater than 0"
52#endif // defined(ANJ_WITH_CACHE) && ANJ_CACHE_ENTRIES_NUMBER <= 0
53
54#if defined(ANJ_WITH_LWM2M_CBOR) && !defined(ANJ_WITH_LWM2M12)
55# error "ANJ_WITH_LWM2M_CBOR requires ANJ_WITH_LWM2M12 enabled"
56#endif // defined(ANJ_WITH_LWM2M_CBOR) && !defined(ANJ_WITH_LWM2M12)
57
58#if !defined(ANJ_WITH_SENML_CBOR) && !defined(ANJ_WITH_LWM2M_CBOR)
59# error "At least one of ANJ_WITH_SENML_CBOR or ANJ_WITH_LWM2M_CBOR must be enabled."
60#endif // !defined(ANJ_WITH_SENML_CBOR) && !defined(ANJ_WITH_LWM2M_CBOR)
61
62#if defined(ANJ_WITH_DISCOVER_ATTR) && !defined(ANJ_WITH_OBSERVE)
63# error "if discover attributes are enabled, observe module needs to be enabled"
64#endif // defined(ANJ_WITH_DISCOVER_ATTR) && !defined(ANJ_WITH_OBSERVE)
65
66#if defined(ANJ_WITH_COMPOSITE_OPERATIONS) \
67 && !defined(ANJ_DM_MAX_COMP_READ_ENTRIES)
68# error "if composite operations are enabled, their parameters have to be defined"
69#endif // defined(ANJ_WITH_COMPOSITE_OPERATIONS) &&
70 // !defined(ANJ_DM_MAX_COMP_READ_ENTRIES)
71
72#ifdef ANJ_WITH_OBSERVE
73# if !defined(ANJ_OBSERVE_MAX_OBSERVATIONS_NUMBER) \
74 || !defined(ANJ_OBSERVE_MAX_WRITE_ATTRIBUTES_NUMBER)
75# error "if observe module is enabled, its parameters has to be defined"
76# endif // !defined(ANJ_OBSERVE_MAX_OBSERVATIONS_NUMBER) ||
77 // !defined(ANJ_OBSERVE_MAX_WRITE_ATTRIBUTES_NUMBER)
78#endif // ANJ_WITH_OBSERVE
79
80#if defined(ANJ_WITH_OBSERVE_COMPOSITE) \
81 && (!defined(ANJ_WITH_OBSERVE) \
82 || !defined(ANJ_WITH_COMPOSITE_OPERATIONS))
83# error "if composite observations are enabled, observations and composite operations have to be enabled"
84#endif // defined(ANJ_WITH_OBSERVE_COMPOSITE) && (!defined(ANJ_WITH_OBSERVE) ||
85 // !defined(ANJ_WITH_COMPOSITE_OPERATIONS))
86
87#ifdef ANJ_WITH_LWM2M_SEND
88# if !defined(ANJ_LWM2M_SEND_QUEUE_SIZE)
89# error "if LwM2M Send module is enabled, its parameters has to be defined"
90# endif // !defined(ANJ_LWM2M_SEND_QUEUE_SIZE)
91#endif // ANJ_WITH_LWM2M_SEND
92
93#ifdef ANJ_WITH_DEFAULT_FOTA_OBJ
94# if !defined(ANJ_FOTA_WITH_PULL_METHOD) \
95 && !defined(ANJ_FOTA_WITH_PUSH_METHOD)
96# error "if FW Update object is enabled, at least one of push or pull methods needs to be enabled"
97# endif // !defined(ANJ_FOTA_WITH_PULL_METHOD) &&
98 // !defined(ANJ_FOTA_WITH_PUSH_METHOD)
99
100# if 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# error "if pull method is enabled, at least one of CoAP, CoAPS, HTTP, HTTPS, TCP or TLS needs to be enabled"
106# endif // defined(ANJ_FOTA_WITH_PULL_METHOD) && !defined(ANJ_FOTA_WITH_COAP)
107 // && !defined(ANJ_FOTA_WITH_COAPS) && !defined(ANJ_FOTA_WITH_HTTP)
108 // && !defined(ANJ_FOTA_WITH_HTTPS) &&
109 // !defined(ANJ_FOTA_WITH_COAP_TCP) &&
110 // !defined(ANJ_FOTA_WITH_COAPS_TCP)
111#endif // ANJ_WITH_DEFAULT_FOTA_OBJ
112
113#ifdef ANJ_WITH_DEFAULT_SECURITY_OBJ
114# if !defined(ANJ_SEC_OBJ_MAX_PUBLIC_KEY_OR_IDENTITY_SIZE) \
115 || !defined(ANJ_SEC_OBJ_MAX_SERVER_PUBLIC_KEY_SIZE) \
116 || !defined(ANJ_SEC_OBJ_MAX_SECRET_KEY_SIZE)
117# error "if default Security Object is enabled, its parameters needs to be defined"
118# endif // !defined(ANJ_SEC_OBJ_MAX_PUBLIC_KEY_OR_IDENTITY_SIZE) ||
119 // !defined(ANJ_SEC_OBJ_MAX_SERVER_PUBLIC_KEY_SIZE) ||
120 // !defined(ANJ_SEC_OBJ_MAX_SECRET_KEY_SIZE)
121#endif // ANJ_WITH_DEFAULT_SECURITY_OBJ
122
123#ifdef ANJ_WITH_COAP_DOWNLOADER
124# if !defined(ANJ_COAP_DOWNLOADER_MAX_MSG_SIZE) \
125 || !defined(ANJ_COAP_DOWNLOADER_MAX_PATHS_NUMBER)
126# error "if CoAP Downloader module is enabled, its parameters has to be defined"
127# endif
128#endif // ANJ_WITH_COAP_DOWNLOADER
129
130#ifdef ANJ_LOG_FULL
131# define _ANJ_LOG_FULL_ENABLED 1
132#else // ANJ_LOG_FULL
133# define _ANJ_LOG_FULL_ENABLED 0
134#endif // ANJ_LOG_FULL
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_ALT_IMPL_HEADER_ENABLED)
144
145#if _ANJ_LOG_TYPES_ENABLED > 1
146# error "Only one logger type can be enabled at a time."
147#endif // _ANJ_LOG_TYPES_ENABLED > 1
148
149#ifdef ANJ_LOG_HANDLER_OUTPUT_STDERR
150# define _ANJ_LOG_HANDLER_OUTPUT_STDERR_ENABLED 1
151#else // ANJ_LOG_HANDLER_OUTPUT_STDERR
152# define _ANJ_LOG_HANDLER_OUTPUT_STDERR_ENABLED 0
153#endif // ANJ_LOG_HANDLER_OUTPUT_STDERR
154
155#ifdef ANJ_LOG_HANDLER_OUTPUT_ALT
156# define _ANJ_LOG_HANDLER_OUTPUT_ALT_ENABLED 1
157#else // ANJ_LOG_HANDLER_OUTPUT_ALT
158# define _ANJ_LOG_HANDLER_OUTPUT_ALT_ENABLED 0
159#endif // ANJ_LOG_HANDLER_OUTPUT_ALT
160
161#define _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED \
162 (_ANJ_LOG_HANDLER_OUTPUT_STDERR_ENABLED \
163 + _ANJ_LOG_HANDLER_OUTPUT_ALT_ENABLED)
164
165#if _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED > 1
166# error "Only one log handler output type can be enabled at a time."
167#endif // _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED > 1
168
169#if _ANJ_LOG_TYPES_ENABLED == 1
170# define _ANJ_LOG_ENABLED
171#endif // _ANJ_LOG_TYPES_ENABLED == 1
172
173#if defined(_ANJ_LOG_ENABLED) && !defined(ANJ_LOG_ALT_IMPL_HEADER)
174# define _ANJ_LOG_USES_BUILTIN_HANDLER_IMPL
175
176# if _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED == 0
177# error "Log handler output type must be defined when using built-in log handler implementation."
178# endif // _ANJ_LOG_HANDLER_OUTPUT_TYPES_ENABLED == 0
179
180# if !defined(ANJ_LOG_FORMATTER_BUF_SIZE) || ANJ_LOG_FORMATTER_BUF_SIZE <= 0
181# error "Log formatter buffer size must be greater than 0 when using built-in log handler implementation."
182# endif // !defined(ANJ_LOG_FORMATTER_BUF_SIZE) || ANJ_LOG_FORMATTER_BUF_SIZE
183 // <= 0
184#endif // defined(_ANJ_LOG_ENABLED) && !defined(ANJ_LOG_ALT_IMPL_HEADER)
185
186#if !defined(ANJ_WITH_SECURITY)
187# ifdef ANJ_WITH_CERTIFICATES
188# error "ANJ_WITH_CERTIFICATES requires secure network transport to be enabled"
189# endif // ANJ_WITH_CERTIFICATES
190# ifdef ANJ_WITH_EXTERNAL_CRYPTO_STORAGE
191# error "ANJ_WITH_EXTERNAL_CRYPTO_STORAGE requires secure network transport to be enabled"
192# endif // ANJ_WITH_EXTERNAL_CRYPTO_STORAGE
193#endif // !defined(ANJ_WITH_SECURITY)
194
195#ifdef ANJ_WITH_MBEDTLS
196
197# define ANJ_UINT32_MAX 4294967295U
198
199# if ANJ_MBEDTLS_PSK_IDENTITY_MAX_LEN < 0
200# error "Wrong max length for psk identity"
201# endif
202
203# if ANJ_MBEDTLS_HS_INITIAL_TIMEOUT_VALUE_MS < 0 \
204 || ANJ_MBEDTLS_HS_INITIAL_TIMEOUT_VALUE_MS > ANJ_UINT32_MAX \
205 || ANJ_MBEDTLS_HS_MAXIMUM_TIMEOUT_VALUE_MS < 0 \
206 || ANJ_MBEDTLS_HS_MAXIMUM_TIMEOUT_VALUE_MS > ANJ_UINT32_MAX
207# error "Wrong handshake timeout values"
208# endif
209
210# undef ANJ_UINT32_MAX
211
212#endif // ANJ_WITH_MBEDTLS
213
214#ifdef __cplusplus
215}
216#endif
217
220#endif // ANJ_INIT_H
Build-time configuration macros for Anjay Lite.