AGWPE TCP/IP API Tutorial: https://www.on7lds.net/42/sites/default/files/AGWPEAPI.HTM 


LazPacket – Direwolf / AGWPE Kompatibilität (nach o.g. API)
===========================================================

Ab Version 1.02 kann LazPacket statt an einen klassischen
WA8DED-TNC auch an einen AGWPE-Server (z.B. Direwolf) über TCP
angebunden werden.
Die Anbindung läuft über das AGWPE-TCP/IP-Protokoll.

Der Funktionsumfang ist nicht identisch mit dem klassischen
WA8DED-Betrieb. Bitte vor dem Testen die "BekanntenEinschränkungen"
weiter unten lesen.


Voraussetzungen
---------------

- Direwolf (empfohlen, getestet) oder ein anderer AGWPE-kompatibler
  Server (z.B. Soundmodem von UZ7HO, AGWPE von SV2AGW)
- Ein funktionierender Soundkarten-Zugang bzw. TNC
- Eine korrekt konfigurierte Direwolf-Konfiguration
  (siehe:  Direwolf   - https://github.com/wb2osz/direwolf )
  (        Soundmodem - https://uz7.ho.ua/packetradio.htm  )       


Einrichtung
-----------

1. Direwolf (oder der AGWPE-Server) starten und sicherstellen, dass
   der AGWPE-TCP-Port geöffnet ist.

   In der Direwolf-Konfiguration (direwolf.conf) muss dazu
   mindestens folgende Zeile stehen:

       AGWPORT  8000

   Beim Start meldet Direwolf:

       Ready to accept AGW client application 0 on port 8000 ...

   Wenn diese Zeile nicht erscheint, ist der AGWPE-Port nicht
   aktiviert.

2. LazPacket starten und auf "Einstellungen" gehen.

3. Als Verbindungsart "Direwolf / AGWPE (TCP)" auswählen.

4. Im Feld "Port" die Adresse des AGWPE-Servers eintragen, im
   Format:

       Hostname:Port      oder      IP-Adresse:Port

   Standardwerte:

       Läuft Direwolf auf demselben Rechner:
           127.0.0.1:8000

       Läuft Direwolf auf einem anderen Rechner im LAN:
           z.B. 192.168.1.42:8000

   Der Port muss mit dem AGWPORT in der Direwolf-Konfiguration
   übereinstimmen.

5. Einstellungen speichern und LazPacket neu starten.
   (Änderungen an der Konfiguration werden erst beim nächsten
   Programmstart übernommen.)


Verbindungstest
---------------

1. Nach dem Neustart im LazPacket-Menü auf "TNC" → "TNC öffnen"
   (oder die Schaltfläche "Verbinden") klicken.

2. Im Monitor-Bereich von LazPacket sollte nun erscheinen:

       *** Rufzeichen <DEINCALL> registriert ***

   Damit ist die Anmeldung beim AGWPE-Server erfolgreich.

3. Im Direwolf-Fenster wird zusätzlich gemeldet:

       Ready to accept AGW client application 0 on port 8000 ...

4. Kanal auswählen (F1 … F10) und "Connect" drücken.
   Im erscheinenden Dialog das Rufzeichen der Gegenstation eingeben.

5. Direwolf baut daraufhin eine AX.25-Verbindung auf. Im
   Direwolf-Konsolenfenster sind die SABM/SABME-Frames sichtbar:

       [0L] SA1URN>SA1NOD:(SABME cmd, p=1)
       [0L] SA1URN>SA1NOD:(SABM cmd, p=1)

   Wenn die Gegenstation antwortet, wird der Kanal-Button in
   LazPacket mit dem Rufzeichen der Gegenstation beschriftet und
   im Kanal erscheint die Verbindungsmeldung.

6. Daten, die über eine bestehende Verbindung empfangen werden,
   erscheinen im aktiven Kanal. Daten werden über die Eingabezeile
   gesendet.

7. Zum Trennen "Disconnect" drücken oder //DISC senden.


Was funktioniert
----------------

- Verbindungsaufbau zum AGWPE-Server über TCP
- Registrierung des eigenen Rufzeichens beim Server
- Ausgehende AX.25-Verbindungen (Connect-Button)
- Eingehende AX.25-Verbindungen von anderen Stationen
- Datenübertragung auf bestehenden Verbindungen
- Monitor-Anzeige von empfangenen AX.25-Frames (I/S/U/K)
- Buffer-Statusanzeige (ausstehende Frames am Port)
- 7plus-Dateitransfer (soweit die Gegenstation mitspielt)
- AutoBin-Dateitransfer
- BBS-Funktion
- Remote-Befehle (//HELP, //INFO, //C, //UNLINK usw.)
- Beacon / CQ-Rufe über Direwolf
- Unproto-Nachrichten (Menü "Unproto senden")

Bekannte Einschränkungen
------------------------

1. UI-Frames / Beacons (CQ-Rufe) funktionieren, aber mit einer
   kleinen Einschränkung:

   Beacons und Unproto-Nachrichten (Menü "Unproto senden") werden
   über das AGWPE-"M"-Frame an Direwolf übergeben und funktionieren.

   Die Bestätigung, dass ein Beacon tatsächlich gesendet wurde,
   erscheint in der Direwolf-Konsole:

       [0L] SA1URN>CQ:(UI pid=F0)

   Im LazPacket-Monitor erscheint der eigene Beacon nicht –
   das ist eine Eigenschaft des AGWPE-Protokolls (Direwolf liefert
   eigene Sendevorgänge nicht an den Client zurück).

   Maximale Nutzlast pro Beacon: 256 Bytes (AX.25-UI-Limit).

2. Nicht alle Statusmeldungen, die im WA8DED-Betrieb vom TNC
   kommen, stehen über AGWPE zur Verfügung.

   Einige Werte (Link-Status, Tries, Unack) werden in LazPacket
   aus dem internen Kanal-Zustand synthetisiert und können
   ungenau sein. Die Werte sind für den Betrieb ausreichend,
   aber nicht identisch mit dem klassischen Hostmode.

3. Eigene Sende-Frames erscheinen nicht im Monitor.

   Das ist eine Eigenschaft des AGWPE-Protokolls: Der Server
   sendet nur Frames an den Client, die tatsächlich über Funk
   empfangen wurden. Die eigenen SABM/SABME/DISC-Frames sind
   nur in der Direwolf-Konsole zu sehen, nicht im Monitor von
   LazPacket.
   
4. Raw-Monitoring ("k"-Frame) ist noch nicht implementiert.

5. Direwolf und andere AGWPE-Server (z.B. Soundmodem) sind keine
   100%ig kompatiblen Emulatoren. Kleine Abweichungen im
   Verhalten sind möglich. Rückmeldungen sind willkommen.


Direwolf-Logmeldungen, die KEIN Fehler sind
-------------------------------------------

Beim Beenden von LazPacket meldet Direwolf manchmal:

    Error getting message header from AGW client application 0.
    Tried to read 36 bytes but got only 0.
    Closing connection.

Diese Meldung ist normal und bedeutet lediglich, dass LazPacket
die TCP-Verbindung ordnungsgemäß geschlossen hat. Direwolf kann
technisch nicht zwischen "Client hat sich sauber verabschiedet"
und "Client ist abgestürzt" unterscheiden und loggt den Vorgang
deshalb vorsichtshalber als Fehler.

Die Meldung ist harmlos und kann ignoriert werden.


Fehlersuche
-----------

Problem: LazPacket meldet "TNC nicht verbunden" oder "Hostmode
         nicht aktiv".

  - Läuft Direwolf?
  - Stimmt der AGWPORT in direwolf.conf mit dem Port in den
    LazPacket-Einstellungen überein?
  - Wurde LazPacket nach der Änderung der Einstellungen neu
    gestartet?

Problem: Kein "*** Rufzeichen … registriert ***" im Monitor.

  - Ist in den LazPacket-Einstellungen das eigene Rufzeichen
    (MyCall) korrekt eingetragen?
  - Ist das Rufzeichen nicht bereits von einer anderen Anwendung
    beim AGWPE-Server registriert? (Jedes Rufzeichen darf nur
    einmal registriert sein.)

Problem: Connect-Button tut nichts.

  - Ist ein Kanal ausgewählt? (F1 … F10)
  - Erscheint im Direwolf-Fenster eine SABM-Zeile?
    Wenn ja, läuft die Verbindung – die Gegenstation antwortet
    nur nicht. Das ist kein Fehler von LazPacket.
  - Wenn nein, hat Direwolf das "C"-Frame nicht verarbeitet.
    Bitte den Monitor-Ausschnitt an den Entwickler senden.


Erweiterungen und Hilfe erwünscht !
-----------------------------------
Die komplette AGWPE-API Beschreibung ist über den Link am Anfang
dieses Textes abrufbar. Wer möchte, kann sich da gerne schlau machen
und die noch fehlenden (oder fehlerhaften) Funktionen für
LazPacket in Unit "uDireWolfAGWPE.pas" anpassen...


Über den Forenthread zu LazPacket, kann man sich austauschen:
https://lk0nod.de/forum/thread-1121.html


Viel Spaß beim Testen!