    #include <stdio.h>
    #include <unistd.h>
    #include <gpiod.h>

    #define EXIT_SUCCESS 0
    #define EXIT_FAILURE -1

    // Raspberry Pi 5  GPIO 21 (BCM 21) ɑΉ
    #define GPIO_CHIP_PATH "/dev/gpiochip0"
    #define GPIO_LINE_NUM  21

    static enum gpiod_line_value toggle_line_value(enum gpiod_line_value value)
    {
    	return (value == GPIOD_LINE_VALUE_ACTIVE) ? GPIOD_LINE_VALUE_INACTIVE :
    						    GPIOD_LINE_VALUE_ACTIVE;
    }

    int main(void) {
        struct gpiod_chip *chip;
        struct gpiod_line_settings *settings;
        struct gpiod_line_config *line_cfg;
        struct gpiod_line_request *st_req;

        int ret, offset;

        // GPIO `bṽI[v
        chip = gpiod_chip_open(GPIO_CHIP_PATH);
        if (!chip) {
            perror("gpiod_chip_open failed");
            return EXIT_FAILURE;
        }

        settings = gpiod_line_settings_new();
        if (!settings) {
            perror("gpiod_line_settings_new failed");
            return EXIT_FAILURE;
        }

        // GPIO Co͂ƂĐݒ (Request)
        ret = gpiod_line_settings_set_direction(settings, GPIOD_LINE_DIRECTION_OUTPUT); 
        if (ret < 0) {
            perror("gpiod_line_request_output failed");
            gpiod_chip_close(chip);
            return EXIT_FAILURE;
        }

        ret = gpiod_line_settings_set_output_value(settings, GPIOD_LINE_VALUE_ACTIVE);
        if (ret < 0) {
            perror("gpiod_line_settings_set_output_value failed");
            gpiod_chip_close(chip);
            return EXIT_FAILURE;
        }
        
        line_cfg = gpiod_line_config_new();
        if (!line_cfg) {
            perror("gpiod_line_config_new failed");
            return EXIT_FAILURE;
        }
        
        offset = GPIO_LINE_NUM;
        gpiod_line_config_add_line_settings(line_cfg, &offset, 1, settings);
        
        st_req = gpiod_chip_request_lines(chip, NULL, line_cfg);
        if (!st_req) {
            perror("gpiod_chip_request_lines failed");
            return EXIT_FAILURE;
        }
        
        gpiod_line_request_set_value(st_req, GPIO_LINE_NUM, GPIOD_LINE_VALUE_ACTIVE);
        int value = GPIOD_LINE_VALUE_ACTIVE;
        for (;;) {
    		printf("gpio %d = %d\n", offset, value);
    		usleep(100000);                     // 100msŃgO
    		value = toggle_line_value(value);
    		gpiod_line_request_set_value(st_req, offset, value);
    	}
        
        // GPIO C̉
        gpiod_line_request_release(st_req);
        gpiod_chip_close(chip);

        printf("--- eXg܂ ---\n");
        return EXIT_SUCCESS;
    }
