diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2012-04-21 17:51:53 -0300 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-05-03 13:32:02 +0200 |
commit | d72a44c7c4f5eea9c1e5bb0c36cb9e0224b9ca22 (patch) | |
tree | 09caa4cd9643019e14429e470ea8d6b3cfcce609 | |
parent | 0ef7644fe5161d3b50f9550ebbf8cbbabd51706f (diff) |
modetest: print more about our properties
In the future we'll have more than just connector properties, so create
a dump_prop function that can handle any property (instead of the
current dump_props function that only handles connector properties).
Also, make this function print a lot more information about the existing
properties.
Also change the printed indentation of the modes to make the output more
readable.
The previous function dump_props also segfaulted when we didn't have
enought permissions. The new function does not segfault in this case (by
checking for the return value of drmModeGetProperty).
Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | tests/modetest/modetest.c | 95 |
1 files changed, 86 insertions, 9 deletions
diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index 6deed69e..57846220 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -43,6 +43,7 @@ #include <stdio.h> #include <stdlib.h> #include <stdint.h> +#include <inttypes.h> #include <unistd.h> #include <string.h> #include <errno.h> @@ -145,7 +146,7 @@ void dump_encoders(void) void dump_mode(drmModeModeInfo *mode) { - printf(" %s %d %d %d %d %d %d %d %d %d\n", + printf("\t%s %d %d %d %d %d %d %d %d %d\n", mode->name, mode->vrefresh, mode->hdisplay, @@ -159,16 +160,90 @@ void dump_mode(drmModeModeInfo *mode) } static void -dump_props(drmModeConnector *connector) +dump_blob(uint32_t blob_id) +{ + uint32_t i; + unsigned char *blob_data; + drmModePropertyBlobPtr blob; + + blob = drmModeGetPropertyBlob(fd, blob_id); + if (!blob) + return; + + blob_data = blob->data; + + for (i = 0; i < blob->length; i++) { + if (i % 16 == 0) + printf("\n\t\t\t"); + printf("%.2hhx", blob_data[i]); + } + printf("\n"); + + drmModeFreePropertyBlob(blob); +} + +static void +dump_prop(uint32_t prop_id, uint64_t value) { - drmModePropertyPtr props; int i; + drmModePropertyPtr prop; + + prop = drmModeGetProperty(fd, prop_id); + + printf("\t%d", prop_id); + if (!prop) { + printf("\n"); + return; + } + + printf(" %s:\n", prop->name); + + printf("\t\tflags:"); + if (prop->flags & DRM_MODE_PROP_PENDING) + printf(" pending"); + if (prop->flags & DRM_MODE_PROP_RANGE) + printf(" range"); + if (prop->flags & DRM_MODE_PROP_IMMUTABLE) + printf(" immutable"); + if (prop->flags & DRM_MODE_PROP_ENUM) + printf(" enum"); + if (prop->flags & DRM_MODE_PROP_BLOB) + printf(" blob"); + printf("\n"); + + if (prop->flags & DRM_MODE_PROP_RANGE) { + printf("\t\tvalues:"); + for (i = 0; i < prop->count_values; i++) + printf(" %"PRIu64, prop->values[i]); + printf("\n"); + } - for (i = 0; i < connector->count_props; i++) { - props = drmModeGetProperty(fd, connector->props[i]); - printf("\t%s, flags %d\n", props->name, props->flags); - drmModeFreeProperty(props); + if (prop->flags & DRM_MODE_PROP_ENUM) { + printf("\t\tenums:"); + for (i = 0; i < prop->count_enums; i++) + printf(" %s=%llu", prop->enums[i].name, + prop->enums[i].value); + printf("\n"); + } else { + assert(prop->count_enums == 0); } + + if (prop->flags & DRM_MODE_PROP_BLOB) { + printf("\t\tblobs:\n"); + for (i = 0; i < prop->count_blobs; i++) + dump_blob(prop->blob_ids[i]); + printf("\n"); + } else { + assert(prop->count_blobs == 0); + } + + printf("\t\tvalue:"); + if (prop->flags & DRM_MODE_PROP_BLOB) + dump_blob(value); + else + printf(" %"PRIu64"\n", value); + + drmModeFreeProperty(prop); } void dump_connectors(void) @@ -201,13 +276,15 @@ void dump_connectors(void) if (connector->count_modes) { printf(" modes:\n"); - printf(" name refresh (Hz) hdisp hss hse htot vdisp " + printf("\tname refresh (Hz) hdisp hss hse htot vdisp " "vss vse vtot)\n"); for (j = 0; j < connector->count_modes; j++) dump_mode(&connector->modes[j]); printf(" props:\n"); - dump_props(connector); + for (j = 0; j < connector->count_props; j++) + dump_prop(connector->props[j], + connector->prop_values[j]); } drmModeFreeConnector(connector); |