/*
 * Copyright (c) 2021 Teslabs Engineering S.L.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_
#define ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_

#include <stdint.h>

#include <sys/util_macro.h>

/**
 * @name EXTI trigger modes.
 * @anchor GD32_EXTI_TRIG
 * @{
 */

/** No trigger */
#define GD32_EXTI_TRIG_NONE 0U
/** Trigger on rising edge */
#define GD32_EXTI_TRIG_RISING BIT(0)
/** Trigger on falling edge */
#define GD32_EXTI_TRIG_FALLING BIT(1)
/** Trigger on rising and falling edge */
#define GD32_EXTI_TRIG_BOTH (GD32_EXTI_TRIG_RISING | GD32_EXTI_TRIG_FALLING)

/** @} */

/** Callback for EXTI interrupt. */
typedef void (*gd32_exti_cb_t)(uint8_t line, void *user);

/**
 * @brief Enable EXTI interrupt for the given line.
 *
 * @param line EXTI line.
 */
void gd32_exti_enable(uint8_t line);

/**
 * @brief Disable EXTI interrupt for the given line.
 *
 * @param line EXTI line.
 */
void gd32_exti_disable(uint8_t line);

/**
 * @brief Configure EXTI interrupt trigger mode for the given line.
 *
 * @param line EXTI line.
 * @param trigger Trigger mode (see @ref GD32_EXTI_TRIG).
 */
void gd32_exti_trigger(uint8_t line, uint8_t trigger);

/**
 * @brief Configure EXTI interrupt callback.
 *
 * @param line EXTI line.
 * @param cb Callback (NULL to disable).
 * @param user User data (optional).
 *
 * @retval 0 On success.
 * @retval -EALREADY If callback is already set and @p cb is not NULL.
 */
int gd32_exti_configure(uint8_t line, gd32_exti_cb_t cb, void *user);

#endif /* ZEPHYR_INCLUDE_DRIVERS_INTERRUPT_CONTROLLER_GD32_EXTI_H_ */
