Files
kunlun/export/inc/gpio/iot_gpio_api.h
2024-09-28 14:24:04 +08:00

284 lines
8.6 KiB
C

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef _IOT_GPIO_API_H_
#define _IOT_GPIO_API_H_
#ifdef __cplusplus
extern "C" {
#endif
/** \defgroup Gpio_APIs Gpio APIs
* @brief Gpio APIs
*
*
*
*/
/** @addtogroup Gpio_APIs
* @{
*/
/**
* @brief GPIO mode.
*/
enum gpio_mode
{
GPIO_INPUT, /**< GPIO for INPUT using. */
GPIO_OUTPUT, /**< GPIO for OUTPUT using. */
GPIO_INTERRUPT, /**< GPIO for INTERRUPT using */
GPIO_INVALID /**< Invalid value */
};
/**
* @brief GPIO pull mode.
*/
enum gpio_pull_mode
{
GPIO_PULL_NONE,
GPIO_PULL_UP,
GPIO_PULL_DOWN,
GPIO_PULL_UP_DOWN
};
/**
* @brief GPIO opendrain mode.
*/
enum gpio_drain_mode
{
GPIO_DRAIN_NORMAL,
GPIO_DRAIN_ONLY_1,
GPIO_DRAIN_ONLY_0,
};
/**
* @brief Modes of interrupt. Only when gpio_mode set as GPIO_INTERRUPT,
* int_mode is available.
*/
enum gpio_int_trigger_mode
{
GPIO_INT_DISABLE, /**< Disable the interrupt. */
GPIO_INT_LEVEL_HIGH, /**< Interrupt triggered when the voltage of this GPIO
stays in HIGH. */
GPIO_INT_LEVEL_LOW, /**< Interrupt triggered when the voltage of this GPIO
stays in LOW. */
GPIO_INT_EDGE_RAISING, /**< Interrupt triggered when the voltage of this
GPIO switchs from LOW to HIGH. */
GPIO_INT_EDGE_FALLING, /**< Interrupt triggered when the voltage of this
GPIO switchs from HIGH to LOW. */
GPIO_INT_EDGE_BOTH, /**< Interrupt triggered when the voltage of this GPIO
switchs to HIGH or LOW . */
GPIO_INT_INVALID /**< Invalid value */
};
/**
* @brief Config by app when calling iot_gpio_interrupt_config.
*
*/
enum gpio_int_func_mode {
GPIO_INT_FUNC_DISABLE_AUTOSTOP, /**< GPIO interrupt function disable
auto stop */
GPIO_INT_FUNC_ENABLE_AUTOSTOP, /**< GPIO interrupt function enable
autostop */
GPIO_INT_FUNC_GET_TICKS, /**< GPIO interrupt function get timer
tick counts*/
GPIO_INT_FUNC_INVALID /**< Invalid value */
};
/**
* @brief iot_gpio_isr_func(), the type of ISR function, called by share-task.
* @param arg1: The argument from ISR, registered by interrupt-config.
*/
typedef void (*iot_gpio_isr_func)(int);
/**
* @brief iot_gpio_open_as_input() - Open an GPIO as inputting.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @see iot_gpio_open_as_output()
* @see iot_gpio_open_as_interrupt()
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_open_as_input(int gpio);
/**
* @brief iot_gpio_open_as_output() - Open an GPIO as outputting.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @see iot_gpio_open_as_input()
* @see iot_gpio_open_as_interrupt()
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_open_as_output(int gpio);
/**
* @brief iot_gpio_open_as_interrupt() - Open an GPIO as interrupting.
* When an GPIO opened as interrupting,
* iot_gpio_interrupt_config() should be called .
* @param gpio: GPIO-NO that starts from 'Zero'.
* @see iot_gpio_open_as_input()
* @see iot_gpio_open_as_output()
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_open_as_interrupt(int gpio);
/**
* @brief iot_gpio_interrupt_config() - This function should be called after
* iot_gpio_open_as_interrupt() to configure an interrupt.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @param mode: Interrupt trigger mode.@see enum int_trigger_mode.
* @param isr: Interrupt call-back function. It's a function pionter
* See iot_gpio_isr_func.
* @param arg: Argument for isr.
* @param func_mode: Interrupt function mode when interrupt occurs.
* See enum gpio_int_func_mode.
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_interrupt_config
(int gpio, enum gpio_int_trigger_mode mode, iot_gpio_isr_func isr, int arg,
int func_mode);
/**
* @brief iot_gpio_interrupt_enable() - Enable or disable the interrupt.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @param enable: Disable the interrupt if 'enable' is 0, otherwase enable it.
* @see iot_gpio_interrupt_config()
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_interrupt_enable(int gpio, int enable);
/**
* @brief iot_gpio_value_get() - Get the logic value of an GPIO.An GPIO will be
* configured as inputting if this GPIO was outputting before
* iot_gpio_value_get() is called.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @see ERR_FAIL
* @return 1 -- Logic high..
* @return 0 -- Logic low.
* @return ERR_FAIL -- Operation failed.
*/
int iot_gpio_value_get(int gpio);
/**
* @brief iot_gpio_value_set() - Set the logic value of an GPIO.
* An GPIO will be configured as outputting if this GPIO was inputting before
* iot_gpio_value_set() is called.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @param value: Set the logic value as low if 'value' is 0, otherwase as high.
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_value_set(int gpio, int value);
/**
* @brief iot_gpio_output_value_get() - Get the logic value of an GPIO output.
* An GPIO will be configured as outputting if this GPIO was inputting before
* iot_gpio_output_value_get() is called.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @param pvalue: The pointer to store logic value of this gpio.
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_output_value_get(int gpio, int *pvalue);
/**
* @brief iot_gpio_set_opendrain_mode() - Set the open drain of an GPIO.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @param drain_mode:Open drain mode.@see enum gpio_drain_mode.
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_set_opendrain_mode(int gpio, enum gpio_drain_mode drain_mode);
/**
* @brief iot_gpio_switch_io_mode_dynamic() - Switch input or output mode of GPIO.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @param gpio_mode:GPIO mode.@see enum gpio_mode.
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_switch_io_mode_dynamic(int gpio, enum gpio_mode mode);
/**
* @brief iot_gpio_set_pull_mode() - Set the pull up/down of an GPIO.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @param pull_mode:Pull up/down.@see enum gpio_pull_mode.
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_set_pull_mode(int gpio, enum gpio_pull_mode pull_mode);
/**
* @brief iot_gpio_get_trigger_ticks() -
* for customer get cur_timer_cnt when triggered gpio interrupt
* @param gpio: GPIO-NO that starts from 'Zero'.
* @return cur_timer_cnt when gpio interrupt triggered by zero cross detect
*/
unsigned int iot_gpio_get_trigger_ticks(int gpio);
/**
* @brief iot_gpio_close() - Close an GPIO.Interrupt will be disabled if this
* GPIO opened as interrupt.
* @param gpio: GPIO-NO that starts from 'Zero'.
* @see iot_gpio_open_as_input()
* @see iot_gpio_open_as_output()
* @see iot_gpio_open_as_interrupt()
* @see ERR_FAIL
* @see ERR_OK
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_close(int gpio);
/**
* @brief iot_gpio_module_init() - initializes GPIO module,both ext and inner IO
* (The extended IO chip provides an IO signal to indicate
* whether the extended IO is interrupted or not.)
* @return ERR_FAIL -- Operation failed.
* @return ERR_OK -- Operation Successful.
*/
int iot_gpio_module_init();
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif