/** * @file gpio_control.c * @brief CLI utility to control GPIOs using the KED GPIO interface (Linux). */ #include "../ked/peripherals/gpio/gpio.h" #include #include #include #define GPIOCHIP_DEFAULT "/dev/gpiochip0" /** * @brief Print usage message for the CLI tool. */ void print_usage(const char* prog_name) { printf("Usage: %s -pin -set|-reset|-toggle|-read\n", prog_name); } /** * @brief Entry point for GPIO control CLI. */ int main(int argc, char* argv[]) { uint32_t pin = 0; uint8_t action = 0xFF; // 0=set, 1=reset, 2=toggle, 3=read if (argc < 4) { print_usage(argv[0]); return 1; } for (int i = 1; i < argc; ++i) { if (strcmp(argv[i], "-pin") == 0 && i + 1 < argc) { pin = atoi(argv[++i]); } else if (strcmp(argv[i], "-set") == 0) { action = 0; } else if (strcmp(argv[i], "-reset") == 0) { action = 1; } else if (strcmp(argv[i], "-toggle") == 0) { action = 2; } else if (strcmp(argv[i], "-read") == 0) { action = 3; } } if (pin == 0 || action == 0xFF) { print_usage(argv[0]); return 2; } gpio_t led = { .chipname = "/dev/gpiochip0", .line_offset = pin, .direction = (action == 3) ? T_GPIO_DIRECTION_INPUT : T_GPIO_DIRECTION_OUTPUT, .bias = T_GPIO_BIAS_DEFAULT, .mode = T_GPIO_MODE_DEFAULT, .status = T_GPIO_STATUS_NOT_INIT, .func = NULL }; gpio_error_t err = ked_gpio_init(&led); if (err != T_GPIO_ERR_OK) { led.func->on_error(err); return 1; } switch (action) { case 0: led.func->set(1); break; case 1: led.func->set(0); break; case 2: led.func->toggle(); break; case 3: printf("GPIO%u value: %d\n", pin, led.func->read()); break; } // Clean up return 0; }