62 #include <amxc/amxc.h>
63 #include <amxp/amxp_signal.h>
64 #include <amxp/amxp_slot.h>
65 #include <amxp/amxp_timer.h>
80 UNUSED
const amxc_var_t*
const args,
81 amxc_var_t*
const retval,
84 amxp_timer_t* timer = (amxp_timer_t*) priv;
86 when_null(
object, exit);
87 when_null(timer, exit);
94 amxp_timer_delete(&timer);
96 amxc_var_clean(retval);
105 amxc_var_t* parameters = NULL;
107 amxc_var_init(&data);
108 when_null(
object, exit);
109 amxc_var_set_type(&data, AMXC_VAR_ID_HTABLE);
111 parameters = amxc_var_add_key(amxc_htable_t, &data,
"parameters", NULL);
116 amxc_var_clean(&data);
122 amxc_var_t* params = NULL;
124 amxc_var_add_key(uint32_t, data,
"index", object->
index);
125 amxc_var_add_key(cstring_t, data,
"name", object->
name);
126 params = amxc_var_add_key(amxc_htable_t, data,
"parameters", NULL);
128 params = amxc_var_add_key(amxc_htable_t, data,
"keys", NULL);
133 UNUSED int32_t depth,
151 when_false(retval, exit);
163 UNUSED int32_t depth,
165 bool* trigger = (
bool*) priv;
168 amxc_var_init(&data);
169 amxc_var_set_type(&data, AMXC_VAR_ID_HTABLE);
176 amxc_var_t* params = amxc_var_add_key(amxc_htable_t, &data,
"parameters", NULL);
181 amxc_var_clean(&data);
185 UNUSED int32_t depth,
187 bool* trigger = (
bool*) priv;
190 amxc_var_init(&data);
191 amxc_var_set_type(&data, AMXC_VAR_ID_HTABLE);
196 amxd_dm_event(
"dm:instance-removed", templ, &data, *trigger);
198 amxc_var_t* params = amxc_var_add_key(amxc_htable_t, &data,
"parameters", NULL);
203 amxc_var_clean(&data);
209 amxc_var_t* ovalue) {
210 amxc_var_t* new_value = NULL;
211 amxc_var_t* data_param = NULL;
214 new_value = amxc_var_get_pathf(values,
215 AMXC_VAR_FLAG_DEFAULT,
219 data_param = amxc_var_add_new_key(data, name);
220 amxc_var_set_type(data_param, AMXC_VAR_ID_HTABLE);
221 amxc_var_set_key(data_param,
"from", ovalue, AMXC_VAR_FLAG_COPY);
222 amxc_var_set_key(data_param,
"to", new_value, AMXC_VAR_FLAG_DEFAULT);
224 amxc_var_compare(ovalue, new_value, &result);
226 amxc_var_delete(&data_param);
232 amxc_var_t*
const data,
235 when_null(
object, exit);
236 when_str_empty(name, exit);
244 when_null(instance, exit);
263 when_null(
object, exit);
283 const amxc_htable_t* tparams = NULL;
286 amxc_var_t* parameters = NULL;
287 amxc_var_init(&data);
288 amxc_var_init(&values);
290 when_null(
object, exit);
291 when_null(params, exit);
292 when_true(amxc_var_type_of(params) != AMXC_VAR_ID_HTABLE, exit);
293 amxc_var_set_type(&values, AMXC_VAR_ID_HTABLE);
295 amxc_var_for_each(ovalue, params) {
297 if(param_def == NULL) {
298 amxc_var_set_type(&values, AMXC_VAR_ID_HTABLE);
301 "attributes.volatile==false",
306 amxc_var_set_key(&values, amxc_var_key(ovalue), ¶m_def->
value, AMXC_VAR_FLAG_COPY);
310 amxc_var_set_type(&data, AMXC_VAR_ID_HTABLE);
311 parameters = amxc_var_add_key(amxc_htable_t, &data,
"parameters", NULL);
312 amxc_var_for_each(ovalue, params) {
313 const char* name = amxc_var_key(ovalue);
317 tparams = amxc_var_constcast(amxc_htable_t, parameters);
319 if(!amxc_htable_is_empty(tparams)) {
324 amxc_var_clean(&values);
325 amxc_var_clean(&data);
332 amxp_timer_t* timer = NULL;
334 when_null(
object, exit);
335 when_true(sec == 0, exit);
342 when_null(timer, exit);
344 amxp_timer_set_interval(timer, sec * 1000);
345 amxp_timer_start(timer, sec * 1000);
357 amxp_timer_t* timer = NULL;
359 when_null(
object, exit);
365 when_null(timer, exit);
366 amxp_timer_delete(&timer);
377 const char* event_name,
378 amxc_var_t* event_data) {
384 if(event_data != NULL) {
385 when_failed(amxc_var_set_key(&object->
events,
388 AMXC_VAR_FLAG_DEFAULT | AMXC_VAR_FLAG_UPDATE), exit);
390 amxc_var_t*
event = amxc_var_get_key(&object->
events,
392 AMXC_VAR_FLAG_DEFAULT);
394 when_null(amxc_var_add_new_key(&object->
events,
397 amxc_var_set_type(event, AMXC_VAR_ID_NULL);
401 amxp_sigmngr_add_signal(&
dm->
sigmngr, event_name);
406 amxc_var_delete(&event_data);
412 const char* event_name) {
417 const char* event_name) {
418 amxc_var_t*
event = amxc_var_get_key(&object->
events,
420 AMXC_VAR_FLAG_DEFAULT);
421 amxc_var_delete(&event);
425 const char* event_name) {
426 amxc_var_t* data = NULL;
428 when_null(
object, exit);
429 when_str_empty(event_name, exit);
431 data = amxc_var_get_key(&object->
events, event_name, AMXC_VAR_FLAG_COPY);
432 when_not_null(data, exit);
439 while(
object != NULL) {
440 data = amxc_var_get_key(&object->
events, event_name, AMXC_VAR_FLAG_COPY);
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)
Ambiorix Data Model API header file.
amxd_object_t * amxd_object_get_base(const amxd_object_t *const object)
bool amxd_object_has_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
amxd_status_t amxd_object_add_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn, void *priv)
void * amxd_object_get_action_cb_data(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
amxd_status_t amxd_object_remove_action_cb(amxd_object_t *const object, const amxd_action_t reason, amxd_action_fn_t fn)
static void amxd_object_send_event_add(amxd_object_t *const object, UNUSED int32_t depth, void *priv)
static void amxd_periodic_inform(UNUSED amxp_timer_t *timer, void *priv)
void amxd_object_send_del_object(amxd_object_t *object, bool trigger)
static void amxd_object_send_event_del(amxd_object_t *const object, UNUSED int32_t depth, void *priv)
static bool amxd_object_event_filter_add(amxd_object_t *const object, int32_t depth, void *priv)
static bool amxd_object_event_filter(amxd_object_t *const object, UNUSED int32_t depth, UNUSED void *priv)
static void amxd_object_instance_sig_data(amxd_object_t *object, amxc_var_t *data)
static amxd_status_t amxd_object_delete_timer(amxd_object_t *object, UNUSED amxd_param_t *const p, amxd_action_t reason, UNUSED const amxc_var_t *const args, amxc_var_t *const retval, void *priv)
static void amxd_build_param_changed(const char *name, amxc_var_t *values, amxc_var_t *data, amxc_var_t *ovalue)
Ambiorix Data Model API header file.
amxd_status_t amxd_object_get_params_filtered(amxd_object_t *const object, amxc_var_t *const params, const char *filter, amxd_dm_access_t access)
amxd_status_t amxd_object_get_key_params(amxd_object_t *const object, amxc_var_t *const params, amxd_dm_access_t access)
bool amxd_param_is_attr_set(const amxd_param_t *const param, const amxd_pattr_id_t attr)
amxd_object_t * amxd_param_get_owner(const amxd_param_t *const param)
enum _amxd_action amxd_action_t
enum _amxd_status amxd_status_t
@ amxd_status_function_not_implemented
@ amxd_status_unknown_error
@ amxd_direction_down_reverse
@ amxd_dm_access_protected
void amxd_object_remove_event(amxd_object_t *const object, const char *event_name)
Removes an event definition to the object.
void amxd_object_send_add_inst(amxd_object_t *instance, bool trigger)
Send an add instance object event.
amxd_status_t amxd_object_add_event_ext(amxd_object_t *const object, const char *event_name, amxc_var_t *event_data)
Adds an event definition to the object.
amxd_status_t amxd_object_add_event(amxd_object_t *const object, const char *event_name)
Adds an event definition to the object.
void amxd_object_send_changed(amxd_object_t *object, amxc_var_t *params, bool trigger)
Send an object changed event.
amxc_var_t * amxd_object_new_event_data(const amxd_object_t *object, const char *event_name)
Allocates a variant that contains the predefined event data.
amxd_status_t amxd_object_new_pi(amxd_object_t *object, uint32_t sec)
Creates and starts a periodic inform event timer.
void amxd_object_send_del_inst(amxd_object_t *instance, bool trigger)
Send a delete instance object event.
amxd_status_t amxd_object_delete_pi(amxd_object_t *object)
Stops and deletes a periodic inform event timer.
void amxd_object_send_signal(amxd_object_t *const object, const char *name, amxc_var_t *const data, bool trigger)
Send an object signal/event.
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent object.
void amxd_object_hierarchy_walk(amxd_object_t *const object, const amxd_direction_t direction, amxd_object_filter_fn_t filter, amxd_object_cb_fn_t cb, int32_t depth, void *priv)
Iterates over all objects in the data model tree.
amxd_dm_t * amxd_object_get_dm(const amxd_object_t *const object)
Get the data model.
amxd_status_t amxd_object_get_params(amxd_object_t *const object, amxc_var_t *const params, amxd_dm_access_t access)
Gets all parameter values of an 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.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
bool amxd_object_is_attr_set(const amxd_object_t *const object, const amxd_oattr_id_t attr)
Checks if an attribute is set.
#define amxd_object_for_each(type, it, object)
Helper macro for iterating object content.
amxp_signal_mngr_t sigmngr
static amxd_status_t status