*/
#include "gpiod-unit.h"
-#include <gpiod.h>
#include <stdio.h>
#include <errno.h>
-static void close_chip(struct gpiod_chip **chip)
-{
- if (*chip)
- gpiod_chip_close(*chip);
-}
-
-static void free_str(char **str)
-{
- if (*str)
- free(*str);
-}
-
static void chip_open_good(void)
{
- GU_CLEANUP(close_chip) struct gpiod_chip *chip = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip = NULL;
chip = gpiod_chip_open(gu_chip_path(0));
GU_ASSERT_NOT_NULL(chip);
static void chip_open_by_number_good(void)
{
- GU_CLEANUP(close_chip) struct gpiod_chip *chip = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip = NULL;
chip = gpiod_chip_open_by_number(gu_chip_num(0));
GU_ASSERT_NOT_NULL(chip);
static void chip_open_lookup(void)
{
- GU_CLEANUP(close_chip) struct gpiod_chip *chip_by_name = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip_by_path = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip_by_num = NULL;
- GU_CLEANUP(free_str) char *chip_num;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip_by_name = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip_by_path = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip_by_num = NULL;
+ GU_CLEANUP(gu_free_str) char *chip_num;
GU_ASSERT(asprintf(&chip_num, "%u", gu_chip_num(0)) > 0);
static void chip_name(void)
{
- GU_CLEANUP(close_chip) struct gpiod_chip *chip0 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip1 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip2 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip0 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip1 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip2 = NULL;
chip0 = gpiod_chip_open(gu_chip_path(0));
chip1 = gpiod_chip_open(gu_chip_path(1));
static void chip_label(void)
{
- GU_CLEANUP(close_chip) struct gpiod_chip *chip0 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip1 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip2 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip0 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip1 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip2 = NULL;
chip0 = gpiod_chip_open(gu_chip_path(0));
chip1 = gpiod_chip_open(gu_chip_path(1));
static void chip_num_lines(void)
{
- GU_CLEANUP(close_chip) struct gpiod_chip *chip0 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip1 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip2 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip3 = NULL;
- GU_CLEANUP(close_chip) struct gpiod_chip *chip4 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip0 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip1 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip2 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip3 = NULL;
+ GU_CLEANUP(gu_close_chip) struct gpiod_chip *chip4 = NULL;
chip0 = gpiod_chip_open(gu_chip_path(0));
chip1 = gpiod_chip_open(gu_chip_path(1));
--- /dev/null
+/*
+ * GPIO chip test cases for libgpiod.
+ *
+ * Copyright (C) 2017 Bartosz Golaszewski <bartekgola@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2.1 of the GNU Lesser General Public License
+ * as published by the Free Software Foundation.
+ */
+
+#include "gpiod-unit.h"
+
+static void chip_iter(void)
+{
+ GU_CLEANUP(gu_free_chip_iter) struct gpiod_chip_iter *iter = NULL;
+ struct gpiod_chip *chip;
+ bool A, B, C;
+
+ A = B = C = false;
+
+ iter = gpiod_chip_iter_new();
+ GU_ASSERT_NOT_NULL(iter);
+
+ gpiod_foreach_chip(iter, chip) {
+ GU_ASSERT(!gpiod_chip_iter_err(iter));
+
+ if (strcmp(gpiod_chip_label(chip), "gpio-mockup-A") == 0)
+ A = true;
+ else if (strcmp(gpiod_chip_label(chip), "gpio-mockup-B") == 0)
+ B = true;
+ else if (strcmp(gpiod_chip_label(chip), "gpio-mockup-C") == 0)
+ C = true;
+ }
+
+ GU_ASSERT(A);
+ GU_ASSERT(B);
+ GU_ASSERT(C);
+}
+GU_DEFINE_TEST(chip_iter, "gpiod_chip iterator",
+ GU_LINES_UNNAMED, { 8, 8, 8 });