

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


#define BASE_TIMEOUT 100
#define NB_JOUEUR 4


extern int DFT_ModuleAuCarre(short int * LeSignal, int k);
extern short int LeSignal[];


// structure représentant un joueur
struct joueur {
	int k; // le "k" associé à sa DFT
	int score; // son score
	int timeout; // utilisé pour ne pas compter plusieur fois la même salve
	int dft;
};
struct joueur tabJoueur[6];


// correspond à quelle valeur de k pour notre joueur i
int valK [6] = {17,18,19,20,23,24};


int tab[64];
short int dma_buf[64];
	
	
void fTick(){
	// Démarrage de la DMA
	Start_DMA1(64);
	// Attente de la fin de DMA
	Wait_On_End_Of_DMA1();
	
	// Arrêter la DMA
	Stop_DMA1;
	
	
	for (int k=0; k < NB_JOUEUR; k++){ 
		// on calcule la DFT uniquement si le joueur n'est pas en timeout
		if (tabJoueur[k].timeout == 0){
			tabJoueur[k].dft = DFT_ModuleAuCarre((short *) &dma_buf[0], tabJoueur[k].k);
			
			// si la DFT est au dessus d'un certain seuil on augmente le score et on lance le timeout
			if (tabJoueur[k].dft >= 0x3c2e1){
				tabJoueur[k].score ++;
				tabJoueur[k].timeout = BASE_TIMEOUT;
				
				/* TEMPORAIRE : il faudra par la suite jouer le son et gérer les affichages */
			}
		}
		else { // si le joueur est en timeout on décrémente sa valeur de timeout
			tabJoueur[k].timeout--;
		}
	}
	
}

int main(void)
{

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

	
	
//inititialisation des structures

	for(int i = 0; i < 6; i++){
		tabJoueur[i].score = 0;
		tabJoueur[i].timeout = 0;
		tabJoueur[i].dft = 0;
		tabJoueur[i].k = valK[i];
	}
	
	
	// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
	CLOCK_Configure();
	Systick_Period_ff( 360000 ); // 5ms pour une clock a 72 MhHz
	Systick_Prio_IT(1, fTick);

	
	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 );
	
	SysTick_On;
	SysTick_Enable_IT;
	
	
	
	
while	(1)
	{
	}
}

