![]() |
Android UART EventListener
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:
und hier der Code aus dem original Beispiel wie das benutzt wird:
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;
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:
Ich benötige das onUARTEvent als Delphi-Event.
public void onUARTEvent(UARTEvent uartEvent) {
switch(uartEvent.getEventType()) { case UARTEvent.DATA_AVAILABLE: Log.d(TAG, "onUARTEvent: UARTEvent.DATA_AVAILABLE"); } } 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 |
AW: Android UART EventListener
|
AW: Android UART EventListener
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; |
AW: Android UART EventListener
Liste der Anhänge anzeigen (Anzahl: 1)
@Rollo: die WinSoft Komponenten habe ich, auch im Quellcode. Habe versucht mich daran zu orientieren, klappt aber nicht.
Aktuell habe ich folgende:
Delphi-Quellcode:
Ich weiß jedoch nicht, wie ich folgendes umsetzen muss:
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;
Code:
hab im Anhang mal die komplette Java Testdatei angehängt.
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(); |
AW: Android UART EventListener
Zitat:
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. |
AW: Android UART EventListener
Wenn du den Listener "extern" hast, muss du folglich sowas schreiben:
Delphi-Quellcode:
EventListener := TEventListener.Create;
uart.addEventListener(EventListener, ...); |
AW: Android UART EventListener
Jetzt wäre natürlich interessant zu wissen, ob SvB das damit lösen konnte...
|
AW: Android UART EventListener
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz