Jorge,
"o molho não deve ser mais caro que o peixe".
Como parece que a solução minimalista original está sendo abandonada em favor de algo um pouco mais elaborado, é incontornável a adoção de um protocolo multibyte que inclua o indispensável preâmbulo e o barato checksum ou CRC. É desejável e útil o handshaking e alarme em caso de falha ...
Algo do tipo:
preâmbulo (indica o início do quadro)
joystick 1
joystick 2
joystick 3
joystick 4
I/O
Checksum
O Tx pode responder com checksum + código de erro, se incorreto, indica falha de comunicação ou outra qualquer, como flooding ...
PS: Linguado à la belle meunière é o que escolho quando tenho opção. É bem possível que eu goste do minimalismo mais que qualquer um por aqui ...
Há duas questões colocadas por voce, bem especificas da camada de enlace, da qual estamos tratando:
(1) Controle (detecção) de erros
(2) Delimitação de quadros
(1) No caso da deteção de erros, eu não faria a principio, por uma questão de começar pelo +simples. Não é complexo fazer um checksum. Mas coloco aqui a questão, acho que se os autores não usaram será mesmo necessário? O que acham?
(2) No caso da delimitação do quadro, voce sugeriu um preâmbulo. Que normalmente seria uma sequência de ocorrência única na transmissão. Nesse caso, seria necessário adotar também uma codificação orientada a caractere, para que esta sequência não se repetisse no meio do quadro. O que, acho, complicaria um pouco mais.
Estava pensando em fazer algo simples, delimitar os quadros usando temporização, que é como o programa original trabalha.
Na seguinte sequência: T1 - T2 - T1 - T2 - T1 - ....
Onde:
T1: tempo de transmissão (todos os bytes do quadro em sequência, separados por um pequeno intervalo entre bytes menor ou igual a 1 byte)
T2: Intervalo de silêncio, igual ou maior que T1 (por exemplo: 2xT1)
Usando uma simples rotina de temporização, e sendo T2 >= T1, é sempre possível o receptor sincronizar com o transmissor.
Havendo comunicação bidirecional, teríamos:
T1 - T2 - T3 - T4 - T1 - T2 - T3 - T4 - T1 - T2 - T3 - T4 - T1 - T2 - T3 - T4 - ....
Onde
T1 - tempo de transmissão da estação base (EB)
T2 - tempo de silêncio da EB (>=T1)
T3 - tempo de transmissão do ROV
T2 - tempo de silêncio do ROV (>=T3)
Para haver sincronismo nos dois sentidos, usa-se um temporizador em cada estação.
O que acham??