#ifndef PROTOCOL_CAN_H
#define PROTOCOL_CAN_H

// Paramètres généraux de la communication
#define CAN_BAUDRATE					1000

#define CAN_MOB_PING					0			// MOb dédié au PING en autoreply sur toutes les cartes

// Couleurs du robot et des éléments de jeu
#define COUL_ROUGE						0
#define COUL_VERTE						1

//-----------------------------
// Identifiers des messages
//-----------------------------

// Carte stratégie
#define CAN_MSK11_STRAT					0x7F0		// Masque des Identifiers pour la carte stratégie
#define CAN_ID11_STRAT					0x140		// Base des Identifiers pour la carte stratégie
#define CAN_ID11_STRAT_PING				0x140		// Ping de la carte (remote), qui répondra par un data du même Identifier
#define CAN_ID11_STRAT_COORD			0x141		// La carte envoie la position du robot (4 octets de X, 4 octets de Y, pas l'angle)
#define CAN_ID11_STRAT_TIME				0x142		// La carte envoie le temps de match restant (unsigned int, en nombre de 100ms)

// Carte servos
#define CAN_MSK11_SERVOS				0x7F0		// Masque des Identifiers pour la carte servos
#define CAN_ID11_SERVOS					0x150		// Base des Identifiers pour la carte servos
#define CAN_ID11_SERVOS_SET				0x150		// Positionnement d'un ou plusieurs servos, jusqu'à 4 couples (num, value)
#define CAN_ID11_SERVOS_UNSET			0x151		// Désactivation d'un ou plusieurs servos, jusqu'à 8 numéros de servos
#define CAN_ID11_SERVOS_POWER			0x152		// Activation/désactivation de la partie puissance en fonction du premier paramètre
#define CAN_ID11_SERVOS_PING			0x153		// Ping de la carte (remote), qui répondra par un data du même Identifier
#define CAN_ID11_SERVOS_VIT				0x154		// Vitesse d'un ou plusieurs servos, jusqu'à 4 couples (num, value)
#define CAN_ID11_SERVOS_SAVE			0x155		// Enregistrement en EEPROM des positions actuelles pour les charger à chaque démarrage
#define CAN_ID11_SERVOS_GPIO			0x156		// Assignation d'une des pattes de signal de servo en tant que sortie à l'état haut ou bas. Jusqu'à 4 couples (num, valeur)

// Carte IHM
#define CAN_MSK11_IHM					0x7F0		// Masque des Identifiers pour la carte IHM
#define CAN_ID11_IHM					0x160		// Base des Identifiers pour la carte IHM
#define CAN_ID11_IHM_JACK				0x160		// Changement d'état du jack (peut aussi répondre à un remote)
#define CAN_ID11_IHM_COUL				0x161		// Changement de couleur du robot
#define CAN_ID11_IHM_TESTMODE			0x162		// Lancement d'un programme de débug :
#define CAN_IHM_TESTMODE_AUTOCHECK		0x01
#define CAN_IHM_TESTMODE_GOBAGEDEPOSE	0x02
#define CAN_IHM_TESTMODE_DISTRIBUTEUR	0x03
#define CAN_IHM_TESTMODE_CARRE1			0x04
#define CAN_IHM_TESTMODE_CARRE2			0x05
#define CAN_IHM_TESTMODE_ENCODERS		0x06
#define CAN_IHM_TESTMODE_LINTEAU		0x07


// Carte de réception de balise
#define CAN_MSK11_BAL					0x7F0		// Masque des Identifiers pour la carte balise
#define CAN_ID11_BAL					0x170		// Base des Identifiers pour la carte balise
#define CAN_ID11_BAL_DATA				0x170		// Données lues
#define CAN_ID11_BAL_PING				0x171		// Ping de la carte (remote), qui répondra par un data du même Identifier

// Carte moteurs
#define CAN_MSK11_MOTEURS				0x7F0		// Masque des Identifiers pour la carte moteurs
#define CAN_ID11_MOTEURS				0x180		// Base des Identifiers pour la carte moteurs
#define CAN_ID11_MOTEURS_POWER			0x180		// Activation/désactivation de la partie puissance en fonction du premier paramètre
#define CAN_ID11_MOTEURS_PING			0x181		// Ping de la carte (remote), qui répondra par un data du même Identifier
#define CAN_ID11_MOTEURS_GETPOS			0x182		// Demande de la position du moteur x (x = premier octet). Trame remote renvoie trame data.
#define CAN_ID11_MOTEURS_SETPOS			0x183		// Redéfinition de la position (signed long) du moteur x (x = premier octet)
#define CAN_ID11_MOTEURS_RECALAGE		0x184		// On force le recalage du moteur X vers les x positifs (Y > 0) ou négatifs (Y < 0). Le recalage se fait lors du blocage mécanique
#define CAN_ID11_MOTEURS_NBRECALAGES	0x185		// Nombre de recalages encore en cours (pour savoir quand la carte est vraiment prête)
#define CAN_ID11_MOTEURS_ASSERVPOS		0x186		// Asservissement en position (signed long) du moteur x (x = premier octet)
#define CAN_ID11_MOTEURS_ASSERVVIT		0x187		// Asservissement en vitesse (signed int / 50ms) du moteur x (x = premier octet)
#define CAN_ID11_MOTEURS_ASSERVBUT		0x188		// Pseudo-asservissement de butée à butée du moteur x (x = premier octet)
#define CAN_ID11_MOTEURS_DISABLE		0x189		// Désactivation d'un moteur (moteur donné en paramètre)

#endif
