QtSoundModem UZ7HO/AGWPE Port Setup

AGWPE/UZ7HO Protocol

Pros

  • Utilizes QtSoundModem’s frame-collector optimizer.
  • Utilizes QtSoundModem’s dynamic MAXFRAME optimizer.
  • Ports can be interlocked to prevent multiple simultaneous access.
  • Supports ATTACH and RADIO rig control commands.
  • Supports dynamic MODEM selection and FREQ center frequency adjustment TNC parameters.
  • The statistics window will be populated with active connection information.

Cons

  • Does not have NETROM capability
  • Cannot utilise the BPQ internal Layer2 (L2) DIGIPEATER.
  • For basic DIGI functionality one must use the DIGI built into QtSoundModem, which is configured within QtSoundModem.ini using the MyDigiCall parameter.

Notes

  • QtSoundModem.ini settings for port parameters are ignored. PACLEN, TXDELAY, FRACK, PERSIST, SLOTTIME etc is taken from the BPQ32.cfg
  • Connection syntax is slightly different to that of KISS-type TNCs. With AGW/UZ7HO and other single-session type TNCs, one must first use the ATTACH port command to first lock the specified port number to your session, then issue CONNECT destination-callsign [optional: via digipeater-callsign]

BPQ32.cfg Example

This example is running 4 ports on a single HF SSB transceiver. If you only wish to have two ports, omit ports declared PORTNUM=3 and PORTNUM=4 from the configuration.

; AGWPE / UZ7HO Driver with QtSoundModem, all _4_ modems enabled for
; a single SSB transceiver.
;
; WARNING: UZ7HO‘s SoundModem only supports max of _2_ modems so use
; caution if copying this for use with SoundModem instead of
; QtSoundModem.
;
; Modems are differentiated by tonal frequency, so for SSB mode only.

PORT 
 PORTNUM=1 
 INTERLOCK=1 
 ID=Modem A
 DRIVER=UZ7HO 
 CHANNEL=A 
 PACLEN=100 
 CONFIG 
  ADDR 127.0.0.1 8000  
  MAXSESSIONS=1 
  UPDATEMAP 
  RADIO=1 
ENDPORT 
 
 
PORT 
 PORTNUM=2 
 INTERLOCK=1 
 ID=Modem B
 DRIVER=UZ7HO 
 CHANNEL=B 
 PACLEN=100 
 CONFIG 
  ADDR 127.0.0.1 8000  
  MAXSESSIONS=1 
  UPDATEMAP 
  RADIO=1 
ENDPORT

PORT 
 PORTNUM=3 
 INTERLOCK=1 
 ID=Modem C
 DRIVER=UZ7HO 
 CHANNEL=C 
 PACLEN=100 
 CONFIG 
  ADDR 127.0.0.1 8000  
  MAXSESSIONS=1 
  UPDATEMAP 
  RADIO=1 
ENDPORT

PORT 
 PORTNUM=4 
 INTERLOCK=1 
 ID=Modem D
 DRIVER=UZ7HO 
 CHANNEL=D 
 PACLEN=100 
 CONFIG 
  ADDR 127.0.0.1 8000  
  MAXSESSIONS=1 
  UPDATEMAP 
  RADIO=1 
ENDPORT

QtSoundModem.ini Example


[Window]
Waterfall1=1
Waterfall2=0

[Init]
CM108Addr=
DispMode=1
DualChan=1
DualPTT=0
HamLibHost=127.0.0.1
HamLibPort=4532
MinimizetoTray=0
PTT=None
PTTBAUD=19200
PTTMode=1
PTTOffString=
PTTOnString=
RXSampleRate=12000
SCO=1
SndRXDeviceName=:dsnooped0
SndTXDeviceName=:dmix0
SoundMode=0
TXPort=8884
TXRotate=0
TXSampleRate=12000
UDPClientPort=8888
UDPHost=127.0.0.1\n
UDPServer=0
UDPServerPort=8884
multiCore=0
pttGPIOPin=17
pttGPIOPinR=17

[Modem]
CWIDCall=
CWIDInterval=
CWIDLeft=0
CWIDRight=0
CWIDType=1
DCDThreshold=72
ModemType1=0
ModemType2=0
ModemType3=0
ModemType4=0
NRRcvrPairs1=3
NRRcvrPairs2=3
NRRcvrPairs3=0
NRRcvrPairs4=0
PreEmphasisAll1=1
PreEmphasisAll2=1
PreEmphasisAll3=1
PreEmphasisAll4=1
PreEmphasisDB1=0
PreEmphasisDB2=0
PreEmphasisDB3=0
PreEmphasisDB4=0
RXFreq1=1000
RXFreq2=2000
RXFreq3=2300
RXFreq4=2600
RcvrShift1=30
RcvrShift2=30
RcvrShift3=30
RcvrShift4=30
TxDelay1=350
TxDelay2=350
TxDelay3=350
TxDelay4=350
TxTail1=30
TxTail2=30
TxTail3=30
TxTail4=30
rxOffset=0
soundChannel1=1
soundChannel2=1
soundChannel3=1
soundChannel4=1


[AGWHost]
Port=8000
Server=1

[KISS]
Port=8100
Server=0

[AX25_A]
MyDigiCall="MYCALL-7,RIJEN,RRR"
BitRecovery=0
DynamicFrack=0
FX25=2
IPOLL=80
KISSOptimization=1
NonAX25Frm=0
TXFrmMode=1

[AX25_B]
BitRecovery=0
DynamicFrack=0
FX25=2
IPOLL=80
KISSOptimization=1
NonAX25Frm=0
TXFrmMode=1

[AX25_C]
BitRecovery=0
DynamicFrack=0
FX25=2
IPOLL=80
KISSOptimization=1
NonAX25Frm=0
TXFrmMode=1

[AX25_D]
BitRecovery=0
DynamicFrack=0
FX25=2
IPOLL=80
KISSOptimization=1
NonAX25Frm=0
TXFrmMode=1

This example is running four modems (sound channels) on a single HF SSB transceiver. The following example disables all but one modem (sound channel).

soundChannel1=1
soundChannel2=0
soundChannel3=0
soundChannel4=0

Confused? 1=A, 2=B, 3=C, 4=D

QtSoundModem Frame Display

The number preceding packet frames indicates the sound channel, somewhat confusingly indicated in the GUI above with A, B, C and D. Additionally, the sections inside the QtSoundModem.ini file are declared with [AX25_A], [AX25_B], [AX25_C] and [AX25_D].

Testing The AGWPE/UZ7HO Driven Ports

From the BPQ terminal command line, the PORTNUM is used to identify the port. If PORTNUM is not set, then BPQ assigns a PORTNUM automatically. PORTNUM is not affiliated with the sound channel number, they may the same but that is purely coincidental.

BPQ initialization console output:

Initialising Port 01     UZ7HO Host 127.0.0.1 Port 8000 Chan A
Initialising Port 02     UZ7HO Host 127.0.0.1 Port 8000 Chan B
Initialising Port 03     UZ7HO Host 127.0.0.1 Port 8000 Chan C
Initialising Port 04     UZ7HO Host 127.0.0.1 Port 8000 Chan D

Output of the Ports command (bold emphasis is my input):

ports
RIJEN:PE1RRR-7} Ports
  1 Modem A                       
  2 Modem B                       
  3 Modem C                       
  4 Modem D  

Issuing the following commands will produce the output that follows:

Connected to TelnetServer
attach 1
RIJEN:PE1RRR-7} Ok
c test1
d
Disconnected
Connecting....
Connected to TelnetServer
at 2
RIJEN:PE1RRR-7} Ok
c test2
d
Disconnected
Connecting....
Connected to TelnetServer
at 3
RIJEN:PE1RRR-7} Ok
c test3
d
Disconnected
Connecting....
Connected to TelnetServer
at 4
RIJEN:PE1RRR-7} Ok
c test4
d
Disconnected
1:Fm PE1RRR To TEST1 <SABM C  P>[01:43:57T]
1:Fm PE1RRR To TEST1 <DISC C  P>[01:44:02T]
2:Fm PE1RRR To TEST2 <SABM C  P>[01:44:32T]
2:Fm PE1RRR To TEST2 <DISC C  P>[01:44:36T]
3:Fm PE1RRR To TEST3 <SABM C  P>[01:44:53T]
3:Fm PE1RRR To TEST3 <DISC C  P>[01:44:58T]
4:Fm PE1RRR To TEST4 <SABM C  P>[01:45:04T]
4:Fm PE1RRR To TEST4 <DISC C  P>[01:45:09T]

Soundcard Definition – .asoundrc file

A snippet from the .asoundrc file that comes from the RPI4 Trifecta: VARA, Packet & ARDOP – One Audio Interface tutorial. The hardware (hw:1,0) interface number is derived from the number displayed next to the sound interface by the command aplay -l


pcm.dsnooped0 {
    type dsnoop
    ipc_key 50000
    ipc_key_add_uid false   # let multiple users share
    ipc_perm 0666           # IPC permissions for multi-user sharing (octal, default 0600)
    slave {
        pcm "hw:1,0"
        channels 1
    }
}

pcm.dmix0 {
    type dmix
    ipc_key 60000
    ipc_key_add_uid false   # let multiple users share
    ipc_perm 0666           # IPC permissions for multi-user sharing (octal, default 0600)
    slave {
        pcm "hw:1,0"
        rate 44000
    }
}

If you find the articles, or content in general posted here useful, enjoyable or maybe even something else, please consider making a small contribution towards my hosting fund so that I may continue to provide my services for free to as many people as possible.