#ifndef MYTIMER_H
#define MYTIMER_H

#include "stm32f10x.h"

typedef struct {
	TIM_TypeDef * Timer ;
	uint16_t ARR ;
	uint16_t PSC ;
} MyTimer_Struct_TypeDef ;

/*
*****************************************************************************************
* @brief
* @param -> Paramètre sous forme d’une structure (son adresse) contenant les informations de base
* @Note -> Fonction à lancer systématiquement avant d’aller plus en détail dans les conf plus fines 
***********************************************************************************************
*/
void MyTimer_Base_Init(MyTimer_Struct_TypeDef * Timer) ;

void Activate_TIM(int) ;


/*
**************************************************************************************************
* @brief
* @param : - TIM_TypeDef * Timer : Timer concerné
           - char Prio : de 0 a 15
* @Note : La fonction MyTimer_Base_Init doit avoir été lancée au préalable
**************************************************************************************************
*/
void MyTimer_Active_IT ( TIM_TypeDef * , char , void (*) (void)) ;

void TIM1_TRG_COM_IRQHandler(void) ;
void TIM2_IRQHandler(void) ; 
void TIM3_IRQHandler(void) ;
void TIM4_IRQHandler(void) ;

/*
**************************************************************************************************
* @brief
* @param : - TIM_TypeDef * Timer : Timer concerné
*          - char Channel : canal concerné, de 1 a 4
* @Note : Active le channel spécifié sur le timer spécifié, la gestion de la configuration I/O n’est 
* pas faite dans cette fonction ni le réglage de la période de la PWM (ARR, PSC)
**************************************************************************************************
*/
void MyTimer_PWM( TIM_TypeDef *, char) ;


/*
**************************************************************************************************
* @brief
* @param : - TIM_TypeDef * Timer : Timer concerné
*          - float rapport : rapport cyclique, de 0 à 1 
*          - char Channel : canal concerné, de 1 a 4
**************************************************************************************************
*/
void MyTimer_PWM_set_cycle(TIM_TypeDef *, float, char) ;


#define MyTimer_Base_Start(Timer) (Timer->CR1 |= 0x1)
#define MyTimer_Base_Stop(Timer) (Timer->CR1 &= ~0x1)
#endif
