From 49535cb998d9bec44b078f0af7d8299f9a3184d1 Mon Sep 17 00:00:00 2001 From: victor Date: Sat, 27 Sep 2025 03:05:05 +0200 Subject: [PATCH] bless --- Makefile | 17 +++++--- image/raspi.apkovl.tar.gz | Bin 12037 -> 11948 bytes src/main.c | 79 ++++++++++++++++++++++++++++++++------ 3 files changed, 80 insertions(+), 16 deletions(-) diff --git a/Makefile b/Makefile index 144d77b..9d8b1b0 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ SRC_DIR := src -SRC := $(SRC_DIR)/*.c +SRC := $(wildcard $(SRC_DIR)/*.c) BUILD_DIR := build @@ -50,7 +50,7 @@ SSH_AUTH_KEYS := $(ALPINE)/authorized_keys all: $(TARGET) $(TARGET): $(SRC) $(BUILD_DIR) $(LIB) $(LIBGPIOD) - $(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LIB) + $(CC) $(CFLAGS) -o $(TARGET) $(SRC) $(LIB) $(LIBGPIOD) get: $(ASSETS) $(ALPINE_TAR) $(ALPINE_HEADLESS) rm -rf $(ALPINE)/* @@ -75,14 +75,19 @@ bootable: $(ALPINE) $(WPA_CONFIG) get $(ALPINE_HEADLESS): wget https://github.com/macmpi/alpine-linux-headless-bootstrap/raw/98728731299f262eab270941c522138d6c5cea73/headless.apkovl.tar.gz -O $(ALPINE_HEADLESS) -$(LIBGPIOD): +$(LIBGPIOD): $(TOOLCHAIN) + rm -f $(LIBGPIOD) git clone https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git && \ cd libgpiod && \ + export ac_cv_func_malloc_0_nonnull=yes && \ + export ac_cv_func_realloc_0_nonnull=yes && \ ./autogen.sh && \ ./configure --host=aarch64-linux-musl \ - --prefix=/home/victor/.local/toolchains/aarch64-linux-musl-cross \ + --prefix=$(TOOLCHAIN) \ --enable-tools=no \ - --enable-bindings-cxx=no && \ + --enable-bindings-cxx=no \ + --disable-shared \ + --enable-static && \ make && make install && \ cd .. && \ rm -rf libgpiod @@ -114,3 +119,5 @@ $(ASSETS): clean: rm -rf $(BUILD_DIR) $(ALPINE) $(ASSETS) make fclean -C $(LIBFT_DIR) + +.PHONY: sync diff --git a/image/raspi.apkovl.tar.gz b/image/raspi.apkovl.tar.gz index 9f000f7349c75a7bf0fc1cb1ed63901a2f05cbca..f1fb956b857eaa16e9f0f0aa94d7a70f8c6abd78 100755 GIT binary patch literal 11948 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 literal 12037 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 -#include -#include -#include -#include +#include +#include #include +#include +#include #define GPIO_CHIP_NAME "gpiochip0" -#define GPIO_CHIP_PATH "/dev/gpiochip0" +#define GPIO_CHIP_PATH "/dev/"GPIO_CHIP_NAME #define FAIL(code, msg, ...) \ do { \ - ft_fprintf(STDERR_FILENO, msg, ...); \ + ft_fprintf(STDERR_FILENO, msg, ##__VA_ARGS__); \ exit(code); \ } while (0); +#define DIGIT_ONE 17 +#define DIGIT_TWO 22 +#define DIGIT_THREE 26 +#define DIGIT_FOUR 24 + +#define SER 7 +#define RCLK 5 +#define SRCLK 6 + int main() { - struct gpiod_chip* chip = gpiod_chip_open(GPIO_CHIP_PATH); + struct gpiod_chip *chip; + struct gpiod_line_request *request; + struct gpiod_line_settings *settings; + struct gpiod_line_config *line_cfg; + struct gpiod_request_config *req_cfg; + uint32_t lines[] = {DIGIT_ONE, DIGIT_TWO, DIGIT_THREE, DIGIT_FOUR, SER, SRCLK, RCLK}; - FAIL(1, "Failed to load chip %s", "chippy"); + uint32_t digits[] = { DIGIT_ONE, DIGIT_TWO, DIGIT_THREE, DIGIT_FOUR }; - if (!chip) { + // Open chip + chip = gpiod_chip_open("/dev/gpiochip0"); + // Create line settings for output + settings = gpiod_line_settings_new(); + gpiod_line_settings_set_direction(settings, GPIOD_LINE_DIRECTION_OUTPUT); + gpiod_line_settings_set_output_value(settings, GPIOD_LINE_VALUE_INACTIVE); + + // Create line config and add our line + line_cfg = gpiod_line_config_new(); + + gpiod_line_config_add_line_settings(line_cfg, lines, 2, settings); + + // Create request config + req_cfg = gpiod_request_config_new(); + gpiod_request_config_set_consumer(req_cfg, "my_program"); + + // Request the line + request = gpiod_chip_request_lines(chip, req_cfg, line_cfg); + + gpiod_line_request_set_value(request, SRCLK, GPIOD_LINE_VALUE_INACTIVE); + gpiod_line_request_set_value(request, RCLK, GPIOD_LINE_VALUE_INACTIVE); + while (1) { + for (uint32_t i = 0; i < 4; i++) { + gpiod_line_request_set_value(request, digits[i], GPIOD_LINE_VALUE_ACTIVE); + for (uint32_t j = 0; j < 7; j++) { + gpiod_line_request_set_value(request, SRCLK, GPIOD_LINE_VALUE_INACTIVE); + gpiod_line_request_set_value(request, SER, GPIOD_LINE_VALUE_INACTIVE); + gpiod_line_request_set_value(request, SRCLK, GPIOD_LINE_VALUE_ACTIVE); + usleep(50); + } + usleep(100); + gpiod_line_request_set_value(request, RCLK, GPIOD_LINE_VALUE_ACTIVE); + usleep(100); + gpiod_line_request_set_value(request, RCLK, GPIOD_LINE_VALUE_INACTIVE); + gpiod_line_request_set_value(request, digits[i], GPIOD_LINE_VALUE_INACTIVE); + usleep(1); // 500ms + } } - ft_printf("Hello world\n"); + + // Cleanup + gpiod_line_request_release(request); + gpiod_line_config_free(line_cfg); + gpiod_line_settings_free(settings); + gpiod_request_config_free(req_cfg); + gpiod_chip_close(chip); + + return 0; }