/** * @file gpio_control.c * @brief CLI utility to control GPIOs using KED GPIO interface (Linux). */ #include "../ked/peripherals/gpio/gpio.h" #include #include #include /** * @brief Simple command-line tool to test the GPIO API. */ int main(int argc, char* argv[]) { if (argc < 4) { printf("Usage: %s -pin -[set|reset|toggle|read]\n", argv[0]); return 1; } unsigned int pin = 0; const char* action = NULL; for (int i = 1; i < argc; i++) { if (strcmp(argv[i], "-pin") == 0 && i + 1 < argc) { pin = (unsigned int)atoi(argv[++i]); } else if (strncmp(argv[i], "-", 1) == 0) { action = argv[i] + 1; // skip '-' prefix } } if (pin == 0 || !action) { fprintf(stderr, "Invalid usage.\n"); return 1; } gpio_t gpio; gpio_config cfg = { .chipname = "/dev/gpiochip0", .line_offset = pin, .mode = GPIO_MODE_DEFAULT, .direction = (strcmp(action, "read") == 0) ? GPIO_DIRECTION_INPUT : GPIO_DIRECTION_OUTPUT, .bias = GPIO_BIAS_NONE }; gpio_error_t err = ked_gpio_init(&gpio, &cfg); if (err != GPIO_OK) { if (gpio.on_error) gpio.on_error(err); return 1; } if (strcmp(action, "set") == 0) { gpio.set(true); //printf("GPIO%u set HIGH\n", pin); } else if (strcmp(action, "reset") == 0) { gpio.set(false); //printf("GPIO%u set LOW\n", pin); } else if (strcmp(action, "toggle") == 0) { gpio.toggle(); //printf("GPIO%u toggled\n", pin); } else if (strcmp(action, "read") == 0) { bool value = gpio.read(); printf("%s\n", value ? "1" : "0"); } else { fprintf(stderr, "Unknown action: %s\n", action); if (gpio.on_error) gpio.on_error(GPIO_ERR_UNKNOWN); return 1; } gpio.deinit(); return 0; }