dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Thierry Reding <thierry.reding@gmail.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH libdrm 08/11] tests: modetest: Accept connector names
Date: Sun, 25 Jan 2015 01:56:51 +0200	[thread overview]
Message-ID: <10536857.Rtq57mgypf@avalon> (raw)
In-Reply-To: <1422029304-1926-9-git-send-email-thierry.reding@gmail.com>

Hi Thierry,

Thank you for the patch.

On Friday 23 January 2015 17:08:21 Thierry Reding wrote:
> From: Thierry Reding <treding@nvidia.com>
> 
> Allow connector names to be used in the specification of the -s option.
> This requires storing the string passed on the command-line so that it
> can later be resolved to a connector ID (after the DRM device has been
> opened).
> 
> Signed-off-by: Thierry Reding <treding@nvidia.com>
> ---
>  tests/modetest/modetest.c | 134 +++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 123 insertions(+), 11 deletions(-)
> 
> diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c
> index d5fd99ebe1fd..a7cc94f8938c 100644
> --- a/tests/modetest/modetest.c
> +++ b/tests/modetest/modetest.c

[snip]

> @@ -327,7 +328,7 @@ static void dump_connectors(struct device *dev)
>  	int i, j;
> 
>  	printf("Connectors:\n");
> -	printf("id\tencoder\tstatus\t\ttype\tsize (mm)\tmodes\tencoders\n");
> +	printf("id\tencoder\tstatus\t\tname\t\tsize (mm)\tmodes\tencoders\n");
>  	for (i = 0; i < dev->resources->res->count_connectors; i++) {
>  		struct connector *_connector = &dev->resources->connectors[i];
>  		drmModeConnector *connector = _connector->connector;
> @@ -338,7 +339,7 @@ static void dump_connectors(struct device *dev)
>  		       connector->connector_id,
>  		       connector->encoder_id,
>  		       util_lookup_connector_status_name(connector->connection),
> -		       util_lookup_connector_type_name(connector->connector_type),
> +		       _connector->name,
>  		       connector->mmWidth, connector->mmHeight,
>  		       connector->count_modes);

As this is a low-level test tool I believe it would be useful to print both 
the name and the ID. Maybe something like "name (id)" ?

[snip]

> @@ -511,6 +516,47 @@ static void free_resources(struct resources *res)
>  	free(res);
>  }
> 
> +static unsigned int get_connector_index(struct resources *res, uint32_t
> type)
> +{
> +	unsigned int index = 0;
> +	int i;
> +
> +	for (i = 0; i < res->res->count_connectors; i++)
> +		if (res->connectors[i].connector->connector_type == type)
> +			index++;
> +
> +	return index - 1;
> +}
> +
> +static unsigned int get_order(unsigned int value)
> +{
> +	unsigned int order = 0;
> +
> +	do {
> +		value /= 10;
> +		order++;
> +	} while (value > 0);
> +
> +	return order - 1;
> +}
> +
> +static void connector_set_name(struct connector *connector,
> +			       struct resources *res)
> +{
> +	uint32_t type = connector->connector->connector_type;
> +	const char *type_name;
> +	unsigned int index;
> +	int len;
> +
> +	type_name = util_lookup_connector_type_name(type);
> +	index = get_connector_index(res, type);

The kernel's connector name is created using connector_type_id, not the 
connector index. Shouldn't we do the same here ?

> +	len = strlen(type_name) + get_order(index) + 2;

This looks like an over-optimization to me, can't you just add 9 to account 
for the largest possible index ? Or, even better, use asprintf ? The function 
is a GNU extension but is available on BSD according to its manpage.

> +	connector->name = malloc(len + 1);
> +	if (connector->name)
> +		snprintf(connector->name, len + 1, "%s-%u", type_name,  index);
> +}
> +
>  static struct resources *get_resources(struct device *dev)
>  {
>  	struct resources *res;

[snip]

> @@ -1405,6 +1483,32 @@ static int cursor_supported(void)
>  	return 1;
>  }
> 
> +static int pipe_resolve_connectors(struct pipe_arg *pipe, struct device
> *dev)
> +{
> +	drmModeConnector *connector;
> +	unsigned int i;
> +	uint32_t id;
> +	char *endp;
> +
> +	for (i = 0; i < pipe->num_cons; i++) {
> +		id = strtoul(pipe->cons[i], &endp, 10);
> +		if (endp == pipe->cons[i]) {

This won't have the expected behaviour for 9-pin DIN connectors, as the name 
starts with a digit. You should instead test for *endp == '\0'.

> +			connector = get_connector_by_name(dev, pipe->cons[i]);
> +			if (!connector) {
> +				fprintf(stderr, "no connector named %s\n",
> +					pipe->cons[i]);
> +				return -ENODEV;
> +			}
> +
> +			id = connector->connector_id;
> +		}
> +
> +		pipe->con_ids[i] = id;
> +	}
> +
> +	return 0;
> +}

Could update the help text in usage() to reflect the new usage ?

-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2015-01-24 23:56 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-23 16:08 [PATCH libdrm 00/11] Random assortment of fixes and enhancements Thierry Reding
2015-01-23 16:08 ` [PATCH libdrm 01/11] libdrm: valgrind-clear a few more IOCTL arguments Thierry Reding
2015-01-24 23:19   ` Laurent Pinchart
2015-01-23 16:08 ` [PATCH libdrm 02/11] libdrm: Remove gratuitous blank lines Thierry Reding
2015-01-24 23:19   ` Laurent Pinchart
2015-01-23 16:08 ` [PATCH libdrm 03/11] libdrm: Make indentation consistent Thierry Reding
2015-01-24 23:20   ` Laurent Pinchart
2015-01-23 16:08 ` [PATCH libdrm 04/11] tests: Split helpers into library Thierry Reding
2015-01-24 23:24   ` Laurent Pinchart
2015-01-29 15:27   ` [PATCH 04.1/11] SQUASH: tests: misc cleanups Emil Velikov
2015-01-29 15:27   ` [PATCH 04.2/11] SQUASH: util: add android build Emil Velikov
2015-01-23 16:08 ` [PATCH libdrm 05/11] tests: Move name tables to libutil Thierry Reding
2015-01-24 23:24   ` Laurent Pinchart
2015-01-29 15:28   ` [PATCH 05.1/11] SQUASH: util: add the kms.[ch] to makefile.sources Emil Velikov
2015-01-23 16:08 ` [PATCH libdrm 06/11] xf86drmMode.h: Use consistent padding Thierry Reding
2015-01-24 23:26   ` Laurent Pinchart
2015-01-23 16:08 ` [PATCH libdrm 07/11] xf86drmMode.h: Add DisplayPort MST encoder type Thierry Reding
2015-01-24 23:40   ` Laurent Pinchart
2015-01-23 16:08 ` [PATCH libdrm 08/11] tests: modetest: Accept connector names Thierry Reding
2015-01-24 23:56   ` Laurent Pinchart [this message]
2015-01-26 10:14     ` Thierry Reding
2015-01-26 10:24       ` Laurent Pinchart
2015-01-23 16:08 ` [PATCH libdrm 09/11] tests: Add libkms-test library Thierry Reding
2015-01-29 15:30   ` [PATCH 09.1/11] SQUASH: libkms-test: add missing header to the distribution Emil Velikov
2015-01-23 16:08 ` [PATCH libdrm 10/11] tests: kms: Implement CRTC stealing test Thierry Reding
2015-01-29 15:30   ` [PATCH 10.1/11] SQUASH: kms-steal-crtc: link against cairo Emil Velikov
2015-01-23 16:08 ` [PATCH libdrm 11/11] tests: kms: Implement universal planes test Thierry Reding
2015-01-29 15:31   ` [PATCH 11.1/11] SQUASH: kms-universal-planes: link against cairo Emil Velikov
2015-01-29 15:36 ` [PATCH libdrm 00/11] Random assortment of fixes and enhancements Emil Velikov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=10536857.Rtq57mgypf@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=thierry.reding@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox