#ifndef GPIO_H #define GPIO_H #include "types.h" /** * The signal level of a GPIO line. */ enum gpio_level { LOW = 0, HIGH = 1, }; /** * The availables GPIO pins on the NRF82832. */ enum gpio_pin { PIN_0 = 0, PIN_1 = 1, PIN_2 = 2, PIN_3 = 3, PIN_4 = 4, PIN_5 = 5, PIN_6 = 6, PIN_7 = 7, PIN_8 = 8, PIN_9 = 9, PIN_10 = 10, PIN_11 = 11, PIN_12 = 12, PIN_13 = 13, PIN_14 = 14, PIN_15 = 15, PIN_16 = 16, PIN_17 = 17, PIN_18 = 18, PIN_19 = 19, PIN_20 = 20, PIN_21 = 21, PIN_22 = 22, PIN_23 = 23, PIN_24 = 24, PIN_25 = 25, PIN_26 = 26, PIN_27 = 27, PIN_28 = 28, PIN_29 = 29, PIN_30 = 30, PIN_31 = 31, }; /** * The pull configuration for a GPIO line. */ enum gpio_pull_configuration { /** Keep the GPIO in a floating state when the circuit is open */ NO_PULL = 0, /** Force the signal to the `LOW` level when the circuit is open */ PULL_DOWN = 1, /** Force the signal to the `HIGH` level when the circuit is open */ PULL_UP = 3, }; /** * The drive configuration for a GPIO line. */ enum gpio_drive_configuration { /** Standard 0, Standard 1 */ S0S1 = 0, /** High drive 0, Standard 1 */ H0S1 = 1, /** Standard 0, High drive 1 */ S0H1 = 2, /** High drive 0, High Drive 1 */ H0H1 = 3, /** Disconnect 0, Standard 1 */ D0S1 = 4, /** Disconnect 0, High drive 1 */ D0H1 = 5, /** Standard 0, Disconnect 1 */ S0D1 = 6, /** High drive 0, Disconnect 1 */ H0D1 = 7, }; /** * Init the given pin as an input. */ void gpio_input_pin_init(enum gpio_pin pin, enum gpio_pull_configuration pull_config, enum gpio_level sensibility); /** * Init the given pin as output. */ void gpio_output_pin_init(enum gpio_pin pin, enum gpio_drive_configuration drive_config); /** * Disable a GPIO pin. */ u8 gpio_pin_disable(enum gpio_pin pin); /** * Read the current signal level of the given GPIO pin. */ enum gpio_level gpio_pin_get_level(enum gpio_pin pin); /** * Set the given GPIO pin to the given level. */ void gpio_pin_set_level(enum gpio_pin pin, enum gpio_level level); #endif