JavaWrapper.zip
uses
FMX.Dialogs,
System.DateUtils,
System.SysUtils,
System.Types,
Androidapi.JNIBridge,
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.JavaTypes,
Androidapi.JNI.Os,
Androidapi.Helpers,
Androidapi.JNI.App,
Androidapi.Jni,
JavaInterfaces,
var
FUSBManager : JUsbManager;
FProber : JUsbSerialProber;
FDriver : JUsbSerialDriver;
FConnection : JUsbDeviceConnection;
FPort : JUsbSerialPort;
FList : JList;
LastErrMsg : string;
function USBPortOpen: Boolean;
begin
try
FUSBManager := TJUsbManager.Wrap(TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.USB_SERVICE));
FProber := TJUsbSerialProber.JavaClass.getDefaultProber;
FList := FProber.findAllDrivers(FUSBManager);
if FList.isEmpty then
Exit(False);
FDriver := TJUsbSerialDriver.Wrap(FList.get(0));
FConnection := FUSBManager.openDevice(FDriver.getDevice);
if not Assigned(FConnection) then
begin
Exit(False);
end;
FPort := TJUsbSerialPort.Wrap(FDriver.getPorts.get(0));
FPort.open(FConnection);
FPort.setParameters(ChannelSettings.Speed, ChannelSettings.Bits, ChannelSettings.StopBits, ChannelSettings.Parity);
Exit(True);
except
on E: Exception do
begin
LastErrMsg := E.ClassName + ' поднята ошибка, с сообщением : ' + E.Message;
end;
end;
Result := False;
end;
function UsbWrite(): Boolean;
var
arr: TJavaArray<Byte>;
Count: Intger;
begin
arr := TJavaArray<System.Byte>.Create(Length(BufIn));
Count := FPort.Write(arr, TimeOut);
Result := (Count > 0)
end;
function UsbRead(): Boolean;
var
arr: TJavaArray<Byte>;
Count: Intger;
begin
arr := TJavaArray<System.Byte>.Create(Length(BufIn));
Count := FPort.read(arr, TimeOut);
Result := (Count > 0)
end;