anjay
dm.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017-2023 AVSystem <avsystem@avsystem.com>
3  * AVSystem Anjay LwM2M SDK
4  * All rights reserved.
5  *
6  * Licensed under the AVSystem-5-clause License.
7  * See the attached LICENSE file for details.
8  */
9 
10 #ifndef ANJAY_INCLUDE_ANJAY_DM_H
11 #define ANJAY_INCLUDE_ANJAY_DM_H
12 
13 #include <math.h>
14 #include <stdint.h>
15 
16 #include <anjay/io.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
23 
25 typedef enum {
30 
32 typedef struct {
34  int32_t min_period;
36  int32_t max_period;
38  int32_t min_eval_period;
40  int32_t max_eval_period;
41 #ifdef ANJAY_WITH_CON_ATTR
44 #endif // ANJAY_WITH_CON_ATTR
46 
48 typedef struct {
52  double greater_than;
54  double less_than;
56  double step;
58 
61 #define ANJAY_ATTRIB_INTEGER_NONE (-1)
62 
64 #define ANJAY_ATTRIB_PERIOD_NONE ANJAY_ATTRIB_INTEGER_NONE
65 
68 #define ANJAY_ATTRIB_DOUBLE_NONE (NAN)
69 
71 #define ANJAY_ATTRIB_VALUE_NONE ANJAY_ATTRIB_DOUBLE_NONE
72 
76 
80 
98  anjay_t *anjay,
99  const anjay_dm_object_def_t *const *obj_ptr,
100  anjay_ssid_t ssid,
102 
120  anjay_t *anjay,
121  const anjay_dm_object_def_t *const *obj_ptr,
122  anjay_ssid_t ssid,
123  const anjay_dm_oi_attributes_t *attrs);
124 
156 typedef int
158  const anjay_dm_object_def_t *const *obj_ptr,
159  anjay_dm_list_ctx_t *ctx);
160 
168  const anjay_dm_object_def_t *const *obj_ptr,
169  anjay_dm_list_ctx_t *ctx);
170 
190 typedef int
192  const anjay_dm_object_def_t *const *obj_ptr,
193  anjay_iid_t iid);
194 
210 typedef int
212  const anjay_dm_object_def_t *const *obj_ptr,
213  anjay_iid_t iid);
214 
233 typedef int
235  const anjay_dm_object_def_t *const *obj_ptr,
236  anjay_iid_t iid);
237 
256  anjay_t *anjay,
257  const anjay_dm_object_def_t *const *obj_ptr,
258  anjay_iid_t iid,
259  anjay_ssid_t ssid,
261 
280  anjay_t *anjay,
281  const anjay_dm_object_def_t *const *obj_ptr,
282  anjay_iid_t iid,
283  anjay_ssid_t ssid,
284  const anjay_dm_oi_attributes_t *attrs);
285 
315 typedef int
317  const anjay_dm_object_def_t *const *obj_ptr,
318  anjay_iid_t iid,
320 
358 typedef int
360  const anjay_dm_object_def_t *const *obj_ptr,
361  anjay_iid_t iid,
362  anjay_rid_t rid,
363  anjay_riid_t riid,
364  anjay_output_ctx_t *ctx);
365 
393 typedef int
395  const anjay_dm_object_def_t *const *obj_ptr,
396  anjay_iid_t iid,
397  anjay_rid_t rid,
398  anjay_riid_t riid,
399  anjay_input_ctx_t *ctx);
400 
421 typedef int
423  const anjay_dm_object_def_t *const *obj_ptr,
424  anjay_iid_t iid,
425  anjay_rid_t rid,
426  anjay_execute_ctx_t *ctx);
427 
455 typedef int
457  const anjay_dm_object_def_t *const *obj_ptr,
458  anjay_iid_t iid,
459  anjay_rid_t rid);
460 
497 typedef int
499  const anjay_dm_object_def_t *const *obj_ptr,
500  anjay_iid_t iid,
501  anjay_rid_t rid,
502  anjay_dm_list_ctx_t *ctx);
503 
522 typedef int
524  const anjay_dm_object_def_t *const *obj_ptr,
525  anjay_iid_t iid,
526  anjay_rid_t rid,
527  anjay_ssid_t ssid,
529 
548 typedef int
550  const anjay_dm_object_def_t *const *obj_ptr,
551  anjay_iid_t iid,
552  anjay_rid_t rid,
553  anjay_ssid_t ssid,
554  const anjay_dm_r_attributes_t *attrs);
555 
576  anjay_t *anjay,
577  const anjay_dm_object_def_t *const *obj_ptr,
578  anjay_iid_t iid,
579  anjay_rid_t rid,
580  anjay_riid_t riid,
581  anjay_ssid_t ssid,
583 
604  anjay_t *anjay,
605  const anjay_dm_object_def_t *const *obj_ptr,
606  anjay_iid_t iid,
607  anjay_rid_t rid,
608  anjay_riid_t riid,
609  anjay_ssid_t ssid,
610  const anjay_dm_r_attributes_t *attrs);
611 
640 typedef int
642  const anjay_dm_object_def_t *const *obj_ptr);
643 
670 typedef int
672  const anjay_dm_object_def_t *const *obj_ptr);
673 
695 typedef int
697  const anjay_dm_object_def_t *const *obj_ptr);
698 
706  const anjay_dm_object_def_t *const *obj_ptr);
707 
719 typedef int
721  const anjay_dm_object_def_t *const *obj_ptr);
722 
724 typedef struct {
734 
745 
755 
764 
773 
783 
794 
805 
815 
824 
833 
842 
853 
864 
874 
884 
895 
907 
918 
930 
943 
957 
962 
969  const char *version;
970 
973 };
974 
994  anjay_oid_t oid,
995  anjay_iid_t iid,
996  anjay_rid_t rid);
997 
1015 
1016 #ifdef ANJAY_WITH_OBSERVATION_STATUS
1021 # ifndef ANJAY_MAX_OBSERVATION_SERVERS_REPORTED_NUMBER
1022 # define ANJAY_MAX_OBSERVATION_SERVERS_REPORTED_NUMBER 0
1023 # endif // ANJAY_MAX_OBSERVATION_SERVERS_REPORTED_NUMBER
1024 
1028 typedef struct {
1038  int32_t min_period;
1046 # if (ANJAY_MAX_OBSERVATION_SERVERS_REPORTED_NUMBER > 0)
1050  uint16_t servers_number;
1055 # endif //(ANJAY_MAX_OBSERVATION_SERVERS_REPORTED_NUMBER > 0)
1057 
1105  anjay_t *anjay, anjay_oid_t oid, anjay_iid_t iid, anjay_rid_t rid);
1106 #endif // ANJAY_WITH_OBSERVATION_STATUS
1107 
1122  const anjay_dm_object_def_t *const *def_ptr);
1123 
1145  const anjay_dm_object_def_t *const *def_ptr);
1146 
1153 bool anjay_binding_mode_valid(const char *binding_mode);
1154 
1159 typedef enum {
1160  ANJAY_SECURITY_PSK = 0, //< Pre-Shared Key mode
1161  ANJAY_SECURITY_RPK = 1, //< Raw Public Key mode
1162  ANJAY_SECURITY_CERTIFICATE = 2, //< Certificate mode
1163  ANJAY_SECURITY_NOSEC = 3, //< NoSec mode
1164  ANJAY_SECURITY_EST = 4 //< Certificate mode with EST
1166 
1167 #ifdef ANJAY_WITH_SMS
1172 typedef enum {
1173  ANJAY_SMS_SECURITY_DTLS_PSK = 1, //< DTLS in PSK mode
1174  ANJAY_SMS_SECURITY_SECURE_PACKET = 2, //< Secure Packet Structure
1175  ANJAY_SMS_SECURITY_NOSEC = 3 //< NoSec mode
1177 #endif // ANJAY_WITH_SMS
1178 
1179 #define ANJAY_ACCESS_MASK_READ (1U << 0)
1180 #define ANJAY_ACCESS_MASK_WRITE (1U << 1)
1181 #define ANJAY_ACCESS_MASK_EXECUTE (1U << 2)
1182 #define ANJAY_ACCESS_MASK_DELETE (1U << 3)
1183 #define ANJAY_ACCESS_MASK_CREATE (1U << 4)
1184 // clang-format off
1185 #define ANJAY_ACCESS_MASK_FULL \
1186  (ANJAY_ACCESS_MASK_READ \
1187  | ANJAY_ACCESS_MASK_WRITE \
1188  | ANJAY_ACCESS_MASK_DELETE \
1189  | ANJAY_ACCESS_MASK_EXECUTE \
1190  | ANJAY_ACCESS_MASK_CREATE)
1191 // clang-format on
1192 #define ANJAY_ACCESS_MASK_NONE 0
1193 #define ANJAY_ACCESS_LIST_OWNER_BOOTSTRAP UINT16_MAX
1194 
1195 typedef uint16_t anjay_access_mask_t;
1196 
1197 #ifdef __cplusplus
1198 } /* extern "C" */
1199 #endif
1200 
1201 #endif /*ANJAY_INCLUDE_ANJAY_DM_H*/
uint16_t anjay_oid_t
Definition: core.h:945
uint16_t anjay_rid_t
Definition: core.h:951
uint16_t anjay_iid_t
Definition: core.h:948
struct anjay_struct anjay_t
Definition: core.h:45
uint16_t anjay_ssid_t
Definition: core.h:31
uint16_t anjay_riid_t
Definition: core.h:954
int anjay_notify_instances_changed(anjay_t *anjay, anjay_oid_t oid)
anjay_sms_security_mode_t
Definition: dm.h:1172
@ ANJAY_SMS_SECURITY_NOSEC
Definition: dm.h:1175
@ ANJAY_SMS_SECURITY_DTLS_PSK
Definition: dm.h:1173
@ ANJAY_SMS_SECURITY_SECURE_PACKET
Definition: dm.h:1174
int anjay_notify_changed(anjay_t *anjay, anjay_oid_t oid, anjay_iid_t iid, anjay_rid_t rid)
int anjay_dm_instance_remove_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid)
Definition: dm.h:211
int anjay_register_object(anjay_t *anjay, const anjay_dm_object_def_t *const *def_ptr)
int anjay_dm_transaction_begin_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr)
Definition: dm.h:641
int anjay_dm_object_write_default_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_ssid_t ssid, const anjay_dm_oi_attributes_t *attrs)
Definition: dm.h:119
int anjay_dm_resource_write_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_ssid_t ssid, const anjay_dm_r_attributes_t *attrs)
Definition: dm.h:549
anjay_resource_observation_status_t anjay_resource_observation_status(anjay_t *anjay, anjay_oid_t oid, anjay_iid_t iid, anjay_rid_t rid)
int anjay_dm_instance_read_default_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_ssid_t ssid, anjay_dm_oi_attributes_t *out)
Definition: dm.h:255
const anjay_dm_r_attributes_t ANJAY_DM_R_ATTRIBUTES_EMPTY
int anjay_dm_instance_create_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid)
Definition: dm.h:234
int anjay_dm_resource_read_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_ssid_t ssid, anjay_dm_r_attributes_t *out)
Definition: dm.h:523
int anjay_dm_resource_instance_write_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_riid_t riid, anjay_ssid_t ssid, const anjay_dm_r_attributes_t *attrs)
Definition: dm.h:603
int anjay_dm_resource_reset_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid)
Definition: dm.h:456
int anjay_unregister_object(anjay_t *anjay, const anjay_dm_object_def_t *const *def_ptr)
int anjay_dm_transaction_validate_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr)
Definition: dm.h:671
anjay_dm_con_attr_t
Definition: dm.h:25
@ ANJAY_DM_CON_ATTR_NON
Definition: dm.h:27
@ ANJAY_DM_CON_ATTR_NONE
Definition: dm.h:26
@ ANJAY_DM_CON_ATTR_CON
Definition: dm.h:28
#define ANJAY_MAX_OBSERVATION_SERVERS_REPORTED_NUMBER
Definition: dm.h:1022
bool anjay_binding_mode_valid(const char *binding_mode)
int anjay_dm_resource_instance_read_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_riid_t riid, anjay_ssid_t ssid, anjay_dm_r_attributes_t *out)
Definition: dm.h:575
uint16_t anjay_access_mask_t
Definition: dm.h:1195
int anjay_dm_object_read_default_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_ssid_t ssid, anjay_dm_oi_attributes_t *out)
Definition: dm.h:97
int anjay_dm_resource_read_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_riid_t riid, anjay_output_ctx_t *ctx)
Definition: dm.h:359
int anjay_dm_instance_write_default_attrs_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_ssid_t ssid, const anjay_dm_oi_attributes_t *attrs)
Definition: dm.h:279
int anjay_dm_list_instances_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_dm_list_ctx_t *ctx)
Definition: dm.h:157
const anjay_dm_oi_attributes_t ANJAY_DM_OI_ATTRIBUTES_EMPTY
int anjay_dm_transaction_NOOP(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr)
int anjay_dm_instance_reset_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid)
Definition: dm.h:191
int anjay_dm_resource_write_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_riid_t riid, anjay_input_ctx_t *ctx)
Definition: dm.h:394
int anjay_dm_list_resources_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_dm_resource_list_ctx_t *ctx)
Definition: dm.h:316
int anjay_dm_list_resource_instances_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_dm_list_ctx_t *ctx)
Definition: dm.h:498
int anjay_dm_transaction_commit_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr)
Definition: dm.h:696
int anjay_dm_transaction_rollback_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr)
Definition: dm.h:720
int anjay_dm_resource_execute_t(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_iid_t iid, anjay_rid_t rid, anjay_execute_ctx_t *ctx)
Definition: dm.h:422
anjay_security_mode_t
Definition: dm.h:1159
@ ANJAY_SECURITY_RPK
Definition: dm.h:1161
@ ANJAY_SECURITY_NOSEC
Definition: dm.h:1163
@ ANJAY_SECURITY_EST
Definition: dm.h:1164
@ ANJAY_SECURITY_CERTIFICATE
Definition: dm.h:1162
@ ANJAY_SECURITY_PSK
Definition: dm.h:1160
int anjay_dm_list_instances_SINGLE(anjay_t *anjay, const anjay_dm_object_def_t *const *obj_ptr, anjay_dm_list_ctx_t *ctx)
struct anjay_dm_resource_list_ctx_struct anjay_dm_resource_list_ctx_t
Definition: io.h:40
struct anjay_input_ctx_struct anjay_input_ctx_t
Definition: io.h:413
struct anjay_dm_list_ctx_struct anjay_dm_list_ctx_t
Definition: io.h:22
struct anjay_output_ctx_struct anjay_output_ctx_t
Definition: io.h:123
struct anjay_execute_ctx_struct anjay_execute_ctx_t
Definition: io.h:417
Definition: dm.h:724
anjay_dm_resource_execute_t * resource_execute
Definition: dm.h:841
anjay_dm_instance_create_t * instance_create
Definition: dm.h:772
anjay_dm_resource_read_t * resource_read
Definition: dm.h:823
anjay_dm_list_resource_instances_t * list_resource_instances
Definition: dm.h:863
anjay_dm_resource_instance_read_attrs_t * resource_instance_read_attrs
Definition: dm.h:942
anjay_dm_resource_reset_t * resource_reset
Definition: dm.h:852
anjay_dm_object_write_default_attrs_t * object_write_default_attrs
Definition: dm.h:744
anjay_dm_transaction_rollback_t * transaction_rollback
Definition: dm.h:929
anjay_dm_transaction_validate_t * transaction_validate
Definition: dm.h:906
anjay_dm_object_read_default_attrs_t * object_read_default_attrs
Definition: dm.h:733
anjay_dm_instance_write_default_attrs_t * instance_write_default_attrs
Definition: dm.h:804
anjay_dm_transaction_commit_t * transaction_commit
Definition: dm.h:917
anjay_dm_instance_read_default_attrs_t * instance_read_default_attrs
Definition: dm.h:793
anjay_dm_instance_remove_t * instance_remove
Definition: dm.h:782
anjay_dm_list_instances_t * list_instances
Definition: dm.h:754
anjay_dm_resource_write_t * resource_write
Definition: dm.h:832
anjay_dm_resource_read_attrs_t * resource_read_attrs
Definition: dm.h:873
anjay_dm_instance_reset_t * instance_reset
Definition: dm.h:763
anjay_dm_transaction_begin_t * transaction_begin
Definition: dm.h:894
anjay_dm_resource_write_attrs_t * resource_write_attrs
Definition: dm.h:883
anjay_dm_resource_instance_write_attrs_t * resource_instance_write_attrs
Definition: dm.h:955
anjay_dm_list_resources_t * list_resources
Definition: dm.h:814
Definition: dm.h:959
anjay_dm_handlers_t handlers
Definition: dm.h:972
const char * version
Definition: dm.h:969
anjay_oid_t oid
Definition: dm.h:961
Definition: dm.h:32
int32_t max_period
Definition: dm.h:36
anjay_dm_con_attr_t con
Definition: dm.h:43
int32_t min_period
Definition: dm.h:34
int32_t max_eval_period
Definition: dm.h:40
int32_t min_eval_period
Definition: dm.h:38
Definition: dm.h:48
double step
Definition: dm.h:56
double less_than
Definition: dm.h:54
double greater_than
Definition: dm.h:52
anjay_dm_oi_attributes_t common
Definition: dm.h:50
int32_t min_period
Definition: dm.h:1038
bool is_observed
Definition: dm.h:1032
int32_t max_eval_period
Definition: dm.h:1045