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
 |