ivi-resource-manager: add console support
authorJanos Kovacs <jankovac503@gmail.com>
Sun, 16 Jun 2013 00:01:33 +0000 (03:01 +0300)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 8 Jan 2015 16:37:08 +0000 (18:37 +0200)
src/plugins/ivi-resource-manager/plugin-ivi-resource-manager.c
src/plugins/ivi-resource-manager/screen.c
src/plugins/ivi-resource-manager/screen.h
src/plugins/resource-native/plugin-resource-native.c

index 34bb5c8..2f75f16 100644 (file)
@@ -47,6 +47,7 @@
 
 #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"
@@ -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:
index 080847c..0284267 100644 (file)
@@ -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("<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,
index b6e4df9..ea28f26 100644 (file)
@@ -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__ */
 
index 13afd55..73eaf8d 100644 (file)
@@ -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);
     }
 }