#ifndef __GPIO_H__
#define __GPIO_H__

#include "./../../stm32f429xx.h"
//#include <stdint.h>

typedef enum {
	SET_GPIO_INPUT = 0,
	SET_GPIO_PUSH_PULL_OUTPUT,
	SET_GPIO_OPEN_DRAIN_OUTPUT,
	SET_GPIO_PULL_UP,
	SET_GPIO_PULL_DOWN,
	SET_GPIO_NO_PULL,
	SET_GPIO_SPEED,
	SET_GPIO_VALUE,
	GET_GPIO_VALUE
}GpioAction;


#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */

#define GPIO_LOW_SPEED		((uint8_t)0x00)
#define GPIO_MEDIUM_SPEED	((uint8_t)0x01)
#define GPIO_FAST_SPEED		((uint8_t)0x02)
#define GPIO_HIGH_SPEED		((uint8_t)0x03)

typedef struct {
	GPIO_TypeDef	*port;
	uint16_t	pin;
	uint8_t 	data;	
}gpio_data_t;


#endif /* __GPIO_H__ */
