/**
 ******************************************************************************
 * @file    motor.c
 * @author  Lucien Senaneuch
 * @version V1.0
 * @date    19-June-2017
 * @brief   Gestion des moteurs du robots
 *
 *			Ce fichier contient les fonctions lié à la gestions du moteur :
 *			- L'initialisation des PIN ultisé par les moteurs et encodeurs
 * 			- L'initialisation du Timer2 servant de bases de temps aux PWM pour
 * 			  moteur1 et moteur2
 *			- L'initialisation du Timer3 servant à échantilloner les capteur magnétique de position
 *			  des 2 moteurs.
 * 			- La commandes des moteurs dans leurs 3 modes de fonctionnement (AVANT, ARRIERE, FREIN)
 * 			  et de leurs vitesse (valeur de PWM entre 0 et 255).
 *
 *@note			TABLE DE VERITEE DU DRIVER MOTEUR
 *
 *	ENABLE 			        |			INPUTS		| 		 Moteurs
 *					|					|
 *		0			|				X	| Roue Libre
 *--------------------------------------------------------------------
 *					|  CMDA & !CMDB 			| Avant
 *		1			|  !CMDA & CMDB				| Arrière
 *					|  CMDA = CMDB				| Frein
 ******************************************************************************
 ******************************************************************************
 */
#ifndef _MOTOR_H_
#define _MOTOR_H_

#include "stm32f10x.h"

extern uint16_t G_speedRight, G_speedLeft, G_lapsLeft, G_lapsRight;
extern uint16_t tourG, tourD, tourPositionD,tourPositionG;

extern uint16_t asservissement;
extern uint16_t regulation_vitesseD, regulation_vitesseG;
/**
 * @brief États que peuvent prendre chaque moteurs
 * 		  Avant, Arrière, Frein
 */
#define FORWARD 11  
#define REVERSE 12 
#define BRAKE 	13 

void motorConfigure(void);
void motorManagement(void);

void motorCmdRight(char mod, uint16_t pwm);
void motorCmdLeft(char mod, uint16_t pwm);
void motorSpeedUpdateLeft(uint16_t pwm);
void motorSpeedUpdateRight(uint16_t pwm);
void motorRegulation(char modRight, char modLeft, uint16_t lapsRight, uint16_t lapsLeft, uint16_t speedRight, uint16_t speedLeft);

#endif /* _MOTOR_H_ */

