/************************************************************************************
* @Copyright (c)	:(C)2020, Qindao ieslab Co., Ltd
* @FileName   		:hc32_gpio_driver.h
* @Author           :QDIES PLATFORM TEAM
* @Version          :V1.0
* @Date             :2020-07-01
* @Description      :
************************************************************************************/

#ifndef __UWater_GPIO_DRIVER_H
#define __UWater_GPIO_DRIVER_H

#ifdef	__cplusplus
extern "C"
{
#endif
	
#include "ddl.h"
#include "type.h"

/*****************************变量定义***************************************/

//GPIO时钟使能
#define MCU_GPIO_CLK_ENABLE()       SetBit((uint32_t)(&(M0P_SYSCTRL->PERI_CLKEN0)), SysctrlPeripheralGpio, TRUE)
//GPIO时钟禁止
#define MCU_GPIO_CLK_DISABLE()      SetBit((uint32_t)(&(M0P_SYSCTRL->PERI_CLKEN0)), SysctrlPeripheralGpio, FALSE)


#define EN_IR_PWR_PORT       (GpioPortB)
#define EN_IR_PWR_PIN        (GpioPin9)



//// GPIOEx_Get_Port_Index GPIOEx_Get Port Index
//typedef enum en_gpio_mode
//{
//    GPIO_MODE_INPUT       = 0u,     ///< GPIO 输入
//    GPIO_MODE_RISING      = 1u,
//    GPIO_MODE_FALLING     = 2u,
//    GPIO_MODE_BOTHEDGE    = 3u,
//    GPIO_MODE_OUTPUT_OD   = 4u,     ///< GPIO 开漏输出
//    GPIO_MODE_OUTPUT_PP   = 5u,     ///< GPIO 推挽输出
//    GPIO_MODE_ANALOG      = 6u,     ///模拟
//		
//}GPIO_MODE_t;

////GPIO Pull-Up or Pull-Down Activation
//typedef enum en_gpio_pupd
//{
//    GPIO_NOPULL   = 0u,             ///< GPIO无上下拉
//    GPIO_PULLUP   = 1u,             ///< GPIO上拉
//    GPIO_PULLDOWN = 2u              //< GPIO下拉
//}GPIO_PUPD_t;


//// GPIO_pins GPIO pins
//typedef enum ex_gpio_pin
//{
//    GPIO_PIN_0 = 0,   // Pin 0 selected    
//    GPIO_PIN_1,   // Pin 1 selected    
//    GPIO_PIN_2,   // Pin 2 selected    
//    GPIO_PIN_3,   // Pin 3 selected    
//    GPIO_PIN_4,   // Pin 4 selected    
//    GPIO_PIN_5,   // Pin 5 selected    
//    GPIO_PIN_6,   // Pin 6 selected    
//    GPIO_PIN_7,   // Pin 7 selected    
//    GPIO_PIN_8,   // Pin 8 selected    
//    GPIO_PIN_9,   // Pin 9 selected    
//    GPIO_PIN_10,  // Pin 10 selected   
//    GPIO_PIN_11,  // Pin 11 selected   
//    GPIO_PIN_12,  // Pin 12 selected   
//    GPIO_PIN_13,  // Pin 13 selected   
//    GPIO_PIN_14,  // Pin 14 selected   
//    GPIO_PIN_15   // Pin 15 selected
//}GPIO_PIN_t;

////#define GPIO_PIN_All               ((u16)0xFFFF)  // All pins selected 
////#define STM32_GPIO_PIN_MASK        ((u32)0x0000FFFF)    // PIN mask for assert test 
//typedef enum ex_gpio_drv
//{
//    GpioDrvHigh = 0u,                  ///< GPIO高驱动能力
//    GpioDrvLow  = 1u,                  ///< GPIO低驱动能力
//}GPIO_DRV_t;

////GPIO Init structure definition
//typedef struct
//{
//	
//    GPIO_PIN_t  Pin;        // Specifies the GPIO pins to be configured.This parameter can be any value of @ref GPIO_pins 
//    GPIO_MODE_t Mode;       //Specifies the operating mode for the selected pins.This parameter can be a value of @ref GPIO_mode 
//    GPIO_PUPD_t Pull;       // Specifies the Pull-up or Pull-Down activation for the selected pins.This parameter can be a value of @ref GPIO_pull 
//    GPIO_DRV_t  Drv;
//  
//}GPIO_InitTypeDef;

//typedef enum en_gpio_type
//{
//    GpioA = 0x00u,                 ///< GPIO PORT A
//    GpioB = 0x40u,                 ///< GPIO PORT B
//    GpioC = 0x80u,                 ///< GPIO PORT C
//    GpioD = 0xc0u,                 ///< GPIO PORT D
//    GpioE = 0x1000u,               ///< GPIO PORT E
//    GpioF = 0x1040u,               ///< GPIO PORT F
//}GPIO_TypeDef;

typedef en_gpio_port_t    GPIO_TypeDef;
typedef en_gpio_pin_t     GPIO_PIN_t;


/*****************************外部接口***************************************/
//void MCU_GPIO_Init(GPIO_TypeDef GPIOx, GPIO_InitTypeDef *GPIO_Init);
//void MCU_GPIO_DeInit(GPIO_TypeDef GPIOx, GPIO_PIN_t GPIO_Pin);
void GpioInit(void);
GPIO_PinState GPIO_ReadPin(GPIO_TypeDef GPIOx, GPIO_PIN_t GPIO_Pin);
void GPIO_WritePin(GPIO_TypeDef GPIOx, GPIO_PIN_t GPIO_Pin, GPIO_PinState PinState);
void GPIO_TogglePin(GPIO_TypeDef GPIOx, GPIO_PIN_t GPIO_Pin);
void GPIO_LockPin(GPIO_TypeDef GPIOx, GPIO_PIN_t GPIO_Pin);

#ifdef	__cplusplus
}
#endif

#endif	/* __STM32L4xx_GPIO_DRIVER_H */

