

#include "DriverJeuLaser.h"
#include "GestionSon.h"
#include "Affichage_Valise.h"

#define TIMEOUT 100

int DFT_ModuleAuCarre( short int * Signal64ech, char k);
extern short int LeSignal;

short int dma_buf[64];
int dft[64];
int dft_joueur[6];
int tab_score[6];
int timeout[6];

int n_led = 0;
int n_cible = 1;

void Maj_Cible() {
	Prepare_Clear_LED(n_led);
	
	n_led++;
	n_cible++;
	if (n_cible > 4) {
		n_cible = 1;
	}
	if (n_led > 3) {
		n_led = 0;
	}
	
	Prepare_Set_LED(n_led);
	Choix_Capteur(n_cible);
}


void Manage_Tick() {
	Start_DMA1(64);
	Wait_On_End_Of_DMA1();
	
	dft_joueur[0] = DFT_ModuleAuCarre((short *)&dma_buf, 17);
	dft_joueur[1] = DFT_ModuleAuCarre((short *)&dma_buf, 18);
	dft_joueur[2] = DFT_ModuleAuCarre((short *)&dma_buf, 19);
	dft_joueur[3] = DFT_ModuleAuCarre((short *)&dma_buf, 20);
	dft_joueur[4] = DFT_ModuleAuCarre((short *)&dma_buf, 23);
	dft_joueur[5] = DFT_ModuleAuCarre((short *)&dma_buf, 24);
	
	Stop_DMA1;
	
	Mise_A_Jour_Afficheurs_LED();
	
	for (int j = 0; j < 4; ++j) {
		if (timeout[j] > 0){
				timeout[j]--;
		}
		else if (dft_joueur[j] >= 0x0100000) {
			tab_score[j]++;
			timeout[j] = TIMEOUT;
			StartSon();
			Prepare_Afficheur(j+1,tab_score[j]);
			Maj_Cible();
		}
	}
}

int main(void)
{

// ===========================================================================
// ============= INIT PERIPH (faites qu'une seule fois)  =====================
// ===========================================================================

// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
CLOCK_Configure();
	
// SysTick (tick tt les 5 ms avec un clock à 72MHz)
Systick_Period_ff( 360000 );
Systick_Prio_IT( 9, Manage_Tick );
//Systick_Prio_IT( , Manage_Aff );
SysTick_On;
SysTick_Enable_IT;
	
// ADC
Init_TimingADC_ActiveADC_ff( ADC1, 72 );
Single_Channel_ADC( ADC1, 2 );
Init_Conversion_On_Trig_Timer_ff( ADC1, TIM2_CC2, 225 );
Init_ADC1_DMA1( 0, dma_buf );
	
// Config Son
GPIO_Configure(GPIOB, 0, OUTPUT, ALT_PPULL);
Timer_1234_Init_ff(TIM4, 6552);
Active_IT_Debordement_Timer( TIM4, 2, CallbackSon);
PWM_Init_ff( TIM3, 3, 720);


// Config affichage
Init_Affichage();

// Config score
for (int j = 0; j < 6; ++j) {
	tab_score[j] = 0;
	timeout[j] = TIMEOUT;
}

Prepare_Set_LED(0);
Choix_Capteur(1);

//============================================================================	


while	(1)
	{
	}
}

