Anjay Lite
Loading...
Searching...
No Matches
defs.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
10#include <anj/init.h>
11
12#ifndef ANJ_DEFS_H
13# define ANJ_DEFS_H
14
15# include <assert.h>
16# include <math.h>
17# include <stdbool.h>
18# include <stdint.h>
19# include <stdlib.h>
20
21# ifdef __cplusplus
22extern "C" {
23# endif
24
29# define ANJ_COAP_CODE_CLASS_MASK 0xE0
30# define ANJ_COAP_CODE_CLASS_SHIFT 5
31# define ANJ_COAP_CODE_DETAIL_MASK 0x1F
32# define ANJ_COAP_CODE_DETAIL_SHIFT 0
33
34# define ANJ_COAP_CODE(cls, detail) \
35 ((((cls) << ANJ_COAP_CODE_CLASS_SHIFT) & ANJ_COAP_CODE_CLASS_MASK) \
36 | (((detail) << ANJ_COAP_CODE_DETAIL_SHIFT) \
37 & ANJ_COAP_CODE_DETAIL_MASK))
38
48// clang-format off
49#define ANJ_COAP_CODE_EMPTY ANJ_COAP_CODE(0, 0)
50
51#define ANJ_COAP_CODE_GET ANJ_COAP_CODE(0, 1)
52#define ANJ_COAP_CODE_POST ANJ_COAP_CODE(0, 2)
53#define ANJ_COAP_CODE_PUT ANJ_COAP_CODE(0, 3)
54#define ANJ_COAP_CODE_DELETE ANJ_COAP_CODE(0, 4)
56#define ANJ_COAP_CODE_FETCH ANJ_COAP_CODE(0, 5)
57#define ANJ_COAP_CODE_PATCH ANJ_COAP_CODE(0, 6)
58#define ANJ_COAP_CODE_IPATCH ANJ_COAP_CODE(0, 7)
59
60#define ANJ_COAP_CODE_CREATED ANJ_COAP_CODE(2, 1)
61#define ANJ_COAP_CODE_DELETED ANJ_COAP_CODE(2, 2)
62#define ANJ_COAP_CODE_VALID ANJ_COAP_CODE(2, 3)
63#define ANJ_COAP_CODE_CHANGED ANJ_COAP_CODE(2, 4)
64#define ANJ_COAP_CODE_CONTENT ANJ_COAP_CODE(2, 5)
65#define ANJ_COAP_CODE_CONTINUE ANJ_COAP_CODE(2, 31)
66
67#define ANJ_COAP_CODE_BAD_REQUEST ANJ_COAP_CODE(4, 0)
68#define ANJ_COAP_CODE_UNAUTHORIZED ANJ_COAP_CODE(4, 1)
69#define ANJ_COAP_CODE_BAD_OPTION ANJ_COAP_CODE(4, 2)
70#define ANJ_COAP_CODE_FORBIDDEN ANJ_COAP_CODE(4, 3)
71#define ANJ_COAP_CODE_NOT_FOUND ANJ_COAP_CODE(4, 4)
72#define ANJ_COAP_CODE_METHOD_NOT_ALLOWED ANJ_COAP_CODE(4, 5)
73#define ANJ_COAP_CODE_NOT_ACCEPTABLE ANJ_COAP_CODE(4, 6)
74#define ANJ_COAP_CODE_REQUEST_ENTITY_INCOMPLETE ANJ_COAP_CODE(4, 8)
75#define ANJ_COAP_CODE_PRECONDITION_FAILED ANJ_COAP_CODE(4, 12)
76#define ANJ_COAP_CODE_REQUEST_ENTITY_TOO_LARGE ANJ_COAP_CODE(4, 13)
77#define ANJ_COAP_CODE_UNSUPPORTED_CONTENT_FORMAT ANJ_COAP_CODE(4, 15)
78
79#define ANJ_COAP_CODE_INTERNAL_SERVER_ERROR ANJ_COAP_CODE(5, 0)
80#define ANJ_COAP_CODE_NOT_IMPLEMENTED ANJ_COAP_CODE(5, 1)
81#define ANJ_COAP_CODE_BAD_GATEWAY ANJ_COAP_CODE(5, 2)
82#define ANJ_COAP_CODE_SERVICE_UNAVAILABLE ANJ_COAP_CODE(5, 3)
83#define ANJ_COAP_CODE_GATEWAY_TIMEOUT ANJ_COAP_CODE(5, 4)
84#define ANJ_COAP_CODE_PROXYING_NOT_SUPPORTED ANJ_COAP_CODE(5, 5)
85
86#define ANJ_COAP_CODE_CSM ANJ_COAP_CODE(7, 1)
87#define ANJ_COAP_CODE_PING ANJ_COAP_CODE(7, 2)
88#define ANJ_COAP_CODE_PONG ANJ_COAP_CODE(7, 3)
89#define ANJ_COAP_CODE_RELEASE ANJ_COAP_CODE(7, 4)
90#define ANJ_COAP_CODE_ABORT ANJ_COAP_CODE(7, 5)
91// clang-format on
92
93# define ANJ_OBJ_ID_SECURITY 0U
94# define ANJ_OBJ_ID_SERVER 1U
95# define ANJ_OBJ_ID_ACCESS_CONTROL 2U
96# define ANJ_OBJ_ID_DEVICE 3U
97# define ANJ_OBJ_ID_FIRMWARE_UPDATE 5U
98# define ANJ_OBJ_ID_OSCORE 21U
99
101# define ANJ_I64_STR_MAX_LEN (sizeof("-9223372036854775808") - 1)
102# define ANJ_U16_STR_MAX_LEN (sizeof("65535") - 1)
103# define ANJ_U32_STR_MAX_LEN (sizeof("4294967295") - 1)
104# define ANJ_U64_STR_MAX_LEN (sizeof("18446744073709551615") - 1)
105# define ANJ_DOUBLE_STR_MAX_LEN (sizeof("-2.2250738585072014E-308") - 1)
106
107# define ANJ_ATTR_UINT_NONE (UINT32_MAX)
108# define ANJ_ATTR_DOUBLE_NONE (NAN)
109
115# define ANJ_IO_NEED_NEXT_CALL 4
116
118typedef uint16_t anj_oid_t;
119
121typedef uint16_t anj_iid_t;
122
124typedef uint16_t anj_rid_t;
125
127typedef uint16_t anj_riid_t;
128
133typedef struct anj_struct anj_t;
134
135# ifdef ANJ_WITH_COAP_DOWNLOADER
141typedef struct anj_coap_downloader_struct anj_coap_downloader_t;
142# endif // ANJ_WITH_COAP_DOWNLOADER
143
147# define ANJ_SERVER_URI_MAX_SIZE 255
148
152# define ANJ_DISABLE_TIMEOUT_DEFAULT_VALUE 86400
153
157# define ANJ_COMMUNICATION_RETRY_RES_DEFAULT \
158 (anj_communication_retry_res_t) { \
159 .retry_count = 5, \
160 .retry_timer = 60, \
161 .seq_delay_timer = 24 * 60 * 60, \
162 .seq_retry_count = 1 \
163 }
164
166typedef struct {
168 uint16_t retry_count;
170 uint32_t retry_timer;
176
192
203
213typedef struct {
215 size_t uri_len;
217
219typedef uint16_t anj_data_type_t;
220
238# define ANJ_DATA_TYPE_NULL ((anj_data_type_t) 0)
239
246# define ANJ_DATA_TYPE_BYTES ((anj_data_type_t) (1 << 0))
247
257# define ANJ_DATA_TYPE_STRING ((anj_data_type_t) (1 << 1))
258
265# define ANJ_DATA_TYPE_INT ((anj_data_type_t) (1 << 2))
266
273# define ANJ_DATA_TYPE_DOUBLE ((anj_data_type_t) (1 << 3))
274
281# define ANJ_DATA_TYPE_BOOL ((anj_data_type_t) (1 << 4))
282
289# define ANJ_DATA_TYPE_OBJLNK ((anj_data_type_t) (1 << 5))
290
297# define ANJ_DATA_TYPE_UINT ((anj_data_type_t) (1 << 6))
298
305# define ANJ_DATA_TYPE_TIME ((anj_data_type_t) (1 << 7))
306
315# define ANJ_DATA_TYPE_ANY \
316 ((anj_data_type_t) (ANJ_DATA_TYPE_BYTES | ANJ_DATA_TYPE_STRING \
317 | ANJ_DATA_TYPE_INT | ANJ_DATA_TYPE_DOUBLE \
318 | ANJ_DATA_TYPE_BOOL | ANJ_DATA_TYPE_OBJLNK \
319 | ANJ_DATA_TYPE_UINT | ANJ_DATA_TYPE_TIME))
320
321# ifdef ANJ_WITH_EXTERNAL_DATA
341# define ANJ_DATA_TYPE_FLAG_EXTERNAL ((anj_data_type_t) (1 << 15))
342
350# define ANJ_DATA_TYPE_EXTERNAL_BYTES \
351 ((anj_data_type_t) (ANJ_DATA_TYPE_BYTES \
352 | ANJ_DATA_TYPE_FLAG_EXTERNAL))
353
361# define ANJ_DATA_TYPE_EXTERNAL_STRING \
362 ((anj_data_type_t) (ANJ_DATA_TYPE_STRING \
363 | ANJ_DATA_TYPE_FLAG_EXTERNAL))
364
395typedef int anj_get_external_data_t(void *buffer,
396 size_t *inout_size,
397 size_t offset,
398 void *user_args);
399
415typedef int anj_open_external_data_t(void *user_args);
416
427typedef void anj_close_external_data_t(void *user_args);
428# endif // ANJ_WITH_EXTERNAL_DATA
429
433typedef struct {
442 const void *data;
443
452 size_t offset;
453
463
478
486
491typedef union {
497
498# ifdef ANJ_WITH_EXTERNAL_DATA
506 struct {
516
523
531
540 } external_data;
541# endif // ANJ_WITH_EXTERNAL_DATA
542
547 int64_t int_value;
548
553 uint64_t uint_value;
554
560
566
572
577 int64_t time_value;
579
601
602# ifdef __cplusplus
603}
604# endif
605
606#endif // ANJ_DEFS_H
struct anj_struct anj_t
Definition defs.h:133
anj_id_type_t
Definition defs.h:196
@ ANJ_ID_RID
Definition defs.h:199
@ ANJ_URI_PATH_MAX_LENGTH
Definition defs.h:201
@ ANJ_ID_RIID
Definition defs.h:200
@ ANJ_ID_IID
Definition defs.h:198
@ ANJ_ID_OID
Definition defs.h:197
uint16_t anj_data_type_t
Definition defs.h:219
uint16_t anj_riid_t
Definition defs.h:127
void anj_close_external_data_t(void *user_args)
Definition defs.h:427
int anj_open_external_data_t(void *user_args)
Definition defs.h:415
uint16_t anj_rid_t
Definition defs.h:124
struct anj_io_out_entry_struct anj_io_out_entry_t
uint16_t anj_iid_t
Definition defs.h:121
uint16_t anj_oid_t
Definition defs.h:118
int anj_get_external_data_t(void *buffer, size_t *inout_size, size_t offset, void *user_args)
Definition defs.h:395
Definition defs.h:433
const void * data
Definition defs.h:442
size_t full_length_hint
Definition defs.h:476
size_t offset
Definition defs.h:452
size_t chunk_length
Definition defs.h:462
Definition defs.h:166
uint16_t seq_retry_count
Definition defs.h:174
uint16_t retry_count
Definition defs.h:168
uint32_t seq_delay_timer
Definition defs.h:172
uint32_t retry_timer
Definition defs.h:170
Definition defs.h:184
uint16_t max_retransmit
Definition defs.h:190
uint64_t ack_timeout_ms
Definition defs.h:186
double ack_random_factor
Definition defs.h:188
Definition defs.h:583
double timestamp
Definition defs.h:599
anj_data_type_t type
Definition defs.h:585
anj_uri_path_t path
Definition defs.h:589
anj_res_value_t value
Definition defs.h:587
Definition defs.h:482
anj_iid_t iid
Definition defs.h:484
anj_oid_t oid
Definition defs.h:483
Definition defs.h:213
size_t uri_len
Definition defs.h:215
Definition defs.h:491
anj_open_external_data_t * open_external_data
Definition defs.h:522
uint64_t uint_value
Definition defs.h:553
int64_t time_value
Definition defs.h:577
anj_close_external_data_t * close_external_data
Definition defs.h:530
anj_get_external_data_t * get_external_data
Definition defs.h:515
double double_value
Definition defs.h:559
int64_t int_value
Definition defs.h:547
void * user_args
Definition defs.h:539
bool bool_value
Definition defs.h:565
anj_bytes_or_string_value_t bytes_or_string
Definition defs.h:496
anj_objlnk_value_t objlnk
Definition defs.h:571