From 0fc37c083731178d0d4421f9f6fa5c6b3795c282 Mon Sep 17 00:00:00 2001 From: Janos Kovacs Date: Sun, 16 Jun 2013 03:01:33 +0300 Subject: [PATCH] ivi-resource-manager: add console support --- .../plugin-ivi-resource-manager.c | 48 ++++++++++++--- src/plugins/ivi-resource-manager/screen.c | 68 ++++++++++++++++++++++ src/plugins/ivi-resource-manager/screen.h | 2 + .../resource-native/plugin-resource-native.c | 1 - 4 files changed, 111 insertions(+), 8 deletions(-) diff --git a/src/plugins/ivi-resource-manager/plugin-ivi-resource-manager.c b/src/plugins/ivi-resource-manager/plugin-ivi-resource-manager.c index 34bb5c8..2f75f16 100644 --- a/src/plugins/ivi-resource-manager/plugin-ivi-resource-manager.c +++ b/src/plugins/ivi-resource-manager/plugin-ivi-resource-manager.c @@ -47,6 +47,7 @@ #include #include +#include #include #include "screen.h" @@ -61,6 +62,16 @@ struct mrp_resmgr_data_s { 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) @@ -130,6 +141,33 @@ void *mrp_resmgr_lookup_resource(mrp_resmgr_data_t *data, mrp_resource_t *key) 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; @@ -301,6 +339,7 @@ static int manager_init(mrp_plugin_t *plugin) data->resources = mrp_htbl_create(&cfg); plugin->data = data; + resmgr_data = data; subscribe_events(plugin); @@ -317,7 +356,7 @@ static void manager_exit(mrp_plugin_t *plugin) unsubscribe_events(plugin); - if ((data = plugin->data)) { + if ((data = plugin->data) && data == resmgr_data) { mrp_resmgr_screen_destroy(data->screen); } } @@ -341,14 +380,9 @@ MURPHY_REGISTER_PLUGIN("resource-manager", 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: diff --git a/src/plugins/ivi-resource-manager/screen.c b/src/plugins/ivi-resource-manager/screen.c index 080847c..0284267 100644 --- a/src/plugins/ivi-resource-manager/screen.c +++ b/src/plugins/ivi-resource-manager/screen.c @@ -157,6 +157,74 @@ void mrp_resmgr_screen_destroy(mrp_resmgr_screen_t *screen) } } +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(""); 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, diff --git a/src/plugins/ivi-resource-manager/screen.h b/src/plugins/ivi-resource-manager/screen.h index b6e4df9..ea28f26 100644 --- a/src/plugins/ivi-resource-manager/screen.h +++ b/src/plugins/ivi-resource-manager/screen.h @@ -35,6 +35,8 @@ 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__ */ diff --git a/src/plugins/resource-native/plugin-resource-native.c b/src/plugins/resource-native/plugin-resource-native.c index 13afd55..73eaf8d 100644 --- a/src/plugins/resource-native/plugin-resource-native.c +++ b/src/plugins/resource-native/plugin-resource-native.c @@ -153,7 +153,6 @@ static void print_zones_cb(mrp_console_t *c, void *user_data, for (i = 0; zone_names[i]; i++) printf(" %s\n", zone_names[i]); - mrp_free(zone_names); } } -- 2.7.4