Version 3.8.12
This version of FRStack provides REST APIs for RADIO, SLICE, UDP, PGXL AMP, SPE AMP, SteppIR Control
See how Node-Red users are leveraging FRStackWebApis by visiting
nodered-hamradio on groups.io
Version History
Upgrade .NET RPi or Linux
Install .NET RPi or Linux
Install .NET OSX
Install NodeRed
Run NodeRed RPi
Run NodeRed Ubuntu
Install NodeRed Libs
Upgrade FRStack Web APIs RPi
Install FRStack Web APIs RPi
Install FRStack Web APIs OSX
FRStack Web APIs Commandline run
FRStack Web APIs Service
FRStack Web APIs Service second instance
FRStackWebApi Configuration
RPi3 / RPi4 / RPi5 GPIO
FRStackWebApi APIs
Raspberry PI Version
Raspberry PI ARM64 Version
Linux ARM64 Version
Linux X64 Version
OSX X64 Version
OSX M Version
Windows X64 Version
Windows ARM64 Version
V3.8.12.77 (OSX, Linux, RPi, Win)
V3.7.3.74 (OSX, Linux, RPi, Win)
V3.3.34.70 (OSX, Linux, RPi)
V3.3.33.63 (OSX, Linux, RPi)
V3.3.32.62 (OSX, Linux, RPi)
V3.1.31.60 (OSX, Linux, RPi)
V3.1.30.59 (OSX, Linux, RPi)
V3.1.27.57 (OSX, Linux, RPi)
V3.1.26.54 (OSX, Linux, RPi)
V3.1.25.53 (OSX, Linux, RPi)
V3.1.25.52 (OSX, Linux, RPi)
V3.1.24.50 (RPi only)
V3.1.23.48 (OSX, Linux, RPi)
V3.1.20.10
V3.1.19.9
V3.1.18.8
V3.1.16.7
V3.1.16.2
If you are installing this service for the first time then advance to Install .NET 8.0
# remove the link to DotNet prior version
sudo rm /usr/bin/dotnet
# rename dotnet version ? folder
sudo mv /opt/dotnet /opt/dotnet?
# now follow install instructions for **.NET 8.0**
# if you don't plan to use dotnet? then you can remove the folder and files
# You should be in your download folder: cd ~/Downloads/
wget <the dot net core download for your device>
# The following website has this info. https://dotnet.microsoft.com/download/dotnet/8.0
# Here is the current one for Linux ARM32 devices
# https://download.visualstudio.microsoft.com/download/pr/f12a9449-04ba-454c-bc35-4cdb426accf6/2729a371b61d59794845eb309a46fba2/aspnetcore-runtime-8.0.4-linux-arm.tar.gz
# Here is the current one for Linux ARM64 devices
# https://download.visualstudio.microsoft.com/download/pr/80ec12e5-b26f-466c-a20c-f96772ea709d/606e7203912400b44cb35d6fcecf60bf/aspnetcore-runtime-8.0.4-linux-arm64.tar.gz
# Here is the current one for Linux x64 devices
# https://download.visualstudio.microsoft.com/download/pr/0b0bc7f4-c6e5-4cec-a7ed-45c2fac0da4b/ae2090564274152b5a4be9f1e66c5d30/aspnetcore-runtime-8.0.4-linux-x64.tar.gz
# From the Downloads folder, execute the following commands:
sudo mkdir -p /opt/dotnet
# for ARM 32bit
sudo tar -zxf aspnetcore-runtime-8.0.4-linux-arm.tar.gz -C /opt/dotnet
# for ARM 64bit
sudo tar -zxf aspnetcore-runtime-8.0.4-linux-arm64.tar.gz -C /opt/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/bin
# for AMD/Intel 64bit
sudo tar -zxf aspnetcore-runtime-8.0.4-linux-x64.tar.gz -C /opt/dotnet
sudo ln -s /opt/dotnet/dotnet /usr/bin
The FRStackWebApi-osx-?64_x_y_z_v.ZIP file contains com.mkcmsoftware.FRStackWebApi.plist which goes in the /Library/LaunchDaemon folder. This file assumes you have installed .NET and FRStackWebApi in folder indicated below.
# site to get .NET install script for OSX (if not already installed)
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script
# modify script file permissions to allow execution
chmod 755 dotnet-install.sh
# install command line to install .NET 8 runtime
./dotnet-install.sh --channel 8.0 --runtime aspnetcore
# Expand https://www.mkcmsoftware.com/download/FRStackWebApi-osx-arm64_3_8_12_77.zip in the /usr/local/frstack
# or Expand https://www.mkcmsoftware.com/download/FRStackWebApi-osx-x64_3_8_12_77.zip in the /usr/local/frstack
sudo chown root /usr/local/frstack/*
sudo chmod 644 /usr/local/frstack/*
# load daemon
sudo launchctl load /Library/LaunchDaemons/com.mkcmsoftware.FRStackWebApi.plist
# manually start
sudo launchctl start com.mkcmsoftware.frstackwebapi
# manually stop
sudo launchctl stop com.mkcmsoftware.frstackwebapi
# force unload daemon
sudo launchctl unload /Library/LaunchDaemons/com.mkcmsoftware.FRStackWebApi.plist
# command to check on daemon process id and exit error code
sudo launchctl list | grep com.mkcm
# open console to view logs
open /System/Applications/Utilities/Console.app
# select log tab on lefthand menu
# look for frstack.log and frstack_err.log
Your version of RPi Linux may already have Node-Red installed. Check before downloading another copy.
RPi See https://nodered.org/docs/getting-started/raspberrypi
# RPi
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
For Ubuntu V20 you can use the Ubuntu Software Application, search node-red then install.
Default address for Node Red is http://hostname:1880
On pi to run node red in terminal use:
node-red
The following commands are provided to work with the service:
node-red-start - this starts the Node-RED service and displays its log output. Pressing Ctrl-C or closing the window does not stop the service; it keeps running in the background
node-red-stop - this stops the Node-RED service
node-red-restart - this stops and restarts the Node-RED service
node-red-log - this displays the log output of the service
If you want Node-RED to run when the Pi is turned on, or re-booted, you can enable the service to autostart by running the command:
sudo systemctl enable nodered.service
To disable the service, run the command:
sudo systemctl disable nodered.service
Node-Red is a running service after Snap installation on Ubuntu. If you install outside of snap then use RPi style of commands.
The following commands are provided to work with the service:
sudo snap start node-red - this starts the Node-RED service and displays its log output. Pressing Ctrl-C or closing the window does not stop the service; it keeps running in the background
sudo snap stop node-red - this stops the Node-RED service
sudo snap restart node-red - this stops and restarts the Node-RED service
sudo snap logs node-red - this displays the log output of the service
If you want Node-RED to run when the Pi is turned on, or re-booted, you can enable the service to autostart by running the command:
sudo snap enable node-red
To disable the service, run the command:
sudo snap disable node-red
If this is your first install of FRStackWebApi then proceed to Install FRStack WebAPI on RPi or Linux
sudo systemctl stop FRStackWebApi
sudo mv /usr/local/frstack /usr/local/frstack_old
# now follow install instructions above
# Note: you do not have to perform the Install FRStackWebApi as service since that was already performed in the prior install
# Remember to merge your config changes into the new app.settings file
# now start the new version of the service
sudo systemctl start FRStackWebApi
sudo mkdir -p /usr/local/frstack
cd /usr/local/frstack
# for RPi
sudo wget https://www.mkcmsoftware.com/download/FRStackWebApi-rpi-arm32_3_8_12_77.zip
# for RPi 64
sudo wget https://www.mkcmsoftware.com/download/FRStackWebApi-rpi-arm64_3_8_12_77.zip
# for Linux x64
sudo wget https://www.mkcmsoftware.com/download/FRStackWebApi-linux-arm64_3_8_12_77.zip
sudo unzip FRStackWebApiRpi
# to update specific files from ZIP add the name of the file(s) after the ZIP filename
# for example: sudo unzip FRStackWebApiRpi.zip FRStackWebApi.dll frstackNodeRedV108.json
cd /usr/local/frstack
dotnet FRStackWebApi.dll --urls "http://*:5025"
sudo cp FRStackWebApi.service /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable FRStackWebApi
Note the FRStackWebApi.service contains the port the API will listen on 5025
[Unit]
Description=FRStack Web APIs
After=network.target
[Service]
Type=notify
WorkingDirectory=/usr/local/frstack
ExecStart=/usr/bin/dotnet FRStackWebApi.dll --urls "http://*:5025"
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl start FRStackWebApi
systemctl status FRStackWebApi
journalctl --unit FRStackWebApi --follow
sudo systemctl stop FRStackWebApi
systemctl status FRStackWebApi
Ensure service is stopped
sudo systemctl stop FRStackWebApi
sudo systemctl disable FRStackWebApi
sudo rm FRStackWebApi.service /lib/systemd/system/FRStackWebApi.service
sudo systemctl daemon-reload
Empty is what we want here
systemctl --type service |& grep FRStackWebApi
sudo cp FRStackWebApi2.service /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable FRStackWebApi2
Note the FRStackWebApi2.service contains the port the API will listen on 5026
[Unit]
Description=FRStack Web APIs 2
After=network.target
[Service]
Type=notify
WorkingDirectory=/usr/local/frstack2
ExecStart=/usr/bin/dotnet FRStackWebApi.dll --urls "http://*:5026"
Restart=on-failure
[Install]
WantedBy=multi-user.target
Note the pattern of additional instances can be continued by changing the suffix of 2 to 3 and so on. The install folder, .service filename, description, working directory and port number will be incremented. The commands are identical except for the suffix of your new instance number. For example FRStackWebApi becomes FRStackWebApi2.
frstackNodeRedV108.json
The appSettings.json file contains the startup configuration for the service.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"SvcConfig": {
"AutoConnect": "true",
"initRadioIP": null, // optionally configure the default radio IP address here to autoconnect to, useful when Discovery is not working
"initRadioName": null, // optionally configure the default radio name here to autoconnect to
"initClientName": null, // optionally configure the default client name to bind to
"MRUMatchDelta": "0.000999",
"FollowActiveSlice": "true",
"MuteOthersOnSliceActive": "true",
"EnableTxOnSliceActive": "true",
"TempUnitInF": "true",
"PgxlTuneStandby": "true", // this will set AMP to STANDBY when TUNE is activated
"PgxlModeRestore": "true", // this will return AMP to OPERATE after TUNE complete
"PgxlRadioMaxPower": "50", // this is MAX radio power level when AMP is OPERATE
"PgxlRadioStandbyPower": "100", // this is MAX radio power level when AMP is STANDBY
"PGXLOnAntenna": "0", // 0 or 1 or 2; 0 for both, 1 for ANT1, 2 for ANT2
"RCATXACCTuneDisable": "false",
"RCATX1TuneDisable": "false",
"RCATX2TuneDisable": "false",
"RCATX3TuneDisable": "false",
"RadioTuneModeDetect": "false", // this is set true if you want to detect a Radio Tune button push, remember to set TX Delay on radio
"SPEComPort": "", // this is the Serial device for SPE AMP Control port (Not the CAT port)
"SPETuneStandby": "false", // this will set SPE to STANDBY when TUNE is activated
"SPEModeRestore": "false", // this will return SPE to OPERATE after TUNE complete
"SPEOnAntenna": "0", // 0 or 1 or 2; 0 for both, 1 for ANT1, 2 for ANT2
"SPEUseDTR": "false", // this will set DTR to power up amp
"SPEProtocolV1": "false", // this is set true for SPE V1 amps
"SPEAutoOpen": "false", // this is set true to OPEN SPE after connecting to radio
"SteppIRComPort": "", // port,baud,parity,stop,FollowAntInt,EnabledBool,SyncManualBool,AntTxInhibitInt,AntennaType eg. "/dev/ttyUSB0,9600,None,One,0,true,true,1,1"
"FDXProtect": "false,false,false,false,false,false", // enabled,ant1,ant2,rxa,rxb,wide
"UDPSettings": "false,255.255.255.255,12070,false,127.0.0.1,12071,false,127.0.0.1,12072,false,127.0.0.1,12073", // enabled,IPADDR,PORT, enabled,IPADDR,PORT, enabled,IPADDR,PORT, enabled,IPADDR,PORT
"UDPMeterSettings": "false,255.255.255.255,12270,false", // enabled,IPADDR,PORT,SMeterEnabled
"ModeSetsDax": "0", // 0 - Disable, 1 - turn DAX on when mode is DIGL/H, 2 - turn DAX off if not DIGL/H, 3 - both
"CustomFunctions": "",
//
// Set GPIO Logical Pins by string of numbers
// where 0 is not set
// "1" - Input
// "2" - Input Pull down
// "3" - Input Pull up
// "4" - Output
// "5" - Output set low on start
// "6" - Output set high on start
// GPIO 0000000000111111111122222222
// PINS #s 0123456789012345678901234567
"GPIOConfig": "", // RPi3 or RPi4 GPIO configuration
// MOX In, Out values using GPIO numbers 0-27
"MOXInOut": "",
//
// Sample MOX in on 20 and MOX output on 13
// GPIO 0000000000111111111122222222
// PINS #s 0123456789012345678901234567
//"GPIOConfig": "0000000000000500000020000000",
//"MOXInOut": "20,13"
//
"SliceTrackEnabled": false, // Slice B tracks slice A Freq
"SliceTrackRev": false // Tracking freq in reverse, ignored if SliceTrackEnabled is false
}
}
//SteppIRComPort comma delimited settings
// COMPort,
// Baudrate, usually 9600 or 19200
// Parity, - None, Odd, Even
// StopBits, - One or Two
// FollowAntInt, 0 - 8, 0 means TX Slice or 1-8 is for slice letter A thru H for bound client
// EnabledBool, - False or True, True means enable this feature
// SyncManualBool, - False or True, True means manual Freq sync
// AntTxInhibitInt - 0 - 3, 0 - no TX Inhibit, 1 - ANT1, 2 - ANT2, 3 - Both ANT
// AntennaType, 0 to 3, 0 = Beam using CAT, 1=Vertical using CAT, 2=Bean no CAT, 3=Vertical no CAT
For RPi Devices you can configure the GPIO pin for use by the GPIO Rest API.
On boot all GPIO are in INPUT mode, GPIO 0-8 have pull-ups to 3V3 enabled, GPIO 9-27 have pull-downs to 0V enabled.
During boot a sequence of optional configurations can set GPIO. See links below:
BCM2835-ARM-Peripherals.pdf
pin-configuration
config-txt GPIO
Set GPIO Logical Pins by string of numbers
// GPIO 0000000000111111111122222222
// PINS #s 0123456789012345678901234567
"GPIOConfig": "0000022000000500000500000000"
// this sample shows
// inputs 5 and 6 w/ pull down and
// outputs 13 and 19 set to low (0) on service start
// This Sample MOX in on 20 and MOX output on 13
// GPIO 0000000000111111111122222222
// PINS #s 0123456789012345678901234567
"GPIOConfig": "0000000000000500000020000000",
"MOXInOut": "20,13"
This link will jump to the GPIO Rest APIs:
GPIO Rest API
FRStack Commands
http://localhost:5025/FRStack/?param=
FRStack cmd | val Parameter |
---|---|
AUTOCONNECT | True to enable auto connect to radio, false to disable |
DISCONNECT | 1 to disconnect radio |
CONNECT | IPV4, Nickname or Serial Number of radio to connect with, or radio number (1 for 1st radio found sorted by nickname) |
RADIOS | No Param - Returns list of detected 6x00 radio Nicknames to use for CONNECT, or Param is Nickname or Serial No. for dump of Radio object (for testing) |
SLICES | No Param - Returns list of Slice Letter(Index) strings for the connected radio, or Param is Letter(Index) for dump of Slice object (for testing) |
MUTEOTHERSONSLICEACTIVE | 2 to toggle MUTE OTHERS ON SLICE ACTIVE, 1 or true to enable, 0 or false to disable |
ENABLETXONSLICEACTIVE | 2 to toggle ENABLE TX ON SLICE ACTIVE, 1 or true to enable, 0 or false to disable |
FOLLOWACTIVESLICE | 2 to toggle FOLLOW ACTIVE SLICE, 1 or true to enable, 0 or false to disable |
MODESETSDAX | 0 - Disable, 1 - turn DAX on when mode is DIGL/H, 2 - turn DAX off if not DIGL/H, 3 - both |
-XX- | Invalid cmd |
Radio Commands
http://localhost:5025/Radio/?param=
Radio cmd | val Parameter |
---|---|
INFO | returns radio information |
ENUMINFO | returns radio properties enumeration information |
ACC | 0 turn off, 1 turn on, other toggle setting |
AMCARRIER | UP* to increase level, DOWN* to decrease level, or carrier level |
AMPOPERATE | 0 turn off, 1 turn on, other toggle setting |
ATU | Param values are START, BYPASS or CLEAR |
ATUMEM | 0 turn off, 1 turn on, other toggle setting |
AUDIOGAIN | UP* to increase level, DOWN* to decrease level, or audio level |
BINAURAL | 0 turn off, 1 turn on, other toggle setting |
CLIENT | NEXT to switch clients, or set client station name, returns client station name |
CLIENTS | returns list of clients |
CWBREAKIN | 0 turn off, 1 turn on, other toggle setting |
CWDELAY | UP* to increase offset, DOWN* to decrease offset |
CWIAMBICMODEA | 0 turn off, 1 turn on, other toggle setting |
CWIAMBICMODEB | 0 turn off, 1 turn on, other toggle setting |
CWPITCH | UP* to increase offset, DOWN* to decrease offset |
CWSIDETONE | 0 turn off, 1 turn on, other toggle setting |
CWSPEED | UP* to increase offset, DOWN* to decrease offset |
CWSWAPPADDLES | 0 turn off, 1 turn on, other toggle setting |
CWX | 1 - 12 transmits the CWX Macro |
CWXQSK | 0 turn off, 1 turn on, other toggle setting |
CWXSPEED | UP* increase speed, DOWN* decrease speed, or speed value |
CWXDELAY | UP* increase delay, DOWN* decrease delay, or delay value |
DAX | 0 turn off, 1 turn on, other toggle setting |
DEXP | 0 turn off, 1 turn on, other toggle setting |
DEXPLEVEL | UP* to increase level, DOWN* to decrease level, or DEXP level |
FDX | 0 turn off, 1 turn on, other toggle setting |
FILTERSHARPNESS | No param returns CA-ON,CL-1,DA-ON,DL-1,VA-ON,VL-1 |
CA - CW Auto, CL - CW Sharpness Level | |
DA - CW Auto, DL - Digital Sharpness Level | |
VA - CW Auto, VL - Voice Sharpness Level | |
Note: key value separator can be - or ? | |
Note: ON/OFF is same as true/false and 1/0, 2 is toggle | |
param=CA will return only CA | |
param=CA-OFF will set CA to OFF | |
param=CA-ON will set CA to ON | |
combine settings with comma to read or set in single command | |
param=VA-OFF,VL-2 will turn off voice auto and set level to 2, returns OFF,2 | |
GLOBALPROFILE | Param is the profile you are selecting |
HEADPHONEGAIN | UP* to increase level, DOWN* to decrease level, or audio level |
HEADPHONEMUTE | 0 turn off, 1 turn on, other toggle setting |
METERINRX | Meter in RX - 0 turn off, 1 turn on, other toggle setting |
MIC | UP to set previous, DOWN to set next |
MICBIAS | Mic Bias - 0 turn off, 1 turn on, other toggle setting |
MICBOOST | Mic Boost - 0 turn off, 1 turn on, other toggle setting |
MICLEVEL | UP* to increase level, DOWN* to decrease level, or mic level |
MICPROFILE | Param is the profile you are selecting |
MON | TX Monitor - 0 turn off, 1 turn on, other toggle setting |
MONGAINTXCW | TX Monitor CW Gain - UP* to increase level, DOWN* to decrease level, or level |
MONPANTXCW | TX Monitor CW Pan - UP* to increase level, DOWN* to decrease level, or level |
MONGAINTXSB | TX Monitor SSB Gain - UP* to increase level, DOWN* to decrease level, or level |
MONPANTXSB | TX Monitor SSB Pan - UP* to increase level, DOWN* to decrease level, or level |
MOX | 0 turn off, 1 turn on, other toggle setting |
MUTE | 0 turn off, 1 turn on, other toggle setting |
MUTEALL | n/a |
PAN | CREATE add Panadapter, DELETE remove active slice Panadapter |
PROC | 0 turn off, 1 turn on, other toggle setting |
PROCLEVEL | UP increase proc, DOWN decrease proc, value of 0, 1 or 2 |
RFPOWER | UP to increase power, DOWN to decrease power, or power level |
SLICE | UP to previous slice, DOWN to next slice, CREATE to add slice, DELETE to remove slice |
SPOTS | Info, Clear, Remove and Trigger Spots |
param=info to list all spots | |
param=clear to clear all spots | |
param=remove,n where spot index n is removed | |
param=trigger,n where spot index n is triggered | |
TRACKA | Slice B tracks slice A Freq enabled; param = true / false |
TRACKREV | Track in reverse direction; param = true / false |
TUNE | 0 turn off, 1 turn on, other toggle setting |
TUNEPOWER | UP* to increase power, DOWN* to decrease power, or power level |
TXFILTER | Returns delta between High and Low |
TXFILTERLOW | UP* to increase offset, DOWN* to decrease offset |
TXFILTERHIGH | UP* to increase offset, DOWN* to decrease offset |
TXINHIBIT | 0 turn off, 1 turn on, other toggle setting |
TXPROFILE | Param is the profile you are selecting |
VOX | 0 turn off, 1 turn on, other toggle setting |
VOXLEVEL | UP* to increase, DOWN* do decrease, or level value |
VOXDELAY | UP* to increase, DOWN* do decrease, or delay value |
XVTRS | Transverter array of Index, Name elements |
-XX- | Invalid cmd |
Slice / Active Slice Commands
http://localhost:5025/ActiveSlice/?param=
To target specific slice letter use
http://localhost:5025/Slice//?param=
http://localhost:5025/ActiveSlice/?letter=¶m=
To target TX slice letter use
http://localhost:5025/Slice/TX/?param=
To target slice index use
http://localhost:5025/ActiveSlice/?index={0-7}¶m=
Slice cmd | val Parameter |
---|---|
INFO | returns slice information |
ACTIVE | return active state and 1 to set it active |
AGCMODE | DOWN to next mode |
AGCLEVEL | UP* to increase level, DOWN* to decrease level, or level value |
ANF | 0 turn off, 1 turn on, other toggle setting |
ANFLEVEL | UP* to increase level, DOWN* to decrease level, or level value |
APF | 0 turn off, 1 turn on, other toggle setting |
APFLEVEL | UP* to increase level, DOWN* to decrease level, or level value |
AUDIOGAIN | UP* to increase level, DOWN* to decrease level, or level value |
AUDIOPAN | UP* to increase level, DOWN* to decrease level, or level value |
BAND | band selections |
Set band values like 2200, 160, 40, 20, GEN, WWV | |
or XVTR0, XVTR1, XVTR2, etc. | |
CLOSE | 1 to Close Slice |
COPYFROM | Copy slice information from slice index 0-7 or letter A-H |
COPYTO | Copy slice information to slice index 0-7 or letter A-H |
DAX | 0 turn off, 1 - 8 DAX channel |
DIV | 0 turn off, 1 turn on, other toggle setting |
FILTER | UP to previous filter, DOWN to next filter, 0 - 9 to select filter |
FILTERLOW | UP* to increase offset, DOWN* to decrease offset |
FILTERHIGH | UP* to increase offset, DOWN* to decrease offset |
FREQ | UP moves FREQ up by STEP, DOWN moves FREQ down by STEP, other is MHz value |
Use 1 - 6 to format exponent length of Frequency; e.g. 2 results in 7.12 | |
FREQE | Frequency Entry; Param values are 0,1,2,3,4,5,6,7,8,9,., CLEAR or ENTER |
ENTER will set the Slice Frequency to accumulated value | |
LETTER | returns slice letter and index |
LOCK | 0 turn off, 1 turn on, other toggle setting |
MODE | UP to previous mode, DOWN to next mode, other MODE setting (eg. AM, LSB) |
MUTE | 0 turn off, 1 turn on, other toggle setting |
NR | 0 turn off, 1 turn on, other toggle setting |
NRLEVEL | UP* to increase level, DOWN* to decrease level, or level value |
NB | 0 turn off, 1 turn on, other toggle setting |
NBLEVEL | UP* to increase level, DOWN* to decrease level, or level value |
PAN | Panadapter settings |
CENTER center panadapter on slice | |
UP increase bandwidth, DOWN decrease bandwidth | |
SEGMENT zooms to band segment, BAND zooms to band | |
MIN zooms to min bandwidth, MAX zooms to maximum bandwidth | |
1 - 1000 sets bandwidth | |
PLAY | 0 turn off, 1 turn on, other toggle setting |
RECORD | 0 turn off, 1 turn on, other toggle setting |
RFGAIN | UP to increase gain, DOWN to decrease gain, or gain value |
RIT | 0 turn off, 1 turn on, other toggle setting |
RITFREQ | UP* to increase offset, DOWN* to decrease offset, or freq value |
RXANT | RX antenna selection or , NEXT selects next in list, PREV selects previous in list |
SPLIT | 1 will attempt to SPLIT slice. Will silently fail if no remaining slices for client. This is not a toggle. |
STEP | UP to increase step, DOWN to decrease step, or step value |
SCAN | start scan on scan bank |
Set scan bank number 1 - 20 | |
or 0 to get scanning bank number | |
SMUTE | 0 - 7 slice number to toggle mute setting |
SQUELCH | 0 turn off, 1 turn on, other toggle setting |
SQUELCHLEVEL | UP* to increase level, DOWN* to decrease level, or level value |
SWAP | 0 - 7 index or letter A-H letter to swap with active slice, if 2+ slices present use NEXT swap active slice with next one |
TX | 0 turn off, 1 turn on, other toggle setting |
TXANT | TX antenna selection or NEXT selects next in list, PREV selects previous in list |
WNB | 0 turn off, 1 turn on, other toggle setting |
WNBLEVEL | UP* to increase level, DOWN* to decrease level, or level value |
XIT | 0 turn off, 1 turn on, other toggle setting |
XITFREQ | UP* to increase offset, DOWN* to decrease offset, or freq value |
-XX- | Invalid cmd |
-- | Slice not found |
Radio Memory Commands
http://localhost:5025/RadioMem/?param=
RadioMem cmd | val Parameter |
---|---|
INFO | returns radio memory information |
no param returns array of all memory's properties | |
param=1 returns array of { "Index": 29, "Name": "7.149000 LSB", "Freq": 7.149, "Mode": "LSB" } | |
param=2 returns array of { "Index": 29, "Name": "7.149000 LSB" } | |
SELECT | sets active slice to radio memory by index; param = index |
DELETE | deletes radio memory by index; param = index |
SAVE | create new radio memory from slice index; param = 0 - 7 |
SPE Amplifier Slice Commands
http://localhost:5025/SPEAMP/?param=
SPEAMP cmd | val Parameter |
---|---|
INFO | returns SPE information |
OPEN | 1 to Open COM port |
OPER | 1 toggle Operate |
ANT | 1 switch Antenna |
CLOSE | 1 to Close COM port, DTR feature must be enabled |
INPUT | 1 switch Input |
POWER | 1 to change Power Level |
TUNE | 1 to initiate Tune |
BAND | reports Band |
AMPS | reports Amps |
MEMB | report Memory Bank |
MODEL | reports Model |
OUTPUT | report Output Power |
VOLTS | reports Volts |
SWR | reports Ant SWR |
SWRT | reports Tuner SWR |
RX | reports ON when in RX |
TX | reports ON when in TX |
-- | Amp not configured |
-XX- | Invalid cmd |
SteppIR Commands
http://localhost:5025/STEPPIR/?param=
SteppIR cmd | val Parameter |
---|---|
INFO | returns SteppIR information |
ANTSTATE | returns Antenna State hex code |
ANTSTATESTR | returns Antenna State code string |
AUTOTRACK | 0 turn off Autotrack, 1 turn on Autotrack |
BIDIR | 1 to set Bi-Directional for Beam, 3/4 for Vertical |
CALIBRATE | 1 to Calibrate |
DIR | returns the direction |
FOLLOWANT | 0 - 8 or TX or A - H to set follow ANT by Slice id, TX or letter A to H |
FORWARD | 1 to set Forward |
FREQ | returns the Freq |
FREQANT | sets the Antenna Freq in Manual sync mode, returns the Antenna Freq |
FREQE | Frequency Entry; Param values are 0,1,2,3,4,5,6,7,8,9,., CLEAR or ENTER |
ENTER will set the Antenna Frequency to accumulated value | |
MANUAL | 0 to manually sync, 1 to auto sync Freq with Antenna Freq, 2 toggles setting |
OPEN | 0 to Close, 1 to Open, 2 to Toggle Open/Close |
RETRACT | 1 to Retract |
REVERSE | 1 to set Reverse |
SYNC | 1 to set Slice Frequency to Antenna in Manual sync mode |
34 | 1 to set 3/4 in Vertical, Bi-Directional for Beam |
TXINHIBIT | returns Inhibit boolean |
Note:
TGXL Commands
http://localhost:5025/TGXL/?param=
TGXL cmd | val Parameter |
---|---|
INFO | returns TGXL information |
CONNECT | 1 to Connect to TGXL, 0 to Disconnect from TGXL, 2 to toggle connection |
DISCONNECT | Any value will disconnect from TGXL |
BYPASS | 1 to set Bypass, 0 to set Operate, 2 to toggle |
OPERATE | 1 to set Operate, 0 to set Bypass, 2 to toggle |
TUNE | Any value initiates Tune operation |
GPIO Commands
http://localhost:5025/GPIO/ - Read IO Pin Value
http://localhost:5025/GPIO//{0_or_1} - Write Output Pin Value
http://localhost:5025/GPIO/?param=
GPIO cmd | val Parameter |
---|---|
INFO | returns all configured pin values |
READ | returns values for list of comma separated pins |
eg. param=5,6,13,19 | |
WRITE | write values for list of comma separated pin,value sets |
eg. param=13,1,19,0 will set pin 13 high, pin 19 low |
JSON object returned
{
"pin": "13,19,26", // pin list
"val": "110", // binary list of values
"ival": 6 // decimal value for pin list
}
Meter information over WebSocket
http://localhost:5025/ws/meters
Json Meter Data returned
{
"station":"6600M",
"callsign":"W3II",
"nickname":"6600M",
"ipaddr":"192.168.1.202",
"meters":{
"+13.8A":"14.2",
"PATEMPC":"32.1",
"FWDPWR":"0.0",
"REVPWR":"0.0",
"SWR":"1.0",
"AMP PWR":"0",
"AMP ID":"0",
"AMP SWR":"1.1",
"AMP TEMPC":"30.2",
"AMP TEMPF":"86.3",
"PATEMPF":"89.8",
"MOX":"0"}
}
Json S-Meter Data returned
{
"machinename":"rpi4svr",
"callsign":"W3II",
"nickname":"6600M",
"ipaddr":"192.168.1.202",
"smeters":[ // 8 smeter objects for slice index 0 - 7
{ // slice 0
"letter":"A",
"client":"6600M",
"dbm":-67, // -150 dbm to 27 dbm
"sunit":"S9"
},
{ // slice 1
"letter":null, // this is the 2nd slice which is not present
"client":null,
"dbm":0,
"sunit":null
},
// ... remaining Slice 2-7, 6 slice slots follow ...
]
}
Slice information contains an INDEX property which can be used to index into the smeter array.
From a terminal window:
pi@raspberrypi:~ $ dmesg | grep ttyUSB
[142617.031424] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB0
Take note of the node numbers: In this case 1-1.4
pi@raspberrypi:~ $ udevadm info --name=/dev/ttyUSB0 --attribute-walk
...
looking at parent device '/devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.4':
KERNELS=="1-1.4"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{devspec}=="(null)"
ATTRS{quirks}=="0x0"
ATTRS{product}=="USB Serial Converter"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{devnum}=="20"
ATTRS{idProduct}=="6001"
ATTRS{speed}=="12"
ATTRS{ltm_capable}=="no"
ATTRS{bConfigurationValue}=="1"
ATTRS{maxchild}=="0"
ATTRS{devpath}=="1.4"
ATTRS{manufacturer}=="FTDI"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bNumInterfaces}==" 1"
ATTRS{busnum}=="1"
ATTRS{urbnum}=="143382"
ATTRS{bcdDevice}=="0600"
ATTRS{bMaxPacketSize0}=="8"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bMaxPower}=="44mA"
ATTRS{serial}=="FT8YXPRB"
ATTRS{bNumConfigurations}=="1"
ATTRS{tx_lanes}=="1"
ATTRS{configuration}==""
ATTRS{rx_lanes}=="1"
ATTRS{removable}=="unknown"
ATTRS{bmAttributes}=="a0"
ATTRS{version}==" 2.00"
ATTRS{bDeviceClass}=="00"
ATTRS{authorized}=="1"
ATTRS{idVendor}=="0403"
...
Look at the tree leaf matching the node name from the prior step. In this case ..../usb1/1-1/1-1.4 You have to look at a unique differentiator between the devices. In most cases you can use the idVendor field (0403 in this case) or the idProduct field (6001 in this case) as the differentiator between the two devices. In case the vendor ID is the same, you can use the serial number of the two devices.
pi@raspberrypi:~ $ sudo nano /etc/udev/rules.d/10-usb-serial.rules
Type the following in the nano editor and then save the file (ctrl-o) and (ctrl-x):
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FT8YXPRB", SYMLINK+="ttyUSB_SIR"
pi@raspberrypi:~ $ sudo udevadm trigger
pi@raspberrypi:~ $ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Aug 8 15:24 /dev/ttyUSB0
lrwxrwxrwx 1 root root 7 Aug 8 14:22 /dev/ttyUSB_SIR -> ttyUSB0
As you see we still have the existing USB0 device, but we also have a symbolic link to device that are match the correct hardware. These symbolic links will be created at each reboot or when the USB device is plugged into an USB port.
Copyright � MKCM Software, LLC 2014-2024