Re: [PATCH libgpiod-v2] gpioinfo: Show edge detection and debounce period if enabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jul 29, 2021 at 1:46 AM Ben Hutchings <ben.hutchings@xxxxxxx> wrote:
>
> gpioinfo shows most settings for each GPIO line, but currently misses
> edge detection and debouncing.
>
> * If edge detection is enabled, report it as an additional flag
> * If debouncing is enabled, report the duration
>
> Signed-off-by: Ben Hutchings <ben.hutchings@xxxxxxx>
> ---
>  tools/gpioinfo.c | 33 +++++++++++++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
>
> diff --git a/tools/gpioinfo.c b/tools/gpioinfo.c
> index cd2b9e4..ed0018c 100644
> --- a/tools/gpioinfo.c
> +++ b/tools/gpioinfo.c
> @@ -44,6 +44,21 @@ static bool line_drive_is_open_source(struct gpiod_line_info *info)
>         return gpiod_line_info_get_drive(info) == GPIOD_LINE_DRIVE_OPEN_SOURCE;
>  }
>
> +static bool edge_detection_is_rising(struct gpiod_line_info *info)
> +{
> +       return gpiod_line_info_get_edge_detection(info) == GPIOD_LINE_EDGE_RISING;
> +}
> +
> +static bool edge_detection_is_falling(struct gpiod_line_info *info)
> +{
> +       return gpiod_line_info_get_edge_detection(info) == GPIOD_LINE_EDGE_FALLING;
> +}
> +
> +static bool edge_detection_is_both(struct gpiod_line_info *info)
> +{
> +       return gpiod_line_info_get_edge_detection(info) == GPIOD_LINE_EDGE_BOTH;
> +}
> +
>  static const struct flag flags[] = {
>         {
>                 .name = "used",
> @@ -69,6 +84,18 @@ static const struct flag flags[] = {
>                 .name = "bias-disabled",
>                 .is_set = line_bias_is_disabled,
>         },
> +       {
> +               .name = "edge-rising",
> +               .is_set = edge_detection_is_rising,
> +       },
> +       {
> +               .name = "edge-failling",
> +               .is_set = edge_detection_is_falling,
> +       },
> +       {
> +               .name = "edge-both",
> +               .is_set = edge_detection_is_both,
> +       },
>  };
>
>  static const struct option longopts[] = {
> @@ -129,6 +156,7 @@ static void list_lines(struct gpiod_chip *chip)
>         const char *name, *consumer;
>         unsigned int i, offset;
>         int direction;
> +       unsigned long debounce_period;
>
>         printf("%s - %u lines:\n",
>                gpiod_chip_get_name(chip), gpiod_chip_get_num_lines(chip));
> @@ -142,6 +170,8 @@ static void list_lines(struct gpiod_chip *chip)
>                 consumer = gpiod_line_info_get_consumer(info);
>                 direction = gpiod_line_info_get_direction(info);
>                 active_low = gpiod_line_info_is_active_low(info);
> +               debounce_period = gpiod_line_info_is_debounced(info) ?
> +                       gpiod_line_info_get_debounce_period(info) : 0;
>
>                 of = false;
>
> @@ -166,6 +196,9 @@ static void list_lines(struct gpiod_chip *chip)
>                 prinfo(&of, 13, "%s ",
>                        active_low ? "active-low" : "active-high");
>
> +               if (debounce_period)
> +                       printf("debounce=%lu ", debounce_period);

You should use prinfo here for formatting. But it would be even better
if this became a flag - like the bias, drive etc settings and be shown
inside the [] brackets at the end of the line - something like:
"[pull-up, used, debounce-period=1000us]".

Bart

> +
>                 flag_printed = false;
>                 for (i = 0; i < ARRAY_SIZE(flags); i++) {
>                         if (flags[i].is_set(info)) {
> --
> 2.20.1



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux