AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Android UART EventListener

Ein Thema von SvB · begonnen am 3. Mai 2018 · letzter Beitrag vom 13. Mai 2018
Antwort Antwort
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Android UART EventListener

  Alt 3. Mai 2018, 08:14
Hi @All,

ich habe eine Android UART (Seriell) Anbindung und benötige jetzt den Zugriff auf die Events. Bei den bereitgestellten Java-Classen gibt es einen EventListener, ich weiß jedoch nicht, wie ich das zu Delphi umsetzen soll.
Hier der Code der Java-Klasse
Code:
  JUARTEventClass = interface(JEventObjectClass)
    ['{8CCFB748-D20D-495F-8BFB-88939E567966}']
    {class} function _GetCLEAR_TO_SEND: Integer; cdecl;
    {class} function _GetDATA_AVAILABLE: Integer; cdecl;
    {class} function _GetDATA_CARRIER_DETECT: Integer; cdecl;
    {class} function _GetDATA_SET_READY: Integer; cdecl;
    {class} function _GetINPUT_BUFFER_FULL: Integer; cdecl;
    {class} function _GetN_BYTES_AVAILABLE: Integer; cdecl;
    {class} function _GetOUTPUT_BUFFER_EMPTY: Integer; cdecl;
    {class} function _GetRING_INDICATOR: Integer; cdecl;
    {class} function init(P1: JUART; P2: Integer): JUARTEvent; cdecl;
    {class} property CLEAR_TO_SEND: Integer read _GetCLEAR_TO_SEND;
    {class} property DATA_AVAILABLE: Integer read _GetDATA_AVAILABLE;
    {class} property DATA_CARRIER_DETECT: Integer read _GetDATA_CARRIER_DETECT;
    {class} property DATA_SET_READY: Integer read _GetDATA_SET_READY;
    {class} property INPUT_BUFFER_FULL: Integer read _GetINPUT_BUFFER_FULL;
    {class} property N_BYTES_AVAILABLE: Integer read _GetN_BYTES_AVAILABLE;
    {class} property OUTPUT_BUFFER_EMPTY: Integer read _GetOUTPUT_BUFFER_EMPTY;
    {class} property RING_INDICATOR: Integer read _GetRING_INDICATOR;
  end;

  [JavaSignature('guf/android/hardware/uart/UARTEvent')]
  JUARTEvent = interface(JEventObject)
    ['{CFFDE537-85A0-41E9-BEC4-FEB75219E53B}']
    function getEventType: Integer; cdecl;
    function toString: JString; cdecl;
  end;
  TJUARTEvent = class(TJavaGenericImport<JUARTEventClass, JUARTEvent>) end;

  JEventListenerClass = interface(IJavaClass)
    ['{48BD1D07-BCE3-4F68-982B-617B523C7116}']
  end;

  [JavaSignature('java/util/EventListener')]
  JEventListener = interface(IJavaInstance)
    ['{D9ADB67A-5217-4762-9961-710BF18CAD39}']
  end;
  TJEventListener = class(TJavaGenericImport<JEventListenerClass, JEventListener>) end;

  JUARTEventListenerClass = interface(JEventListenerClass)
    ['{EC9DB672-36FF-40F5-8E3B-5D4C00808A91}']
    {class} procedure onUARTEvent(P1: JUARTEvent); cdecl;//Deprecated
  end;

  [JavaSignature('guf/android/hardware/uart/UARTEventListener')]
  JUARTEventListener = interface(JEventListener)
    ['{E5B94F01-255E-4C05-88A7-F0B0BE1C89CA}']
  end;
  TJUARTEventListener = class(TJavaGenericImport<JUARTEventListenerClass, JUARTEventListener>) end;
und hier der Code aus dem original Beispiel wie das benutzt wird:
Code:
uart = new UART("ttymxc2", UART.BAUD_115200, UART.DATABITS_8, UART.PARITY_NONE, UART.STOPBITS_1);
uart.openPort();
uart.writeString("port #1 opened ...\n\r");
         
uart.addEventListener(this, new UARTEvent(uart, UARTEvent.DATA_AVAILABLE));
Thread.sleep(10*1000);
         
uart.removeEventListener(this);
uart.closePort();
Code:
public void onUARTEvent(UARTEvent uartEvent) {
  switch(uartEvent.getEventType()) {
    case UARTEvent.DATA_AVAILABLE:
      Log.d(TAG, "onUARTEvent: UARTEvent.DATA_AVAILABLE");         
  }
}
Ich benötige das onUARTEvent als Delphi-Event.
Kann mir jemand helfen das umzusetzen oder mir eine Info geben, wo ich dazu etwas finde wie es gemacht wird. Steh total auf dem Schlauch.
Danke
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.901 Beiträge
 
Delphi 12 Athens
 
#2

AW: Android UART EventListener

  Alt 3. Mai 2018, 09:53
Könnte es sein das hier etwas dabei ist ?

Rollo
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Android UART EventListener

  Alt 3. Mai 2018, 10:05
Hilft dir das weiter?

Delphi-Quellcode:
  JUARTEventListenerClass = interface(JEventListenerClass)
    ['{EC9DB672-36FF-40F5-8E3B-5D4C00808A91}']
    { class } procedure onUARTEvent(P1: JUARTEvent); cdecl; // Deprecated
  end;

  TDeinEreignisHorcher = class(TInterfacedObject, JUARTEventListenerClass)

  public
    procedure onUARTEvent(P1: JUARTEvent); cdecl;

  end;

  { TDeinEreignisHorcher }

procedure TDeinEreignisHorcher.onUARTEvent(P1: JUARTEvent);
var
  EventType: string;
  Event: string;
begin
  EventType := IntToStr(P1.getEventType);

  Event := JStringToString(P1.toString);

  ShowMessage(EventType + ' : ' + Event)
end;
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Android UART EventListener

  Alt 3. Mai 2018, 11:43
@Rollo: die WinSoft Komponenten habe ich, auch im Quellcode. Habe versucht mich daran zu orientieren, klappt aber nicht.

Aktuell habe ich folgende:
Delphi-Quellcode:
  TEventListener = class(TJavaLocal, JUARTEventListener)
  private
    [Weak] FComPort: TCustomComPort;
    FGUFUARTEVENT: JUARTEvent;
  public
    constructor Create(ComPort: TCustomComPort);
    procedure onUARTEvent(FEvents: JUARTEvent); cdecl;
  end;

constructor TEventListener.Create(ComPort: TCustomComPort);
begin
  inherited Create;
  FComPort := ComPort;
end;

procedure TEventListener.onUARTEvent(FEvents: JUARTEvent);
begin
  //ShowMessage('Event');
  if FComPort <> nil then
    //if FEvents.getEventType = TJUARTEvent.JavaClass.DATA_AVAILABLE then
      FComPort.CallRxChar;
end;
Ich weiß jedoch nicht, wie ich folgendes umsetzen muss:
Code:
uart = new UART("ttymxc2", UART.BAUD_115200, UART.DATABITS_8, UART.PARITY_NONE, UART.STOPBITS_1);  // <-- hab ich umgesetzt, funktioniert
uart.openPort();  // <-- hab ich umgesetzt, funktioniert
uart.writeString("port #1 opened ...\n\r");  // <-- hab ich umgesetzt, funktioniert
         
uart.addEventListener(this, new UARTEvent(uart, UARTEvent.DATA_AVAILABLE));  // <-- hier steh ich auf dem Schlauch - was ist "this"
Thread.sleep(10*1000);
         
uart.removeEventListener(this);
uart.closePort();
hab im Anhang mal die komplette Java Testdatei angehängt.
Angehängte Dateien
Dateityp: 7z DataListenerTest.7z (1,1 KB, 1x aufgerufen)
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Android UART EventListener

  Alt 3. Mai 2018, 12:38
Zitat:
// <-- hier steh ich auf dem Schlauch - was ist "this"
In Delphi nennen wir das Self.

An der Stelle musst du die Objekt-Instanz eingeben, die das Interface JUARTEventListener implementiert.
In dem Codebeispiel ist die Erzeugung des UART-Objekts innerhalb des Kontextes des EventListeners.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Android UART EventListener

  Alt 3. Mai 2018, 12:40
Wenn du den Listener "extern" hast, muss du folglich sowas schreiben:

Delphi-Quellcode:
EventListener := TEventListener.Create;
uart.addEventListener(EventListener, ...);
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#7

AW: Android UART EventListener

  Alt 13. Mai 2018, 13:51
Jetzt wäre natürlich interessant zu wissen, ob SvB das damit lösen konnte...
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Android UART EventListener

  Alt 13. Mai 2018, 14:54
Leider nein, hab dann erst mal unterbrochen weil ich mich nicht so lange damit aufhalten wollte. Musste erst noch was anderes machen. Ich gehe aber an die Sache noch mal dran.
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz