
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
andRADIO
rig control commands. - Supports dynamic
MODEM
selection andFREQ
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 theMyDigiCall
parameter.
Notes
- With the exception of
PACLEN
,BPQ32.cfg
TNC port configuration parameters are ignored. TNC parameters,TXDELAY
,FRACK
,PERSIST
,SLOTTIME
are defined inQtSoundModem.ini
instead. - BPQ32’s node beacons and ID frames are suppressed as
NETROM
is not supported. Port beacons set via the WebUI remain functional. - 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 issueCONNECT 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

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 48000
}
}
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.
You must be logged in to post a comment.