#pragma once #include "zbase.h" typedef enum { kxs_gpio_nopull, // kxs_gpio_pullup, // kxs_gpio_pulldown, // kxs_gpio_od, // } zaf_gpio_mode_t; typedef enum { kxs_gpio_ain, kxs_gpio_input, kxs_gpio_output } zaf_gpio_type_t; typedef enum { kxs_gpio_no_irq, kxs_gpio_rising_irq, kxs_gpio_falling_irq, kxs_gpio_rising_and_falling_irq, } zaf_gpio_irq_t; typedef struct { Pin_t pin; GPIO_TypeDef *gpio; uint16_t pinoff; zaf_gpio_mode_t mode; zaf_gpio_type_t gpiotype; zaf_gpio_irq_t irqtype; bool mirror; bool inited; } zaf_gpio_t; void zaf_gpio_init_as_input(zaf_gpio_t *gpio, Pin_t pin, zaf_gpio_mode_t mode, zaf_gpio_irq_t irqtype, bool mirror); void zaf_gpio_init_as_output(zaf_gpio_t *gpio, Pin_t pin, zaf_gpio_mode_t mode, bool mirror, bool initLevel); bool zaf_gpio_read(zaf_gpio_t *gpio); void zaf_gpio_write(zaf_gpio_t *gpio, bool level); void zaf_gpio_toggle(zaf_gpio_t *gpio); void zaf_enable_clock(Pin_t pin); GPIO_TypeDef *chip_get_gpio(Pin_t pin); int chip_get_pinoff(Pin_t pin);