Sunday, September 26, 2021

SARTopo and APRS

Update: 3/20/2023 - CalTopo now has KISS support, rendering the information below unnecessary.


SARTopo/Caltopo is a great tool for making maps as it has an option to generate printable PDFs with specific scales (1:24000) and either a UTM or USNG grid.   These work well with a compass for land navigation.   There is an offline version of their software that even supports APRS objects.     I started exploring this option as I would like to be able to connect SARTopo offline to a local radio without needing any IGATE or internet access.

The SARTopo/Caltopo offline/desktop version requires input in the TNC2 format, used most often by IGATEs.   The standard output from Direwolf comes close but includes some extra information about audio level/channel that causes problems for SARTopo.


Hardware

Yaesu FT-857d

Signalink USB

Laptop with Windows 10 Pro


Direwolf

Install Com0Com virtual port

Follow Direwolf instructions to setup virtual com port pair (COM3/COM4)

Make sure to test using Putty or Telnet

Install Cygwin and the packages mentioned in the Direwolf User Manual

Clone the git repo per instructions in User Manual

Checkout the DEV branch

Edit the source on direwolf.c and change lines of code in app_process_rec_packet to not print out [%d.%d%s] or [%d%s]

Follow the Direwolf User Manual steps to build new executables.  Version 1.6 is slightly different than the manual.  When you run "make", it will tell you the new process.

Now you have an executable that can send data to the Sartopo application.

Setup a batch script to launch Direwolf and dump the output to COM3. 

C:\cygwin64\home\<username>\direwolf\build\src\direwolf.exe -l C:\Radio\Direwolf\logs -c C:\cygwin64\home\<username>\direwolf\build\src\direwolf.conf -q h>COM3


SARTopo/Caltopo

Old versions of Sartopo Offline

Edit the Sartopo config file:

C:\<path to caltopo>\caltopo-offline\caltopo\cal.properties

New versions of Caltopo-desktop

C:\Users\<username>\

Add these lines, per SARTopo documentation to the topo.properties file

sarsoft.location.aprs.local.enabled=true

sarsoft.location.serial.COM4=1200,8,1,0

log4j.logger.org.sarsoft.location.service.APRSLocalEngine=INFO

log4j.logger.org.sarsoft.location.service.APRSSerialThread=DEBUG


Launch SARTopo Offline/Caltopo-Desktop

Setup a new map and add a locator object.

Since you have debugging enabled, you should see the packet data appear in the commandline.

As APRS packets are received locally,  you should start to see them appear on the map.


Future

Figure out how to avoid building a custom version of Direwolf.   It may be possible to host an IGATE server or redirect the IGATE packets from Direwolf.




Sunday, December 23, 2018

JNOS2 and Ubuntu Virtual Box



I'm running Ubuntu 18.04.1 LTS in an Oracle Virtualbox with a bridged network adapter on a Windows 10 laptop. I've got my Yaesu FT-857D and Signalink usb connections shared with the VM.  I'm thinking I need to use Direwolf.  However my Kenwood TH-D74a has a built in KISS TNC and was super easy to access in Linux.

To get JNOS2 to work, I thought I'd be able to just follow the instructions listed on the webpages.  Unfortunately this did not work for me.

When I downloaded and extracted the tar file and tried to run the installer, a message saying the file or directory doesn't exist.   This seems to indicate that prerequisite libraries aren't installed.  Eventually I discovered these needed to be installed:

sudo apt-get install libncurses5-dev
sudo apt-get install libssl-dev

I then received messages like in this thread: http://lists.tapr.org/pipermail/nos-bbs_lists.tapr.org/2018-July/005312.html

To resolve this, I downloaded this:

wget https://www.langelaar.net/jnos2/archive/news/tun_sp2l.c
cp tun_sp2l.c   <src directory>/tun.c

Running the make command was finally successful.  The JNOS installer ran successful. 




Tuesday, July 17, 2018

Private Cloud

My next project is building a private cloud to see if I can take my OpenGIS project up a notch or two in order to support field deployable networks.


Existing Hardware:

  • Gigabit Switch
  • Linksys WRT1900AC running OpenWRT
  • Various ODroid C2 and Raspberry PI computers


New Hardware:

Future Hardware (whenever I find more $)
  • 10GB SFP 
  • Fiber 
  • NAS for storage
  • Ram and Storage Upgrades

Software:


With any luck, I'll be able to build out Zones/Containers/Virtual Machines to support not only GIS servers, databases, and web app servers but also some servers to run ham radio apps like PAT and maybe be able to process IoT sensors streams.


Wednesday, October 4, 2017

AX25, ODroid, PAT Part 2

At first I tried the deb package both linux and armhf but ran into problems with each.  Solution was to build from source.

Build from Source:

https://github.com/la5nta/pat/wiki/Building-from-source
sudo apt-get install golang-go
export GOPATH=`pwd`
Attempts at using go to do the install failed.

git clone https://github.com/la5nta/pat $GOPATH/src/github.com/la5nta/pat
cd $GOPATH/src/github.com/la5nta/pat
git submodule update --init --recursive
./make.bash libax25
./make.bash
sudo cp pat /usr/local/bin

Success. Now edit the config:
vi /home/odroid/.wl2k/config.json
Enter your callsign, winlink password, locator, etc.

I set the serial-tc path to:  /dev/ttyACM0

Not sure if this will work yet though.

Run the web client with:
pat http

Next blog post...try to send an email P2P.

73

Tuesday, October 3, 2017

AX25,ODroid and PAT/Winlink

Considering what has been happening in Puerto Rico with Hurricane Maria, I decided  I need to get  Winlink operational so I can send email over radio.  Since I prefer Linux, I started exploring options and found PAT, http://getpat.io/, a cross-platform Winlink client.

Goal:   Get the Kenwood TH-D74A built in KISS TNC to send Winlink email using the PAT client on Ubuntu 16.04 on a 64Bit ODroid C2

Make sure the TH-D74A has the most recent firmware.

On Kenwood TH-D74A, go to:

Menu > Configuration > Interface > KISS > USB or Bluetooth.  I chose USB.

Instructions:
https://github.com/la5nta/pat/wiki/AX25-Linux

Power on the TH-D74 and plug usb cable into it and the ODroid C2.

On the ODroid C2, use 'dmesg' to find the device name:  /dev/ttyACM0

sudo apt-get update && upgrade -y
sudo apt-get install ax25-tools

Modify /etc/ax25/axports

sudo apt-get install ax25-apps


Here is where problems begin:

sudo modprobe ax25

sudo modprobe mkiss

I received messages indicating modprobe cannot find the necessary modules.

Solution

Build a custom kernel
https://github.com/umiddelb/armhf/wiki/How-To-compile-a-custom-Linux-kernel-for-your-ARM-device



Verify your kernel version with:

uname -r

My ODroid say 3.14.79-97

Install the prerequisite software and start the process.

Make sure to run this:

make menuconfig


After completing this step, I decided to make an image of the ODroid OS as a backup in case I screwed something up badly.  To do this, I shutdown the ODroid, ejected the SD Card and put it into a card reader on my Windows 10 computer.  I used Win32Disk Imager to make img files of both the main volume and the boot volume.

After making the backup, I loaded the SD card back into the ODroid, booted up, and continued the kernel build process.

Scroll to Networking and make sure AX 25 Ham Radio components are selected.

Complete the rest of the process.


Summary

$ git clone --depth 1 --single-branch -b odroidc2-3.14.y https://github.com/hardkernel/linux
$ cd linux
$ make odroidc2_defconfig
$ make menuconfig
##Enable the AX25/Ham Radio Components
$ make savedefconfig
$ make -j 4 Image dtbs modules
$ sudo cp arch/arm64/boot/Image arch/arm64/boot/dts/meson64_odroidc2.dtb /media/boot
$ sudo make modules_install
$ sudo make firmware_install
$ sudo make headers_install INSTALL_HDR_PATH=/usr
$ kver=`make kernelrelease`
$ sudo cp .config /boot/config-${kver}
$ cd /boot
$ sudo update-initramfs -c -k ${kver}
$ sudo mkimage -A arm64 -O linux -T ramdisk -a 0x0 -e 0x0 -n initrd.img-${kver} -d initrd.img-${kver} uInitrd-${kver}
$ sudo cp uInitrd-${kver} /media/boot/uInitrd


After running this the first time and rebooting, I check the kernel version which appears to have been changed.

However no luck with AX25 module.

Turns out that in the "Menuconfig" step, those flagged with "*"  need further selections.  I need to redo entire process.   Thanks to:  http://www.tldp.org/HOWTO/AX25-HOWTO/x144.html

This time I made sure to go into each AX25 category and select the appropriate modules.  They should be indicated with "M"

This time things went smoother.    These commands worked without any errors:

sudo modprobe ax25
sudo modprobe mkiss


That's it for now.    In another post,  I'll document steps taken to test the connection and will try to send an email.

Saturday, April 22, 2017

Key Elements

Here is a shell script to receive APRS packet audio through the microphone input:
 arecord -f S16_LE -c 1 -r 48000 -D hw:CARD=Device,DEV=0 - |sox -t raw -esigned-integer  -b16 -r 48000 - -esigned-integer -b16 -r 22050 -t raw - | multimon-ng -q -v 10 -t raw -A - | python aprs_parser.py  


Here is a shell script to receive APRS packets from a RTL-2832 TV Tuner:
 rtl_fm -f 144.390M -s 22050 - | multimon-ng -q -v 10 -t raw -A - | python aprs_parser.py  

aprs_parser.py is a script I wrote to decode the APRS packets and insert into the PostgreSQL/PostGIS database.  I'll post it when I clean the code up. It uses SQLAlchemy, Geoalchemy2, and aprslib Python modules.

The PostgresSQL/PostGIS database needs to have a geometry column with spatial reference id of 4326 (aka WGS_1984).

Thursday, February 9, 2017

Interoperability Conference 2017

Open GIS Server with Raspberry Pi and Radio

Presentation Slides

This was a side project I worked on at night to see if I could run a geographic information system (GIS) that could support both traditional desktop application and modern web mapping applications (server/client). The Raspberry Pi is used to listen for and capture digital data containing location information and insert it into the GIS database.

The goal of this was to get audience members thinking about GIS and how it might be useful or could be applied in the radio/communication community.  

I hope to publish a build log as well as the code I wrote to handle the database insertion.

73,
KE8CRV