Non, çà n'utilise pas le port série.
Il y a bien sérialisation des données mais suivant un format synchrone avec tout un entête en amont.
la sérialisation est effectuée sous interruption timer.
J'ai regardé le code et je ne vois rien qui justifie cette limitation à 30.
La modèle de transmission est intéressant. En effet sur ces transmetteurs 433MHz en AM (modulation d'amplitude) la porteuse n'est transmise que pour les bits à 1. Pour assurer que le récepteur arrive a régler correctement son contrôle de gain automatique (CAG), il faut qu'il y a ait toujours du signal présent même si le buffer à transmettre ne contient que des 0.
Chaque octet à transmettre est coupé en 2 nibble (1/2 octet) et chaque nibble (de 4 bits) est remplacé par un symbole de 6 bits qui contient 3 bits à 0 et 3 bits à 1.
La transmission est donc constituée au total de :
- 6 symboles de 6 bits 0x2A (B101010) qui composent donc 36 bits alternés 1/0
- 2 symboles de 6 bits 0x32 (B110010) et 0x34 (B110100) (toujours 50% de 1 et 50% de 0)
- 2 symboles de 6 bits représentant la longueur totale des données (1 octet qui vaut len + 1 (octet de longueur) + 2 (CRC 16 bits))
- 2*len symboles de 6 bits encodant les 'len' octets de données
- 4 symboles de 6 bits encodant les 2 octets du CRC16
Total pour 'len' octets : 14+2*len symboles de 6 bits = 84 + 12*len bits à transmettre
Bref, la longueur étant codé sur un octet, on pourrait espérer pouvoir transmettre des messages de 252 octets (255-3)
C'est sans compté que le compteur de symboles est sur un uint8_t donc comme il faut 2 symboles par octet on se retrouve avec une limite qui est alors 56 octets utiles (59 pour MESSAGE_LEN)
Donc c'est normal que ton essai avec 100 se soit soldé par un échec.
Je pense que tu peux donc changer sans risque VW_MAX_MESSAGE_LEN à 59