#include <avr/io.h>
#include <stdlib.h>
#include <regs.h>
#include <spi.h>
#include <can2515.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include "can_interface.h"


int main(){
	DDRD &= ~(1<<PD7);
	DDRD &= ~(1<<PD2);
	PORTD |= (1<<PD7);
	PORTD |= (1<<PD2);

	init_spi();
	controller_reset();
	init_bittiming();
   	init_transmitter();
	init_receiver();
	controller_normal_mode();

	modify_register(CANCTRL, 0b111,0b101);
	modify_register(BFPCTRL, 0b00101010, 0b00101000);

	uint8_t PD2_pressed_flag = 0;

	while(1==1){
		if((PIND & (1<<PD7)) == 0){
			modify_register(BFPCTRL, 0b00101010, 0b00001000);
			Message *message;
			handle_interrupt(message);
			handle_can_message(message);
			modify_register(BFPCTRL, 0b00101010, 0b00101000);
		}
		
		if((PIND & (1<<PD2)) == 0 && (PD2_pressed_flag == 0)){
			PD2_pressed_flag = 1;
			modify_register(BFPCTRL, 0b00101010, 0b00001000);
			char data[] = " :100010000C9454000C9454000C9454000C94540010 ";
			write_bootloader_message_buffered_to_can(strlen(data),data);
		}
		if((PIND & (1<<PD2))!=0){
			modify_register(BFPCTRL, 0b00101010, 0b00101000);
			PD2_pressed_flag = 0;
		}

			
	}
	return 0;
}
