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
 |