libamxd  6.4.1
Data Model Manager
amxd_dm.h File Reference

Ambiorix Data Model API header file. More...

#include <amxd/amxd_types.h>

Go to the source code of this file.

Functions

amxd_status_t amxd_dm_new (amxd_dm_t **dm)
 Instantiate a new data model. More...
 
void amxd_dm_delete (amxd_dm_t **dm)
 Deletes a data model structure. More...
 
amxd_status_t amxd_dm_init (amxd_dm_t *dm)
 Initializes a data model structure. More...
 
void amxd_dm_clean (amxd_dm_t *dm)
 Cleans a data model structure. More...
 
amxd_status_t amxd_dm_store_mib (amxd_dm_t *const dm, amxd_object_t *const object)
 
amxd_object_tamxd_dm_get_mib (amxd_dm_t *const dm, const char *name)
 
amxd_status_t amxd_dm_add_root_object (amxd_dm_t *const dm, amxd_object_t *const object)
 Adds an object to the root of the data model. More...
 
amxd_status_t amxd_dm_remove_root_object (amxd_dm_t *const dm, const char *name)
 Removes an object from the root of the data model. More...
 
amxd_object_tamxd_dm_get_root (amxd_dm_t *const dm)
 Fetches the root object of the data model. More...
 
amxd_object_tamxd_dm_get_object (amxd_dm_t *const dm, const char *name)
 
amxd_object_tamxd_dm_findf (amxd_dm_t *const dm, const char *abs_path,...) __attribute__((format(printf
 
amxd_object_t amxd_status_t amxd_dm_resolve_pathf (amxd_dm_t *const dm, amxc_llist_t *paths, const char *abs_path,...) __attribute__((format(printf
 
amxd_object_t amxd_status_t amxd_status_t amxd_dm_resolve_pathf_ext (amxd_dm_t *const dm, bool *key_path, amxc_llist_t *paths, const char *abs_path,...) __attribute__((format(printf
 
amxd_object_t amxd_status_t amxd_status_t const char * amxd_dm_signal_get_path (amxd_dm_t *const dm, const amxc_var_t *const signal_data)
 Get the object path from a data model signal. More...
 
amxd_object_tamxd_dm_signal_get_object (amxd_dm_t *const dm, const amxc_var_t *const signal_data)
 Get the object from a data model using the path in the recieved signal. More...
 
amxd_status_t amxd_dm_invoke_action (amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
 
static amxd_status_t amxd_dm_get_status (amxd_dm_t *dm)
 

Detailed Description

Ambiorix Data Model API header file.

Definition in file amxd_dm.h.

Function Documentation

◆ amxd_dm_findf()

amxd_object_t* amxd_dm_findf ( amxd_dm_t *const  dm,
const char *  abs_path,
  ... 
)

◆ amxd_dm_get_mib()

amxd_object_t* amxd_dm_get_mib ( amxd_dm_t *const  dm,
const char *  name 
)

Definition at line 397 of file amxd_dm.c.

398  {
399  amxd_object_t* mib = NULL;
400 
401  when_null(dm, exit);
402  when_str_empty(name, exit);
403 
404  amxc_llist_for_each(it, (&dm->mibs)) {
405  const char* mib_name = NULL;
406  mib = amxc_llist_it_get_data(it, amxd_object_t, it);
407  mib_name = amxd_object_get_name(mib, AMXD_OBJECT_NAMED);
408  if((mib_name != NULL) && (strcmp(mib_name, name) == 0)) {
409  break;
410  }
411  mib = NULL;
412  }
413 
414 exit:
415  return mib;
416 }
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
const char * amxd_object_get_name(const amxd_object_t *const object, const uint32_t flags)
Get the name of the object (or index as a string for instance objects)
Definition: amxd_object.c:239
amxc_llist_t mibs
Definition: amxd_types.h:262
static amxd_dm_t dm

◆ amxd_dm_get_object()

amxd_object_t* amxd_dm_get_object ( amxd_dm_t *const  dm,
const char *  name 
)

Definition at line 466 of file amxd_dm.c.

466  {
467  return amxd_object_get_child(&dm->object, name);
468 }
amxd_object_t * amxd_object_get_child(const amxd_object_t *object, const char *name)
Get a child of the object.
amxd_object_t object
Definition: amxd_types.h:260

◆ amxd_dm_get_status()

static amxd_status_t amxd_dm_get_status ( amxd_dm_t dm)
inlinestatic

Definition at line 292 of file amxd_dm.h.

292  {
293  return dm == NULL ? amxd_status_invalid_arg : dm->status;
294 }
@ amxd_status_invalid_arg
Definition: amxd_types.h:96
amxd_status_t status
Definition: amxd_types.h:263

◆ amxd_dm_invoke_action()

amxd_status_t amxd_dm_invoke_action ( amxd_object_t object,
amxd_param_t param,
amxd_action_t  reason,
const amxc_var_t *const  args,
amxc_var_t *const  retval 
)

Definition at line 591 of file amxd_dm.c.

595  {
596  static int in_object_action = 0;
597  static int in_param_action = 0;
598  static amxd_object_t* current = NULL;
599 
600  amxd_object_t* temp = NULL;
601  amxc_llist_t* cb_fns = NULL;
602  int* counter = NULL;
604  when_true(object == NULL && param == NULL, exit);
605  when_true_status(reason == action_any, exit, status = amxd_status_invalid_action);
606 
607  temp = current;
608  if(param != NULL) {
609  when_true_status(!amxd_dm_can_invoke_action(in_param_action, reason, current, object),
610  exit,
612  counter = &in_param_action;
613  cb_fns = &param->cb_fns;
614  } else {
615  when_true_status(!amxd_dm_can_invoke_action(in_object_action + in_param_action,
616  reason, current, object),
617  exit,
619  counter = &in_object_action;
620  cb_fns = &object->cb_fns;
621  }
622 
623  (*counter)++;
624  current = object;
625  amxd_dm_invoke_action_start(object, param, reason);
626  status = amxd_dm_invoke_action_impl(cb_fns, object, param, reason, args, retval);
628  status = amxd_dm_invoke_default(object, param, reason, args, retval);
629  }
630  (*counter)--;
631  status = amxd_dm_invoke_action_end(object, param, status, reason, retval);
632 
633  current = temp;
634 
635 exit:
636  return status;
637 }
static amxd_status_t amxd_dm_invoke_action_end(amxd_object_t *object, amxd_param_t *param, amxd_status_t status, amxd_action_t reason, amxc_var_t *retval)
Definition: amxd_dm.c:277
static void amxd_dm_invoke_action_start(UNUSED amxd_object_t *object, UNUSED amxd_param_t *param, amxd_action_t reason)
Definition: amxd_dm.c:265
static amxd_status_t amxd_dm_invoke_action_impl(amxc_llist_t *fns, amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Definition: amxd_dm.c:92
static bool amxd_dm_can_invoke_action(int counter, amxd_action_t reason, amxd_object_t *current, amxd_object_t *object)
Definition: amxd_dm.c:174
static amxd_status_t amxd_dm_invoke_default(amxd_object_t *const object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval)
Definition: amxd_dm.c:209
@ action_any
Definition: amxd_types.h:111
enum _amxd_status amxd_status_t
@ amxd_status_function_not_implemented
Definition: amxd_types.h:83
@ amxd_status_invalid_action
Definition: amxd_types.h:89
amxc_llist_t cb_fns
Definition: amxd_types.h:391
static int counter
static amxd_status_t status

◆ amxd_dm_resolve_pathf()

amxd_object_t amxd_status_t amxd_dm_resolve_pathf ( amxd_dm_t *const  dm,
amxc_llist_t *  paths,
const char *  abs_path,
  ... 
)

◆ amxd_dm_resolve_pathf_ext()

amxd_object_t amxd_status_t amxd_status_t amxd_dm_resolve_pathf_ext ( amxd_dm_t *const  dm,
bool *  key_path,
amxc_llist_t *  paths,
const char *  abs_path,
  ... 
)

◆ amxd_dm_store_mib()

amxd_status_t amxd_dm_store_mib ( amxd_dm_t *const  dm,
amxd_object_t *const  object 
)

Definition at line 378 of file amxd_dm.c.

379  {
381  const char* mib_name = NULL;
382  when_null(dm, exit);
383  when_null(object, exit);
384  when_true(amxd_object_get_type(object) != amxd_object_mib, exit);
385  mib_name = amxd_object_get_name(object, AMXD_OBJECT_NAMED);
386  when_true_status(amxd_dm_get_mib(dm, mib_name) != NULL,
387  exit,
388  retval = amxd_status_duplicate);
389 
390  amxc_llist_append(&dm->mibs, &object->it);
391 
392  retval = amxd_status_ok;
393 exit:
394  return retval;
395 }
amxd_object_t * amxd_dm_get_mib(amxd_dm_t *const dm, const char *name)
Definition: amxd_dm.c:397
@ amxd_status_ok
Definition: amxd_types.h:78
@ amxd_status_unknown_error
Definition: amxd_types.h:79
@ amxd_status_duplicate
Definition: amxd_types.h:91
@ amxd_object_mib
Definition: amxd_types.h:188
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
amxc_llist_it_t it
Definition: amxd_types.h:230