/*
 * led-state-3.c
 *
 *  Created on: Oct 3, 2018
 *      Author: corrado
 */

#include "stm32_unict_lib.h"

int led_state = 0;

int main(void)
{
	GPIO_init(GPIOB);
	GPIO_config_output(GPIOB, 0);

	GPIO_config_input(GPIOB, 10);
	GPIO_config_input(GPIOB, 4);
	GPIO_config_input(GPIOB, 5);

	GPIO_config_EXTI(GPIOB, EXTI4);
	EXTI_enable(EXTI4, FALLING_EDGE);

	GPIO_config_EXTI(GPIOB, EXTI5);
	EXTI_enable(EXTI5, FALLING_EDGE);

	GPIO_config_EXTI(GPIOB, EXTI10);
	EXTI_enable(EXTI10, FALLING_EDGE);

	for(;;) {
		switch (led_state) {
		case 0:
			GPIO_write(GPIOB,0, 0);
			break;
		case 1:
			delay_ms(500);
			GPIO_toggle(GPIOB, 0);
			break;
		case 2:
			GPIO_write(GPIOB,0, 1);
			break;
		}
	}
	return 0;
}

void EXTI4_IRQHandler(void)
{
	if (EXTI_isset(EXTI4)) {
		led_state = 0;
		EXTI_clear(EXTI4);
	}
}

void EXTI9_5_IRQHandler(void)
{
	if (EXTI_isset(EXTI5)) {
		led_state = 2;
		EXTI_clear(EXTI5);
	}
}

void EXTI15_10_IRQHandler(void)
{
	if (EXTI_isset(EXTI10)) {
		led_state = 1;
		EXTI_clear(EXTI10);
	}
}

