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>main
parent
0ef7644fe5
commit
d72a44c7c4
|
@ -43,6 +43,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
@ -145,7 +146,7 @@ void dump_encoders(void)
|
||||||
|
|
||||||
void dump_mode(drmModeModeInfo *mode)
|
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->name,
|
||||||
mode->vrefresh,
|
mode->vrefresh,
|
||||||
mode->hdisplay,
|
mode->hdisplay,
|
||||||
|
@ -159,16 +160,90 @@ void dump_mode(drmModeModeInfo *mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dump_props(drmModeConnector *connector)
|
dump_blob(uint32_t blob_id)
|
||||||
{
|
{
|
||||||
drmModePropertyPtr props;
|
uint32_t i;
|
||||||
int i;
|
unsigned char *blob_data;
|
||||||
|
drmModePropertyBlobPtr blob;
|
||||||
|
|
||||||
for (i = 0; i < connector->count_props; i++) {
|
blob = drmModeGetPropertyBlob(fd, blob_id);
|
||||||
props = drmModeGetProperty(fd, connector->props[i]);
|
if (!blob)
|
||||||
printf("\t%s, flags %d\n", props->name, props->flags);
|
return;
|
||||||
drmModeFreeProperty(props);
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
void dump_connectors(void)
|
||||||
|
@ -201,13 +276,15 @@ void dump_connectors(void)
|
||||||
|
|
||||||
if (connector->count_modes) {
|
if (connector->count_modes) {
|
||||||
printf(" modes:\n");
|
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");
|
"vss vse vtot)\n");
|
||||||
for (j = 0; j < connector->count_modes; j++)
|
for (j = 0; j < connector->count_modes; j++)
|
||||||
dump_mode(&connector->modes[j]);
|
dump_mode(&connector->modes[j]);
|
||||||
|
|
||||||
printf(" props:\n");
|
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);
|
drmModeFreeConnector(connector);
|
||||||
|
|
Loading…
Reference in New Issue