Lorsqu'un byte à 0 est reçu (c'est à dire après la validation de deux demi_byte à 0 par :
demi_bitzero = demi_bitzero + 1 ; //Incrémente demi_bitzero
demi_bitun = 0; //Raz pour éviter un demi_un suivi d'un demi_zero
if (demi_bitzero = = 2) //Valide si deux demi_zero se suivent
{demi_bitzero = 0;
La fonction bitzero() est appelée :
• Lorsqu'un zéro est reçu, un premier test vérifie si le préambule peut être validé : if (preambule < 12 && validpreambule = = 1)
• La variable validpreambule est à 1 cela permet la construction du préambule,
• Pour valider le préambule il faut 16 bytes à 1 consécutifs (Ici le préambule est validé à partir de 12 bytes à 1 consécutifs pour garantir une compatibilité avec d'ancienne centrale DCC),
• Si le test est positif cela signifie qu'un byte 0 c'est intercalé pendant la construction du préambule avant d'avoir reçu 12 bytes à 1 consécutifs,
• Le préambule n'est pas validé, la variable preambule est remise à 0 et le processus recommence.
---------------------------------------
---------------------------------------
• Lorsqu'un zéro est reçu, le deuxième test vérifie si le préambule peut être validé : if (preambule > 11 && validpreambule = = 1)
• La variable validpreambule est à 1, cela permet la construction du préambule,
• Pour valider le préambule il faut 16 bytes à 1 consécutifs (Ici le préambule est validé à partir de 12 bytes à 1 consécutifs pour garantir une compatibilité avec d'ancienne centrale DCC),
• Si le test est positif cela signifie qu'au moins 12 bytes à 1 consécutifs ont été reçus,
• Le préambule est validé :
• La variable preambule contient le nombre de byte à 1 composant le préambule,
• La validation du préambule signifie que l'on a reçu un byte à 0,
• Implicitement cela signifie que ce byte à 0 reçu est le byte séparant le préambule du premier octet de la trame DCC,
• La variable tramedcc est mise à 1 et permet l'enregistrement de la trame DCC,
• La variable validpreambule est mise à 0 pour permettre la construction de la trame DCC.