284 lines
8.6 KiB
C
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
|