#include <murphy/resource/config-api.h>
#include <murphy/resource/manager-api.h>
+#include <murphy/resource/client-api.h>
#include <murphy/resource/protocol.h>
#include "screen.h"
mrp_zone_mask_t zones;
};
+static void print_resources_cb(mrp_console_t *, void *, int, char **);
+
+MRP_CONSOLE_GROUP(manager_group, "ivi-resource-manager", NULL, NULL, {
+ MRP_TOKENIZED_CMD("resources", print_resources_cb, FALSE,
+ "resources", "prints managed resources",
+ "prints the resources managed by "
+ "ivi-resource-manager."),
+});
+
+static mrp_resmgr_data_t *resmgr_data;
void mrp_resmgr_register_dependency(mrp_resmgr_data_t *data,
const char *db_table_name)
return mrp_htbl_lookup(data->resources, key);
}
+static void print_resources_cb(mrp_console_t *c, void *user_data,
+ int argc, char **argv)
+{
+ const char *zones[MRP_ZONE_MAX + 1];
+ uint32_t zoneid;
+ char buf[65536];
+
+ MRP_UNUSED(c);
+ MRP_UNUSED(user_data);
+ MRP_UNUSED(argc);
+ MRP_UNUSED(argv);
+
+ mrp_zone_get_all_names(MRP_ZONE_MAX+1, zones);
+
+ printf("Resources managed by ivi-resource-manager:\n");
+
+ for (zoneid = 0; zones[zoneid]; zoneid++) {
+ printf(" Zone '%s':\n", zones[zoneid]);
+
+ mrp_resmgr_screen_print(resmgr_data->screen, zoneid, buf, sizeof(buf));
+ printf(buf);
+ }
+
+ printf("\n");
+}
+
+
static int resource_update_cb(mrp_scriptlet_t *script, mrp_context_tbl_t *ctbl)
{
mrp_resmgr_data_t *data = (mrp_resmgr_data_t *)script->data;
data->resources = mrp_htbl_create(&cfg);
plugin->data = data;
+ resmgr_data = data;
subscribe_events(plugin);
unsubscribe_events(plugin);
- if ((data = plugin->data)) {
+ if ((data = plugin->data) && data == resmgr_data) {
mrp_resmgr_screen_destroy(data->screen);
}
}
manager_init,
manager_exit,
args, MRP_ARRAY_SIZE(args),
-#if 0
- exports, MRP_ARRAY_SIZE(exports),
- imports, MRP_ARRAY_SIZE(imports),
-#else
NULL, 0,
NULL, 0,
-#endif
- NULL);
+ &manager_group);
/*
* Local Variables:
}
}
+int mrp_resmgr_screen_print(mrp_resmgr_screen_t *screen,
+ uint32_t zoneid,
+ char *buf, int len)
+{
+#define PRINT(...) \
+ do { \
+ p += snprintf(p, e-p, __VA_ARGS__); \
+ if (p >= e) \
+ return p - buf; \
+ } while (0)
+
+ char *p, *e;
+ mrp_list_hook_t *classes, *centry, *cn;
+ mrp_list_hook_t *resources, *rentry, *rn;
+ mrp_resmgr_class_t *class;
+ screen_resource_t *sr;
+ const char *class_name;
+ mrp_attr_def_t *attdef;
+ mrp_attr_t a;
+ int i;
+
+ MRP_ASSERT(screen && buf && len > 0, "invalid argument");
+
+ e = (p = buf) + len;
+ classes = screen->classes + zoneid;
+
+ PRINT(" Resource 'screen'\n");
+
+ if (mrp_list_empty(classes))
+ PRINT(" No resources\n");
+ else {
+ mrp_list_foreach(classes, centry, cn) {
+ class = mrp_list_entry(centry, mrp_resmgr_class_t, link);
+ class_name = mrp_application_class_get_name(class->class);
+ resources = &class->resources;
+
+ PRINT(" Class '%s':\n", class_name);
+
+ mrp_list_foreach(resources, rentry, rn) {
+ sr = mrp_list_entry(rentry, screen_resource_t, link);
+
+ PRINT(" 0x%08x %sactive",
+ sr->key, sr->active ? " ":"in");
+
+ for (i = 0; i < MRP_ARRAY_SIZE(screen_attrs) - 1; i++) {
+ if ((mrp_resource_read_attribute(sr->res, i, &a))) {
+ PRINT(" %s:", a.name);
+
+ switch (a.type) {
+ case mqi_string: PRINT("'%s'",a.value.string); break;
+ case mqi_integer: PRINT("%ld",a.value.integer); break;
+ case mqi_unsignd: PRINT("%ld",a.value.unsignd); break;
+ case mqi_floating: PRINT("%lf",a.value.floating);break;
+ default: PRINT("<unsupported type>"); break;
+ }
+ }
+ }
+
+ PRINT("\n");
+ }
+ }
+ }
+
+ return p - buf;
+
+#undef PRINT
+}
+
static screen_resource_t *screen_resource_create(mrp_resmgr_screen_t *screen,
mrp_zone_t *zone,
mrp_resource_t *res,
mrp_resmgr_screen_t *mrp_resmgr_screen_create(mrp_resmgr_data_t *);
void mrp_resmgr_screen_destroy(mrp_resmgr_screen_t *);
+int mrp_resmgr_screen_print(mrp_resmgr_screen_t *, uint32_t, char *, int);
+
#endif /* __MURPHY_IVI_RESOURCE_MANAGER_SCREEN_H__ */
for (i = 0; zone_names[i]; i++)
printf(" %s\n", zone_names[i]);
-
mrp_free(zone_names);
}
}