/* Construit une trame DShot de 16 bits.
valeur : 0 = arrêt, 1..47 = commande, 48..2047 = gaz
telemetrie: bit de demande de télémétrie
bidir : true en DShot bidirectionnel (CRC inversé) */
uint16_t dshot_trame(uint16_t valeur, bool telemetrie, bool bidir)
{
uint16_t v = (uint16_t)((valeur << 1) | (telemetrie ? 1u : 0u));
uint16_t crc = (v ^ (v >> 4) ^ (v >> 8)) & 0x0F;
if (bidir)
crc = (~crc) & 0x0F;
return (uint16_t)((v << 4) | crc);
}
DShot : construction d’une trame (C)
Écrit par
dans