96 const amxc_var_t*
const args,
97 amxc_var_t*
const retval) {
99 amxc_var_clean(retval);
100 amxc_llist_for_each(it, fns) {
103 ((
cb_fn->reason != reason) ||
104 (
cb_fn->fn == NULL) ||
105 ( !
cb_fn->enable))) {
113 amxc_llist_it_take(&
cb_fn->it);
131 const amxc_var_t*
const args,
132 amxc_var_t*
const retval) {
135 amxc_llist_t* cb_fns = NULL;
137 while(super != NULL) {
152 cb_fns = (base_param == NULL) ? NULL : &base_param->
cb_fns;
154 cb_fns = (super == NULL) ? NULL : &super->
cb_fns;
181 }
else if(
counter < INT32_MAX) {
212 const amxc_var_t*
const args,
213 amxc_var_t*
const retval) {
231 amxc_var_t* tmp = NULL;
233 tmp = amxc_var_get_path(retval,
"index", AMXC_VAR_FLAG_DEFAULT);
234 when_true_status(amxc_var_is_null(tmp),
238 tmp = amxc_var_get_path(retval,
"name", AMXC_VAR_FLAG_DEFAULT);
239 when_true_status(amxc_var_is_null(tmp),
248 amxc_var_t* retval) {
251 amxc_var_t* var_index = NULL;
252 when_true(amxc_var_is_null(retval), exit);
254 var_index = amxc_var_get_path(retval,
"index", AMXC_VAR_FLAG_DEFAULT);
255 index = amxc_var_dyncast(uint32_t, var_index);
256 when_true(index == 0, exit);
281 amxc_var_t* retval) {
310 when_not_null((*
dm), exit);
313 when_null((*
dm), exit);
323 when_null((*
dm), exit);
342 when_failed(amxp_sigmngr_init(&
dm->
sigmngr), exit);
343 when_failed(amxc_llist_init(&
dm->
mibs), exit);
344 when_failed(amxc_llist_init(&
dm->
deferred), exit);
346 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:root-added"), exit);
347 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:root-removed"), exit);
348 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:object-added"), exit);
349 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:object-removed"), exit);
350 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:instance-added"), exit);
351 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:instance-removed"), exit);
352 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:object-changed"), exit);
353 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:periodic-inform"), exit);
354 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:mib-added"), exit);
355 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"dm:mib-removed"), exit);
356 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"app:start"), exit);
357 when_failed(amxp_sigmngr_add_signal(&
dm->
sigmngr,
"app:stop"), exit);
381 const char* mib_name = NULL;
383 when_null(
object, exit);
390 amxc_llist_append(&
dm->
mibs, &object->
it);
402 when_str_empty(name, exit);
404 amxc_llist_for_each(it, (&
dm->
mibs)) {
405 const char* mib_name = NULL;
408 if((mib_name != NULL) && (strcmp(mib_name, name) == 0)) {
422 when_null(
object, exit);
438 amxc_var_init(&data);
452 amxc_var_clean(&data);
471 const char* abs_path,
478 bool key_path =
false;
485 when_str_empty_status(abs_path, exit,
object = root_obj);
487 va_start(args, abs_path);
491 when_failed(
status, exit);
502 const char* abs_path,
508 bool key_path =
false;
515 when_str_empty(abs_path, exit);
517 va_start(args, abs_path);
520 when_failed(
status, exit);
532 const char* abs_path,
541 when_null(key_path, exit);
546 when_str_empty(abs_path, exit);
548 va_start(args, abs_path);
551 when_failed(
status, exit);
561 const amxc_var_t*
const signal_data) {
562 amxc_var_t* object_path = NULL;
565 when_null(signal_data, exit);
567 object_path = amxc_var_get_key(signal_data,
"path", 0);
570 return amxc_var_constcast(cstring_t, object_path);
574 const amxc_var_t*
const signal_data) {
576 const char* path = NULL;
579 when_null(signal_data, exit);
582 when_null(path, exit);
594 const amxc_var_t*
const args,
595 amxc_var_t*
const retval) {
596 static int in_object_action = 0;
597 static int in_param_action = 0;
601 amxc_llist_t* cb_fns = NULL;
604 when_true(
object == NULL && param == NULL, exit);
616 reason, current,
object),
620 cb_fns = &
object->cb_fns;
Ambiorix Data Model Default actions header file.
amxd_status_t amxd_action_object_read(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, void *priv)
amxd_status_t amxd_action_object_del_inst(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, void *priv)
amxd_status_t amxd_action_object_write(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, void *priv)
amxd_status_t amxd_action_object_add_inst(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, void *priv)
static amxd_action_fn_t default_actions[]
amxd_status_t amxd_dm_store_mib(amxd_dm_t *const dm, amxd_object_t *const object)
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)
static amxd_status_t amxd_dm_check_add_inst_retval(amxc_var_t *retval)
amxd_object_t * amxd_dm_get_mib(amxd_dm_t *const dm, const char *name)
static void amxd_dm_free_mib_object_it(amxc_llist_it_t *it)
static amxd_status_t amxd_dm_invoke_action_base(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)
amxd_object_t * amxd_dm_findf(amxd_dm_t *const dm, const char *abs_path,...)
amxd_status_t amxd_dm_resolve_pathf_ext(amxd_dm_t *const dm, bool *key_path, amxc_llist_t *paths, const char *abs_path,...)
static void amxd_dm_invoke_action_start(UNUSED amxd_object_t *object, UNUSED amxd_param_t *param, amxd_action_t reason)
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)
amxd_status_t amxd_dm_resolve_pathf(amxd_dm_t *const dm, amxc_llist_t *paths, const char *abs_path,...)
static void amxd_dm_cleanup_add_inst(amxd_object_t *object, amxc_var_t *retval)
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 bool amxd_dm_can_invoke_action(int counter, amxd_action_t reason, amxd_object_t *current, amxd_object_t *object)
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)
amxd_object_t * amxd_dm_get_object(amxd_dm_t *const dm, const char *name)
Ambiorix Data Model API header file.
void PRIVATE amxd_dm_event(const char *signal, const amxd_object_t *const object, amxc_var_t *const data, bool trigger)
void PRIVATE amxd_dm_cancel_deferred(amxd_dm_t *dm)
void PRIVATE amxd_init_base(void)
Ambiorix Data Model API header file.
bool amxd_object_has_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
PRIVATE void amxd_object_destroy_handlers(amxd_object_t *const object)
PRIVATE amxd_object_t * amxd_object_find_internal(amxd_object_t *const object, bool *key_path, amxd_path_t *path, amxd_status_t *status)
PRIVATE void amxd_object_clean(amxd_object_t *const object)
PRIVATE amxd_status_t amxd_object_init(amxd_object_t *const object, const amxd_object_type_t type, const char *name, amxc_var_t *templ_params, amxc_var_t *values)
PRIVATE amxd_status_t amxd_object_resolve_internal(amxd_object_t *const object, bool *key_path, amxc_llist_t *paths, amxd_path_t *path)
const char * amxd_param_get_name(const amxd_param_t *const param)
bool amxd_param_has_action_cb(amxd_param_t *const param, const amxd_action_t reason, amxd_action_fn_t fn)
Ambiorix path API header file.
void PRIVATE amxd_param_free(amxd_param_t **param)
amxd_status_t(* amxd_action_fn_t)(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, void *priv)
enum _amxd_action amxd_action_t
enum _amxd_status amxd_status_t
@ amxd_status_invalid_name
@ amxd_status_function_not_implemented
@ amxd_status_object_not_found
@ amxd_status_unknown_error
@ amxd_status_invalid_action
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
amxd_object_t * amxd_dm_get_root(amxd_dm_t *const dm)
Fetches the root object of the data model.
amxd_status_t amxd_dm_new(amxd_dm_t **dm)
Instantiate a new data model.
amxd_status_t amxd_dm_remove_root_object(amxd_dm_t *dm, const char *name)
Removes an object from the root of the data model.
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.
void amxd_dm_delete(amxd_dm_t **dm)
Deletes a data model structure.
amxd_status_t amxd_dm_add_root_object(amxd_dm_t *dm, amxd_object_t *object)
Adds an object to the root of the data model.
amxd_object_t * amxd_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.
amxd_status_t amxd_dm_init(amxd_dm_t *dm)
Initializes a data model structure.
void amxd_dm_clean(amxd_dm_t *dm)
Cleans a data model structure.
amxd_status_t amxd_action_object_validate(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, void *priv)
Default object validate action implementation.
amxd_status_t amxd_action_object_list(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, void *priv)
Default object list action implementation.
amxd_status_t amxd_action_object_describe(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default object describe action implementation.
amxd_status_t amxd_action_object_destroy(amxd_object_t *object, amxd_param_t *const param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default object destroy action implementation.
bool amxd_object_is_child_of(const amxd_object_t *const child, const amxd_object_t *const parent)
Checks if the child object is in the hierarchical tree of the parent object.
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent object.
amxd_object_t * amxd_object_get_child(const amxd_object_t *object, const char *name)
Get a child of the object.
amxd_object_t * amxd_object_findf(amxd_object_t *object, const char *rel_path,...) __attribute__((format(printf
Find an object in the data model tree, starting from an object.
amxd_status_t amxd_object_add_object(amxd_object_t *const parent, amxd_object_t *const child)
Adds an object in the data model tree.
amxd_object_t * amxd_object_get_instance(const amxd_object_t *object, const char *name, uint32_t index)
Get an instance of the template object.
amxd_param_t * amxd_object_get_param_def(const amxd_object_t *const object, const char *name)
Gets a parameter definition from an object.
void amxd_object_delete(amxd_object_t **object)
Invokes the destroy handler(s) of the object.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
void amxd_object_free(amxd_object_t **object)
Data model object destructor function.
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)
amxd_status_t amxd_action_param_write(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter write action implementation.
amxd_status_t amxd_action_param_describe(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter describe action implementation.
amxd_status_t amxd_action_param_validate(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter validate action implementation.
amxd_status_t amxd_action_param_read(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter read action implementation.
amxd_status_t amxd_action_param_destroy(amxd_object_t *object, amxd_param_t *param, amxd_action_t reason, const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
Default parameter destroy action implementation.
amxd_status_t amxd_path_init(amxd_path_t *path, const char *object_path)
Initializes an amxd_path_t structure.
void amxd_path_clean(amxd_path_t *path)
Cleans an amxd_path_t structure.
amxd_status_t amxd_path_vsetf(amxd_path_t *path, bool add_dot, const char *obj_path, va_list args)
Sets or replaces the path contained in the amxd_path_t structure.
amxp_signal_mngr_t sigmngr
amxc_llist_it_t derived_from
static int cb_fn(amxd_object_t *start_object, amxd_object_t *matching_object, UNUSED void *priv)
static amxd_status_t status