65 #include <amxc/amxc.h>
66 #include <amxp/amxp.h>
68 #include <amxd/amxd_common.h>
69 #include <amxd/amxd_dm.h>
70 #include <amxd/amxd_path.h>
71 #include <amxd/amxd_object.h>
81 const char* search_path,
86 int retval = amxd_status_unknown_error;
87 amxc_var_t* args = NULL;
88 amxc_string_t full_path;
89 amxd_object_t* root = amxd_dm_get_root(
bus_ctx->
dm);
91 amxc_string_init(&full_path, 0);
93 amxc_var_set_type(args, AMXC_VAR_ID_HTABLE);
95 if(search_path != NULL) {
96 amxc_var_add_key(cstring_t, args,
"rel_path", search_path);
98 amxc_var_add_key(int32_t, args,
"depth", depth);
102 when_failed(retval, exit);
103 retval =
amxb_invoke(invoke_ctx, args, ret, NULL, NULL, timeout);
104 when_true(!islocal, exit);
105 when_true(retval == 0, exit);
107 amxc_string_setf(&full_path,
"%s%s",
object, search_path);
108 if(amxd_object_is_supported(root, amxc_string_get(&full_path, 0))) {
109 amxc_var_set_type(ret, AMXC_VAR_ID_LIST);
110 amxc_var_add(amxc_htable_t, ret, NULL);
111 retval = amxd_status_ok;
115 amxc_string_clean(&full_path);
116 amxc_var_delete(&args);
122 const char* search_path,
126 int retval = amxd_status_unknown_error;
129 bool islocal =
false;
131 const char* param = NULL;
134 amxc_string_init(&temp, 0);
135 amxd_path_init(&path, search_path);
139 object = amxd_path_get_fixed_part(&path,
true);
140 if((
object == NULL) || (strcmp(
object,
".") == 0)) {
141 retval = amxd_status_object_not_found;
144 search_path = amxd_path_get(&path, AMXD_OBJECT_TERMINATE);
145 search_path = search_path == NULL ?
"" : search_path;
146 param = amxd_path_get_param(&path);
151 amxc_string_setf(&temp,
"%s%s", search_path, param);
152 search_path = amxc_string_get(&temp, 0);
157 depth, ret, timeout);
164 amxc_string_clean(&temp);
166 amxd_path_clean(&path);
Ambiorix bus agnostic API header file.
static int amxb_invoke_get_instances(amxb_bus_ctx_t *const bus_ctx, bool islocal, const char *object, const char *search_path, int32_t depth, amxc_var_t *ret, int timeout)
Ambiorix Bus Backend Interface.
#define amxb_is_valid_be_func(ft, member, ptr)
bool PRIVATE amxb_is_local_object(amxb_bus_ctx_t *ctx, const char *obj_path)
int amxb_new_invoke(amxb_invoke_t **invoke_ctx, amxb_bus_ctx_t *const ctx, const char *object, const char *interface, const char *method)
Prepares a remote function invocation.
void amxb_free_invoke(amxb_invoke_t **invoke_ctx)
Deletes a function invoke context, and frees allocated memory.
int amxb_invoke(amxb_invoke_t *invoke_ctx, amxc_var_t *args, amxc_var_t *ret, amxb_be_cb_fn_t fn, void *priv, int timeout)
Invokes a remote function, as defined by the function invoke context.
int amxb_get_instances(amxb_bus_ctx_t *const bus_ctx, const char *search_path, int32_t depth, amxc_var_t *ret, int timeout)
Fetches the instances and the unique keys of a multi-instance object.
The back-end interface structure.
amxb_be_get_instances_t get_instances
const amxb_be_funcs_t * bus_fn
static amxb_bus_ctx_t * bus_ctx