Program Listing for File defs.h

Return to documentation for file (include_public/anj/dm/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_DM_DEFS_H
#    define ANJ_DM_DEFS_H

#    include <anj/defs.h>

#    ifdef __cplusplus
extern "C" {
#    endif

typedef enum {
    ANJ_DM_RES_R,

    ANJ_DM_RES_RM,

    ANJ_DM_RES_W,

    ANJ_DM_RES_WM,

    ANJ_DM_RES_RW,

    ANJ_DM_RES_RWM,

    ANJ_DM_RES_E,
} anj_dm_res_kind_t;

typedef enum {
    ANJ_DM_TRANSACTION_SUCCESS = 0,

    ANJ_DM_TRANSACTION_FAILURE = -1
} anj_dm_transaction_result_t;

typedef struct anj_dm_res_struct {
    anj_rid_t rid;

    anj_data_type_t type;

    anj_dm_res_kind_t kind;

    const anj_riid_t *insts;

    uint16_t max_inst_count;
} anj_dm_res_t;

typedef struct anj_dm_obj_inst_struct {
    anj_iid_t iid;

    const anj_dm_res_t *resources;

    uint16_t res_count;
} anj_dm_obj_inst_t;

typedef struct anj_dm_handlers_struct anj_dm_handlers_t;

typedef struct anj_dm_obj_struct {
    anj_oid_t oid;

    const char *version;

    const anj_dm_handlers_t *handlers;

    const anj_dm_obj_inst_t *insts;

    uint16_t max_inst_count;
} anj_dm_obj_t;

typedef int anj_dm_res_read_t(anj_t *anj,
                              const anj_dm_obj_t *obj,
                              anj_iid_t iid,
                              anj_rid_t rid,
                              anj_riid_t riid,
                              anj_res_value_t *out_value);

typedef int anj_dm_res_write_t(anj_t *anj,
                               const anj_dm_obj_t *obj,
                               anj_iid_t iid,
                               anj_rid_t rid,
                               anj_riid_t riid,
                               const anj_res_value_t *value);

typedef int anj_dm_res_execute_t(anj_t *anj,
                                 const anj_dm_obj_t *obj,
                                 anj_iid_t iid,
                                 anj_rid_t rid,
                                 const char *execute_arg,
                                 size_t execute_arg_len);

typedef int anj_dm_res_inst_create_t(anj_t *anj,
                                     const anj_dm_obj_t *obj,
                                     anj_iid_t iid,
                                     anj_rid_t rid,
                                     anj_riid_t riid);

typedef int anj_dm_res_inst_delete_t(anj_t *anj,
                                     const anj_dm_obj_t *obj,
                                     anj_iid_t iid,
                                     anj_rid_t rid,
                                     anj_riid_t riid);

typedef int
anj_dm_inst_create_t(anj_t *anj, const anj_dm_obj_t *obj, anj_iid_t iid);

typedef int
anj_dm_inst_delete_t(anj_t *anj, const anj_dm_obj_t *obj, anj_iid_t iid);

typedef int
anj_dm_inst_reset_t(anj_t *anj, const anj_dm_obj_t *obj, anj_iid_t iid);

typedef int anj_dm_transaction_begin_t(anj_t *anj, const anj_dm_obj_t *obj);

typedef int anj_dm_transaction_validate_t(anj_t *anj, const anj_dm_obj_t *obj);

typedef void anj_dm_transaction_end_t(anj_t *anj,
                                      const anj_dm_obj_t *obj,
                                      anj_dm_transaction_result_t result);

struct anj_dm_handlers_struct {
    anj_dm_inst_create_t *inst_create;

    anj_dm_inst_delete_t *inst_delete;

    anj_dm_inst_reset_t *inst_reset;

    anj_dm_transaction_begin_t *transaction_begin;

    anj_dm_transaction_validate_t *transaction_validate;

    anj_dm_transaction_end_t *transaction_end;

    anj_dm_res_read_t *res_read;

    anj_dm_res_write_t *res_write;

    anj_dm_res_execute_t *res_execute;

    anj_dm_res_inst_create_t *res_inst_create;

    anj_dm_res_inst_delete_t *res_inst_delete;
};

#    ifdef __cplusplus
}
#    endif

#endif // ANJ_DM_DEFS_H