Problème avec TBlockSerial de la bibliothèque Synaser et Raspberry
Bonsoir à toutes et à tous,
Dans une application GPS que je développe, j'utilise le composant TBlockSerial pour lire les infos que me délivre mon module GPS (via Bluetooth). Avec mon PC sous Windows, cela se passe bien, mais avec mon Raspberry Pi3B (Raspbian Stretch), ça plante au bout de quelques minutes avec le message d'erreur "'Timeout during operation" Voilà le code que j'exécute dans un thread:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| procedure TMyThread.Execute;
begin
{$IFDEF WIN32}
PortCOM.Connect('COM21'); // Port de mon PC sous Windows
{$ENDIF}
{$IFDEF LINUX}
{$IFDEF CPUARM}
PortCOM.Connect('/dev/rfcomm0'); // Port de mon Raspberry
{$ELSE}
PortCOM.Connect('/dev/ttyS21');
{$ENDIF}
{$ENDIF}
PortCOM.Config(4800, 8, 'N', 1, False, False);
while not Terminated do
begin // Réception de 6 trames toutes les secondes
InfoNMEA:= PortCOM.Recvstring(2000); // Le fait de mettre autre chose que 2000 ne change rien à l'affaire
if PortCOM.LasrError = ErrTimeout then
InfoNMEA:= InfoNMEA;
Synchronize(@Showstatus);
end;
PortCOM.CloseSocket;
FreeAndNil(PortCOM);
end; |
Grâce au débogueur, qui fonctionne bien dans le thread, je vois que ça tourne en boucle à l'intérieur de mon "while" et, comme à chaque lecture, l'erreur persiste, je passe à chaque tour par mon " InfoNMEA:=InfoNMEA;" que j'ai mis là juste pour mettre en évidence le problème. NOTA : à ce moment, InfoNMEA est une chaîne vide.
Question, comment sort-on de cette boucle infernale ?
Cordialement.
Pierre