我最近从ComPort for Android USB Serial获得了Android的通讯端口库。
到目前为止,这使我能够将字符发送到通过OTG电缆连接到设备的LoRa设备。现在我想将配置Hex发送到设备。我能够使用像这样的ComPort Library在VCL中实现目标:
procedure TForm1.btnSendHexClick(Sender: TObject);
var
S, Str: AnsiString;
begin
S := 'AFAF0000AF8002020000910D0A';
Str := HexToString(S);
ComPort.Write(Str[1], Length(Str));
end;
function TForm1.HexToString(S: String): String;
var
tmp: AnsiString;
i: Integer;
begin
Result:= '';
for i := 1 to length(S) div 2 do
begin
tmp := Copy(S,(i-1)*2+1,2);
Result := Result + AnsiChar(StrToInt('$'+ tmp));
end;
end;
现在我想在Android FMX中做同样的事情;
这是我的尝试(不起作用)显然,我对如何完成这些事情的理解太浅了。任何帮助表示赞赏!
procedure TFormMain.btnSendHexClick(Sender: TObject);
var
Line, Str: String;
Buffer: TJavaArray<Byte>;
i: Integer;
begin
Line := 'AFAF0000AF8002020000910D0A';
Str := HexToString(Line);
Buffer := TJavaArray<Byte>.Create(Length(Str));
i := 0;
while i < Length(Str) do
begin
Buffer[i] := Ord(Str[i]);
Inc(i);
end;
SerialDevice.syncWrite(Buffer, 1000);
end;
function TFormMain.HexToString(const S: String): String;
var
LOutput: TBytes;
Len: Integer;
begin
SetLength(LOutput, Length(S) div 2);
Len := HexToBin(PChar(S), 0, LOutput, 0, Length(LOutput));
Result := TEncoding.ASCII.GetString(LOutput, 0, Len);
end;
是的,SerialDevice.syncWrite
函数接受TJavaArray<Byte>
作为它的第一个参数。第二个参数是超时(毫秒)值。