libamxd  6.4.1
Data Model Manager
amxd_object_parameter.c
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** SPDX-License-Identifier: BSD-2-Clause-Patent
4 **
5 ** SPDX-FileCopyrightText: Copyright (c) 2023 SoftAtHome
6 **
7 ** Redistribution and use in source and binary forms, with or without modification,
8 ** are permitted provided that the following conditions are met:
9 **
10 ** 1. Redistributions of source code must retain the above copyright notice,
11 ** this list of conditions and the following disclaimer.
12 **
13 ** 2. Redistributions in binary form must reproduce the above copyright notice,
14 ** this list of conditions and the following disclaimer in the documentation
15 ** and/or other materials provided with the distribution.
16 **
17 ** Subject to the terms and conditions of this license, each copyright holder
18 ** and contributor hereby grants to those receiving rights under this license
19 ** a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
20 ** (except for failure to satisfy the conditions of this license) patent license
21 ** to make, have made, use, offer to sell, sell, import, and otherwise transfer
22 ** this software, where such license applies only to those patent claims, already
23 ** acquired or hereafter acquired, licensable by such copyright holder or contributor
24 ** that are necessarily infringed by:
25 **
26 ** (a) their Contribution(s) (the licensed copyrights of copyright holders and
27 ** non-copyrightable additions of contributors, in source or binary form) alone;
28 ** or
29 **
30 ** (b) combination of their Contribution(s) with the work of authorship to which
31 ** such Contribution(s) was added by such copyright holder or contributor, if,
32 ** at the time the Contribution is added, such addition causes such combination
33 ** to be necessarily infringed. The patent license shall not apply to any other
34 ** combinations which include the Contribution.
35 **
36 ** Except as expressly stated above, no rights or licenses from any copyright
37 ** holder or contributor is granted under this license, whether expressly, by
38 ** implication, estoppel or otherwise.
39 **
40 ** DISCLAIMER
41 **
42 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
43 ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44 ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45 ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
46 ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47 ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
48 ** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
49 ** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50 ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
51 ** USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
52 **
53 ****************************************************************************/
54 
55 #ifndef _GNU_SOURCE
56 #define _GNU_SOURCE
57 #endif
58 
59 #include <stdlib.h>
60 #include <string.h>
61 #include <ctype.h>
62 
63 #include "amxd_priv.h"
64 
65 #include <amxd/amxd_common.h>
66 #include <amxd/amxd_dm.h>
67 #include <amxd/amxd_object.h>
68 #include <amxd/amxd_parameter.h>
69 #include <amxd/amxd_path.h>
70 
71 #include "amxd_priv.h"
72 #include "amxd_assert.h"
73 
75  amxd_param_t* const param) {
77 
79  if(((amxd_object_get_type(object) == amxd_object_template) &&
80  !amxc_llist_is_empty(&object->instances)) ||
82  ( amxd_object_get_type(object) == amxd_object_mib) ||
84  // key parameters can not be added to
85  // - template objects with instances
86  // - instance objects
87  // - mibs
88  // - singletons
89  retval = amxd_status_invalid_attr;
90  }
91  }
92 
93  return retval;
94 }
95 
97  amxd_param_t* const param) {
99  amxd_param_t* object_param = NULL;
100  when_null(object, exit);
101  when_null(param, exit);
102  when_not_null(param->it.llist, exit);
103 
104  when_true(amxd_object_is_attr_set(object, amxd_oattr_locked), exit);
105 
106  retval = amxd_object_check_key_param(object, param);
107  when_failed(retval, exit);
108 
109  amxc_llist_for_each(it, (&object->parameters)) {
110  const char* object_param_name = NULL;
111  const char* param_name = NULL;
112  object_param = amxc_llist_it_get_data(it, amxd_param_t, it);
113  object_param_name = amxd_param_get_name(object_param);
114  param_name = amxd_param_get_name(param);
115  if(strcmp(param_name, object_param_name) == 0) {
116  retval = amxd_status_duplicate;
117  goto exit;
118  }
119  object_param = NULL;
120  }
121 
122  // parameters added to template object by default only work on
123  // instances. This is a design descision.
124  // For other behavior set the attributes before adding the parameter
125  // to the object
126  if((amxd_object_get_type(object) == amxd_object_template) ||
128  if((param->attr.instance == 0) && (param->attr.templ == 0)) {
129  param->attr.instance = 1;
130  }
131  }
132 
134  if((param->attr.templ == 1) && (param->attr.instance == 0)) {
135  retval = amxd_status_invalid_attr;
136  goto exit;
137  }
138  }
139 
140  amxc_llist_append(&object->parameters, &param->it);
141 
142 exit:
143  return retval;
144 }
145 
147  const char* name) {
148  amxd_param_t* param = NULL;
149  amxd_path_t param_path;
150  amxd_object_t* real_obj = (amxd_object_t*) object;
151  const char* rel_path = NULL;
152 
153  amxd_path_init(&param_path, name);
154 
155  when_null(object, exit);
156  when_str_empty(name, exit);
157  when_true(object->type == amxd_object_root, exit);
158 
159  rel_path = amxd_path_get(&param_path, AMXD_OBJECT_TERMINATE);
160  real_obj = amxd_object_findf(real_obj, "%s", rel_path);
161  when_null(real_obj, exit);
162 
163  amxc_llist_for_each(it, (&real_obj->parameters)) {
164  const char* param_name = NULL;
165  param = amxc_llist_it_get_data(it, amxd_param_t, it);
166  param_name = amxd_param_get_name(param);
167  if(strcmp(param_name, amxd_path_get_param(&param_path)) == 0) {
168  break;
169  }
170  param = NULL;
171  }
172 
173 exit:
174  amxd_path_clean(&param_path);
175  return param;
176 }
177 
178 static const char* amxd_param_get_counted_object_name(const amxd_param_t* const param) {
179  return param == NULL ? NULL : (const char* ) param->priv;
180 }
181 
183  amxd_param_t* param = NULL;
184  amxd_object_t* container = NULL;
185  const amxd_object_t* templ_obj = object;
186 
187  when_null(object, exit);
188  when_false(amxd_object_get_type(object) == amxd_object_instance ||
189  amxd_object_get_type(object) == amxd_object_template, exit);
190 
192  templ_obj = amxd_object_get_parent(object);
193 
194  when_null(templ_obj, exit);
195  when_true(amxd_object_get_type(templ_obj) != amxd_object_template, exit);
196  }
197 
198  container = amxd_object_get_parent(templ_obj);
199 
200  when_null(container, exit);
201  when_true(container->type == amxd_object_root, exit);
202  when_false((amxd_object_get_type(container) == amxd_object_instance) ||
203  (amxd_object_get_type(container) == amxd_object_singleton), exit);
204 
205  amxc_llist_for_each(it, (&container->parameters)) {
206  const char* counted_object_name = NULL;
207  param = amxc_llist_it_get_data(it, amxd_param_t, it);
208  counted_object_name = amxd_param_get_counted_object_name(param);
209  if((counted_object_name != NULL) &&
210  (strcmp(counted_object_name, amxd_object_get_name(templ_obj, AMXD_OBJECT_NAMED)) == 0) &&
212  break;
213  }
214  param = NULL;
215  }
216 
217 exit:
218  return param;
219 }
220 
222  const char* name,
223  amxc_var_t* const value) {
225  amxc_var_t* params = NULL;
226  amxc_var_t args;
227  amxc_var_t retval;
228 
229  amxc_var_init(&args);
230  amxc_var_init(&retval);
231  when_null(object, exit);
232  when_null(value, exit);
233  when_str_empty(name, exit);
234 
235  amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
236  params = amxc_var_add_key(amxc_htable_t, &args, "parameters", NULL);
237  amxc_var_set_key(params, name, value, AMXC_VAR_FLAG_COPY);
238  amxc_var_add_key(uint32_t, &args, "access", amxd_dm_access_private);
239  amxc_var_add_key(bool, &args, "set_read_only", true);
240  status = amxd_dm_invoke_action(object,
241  NULL,
243  &args,
244  &retval);
245 
246 exit:
247  amxc_var_clean(&retval);
248  amxc_var_clean(&args);
249  return status;
250 }
251 
253  const char* name,
254  amxc_var_t* const value) {
256  amxc_var_t args;
257  amxc_var_t* params = NULL;
258  amxc_var_t params_value;
259  amxd_param_t* def = NULL;
260 
261  amxc_var_init(&args);
262  amxc_var_init(&params_value);
263  when_null(object, exit);
264  when_null(value, exit);
265  when_str_empty(name, exit);
266 
267  def = amxd_object_get_param_def(object, name);
268  if(def != NULL) {
271  amxc_var_copy(value, &def->value);
272  retval = amxd_status_ok;
273  goto exit;
274  }
275  }
276  }
277 
278  amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
279  amxc_var_add_key(uint32_t, &args, "access", amxd_dm_access_private);
280  params = amxc_var_add_key(amxc_llist_t, &args, "parameters", NULL);
281  amxc_var_add(cstring_t, params, name);
282  retval = amxd_dm_invoke_action(object,
283  NULL,
285  &args,
286  &params_value);
287  if(retval == amxd_status_ok) {
288  amxc_var_t* param_val = amxc_var_get_path(&params_value,
289  name,
290  AMXC_VAR_FLAG_DEFAULT);
291  when_null_status(param_val, exit, retval = amxd_status_parameter_not_found);
292  amxc_var_copy(value, param_val);
293  }
294 
295 exit:
296  amxc_var_clean(&params_value);
297  amxc_var_clean(&args);
298  return retval;
299 }
300 
301 const amxc_var_t* amxd_object_get_param_value(const amxd_object_t* const object,
302  const char* name) {
303  amxc_var_t* value = NULL;
304  amxd_param_t* param = amxd_object_get_param_def(object, name);
305  if(param != NULL) {
306  value = &param->value;
307  }
308 
309  return value;
310 }
311 
313  uint32_t count = 0;
314  amxc_var_t list;
315 
316  amxc_var_init(&list);
317  when_failed(amxd_object_list_params(object, &list, access), exit);
318  count = amxc_llist_size(amxc_var_constcast(amxc_llist_t, &list));
319 
320 exit:
321  amxc_var_clean(&list);
322  return count;
323 }
324 
326  const char* name,
327  const char* value) {
329  amxc_var_t new_value;
330 
331  amxc_var_init(&new_value);
332  amxc_var_set(cstring_t, &new_value, value);
333  status = amxd_object_set_param(object, name, &new_value);
334 
335  amxc_var_clean(&new_value);
336  return status;
337 }
338 
340  const char* name,
341  const char* value) {
343  amxc_var_t new_value;
344 
345  amxc_var_init(&new_value);
346  amxc_var_set(csv_string_t, &new_value, value);
347  status = amxd_object_set_param(object, name, &new_value);
348 
349  amxc_var_clean(&new_value);
350  return status;
351 }
352 
354  const char* name,
355  const char* value) {
357  amxc_var_t new_value;
358 
359  amxc_var_init(&new_value);
360  amxc_var_set(ssv_string_t, &new_value, value);
361  status = amxd_object_set_param(object, name, &new_value);
362 
363  amxc_var_clean(&new_value);
364  return status;
365 }
366 
368  const char* name,
369  bool value) {
371  amxc_var_t new_value;
372 
373  amxc_var_init(&new_value);
374  amxc_var_set(bool, &new_value, value);
375  status = amxd_object_set_param(object, name, &new_value);
376 
377  amxc_var_clean(&new_value);
378  return status;
379 }
380 
382  const char* name,
383  int8_t value) {
385  amxc_var_t new_value;
386 
387  amxc_var_init(&new_value);
388  amxc_var_set(int8_t, &new_value, value);
389  status = amxd_object_set_param(object, name, &new_value);
390 
391  amxc_var_clean(&new_value);
392  return status;
393 }
394 
396  const char* name,
397  uint8_t value) {
399  amxc_var_t new_value;
400 
401  amxc_var_init(&new_value);
402  amxc_var_set(uint8_t, &new_value, value);
403  status = amxd_object_set_param(object, name, &new_value);
404 
405  amxc_var_clean(&new_value);
406  return status;
407 }
408 
410  const char* name,
411  int16_t value) {
413  amxc_var_t new_value;
414 
415  amxc_var_init(&new_value);
416  amxc_var_set(int16_t, &new_value, value);
417  status = amxd_object_set_param(object, name, &new_value);
418 
419  amxc_var_clean(&new_value);
420  return status;
421 }
422 
424  const char* name,
425  uint16_t value) {
427  amxc_var_t new_value;
428 
429  amxc_var_init(&new_value);
430  amxc_var_set(uint16_t, &new_value, value);
431  status = amxd_object_set_param(object, name, &new_value);
432 
433  amxc_var_clean(&new_value);
434  return status;
435 }
436 
438  const char* name,
439  int32_t value) {
441  amxc_var_t new_value;
442 
443  amxc_var_init(&new_value);
444  amxc_var_set(int32_t, &new_value, value);
445  status = amxd_object_set_param(object, name, &new_value);
446 
447  amxc_var_clean(&new_value);
448  return status;
449 }
450 
452  const char* name,
453  uint32_t value) {
455  amxc_var_t new_value;
456 
457  amxc_var_init(&new_value);
458  amxc_var_set(uint32_t, &new_value, value);
459  status = amxd_object_set_param(object, name, &new_value);
460 
461  amxc_var_clean(&new_value);
462  return status;
463 }
464 
466  const char* name,
467  int64_t value) {
469  amxc_var_t new_value;
470 
471  amxc_var_init(&new_value);
472  amxc_var_set(int64_t, &new_value, value);
473  status = amxd_object_set_param(object, name, &new_value);
474 
475  amxc_var_clean(&new_value);
476  return status;
477 }
478 
480  const char* name,
481  uint64_t value) {
483  amxc_var_t new_value;
484 
485  amxc_var_init(&new_value);
486  amxc_var_set(uint64_t, &new_value, value);
487  status = amxd_object_set_param(object, name, &new_value);
488 
489  amxc_var_clean(&new_value);
490  return status;
491 }
492 
494  const char* name,
495  double value) {
497  amxc_var_t new_value;
498 
499  amxc_var_init(&new_value);
500  amxc_var_set(double, &new_value, value);
501  status = amxd_object_set_param(object, name, &new_value);
502 
503  amxc_var_clean(&new_value);
504  return status;
505 }
506 
508  const char* name,
509  amxc_ts_t* value) {
511  amxc_var_t new_value;
512 
513  amxc_var_init(&new_value);
514  amxc_var_set(amxc_ts_t, &new_value, value);
515  status = amxd_object_set_param(object, name, &new_value);
516 
517  amxc_var_clean(&new_value);
518  return status;
519 }
520 
522  const char* name,
525  char* retval = NULL;
526  amxc_var_t value;
527 
528  amxc_var_init(&value);
529  s = amxd_object_get_param(object, name, &value);
530  if(s == amxd_status_ok) {
531  retval = amxc_var_dyncast(cstring_t, &value);
532  }
533 
534  if(status != NULL) {
535  *status = s;
536  }
537  amxc_var_clean(&value);
538  return retval;
539 }
540 
542  const char* name,
545  bool retval = false;
546  amxc_var_t value;
547 
548  amxc_var_init(&value);
549  s = amxd_object_get_param(object, name, &value);
550  if(s == amxd_status_ok) {
551  retval = amxc_var_dyncast(bool, &value);
552  }
553 
554  if(status != NULL) {
555  *status = s;
556  }
557  amxc_var_clean(&value);
558  return retval;
559 }
560 
562  const char* name,
565  int8_t retval = 0;
566  amxc_var_t value;
567 
568  amxc_var_init(&value);
569  s = amxd_object_get_param(object, name, &value);
570  if(s == amxd_status_ok) {
571  retval = amxc_var_dyncast(int8_t, &value);
572  }
573 
574  if(status != NULL) {
575  *status = s;
576  }
577  amxc_var_clean(&value);
578  return retval;
579 }
580 
582  const char* name,
585  uint8_t retval = 0;
586  amxc_var_t value;
587 
588  amxc_var_init(&value);
589  s = amxd_object_get_param(object, name, &value);
590  if(s == amxd_status_ok) {
591  retval = amxc_var_dyncast(uint8_t, &value);
592  }
593 
594  if(status != NULL) {
595  *status = s;
596  }
597  amxc_var_clean(&value);
598  return retval;
599 }
600 
602  const char* name,
605  int16_t retval = 0;
606  amxc_var_t value;
607 
608  amxc_var_init(&value);
609  s = amxd_object_get_param(object, name, &value);
610  if(s == amxd_status_ok) {
611  retval = amxc_var_dyncast(int16_t, &value);
612  }
613 
614  if(status != NULL) {
615  *status = s;
616  }
617  amxc_var_clean(&value);
618  return retval;
619 }
620 
622  const char* name,
625  uint16_t retval = 0;
626  amxc_var_t value;
627 
628  amxc_var_init(&value);
629  s = amxd_object_get_param(object, name, &value);
630  if(s == amxd_status_ok) {
631  retval = amxc_var_dyncast(uint16_t, &value);
632  }
633 
634  if(status != NULL) {
635  *status = s;
636  }
637  amxc_var_clean(&value);
638  return retval;
639 }
640 
642  const char* name,
645  int32_t retval = 0;
646  amxc_var_t value;
647 
648  amxc_var_init(&value);
649  s = amxd_object_get_param(object, name, &value);
650  if(s == amxd_status_ok) {
651  retval = amxc_var_dyncast(int32_t, &value);
652  }
653 
654  if(status != NULL) {
655  *status = s;
656  }
657  amxc_var_clean(&value);
658  return retval;
659 }
660 
662  const char* name,
665  uint32_t retval = 0;
666  amxc_var_t value;
667 
668  amxc_var_init(&value);
669  s = amxd_object_get_param(object, name, &value);
670  if(s == amxd_status_ok) {
671  retval = amxc_var_dyncast(uint32_t, &value);
672  }
673 
674  if(status != NULL) {
675  *status = s;
676  }
677  amxc_var_clean(&value);
678  return retval;
679 }
680 
682  const char* name,
685  int64_t retval = 0;
686  amxc_var_t value;
687 
688  amxc_var_init(&value);
689  s = amxd_object_get_param(object, name, &value);
690  if(s == amxd_status_ok) {
691  retval = amxc_var_dyncast(int64_t, &value);
692  }
693 
694  if(status != NULL) {
695  *status = s;
696  }
697  amxc_var_clean(&value);
698  return retval;
699 }
700 
702  const char* name,
705  uint64_t retval = 0;
706  amxc_var_t value;
707 
708  amxc_var_init(&value);
709  s = amxd_object_get_param(object, name, &value);
710  if(s == amxd_status_ok) {
711  retval = amxc_var_dyncast(uint64_t, &value);
712  }
713 
714  if(status != NULL) {
715  *status = s;
716  }
717  amxc_var_clean(&value);
718  return retval;
719 }
720 
722  const char* name,
725  double retval = 0;
726  amxc_var_t value;
727 
728  amxc_var_init(&value);
729  s = amxd_object_get_param(object, name, &value);
730  if(s == amxd_status_ok) {
731  retval = amxc_var_dyncast(double, &value);
732  }
733 
734  if(status != NULL) {
735  *status = s;
736  }
737  amxc_var_clean(&value);
738  return retval;
739 }
740 
741 amxc_ts_t* amxd_object_get_amxc_ts_t(amxd_object_t* const object,
742  const char* name,
745  amxc_ts_t* retval = NULL;
746  amxc_var_t value;
747 
748  amxc_var_init(&value);
749  s = amxd_object_get_param(object, name, &value);
750  if(s == amxd_status_ok) {
751  retval = amxc_var_dyncast(amxc_ts_t, &value);
752  }
753 
754  if(status != NULL) {
755  *status = s;
756  }
757  amxc_var_clean(&value);
758  return retval;
759 }
Ambiorix Data Model API header file.
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: amxd_dm.c:591
Ambiorix Data Model API header file.
bool amxd_object_has_action(amxd_object_t *const object, const amxd_action_t reason)
uint64_t amxd_object_get_uint64_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
uint8_t amxd_object_get_uint8_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
int32_t amxd_object_get_int32_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_int64_t(amxd_object_t *const object, const char *name, int64_t value)
amxd_status_t amxd_object_set_uint64_t(amxd_object_t *const object, const char *name, uint64_t value)
double amxd_object_get_double(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_int16_t(amxd_object_t *const object, const char *name, int16_t value)
int64_t amxd_object_get_int64_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_uint32_t(amxd_object_t *const object, const char *name, uint32_t value)
amxd_status_t amxd_object_set_amxc_ts_t(amxd_object_t *const object, const char *name, amxc_ts_t *value)
amxd_param_t * amxd_object_get_param_counter_by_counted_object(const amxd_object_t *const object)
Gets a parameter definition associated with a counted object.
uint32_t amxd_object_get_param_count(amxd_object_t *object, amxd_dm_access_t access)
amxd_status_t amxd_object_set_csv_string_t(amxd_object_t *const object, const char *name, const char *value)
int16_t amxd_object_get_int16_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxc_ts_t * amxd_object_get_amxc_ts_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_int8_t(amxd_object_t *const object, const char *name, int8_t value)
static const char * amxd_param_get_counted_object_name(const amxd_param_t *const param)
amxd_status_t amxd_object_set_double(amxd_object_t *const object, const char *name, double value)
amxd_status_t amxd_object_set_bool(amxd_object_t *const object, const char *name, bool value)
int8_t amxd_object_get_int8_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
bool amxd_object_get_bool(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_ssv_string_t(amxd_object_t *const object, const char *name, const char *value)
amxd_status_t amxd_object_set_int32_t(amxd_object_t *const object, const char *name, int32_t value)
uint32_t amxd_object_get_uint32_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_cstring_t(amxd_object_t *const object, const char *name, const char *value)
static amxd_status_t amxd_object_check_key_param(amxd_object_t *const object, amxd_param_t *const param)
char * amxd_object_get_cstring_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_uint16_t(amxd_object_t *const object, const char *name, uint16_t value)
uint16_t amxd_object_get_uint16_t(amxd_object_t *const object, const char *name, amxd_status_t *status)
amxd_status_t amxd_object_set_uint8_t(amxd_object_t *const object, const char *name, uint8_t value)
amxd_status_t amxd_object_list_params(amxd_object_t *const object, amxc_var_t *const list, amxd_dm_access_t access)
bool amxd_param_is_attr_set(const amxd_param_t *const param, const amxd_pattr_id_t attr)
const char * amxd_param_get_name(const amxd_param_t *const param)
bool amxd_param_has_action(amxd_param_t *const param, const amxd_action_t reason)
Ambiorix path API header file.
@ amxd_pattr_key
Definition: amxd_types.h:362
@ amxd_pattr_counter
Definition: amxd_types.h:361
@ action_object_write
Definition: amxd_types.h:118
@ action_object_read
Definition: amxd_types.h:117
@ action_param_read
Definition: amxd_types.h:112
enum _amxd_status amxd_status_t
@ amxd_status_invalid_attr
Definition: amxd_types.h:87
@ amxd_status_parameter_not_found
Definition: amxd_types.h:82
@ 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
#define AMXD_OBJECT_NAMED
Name and path format flag - default behavior, use name for instance objects.
Definition: amxd_object.h:164
enum _amxd_dm_access amxd_dm_access_t
Access level.
#define AMXD_OBJECT_TERMINATE
Path format flag - when set the object path is terminated with a dot.
Definition: amxd_object.h:214
@ amxd_oattr_locked
Definition: amxd_types.h:206
@ amxd_dm_access_private
Definition: amxd_types.h:141
@ amxd_object_root
Definition: amxd_types.h:178
@ amxd_object_template
Definition: amxd_types.h:183
@ amxd_object_mib
Definition: amxd_types.h:188
@ amxd_object_singleton
Definition: amxd_types.h:181
@ amxd_object_instance
Definition: amxd_types.h:186
amxd_object_t * amxd_object_get_parent(const amxd_object_t *const object)
Get the parent 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_set_param(amxd_object_t *const object, const char *name, amxc_var_t *const value)
Sets a value for a parameter in a data model 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.
const amxc_var_t * amxd_object_get_param_value(const amxd_object_t *const object, const char *name)
Gets the variant in which the parameter value is stored.
amxd_status_t amxd_object_get_param(amxd_object_t *const object, const char *name, amxc_var_t *const value)
Gets a single parameter value.
amxd_status_t amxd_object_add_param(amxd_object_t *const object, amxd_param_t *const param)
Adds a parameter definition to an object.
static amxd_object_type_t amxd_object_get_type(const amxd_object_t *const object)
Returns the object type.
Definition: amxd_object.h:586
bool amxd_object_is_attr_set(const amxd_object_t *const object, const amxd_oattr_id_t attr)
Checks if an attribute is set.
Definition: amxd_object.c:348
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
amxd_status_t amxd_path_init(amxd_path_t *path, const char *object_path)
Initializes an amxd_path_t structure.
Definition: amxd_path.c:328
const char * amxd_path_get_param(amxd_path_t *path)
Gets the parameter name.
Definition: amxd_path.c:497
const char * amxd_path_get(amxd_path_t *path, int flags)
Returns the path stored in the amxd_path_t structure.
Definition: amxd_path.c:470
void amxd_path_clean(amxd_path_t *path)
Cleans an amxd_path_t structure.
Definition: amxd_path.c:351
amxd_object_type_t type
Definition: amxd_types.h:236
amxc_llist_t instances
Definition: amxd_types.h:244
amxc_llist_t parameters
Definition: amxd_types.h:246
uint32_t templ
Definition: amxd_types.h:370
uint32_t instance
Definition: amxd_types.h:371
amxc_llist_it_t it
Definition: amxd_types.h:387
amxc_var_t value
Definition: amxd_types.h:390
amxd_param_attr_t attr
Definition: amxd_types.h:388
static amxd_status_t status