Skip to content

Instantly share code, notes, and snippets.

@tlrobinson
Last active April 14, 2021 13:56
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tlrobinson/4ab94d0e9fe7ba86c2ea507b1ca86c4d to your computer and use it in GitHub Desktop.
Save tlrobinson/4ab94d0e9fe7ba86c2ea507b1ca86c4d to your computer and use it in GitHub Desktop.
ham radio / amateur radio setup notes for mac and raspberry pi
#!/usr/bin/env bash
# e.x.
#
# bbs.sh KE6JJJ-1 1200 145090000
# bbs.sh KE6JJJ-1 9600 433370000
#
set -eu
call=$1
speed=${2-"1200"}
frequency=${3-""}
direwolf_log_file=$(mktemp /tmp/direwolf.XXXXXX)
direwolf_pid=""
rigctl_options="-m 370 -r /dev/ttyUSB1"
cleanup() {
echo "Exiting..."
if [ ! -z "$direwolf_pid" ]; then
kill $direwolf_pid
rm -f "$direwolf_log_file"
fi
}
trap "exit" INT TERM
trap "cleanup" EXIT
if ! grep -q "radio$speed" "/etc/ax25/axports" 2> /dev/null; then
echo "Adding radio$speed to /etc/ax25/axports. Enter your callsign:"
read yourcall
echo "radio$speed $yourcall $speed 255 2 ($speed bps)" | sudo tee -a "/etc/ax25/axports" > /dev/null
fi
if [ ! -z "$frequency" ]; then
echo "Setting radio frequency to $frequency and offset to 0"
rigctl $rigctl_options F "$frequency"
rigctl $rigctl_options O 0
fi
# make sure kernal modules are loaded
modprobe ax25 mkiss
# start direwolf
direwolf -p -t 0 -B "$speed" > "$direwolf_log_file" &
direwolf_pid="$!"
# get the device from the direwo
sleep 1
device=$(grep -Eo "/dev/pts/[0-9]+" "$direwolf_log_file" | head -n 1)
if [ -z "$device" ]; then
echo "Unable to get Direwolf KISS device"
exit 1
fi
sudo kissattach "$device" "radio$speed" > /dev/null
sudo kissparms -p "radio$speed" -t 100 -s 100 -r 25 -c 1
echo "Callsign: $call"
echo "Frequency: $(rigctl $rigctl_options f) (offset $(rigctl $rigctl_options o))"
echo "Speed: $speed"
echo "Logs: $direwolf_log_file"
echo
echo "Press enter to connect..."
read
axcall "radio$speed" "$call"
KE6JJJ-1
Bernal Heights, San Francisco, California
https://www.reddit.com/r/amateurradio/comments/cuxso3/packet_radio_bbs_in_san_francisco_still_operating/
https://www.reddit.com/r/amateurradio/comments/64skvj/packet_bbs_in_san_francisco/
Frequency Baud Rate Radio Tnc/PAD
50.60 MHz 1200 Alinco DR-06T Kantronics KAM
145.09 MHz 1200 Kenwood TM-D700A Kantronics KPC3+
223.60 MHz 1200 Alinco DR-235MkIII Kantronics KPC3
433.37 MHz 9600 Kenwood TM-D700A internal TNC
N0ARY commands:
ACTivate unkill a message <= SYSOP ONLY
Add (keyword: EVENT, CLUBS, SKIP), same as +
ADVenture
All (keyword: LIST)
ASCENDing (keyword: LIST)
Approved (keyword: SET)
AXRelay set outgoing SSID (keyword: GATEWAY)
Barometer (keyword: WX)
Bulletin (keyword: LIST, SEND)
Bye quit the bbs
Bye quit the bbs
CALLBK (server)
CD change directory on file system
CHeck check in/out a NTS message for delivery, see NTS
CLubs set/show current clubs (keyword: LIST)
CONnect connect to remote AX.25 station
COMPuter set/show computer, see EQUIPMENT
COpy send a copy of a message to another user
Days (keyword: EVENT)
DELete (keyword: EVENT, CLUBS, SKIP), same as -
DESCENDing (keyword: LIST)
DIr display a directory of files, same as LS
DISTribution manipulate a distribution list
DOWN (keyword: LIST)
EDit edit a message header, see NTS
EMail set/show your EMAIL forwarding address
EQuipment show your current equipment list
EVent add/delete/show calendar of events
EXit same as BYE
FILESYS (server)
First (keyword: LIST)
FName set/show your first name, see WP
FREQ set/show the frequencies you monitor
FORward alter forwarding on a message (sysop)
Full (keyword: )
Games
Header (keyword: READ)
HELd (keyword: LIST)
Help request help on commands, change help level
HIstory list the last command you executed
HOmebbs set/show home bbs
HOLd place a hold on a message, see RELEASE (sysop)
Humidity (keyword: WX)
INItiate start a server manually (sysop)
INFo get information about the system
In (keyword: CHECK, WX)
Kill kill a message (keyword: USER, SIGNATURE, VACATION)
KM kill all of your messages
Last (keyword: LIST)
LA list all, ignore SKIP variable
LB list bulletins
LC list messages matching your CLUBS list
LF list first messages
LINes set/show your screen size, pause function
List list messages
LK list killed messages
LL list last messages
LM list messages addressed to you
LN list new messages, new since last list on previous login
LNAme set/show your last name
LOAD display graph of user load by hour
LOOkup look a call up in the callbook
LOCal (keyword: LIST)
LO list old messages
LP list personal messages
LR list read messages
LS display directory of files, same as DIR
MAcro set/show macros
ME show all of your user information
Mine (keyword: LIST, KILL, READ)
Months (keyword: EVENT)
MOtd display the "message of the day", login message
New (keyword: LIST)
None (keyword: COMPUTER, RIG, SOFTWARE, TNC)
NOPrompt (keyword: LIST, READ, KILL) see LINES
Old (keyword: LIST)
Out (keyword: CHECK)
PAssword set user password, protects personal data
PENding (keyword: LIST)
Personal (keyword: LIST, SEND)
PHone set/show your phone number, see PASSWORD
POrts show who is currently connected to system
PROCess (keyword: KILL)
QTh set/show your QTH, city and state, see WP
Quit same as BYE
Rain (keyword: WX)
RELease remove a hold from a message, see HOLD (sysop)
RIG set/show your radio used for packet, see EQUIPMENT
REPly reply to a message, same as SR
Read read a message or file
RH read messages with full routing header, READ HEADER
RK read message and kill it (sysop)
RM read all messages addressed to you, READ MINE
RW show users that have read a message, READ WHO
SB send a bulletin, SEND BULLETIN
SD send a message to a distribution list
SEArch search callbook for a callsign by name, see CALLBK
SECure (keyword: SEND)
Send send a message
SET alter a user (sysop) and (keyword: WX)
SHell shell out to UNIX (sysop)
SIGNature create/kill/show a users signature entry
SKip clubs and categories to hide in your list requests
SOFTware set/show your packet software, see EQUIPMENT
SP send a personal message, SEND PERSONAL
SPAWN start a tnc server (sysop)
SR send reply to a message, see REPLY
SS send a secure message, SEND SECURE
ST send an NTS message, SEND NTS
Talk request to speak to the sysop, if around
Temperature (keyword: WX)
TELnet connect to a remote host on the Internet
TNC (keyword: PORTS)
TNC144 (keyword: SPAWN)
TNC220 (keyword: SPAWN)
TNC440 (keyword: SPAWN)
Users show recent connects (keyword: KILL)
UP (keyword: LIST)
VACation create/kill/show a users vacation entry
Weeks (keyword: EVENT)
WHEreis show the WP entry for call, same as WP
WHO show information about a user
Wind (keyword: WX)
WP show the WP entry for call, same as WHEREIS
WRite write a file to disk (keyword: SIGNATURE, VACATION)
WX display weather statistics
ZIp set/show your zip code, see WP
# hackrf
brew install dfu-util hackrf
# gqrx
brew cask install gqrx
brew cask install cubicsdr
brew cask install sdr
brew cask install cutesdr
# quisk (as of version 4.1.53 on 3/30/2020)
brew install portaudio pulseaudio
pip3 install --upgrade pip setuptools wxPython pyserial
env ARCHFLAGS="-arch x86_64" CFLAGS="-D USE_MACPORTS" pip3 install quisk
# pihpsdr (as of v2.0.0-rc9 on 2020/04/01)
git clone git@github.com:g0orx/wdsp.git
make -f Makefile.mac install
popd
git clone git@github.com:g0orx/pihpsdr.git
pushd pihpsdr
make -f Makefile.mac install
popd
# ghpsdr3 (incomplete)
# brew install codec2 pulseaudio jack libconfig libusb libevent ortp
# ln -s /usr/local/Cellar/libusb/1.0.22/include/libusb-1.0/libusb.h /usr/local/include/libusb.h
# export LDFLAGS="-L/usr/local/opt/openssl/lib"
# export CPPFLAGS="-I/usr/local/opt/openssl/include"
# export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"
# git clone https://github.com/alexlee188/ghpsdr3-alex.git
# cd ghpsdr3-alex
# autoreconf -vif
# ./configure
# brew services start jack
# brew services start pulseaudio
brew install gnuradio gr-osmosdr
# kalibrate-hackrf
brew install fftw hackrf libtool autoconf automake pkg-config
git clone https://github.com/scateu/kalibrate-hackrf.git
pushd kalibrate-hackrf
./bootstrap
popd
# enable ssh, vnc, serial port, disable serial console
raspi-config
# vnc password
vncpasswd -user
# hamlib + rigctl
sudo apt-get install libhamlib-dev libhamlib-utils
# plug in radio, then:
# list USB ttys:
dmesg | grep tty
# [ 9559.861151] usb 1-1.3.1: cp210x converter now attached to ttyUSB0
# [ 9560.369568] usb 1-1.3.3: cp210x converter now attached to ttyUSB1
# verify rigctl works (370 = Icom IC-7100):
rigctl -m 370 -r /dev/ttyUSB0 f
# add alias
echo 'alias rig="rigctl -m 370 -r /dev/ttyUSB0"' >> ~/.bashr
# list sound cards:
arecord -l
# **** List of CAPTURE Hardware Devices ****
# card 1: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
# Subdevices: 1/1
# Subdevice #0: subdevice #0
# direwolf (current package doesn't include hamlib support)
git clone https://github.com/wb2osz/direwolf.git
cd direwolf
make
sudo make install
make install-conf
make install-rpi
cd
sudo nano ~/direwolf.conf
# under "FIRST AUDIO DEVICE PROPERTIES", add (adjust to match above sound card and serial port):
# MYCALL YOURCALL
# ADEVICE plughw:1,0
# PTT RIG 370 /dev/ttyUSB0
# start direwolf (disable text color)
direwolf -t 0
# xastir
sudo apt-get install xastir
# yaac
sudo apt-get install openjdk-8-jre librxtx-java unzip
mkdir ~/yaac
cd ~/yaac
wget https://www.ka2ddo.org/ka2ddo/YAAC.zip
unzip YAAC.zip
echo 'alias yaac="java -jar ~/yaac/YAAC.jar"` >> ~/.bashrc
cd
# start and configure xastir and/or yaac
sudo xastir
java -jar ~/yaac/YAAC.jar"
# set call sign and coordinates
# add interface, "Networked AGWPE" on "localhost:8000"
# flrig + fldigi
sudo apt-get install flrig fldigi
# wsjt-x
sudo apt-get install wsjtx
# js8call
sudo apt-get install libgfortran3
wget http://files.js8call.com/1.1.0/js8call_1.1.0_armhf.deb
sudo dpkg -i js8call_1.1.0_armhf.deb
# install ax25 software
sudo apt-get install ax25-apps ax25-tools
# add to /etc/axports:
# ax0 KK6GCX 1200 255 2 (1200 bps)
# start direwolf with KISS pseudo-terminal
direwolf -t 0 -p
# attach multi kiss interface
mkiss -s 19200 -x 1 /tmp/kisstnc
# attach kiss interface (replace "/dev/pts/3" with the output of previous command)
sudo kissattach /dev/pts/3 ax0
# connect
axcall ax0 CALLSIGN
# rtc
# follow instructions on https://thepihut.com/blogs/raspberry-pi-tutorials/17209332-adding-a-real-time-clock-to-your-raspberry-pi
# sdr
sudo apt-get install cubicsdr cutesdr gqrx-sdr soapysdr-tools
sudo apt-get autoremove && sudo apt update && sudo apt upgrade
# ghpsdr3-alex (as of 3/31/2020)
sudo apt install git build-essential libfontconfig1
sudo apt install mesa-common-dev libglu1-mesa-dev -y
sudo apt install jackd2 libjack-jackd2-dev portaudio19-dev
sudo apt install qtcreator qt5-default qtmultimedia5-dev
sudo apt install libusb-0.1-4 libusb-dev libfftw3-dev libpulse-dev libsamplerate0-dev
sudo apt install libusb-1.0-0-dev libconfig-dev xdg-utils libortp-dev libevent-dev libcodec2-dev libssl-dev
git clone https://github.com/alexlee188/ghpsdr3-alex.git
cd ghpsdr3-alex
sh ./cleanup.sh
autoreconf -i
sh ./alex-conf.sh
make
sudo make install
minicom -b 1200 -D /dev/cu.SLAB_USBtoUART
minicom -b 9600 -D /dev/cu.SLAB_USBtoUART
for 9600 bps enter "HB 9600"
to connect enter "C CALLSIGN"
to disconnect enter "D"
to get to minicom menu: shift-escape-Z