Hallo zusammen
Ich hoffe, bei euch ist alles bestens!
Ich habe hier eine Android-App (android 7.0), welche ich mit Delphi 10.3.3 community edition
erstellt habe. Über Bluetooth werden mit einem HC-05-6 Bluetooth-Modul
zyklisch Daten ausgetauscht.
Nach ein paar Minuten Laufzeit friert die App ein. Wenn ich den Debugger
stoppe, dann bleibt er in recvmsg "stecken"
Unter
MS-Windows - HC-05-6 läuft die Anwendung einwandfrei
Android-app mit einem ESP32-Bluetooth-Modul einwandfrei.
Anbei die Sende-Empfangsroutine.
Ich meine, das Problem entsteht in ReceiveBuffer := LSocket.ReceiveData(10);
Vielen Dank für eure Tipps
Geri
Delphi-Quellcode:
function TDROController.SendReceive(Cmd, DataLen:Word; Data:
Array of Byte; ExpectedLength:DWord;
var ReceiveLength:DWord;
var InData:
Array of Byte; Timeout:Word):Integer;
var
LBuffer:TBytes;
i :integer;
CRC: Byte;
ReceiveBuffer:TBytes;
CurrentIdx:LongWord;
begin
CRC:=$EF;
// just fill it with dummy byte
SetLength(LBuffer,4+ DataLen);
LBuffer[0]:= $24;
// Start identifier
LBuffer[1] := Cmd;
// command
LBuffer[2]:= DataLen;
// DataLen
if DataLen > 0
then
move(Data,LBuffer[3],DataLen);
// Data
move(CRC,LBuffer[3+DataLen],sizeof(CRC));
// CRC-Byte
SetLength(ReceiveBuffer,0);
result:=-1;
// mark as error
if Assigned(LSocket)
then
begin
if LSocket.Connected
then
begin
try
LSocket.SendData(LBuffer);
CurrentIdx:=0;
for i := 0
to TimeOut
div 10
do
begin
ReceiveBuffer := LSocket.ReceiveData(10);
if length(ReceiveBuffer) > 0
then
begin
move(ReceiveBuffer[0],InData[CurrentIdx],length(ReceiveBuffer));
CurrentIdx := CurrentIdx + length(ReceiveBuffer);
SetLength(ReceiveBuffer,0);
if CurrentIdx >= (ExpectedLength + 4)
then
begin
result:=0;
Setlength(LBuffer,0);
exit;
end;
end;
End;
ReceiveLength:= CurrentIdx;
Setlength(LBuffer,0);
except
on e:
exception do
AddDebug('
Sendreceive Exception ' + E.
Message );
end;
End;
end;
Disconnect();
end;