#include <common.h>

#include <stdio.h>

#include "utils/usart.h"
#include "utils/timebase.h"
#include "utils/debounce.h"
#include "utils/str_utils.h"

#include "init.h"
#include "blink.h"

/** IRQ */
void USART2_IRQHandler(void)
{
	// RXIE enables also ORE - must handle ORE.
	if (USART2_SR & USART_SR_ORE) {
		USART2_SR &= ~USART_SR_ORE;
	}

	if (USART2_SR & USART_SR_RXNE) {
		blue_blink();

		// handle incoming char.
		char c = usart_rx_char(USART2);
		
		// echo
		usart_tx_char(USART2, c);

		USART2_SR ^= USART_SR_RXNE;
	}
}


/** Init peripherals; Called by startup script, before main() */
void SystemInit(void)
{
	init_clock();
	init_systick();
	init_gpios();
	init_usart();
	init_adc();
	init_dac();
	init_pwm1();
}


int main(void)
{
	usart_tx_string(USART2, "Hello.\n");

	while (1) {
		delay_ms(500);
		green_toggle();
	}
}