Merge pull request #423 from alanbjohnston/master-b-p

PacSat Mode
master-b
Alan Johnston 1 day ago committed by GitHub
commit 7c70d34d1d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

3
.gitignore vendored

@ -47,3 +47,6 @@ logt.txt
telem.txt.bk
failure_mode.txt
sim_mode_auto
direwolf-pacsatsim-tmp.conf
groundstation/direwolf-pacsat-tmp.conf
tlm.bin

@ -22,6 +22,7 @@ pcm.softvol {
pcm.shared_speaker {
type dmix
ipc_key 1024
ipc_perm 0666
slave {
pcm "hw:CARD=Device,DEV=0"
rate 48000
@ -35,6 +36,7 @@ pcm.shared_speaker {
pcm.shared_mic {
type dsnoop
ipc_key 2048
ipc_perm 0666
slave {
pcm "hw:CARD=Device,DEV=0"
# channels 1

@ -1,9 +1,17 @@
#!/bin/bash
echo -e "\nCommand and Control script for CubeSatSim v2.1\n"
echo -e "\nCommand and Control script for CubeSatSim v2.2\n"
sudo modprobe snd-aloop
sudo modprobe snd-aloop
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
MODE=$1
FILE=/home/pi/CubeSatSim/command_control
if [ -f "$FILE" ]; then
echo "Radio command and control is ON"
@ -58,11 +66,11 @@ if [[ $(arecord -l | grep "USB Audio Device") ]] && [ -f "$FILE" ]; then
echo "debug mode"
direwolf -c /home/pi/CubeSatSim/direwolf-cc.conf -t 0l | python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py d
direwolf -P+ -D1 -r 48000 -c /home/pi/CubeSatSim/direwolf-cc.conf -t 0l | /home/pi/venv/bin/python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py d
else
direwolf -c /home/pi/CubeSatSim/direwolf-cc.conf -t 0l | python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py
direwolf -P+ -D1 -r 48000 -c /home/pi/CubeSatSim/direwolf-cc.conf -t 0l | /home/pi/venv/bin/python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py
fi
else
@ -107,11 +115,11 @@ else
# echo "debug mode"
# direwolf -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf.conf -t 0l | python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py d
# direwolf -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf.conf -t 0l | /home/pi/venv/bin/python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py d
# else
# direwolf -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf.conf -t 0l | python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py
# direwolf -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf.conf -t 0l | /home/pi/venv/bin/python3 /home/pi/CubeSatSim/dtmf_aprs_cc.py
# fi
@ -124,17 +132,32 @@ else
fi
if [ "$1" = "d" ]; then
echo "debug mode"
python3 /home/pi/CubeSatSim/squelch_cc.py d
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
MODE=$1
if [ ! "$MODE" = "P" ] && [ ! "$MODE" = "P" ] ; then
if [ "$1" = "d" ]; then
echo "debug mode"
/home/pi/venv/bin/python3 /home/pi/CubeSatSim/squelch_cc.py d
else
/home/pi/venv/bin/python3 /home/pi/CubeSatSim/squelch_cc.py
fi
else
python3 /home/pi/CubeSatSim/squelch_cc.py
fi
echo "Not running Carrier (squelch) Command and Control since PacSat or PacSat Ground Station mode!"
sleep 60
fi
fi
sudo killall -9 direwolf &>/dev/null

191
config

@ -43,6 +43,9 @@ function transmit_command {
j)
number=7
;;
p)
number=8
;;
o)
number=10
;;
@ -92,7 +95,9 @@ function check_restart {
echo "$value" > /dev/null
set -- $value
if [ "$1" == "f" ] || [ "$1" == "b" ] || [ "$1" == "e" ] || [ "$1" == "j" ] ; then
if [ "$1" = "p" ] || [ "$1" = "P" ] ; then
reboot=1
elif [ "$1" == "f" ] || [ "$1" == "b" ] || [ "$1" == "e" ] || [ "$1" == "j" ] ; then
FILE=/home/pi/CubeSatSim/battery_saver
if [ -f "$FILE" ]; then
restart=1
@ -139,6 +144,7 @@ if [ "$1" = "" ]; then
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
MODE=$1
if [ "$1" = "a" ]; then
echo "Mode is APRS"
@ -162,6 +168,10 @@ if [ "$1" = "" ]; then
else
echo -n "APRS"
fi
elif [ "$1" = "p" ]; then
echo "Mode is Pacsat"
elif [ "$1" = "P" ]; then
echo "Mode is Pacsat Ground Station"
else
echo
fi
@ -270,8 +280,13 @@ if [ "$1" = "" ]; then
# cat /home/pi/CubeSatSim/command_tx
# echo
echo -n "Squelch level is: "
echo $6
# echo $MODE
if [ "$MODE" = "p" ] || [ "$MODE" = "P" ] ; then
echo "Squelch is off since PacSat or PacSat Ground Station mode"
else
echo -n "Squelch level is: "
echo $6
fi
# echo
FILE=/home/pi/CubeSatSim/command_control
@ -282,10 +297,18 @@ if [ "$1" = "" ]; then
if [ -f "$FILE" ]; then
echo "Radio DTMF/APRS command and control is ON"
else
echo "Radio carrier command and control is ON"
if [ "$MODE" = "p" ] || [ "$MODE" = "P" ] ; then
echo "Radio carrier command and control is off since PacSat or PacSat Ground Station mode"
else
echo "Radio carrier command and control is ON"
fi
fi
else
echo "Radio carrier command and control is ON"
if [ "$MODE" = "p" ] || [ "$MODE" = "P" ] ; then
echo "Radio carrier command and control is off since PacSat or PacSat Ground Station mode"
else
echo "Radio carrier command and control is ON"
fi
fi
else
echo "Radio command and control is OFF"
@ -315,6 +338,32 @@ if [ "$1" = "" ]; then
echo "Transmit beacon telemetry is ON"
fi
if [[ $(arecord -l | grep "USB Audio Device") ]] ; then
echo "USB Sound Card detected"
soundcard=1
else
echo "No USB Sound Card detected"
soundcard=0
fi
gpio -g mode 7 up
if [[ $(gpio -g read 7 | grep 0) ]] ; then
echo "FM TXC is present"
txc=1
else
echo "FM TXC not present"
txc=0
fi
timeout 1 rtl_test &> out.txt
if [[ $(grep "No supported" out.txt) ]] ; then
# echo "No RTL-SDR detected"
rtl=0
else
echo "RTL-SDR detected"
rtl=1
fi
echo
echo -e "Current sim.cfg configuration file:"
# echo
@ -383,7 +432,11 @@ elif [ "$1" = "-f" ]; then
echo "changing CubeSatSim to FSK mode"
sudo echo "f" > /home/pi/CubeSatSim/.mode
restart=1
if [ "$1" = "p" ] || [ "$1" = "P" ] ; then
reboot=1
else
restart=1
fi
fi
elif [ "$1" = "-b" ]; then
@ -400,7 +453,11 @@ elif [ "$1" = "-b" ]; then
echo "changing CubeSatSim to BPSK mode"
sudo echo "b" > /home/pi/CubeSatSim/.mode
restart=1
if [ "$1" = "p" ] || [ "$1" = "P" ] ; then
reboot=1
else
restart=1
fi
fi
elif [ "$1" = "-s" ]; then
@ -482,8 +539,10 @@ elif [ "$1" = "-c" ]; then
echo "$value" > /dev/null
set -- $value
oldcallsign="$1"
echo "Current value of CALLSIGN is"
echo $1
echo $oldcallsign
echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13}
@ -669,6 +728,7 @@ elif [ "$1" = "-C" ]; then
sudo systemctl stop cubesatsim
sudo systemctl stop transmit
sudo systemctl stop command
sudo systemctl stop pacsatsim
sudo mv -f /home/pi/CubeSatSim/telem.txt /home/pi/CubeSatSim/telem.txt.bk
@ -856,7 +916,7 @@ elif [ "$1" = "-R" ]; then
echo
echo "Current commands count is:"
cat /home/pi/CubeSatSim/commands_count.txt
cat /home/pi/CubeSatSim/command_count.txt
echo
echo "Do you want to reset the commands count to zero (y/n) "
@ -1119,8 +1179,9 @@ elif [ "$1" = "-o" ]; then
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
MODE=$1
if [ "$1" == "n" ]; then
if [ "$MODE" == "n" ]; then
transmit_command "o"
@ -1131,35 +1192,19 @@ elif [ "$1" = "-o" ]; then
FILE=/home/pi/CubeSatSim/beacon_off
if [ -f "$FILE" ]; then
echo "Transmit beacon telemetry is off"
# echo
# echo "Do you want to turn beacon telemetry ON (y/n) "
# read reset
reset="y"
echo "Transmit beacon telemetry is off"
echo
if [ "$reset" = "y" ] || [ "$reset" = "yes" ] ; then
echo "Turn beacon telemetry ON"
sudo rm /home/pi/CubeSatSim/beacon_off > /dev/null 2>&1
sudo systemctl restart transmit
# restart=1
fi
echo "Turn beacon telemetry ON"
sudo rm /home/pi/CubeSatSim/beacon_off > /dev/null 2>&1
sudo systemctl restart transmit
else
echo "Transmit beacon telemetry is on"
# echo
# echo "Do you want to turn beacon telemetry OFF (y/n) "
# read reset
reset="y"
echo "Transmit beacon telemetry is on"
echo
if [ "$reset" = "y" ] || [ "$reset" = "yes" ] ; then
echo "Turn beacon telemetry OFF"
touch /home/pi/CubeSatSim/beacon_off
sudo systemctl restart transmit
# restart=1
fi
echo "Turn beacon telemetry OFF"
touch /home/pi/CubeSatSim/beacon_off
sudo systemctl restart transmit
fi
sleep 3
fi
@ -1239,7 +1284,11 @@ elif [ "$1" = "-e" ]; then
echo "changing CubeSatSim to Repeater mode"
sudo echo "e" > /home/pi/CubeSatSim/.mode
restart=1
if [ "$1" = "p" ] || [ "$1" = "P" ] ; then
reboot=1
else
restart=1
fi
fi
elif [ "$1" = "-n" ]; then
@ -1262,6 +1311,10 @@ elif [ "$1" = "-n" ]; then
echo "Switching to mode "$new
sudo echo $new > /home/pi/CubeSatSim/.mode
restart=1
elif [ "$1" = "p" ] || [ "$1" = "P" ] ; then
echo "Switching to PacSat mode"
sudo echo $new > /home/pi/CubeSatSim/.mode
reboot=1
else
echo "Switching to BPSK mode"
sudo echo "b" > /home/pi/CubeSatSim/.mode
@ -1314,7 +1367,7 @@ elif [ "$1" = "-A" ]; then
sudo systemctl stop cubesatsim
sudo systemctl stop transmit
sudo python3 -u /home/pi/CubeSatSim/transmit.py x > /dev/null 2>&1 & # Force APRS mode
# sudo python3 -u /home/pi/CubeSatSim/transmit.py x > /dev/null 2>&1 & # Force APRS mode
fi
sudo systemctl stop command
@ -1323,7 +1376,7 @@ elif [ "$1" = "-A" ]; then
while [ "$MODE" != "x" ];
do
echo "Enter the mode to change: a=APRS, f=FSK, b=BPSK, s=SSTV, m=CW, e=Repeater, j=FUNcube, o=Beacon on/off x=Exit this mode"
echo "Enter the mode to change: a=APRS, f=FSK, b=BPSK, s=SSTV, m=CW, e=Repeater, j=FUNcube, p=PacSat, o=Beacon on/off x=Exit this mode"
read MODE
if [ "$MODE" != "x" ]; then
@ -1747,6 +1800,61 @@ reboot=1
fi
elif [ "$1" = "-G" ]; then
echo "Changing to PacSatSim mode"
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
# echo "changing CubeSatSim to Pacsat mode"
reboot=1
sudo echo "p" > /home/pi/CubeSatSim/.mode
# if [ "$1" == "f" ] || [ "$1" == "b" ] || [ "$1" == "e" ] ; then
# FILE=/home/pi/CubeSatSim/battery_saver
# if [ -f "$FILE" ]; then
# restart=1
# else
# reboot=1
# fi
# else
# restart=1
# fi
elif [ "$1" = "-I" ]; then
echo "Changing to PacSat Ground Station mode"
echo
echo "Run the Pacsat Ground Station in the Desktop"
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
# echo "changing CubeSatSim to Pacsat mode"
reboot=1
sudo echo "P" > /home/pi/CubeSatSim/.mode
# if [ "$1" == "f" ] || [ "$1" == "b" ] || [ "$1" == "e" ] ; then
# FILE=/home/pi/CubeSatSim/battery_saver
# if [ -f "$FILE" ]; then
# restart=1
# else
# reboot=1
# fi
# else
# restart=1
# fi
elif [ "$1" = "-k" ]; then
echo
echo "Reset PacSatSim configuration"
echo
sudo systemctl stop pacsatsim &>/dev/null
sudo rm -r /home/pi/PacSat
reboot=1
elif [ "$1" = "-h" ]; then
echo "config OPTION"
@ -1762,13 +1870,16 @@ elif [ "$1" = "-h" ]; then
echo " -j Change to FUNcube mode"
echo " -n Change to Transmit Commands mode"
echo " -e Change to Repeater mode"
echo " -j Change to FUNcube mode"
echo " -G Change to PacSatSim mode"
echo " -I Change to PacSat Ground Station mode"
echo " -i Restart CubeSatsim software"
echo " -c Change the CALLSIGN in the configuration file sim.cfg"
echo " -t Change the Simulated Telemetry setting in sim.cfg"
echo " -r Change the Resets Count in the configuration file sim.cfg"
echo " -l Change the Latitude and Longitude in the configuration file sim.cfg"
echo " -S Scan both I2C buses on the Raspberry Pi"
echo " -C Clear logs"
echo " -C Clear logs and reboot"
echo " -T Change command and control state"
echo " -d Change command and control Direwolf state"
echo " -R Change the Commands Count in the file command_count.txt"
@ -1779,7 +1890,7 @@ elif [ "$1" = "-h" ]; then
echo " -H Change the Balloon (HAB) mode"
echo " -p Display payload sensor data for 3 seconds"
echo " -v Display voltage and current data"
echo " -P Change the PL (Private Line) CTCSS/CDCSS codes for RX and TX"
echo " -P Change the PL (Private Line) CTCSS/CDCSS codes for FM RX and TX"
echo " -A Transmit APRS control packets to control another CubeSatSim"
echo " -D Change Transmit Commands state APRS or DTMF"
echo " -o Change telemetry beacon transmit state"
@ -1789,6 +1900,8 @@ elif [ "$1" = "-h" ]; then
echo " -U Change the random failure mode setting"
echo " -N Set next mode or failure"
echo " -u Change gpsd state"
echo " -k Reset the PacSatSim Configuration"
echo
exit

@ -1,2 +1,9 @@
ADEVICE shared_mic hw:CARD=Loopback,DEV=1
DTMF
MYCALL AMSAT
CHANNEL 0
MODEM 1200
FULLDUP OFF
TXDELAY 0
AGWPORT 8200
KISSPORT 8201

@ -0,0 +1,9 @@
CHANNEL 0
MODEM 1200
DWAIT 0
SLOTTIME 10
PERSIST 63
TXDELAY 1000
TXTAIL 10
FULLDUP OFF
DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE

@ -1,4 +1,5 @@
ADEVICE hw:CARD=Loopback,DEV=0 hw:CARD=Headphones,DEV=0
PTT GPIO 20
MYCALL AMSAT
CHANNEL 0
MODEM 1200

@ -1 +0,0 @@
ADEVICE plughw:CARD=Loopback,DEV=1 plughw:CARD=Loopback,DEV=0

@ -1,7 +1,5 @@
import sys
from os import system
# import RPi.GPIO as GPIO
# from RPi.GPIO import output
from time import sleep
import logging
logging.basicConfig(format='%(message)s')
@ -10,10 +8,8 @@ logging.basicConfig(format='%(message)s')
def blink(times):
for i in range(times):
system("gpio write 27 0")
# GPIO.output(27, 0)
sleep(0.1)
system("gpio write 27 1")
# GPIO.output(27, 1)
sleep(0.1)
if __name__ == "__main__":
@ -26,153 +22,167 @@ if __name__ == "__main__":
# print("There are arguments!")
if ('d' == sys.argv[1]):
debug_mode = True
for line in sys.stdin:
# if (debug_mode):
print(line, end =" ")
logging.warning(line)
# if '^c' == line.rstrip():
# break
if ((line.find("MODE=a")) > 0):
system("echo '\nAPRS Mode!!\n'")
mode = 'a'
change_mode = True
if ((line.find("DTMF>APDW15:t1#")) > 0):
system("echo '\nAPRS Mode!!\n'")
mode = 'a'
change_mode = True
if ((line.find("MODE=f")) > 0):
system("echo '\nFSK Mode!!\n'")
mode = 'f'
change_mode = True
if ((line.find("DTMF>APDW15:t2#")) > 0):
system("echo '\nFSK Mode!!\n'")
mode = 'f'
change_mode = True
if ((line.find("MODE=b")) > 0):
system("echo '\nBPSK Mode!!\n'")
mode = 'b'
change_mode = True
if ((line.find("DTMF>APDW15:t3#")) > 0):
system("echo '\nBPSK Mode!!\n'")
mode = 'b'
change_mode = True
if ((line.find("MODE=s")) > 0):
system("echo '\nSSTV Mode!!\n'")
mode = 's'
change_mode = True
if ((line.find("DTMF>APDW15:t4#")) > 0):
system("echo '\nSSTV Mode!!\n'")
mode = 's'
change_mode = True
if ((line.find("MODE=m")) > 0):
system("echo '\nCW Mode!!\n'")
mode = 'm'
change_mode = True
if ((line.find("DTMF>APDW15:t5#")) > 0):
system("echo '\nCW Mode!!\n'")
mode = 'm'
change_mode = True
if ((line.find("MODE=e")) > 0):
system("echo '\nRepeater Mode!!\n'")
mode = 'e'
change_mode = True
if ((line.find("DTMF>APDW15:t6#")) > 0):
system("echo '\nRepeater Mode!!\n'")
mode = 'e'
change_mode = True
if ((line.find("MODE=j")) > 0):
system("echo '\nFUNcube Mode!!\n'")
mode = 'j'
change_mode = True
if ((line.find("DTMF>APDW15:t7#")) > 0):
system("echo '\nFUNcube Mode!!\n'")
mode = 'j'
change_mode = True
if ((line.find("MODE=n")) > 0):
system("echo '\nTransmit Commands Mode!!\n'")
mode = 'n'
change_mode = True
if ((line.find("DTMF>APDW15:t11#")) > 0):
system("echo '\nTransmit Commands Mode!!\n'")
mode = 'n'
change_mode = True
if ((line.find("MODE=o")) > 0):
counter = (counter + 1) % 2 # Direwolf prints it twice, only do once
if (counter == 1):
system("echo '\nBeacon Mode toggle!!\n'")
mode = 'o'
change_mode = True
counter = 1
if ((line.find("DTMF>APDW15:t10#")) > 0):
system("echo '\nBeacon Mode toggle!!\n'")
mode = 'o'
change_mode = True
# if ((debug_mode == False) and (change_mode == True) and (counter == 1): # skip every other APRS command since Direwolf prints them twice
if (debug_mode == False) and (change_mode == True): # skip every other APRS command since Direwolf prints them twice
if (mode == 'f'):
blink(2)
sleep(1)
elif (mode == 'b'):
blink(3)
sleep(1)
elif (mode == 's'):
blink(4)
sleep(1)
while True:
try:
for line in sys.stdin:
# if (debug_mode):
print(line, end =" ")
logging.warning(line)
# if '^c' == line.rstrip():
# break
elif (mode == 'm'):
blink(5)
sleep(1)
if ((line.find("MODE=a")) > 0):
system("echo '\nAPRS Mode!!\n'")
mode = 'a'
change_mode = True
elif ((line.find(":t1#")) > 0):
system("echo '\nAPRS Mode!!\n'")
mode = 'a'
change_mode = True
elif ((line.find("MODE=f")) > 0):
system("echo '\nFSK Mode!!\n'")
mode = 'f'
change_mode = True
elif ((line.find(":t2#")) > 0):
system("echo '\nFSK Mode!!\n'")
mode = 'f'
change_mode = True
elif ((line.find("MODE=b")) > 0):
system("echo '\nBPSK Mode!!\n'")
mode = 'b'
change_mode = True
elif ((line.find(":t3#")) > 0):
system("echo '\nBPSK Mode!!\n'")
mode = 'b'
change_mode = True
elif ((line.find("MODE=s")) > 0):
system("echo '\nSSTV Mode!!\n'")
mode = 's'
change_mode = True
elif ((line.find(":t4#")) > 0):
system("echo '\nSSTV Mode!!\n'")
mode = 's'
change_mode = True
elif ((line.find("MODE=m")) > 0):
system("echo '\nCW Mode!!\n'")
mode = 'm'
change_mode = True
elif ((line.find(":t5#")) > 0):
system("echo '\nCW Mode!!\n'")
mode = 'm'
change_mode = True
elif ((line.find("MODE=e")) > 0):
system("echo '\nRepeater Mode!!\n'")
mode = 'e'
change_mode = True
elif ((line.find(":t6#")) > 0):
system("echo '\nFUNcube Mode!!\n'")
mode = 'j'
change_mode = True
elif ((line.find("MODE=G")) > 0):
system("echo '\nPacSatSim Mode!!\n'")
mode = 'p'
change_mode = True
elif ((line.find(":t8#")) > 0):
system("echo '\nPacSatSim Mode!!\n'")
mode = 'p'
change_mode = True
elif ((line.find("MODE=n")) > 0):
system("echo '\nTransmit Commands Mode!!\n'")
mode = 'n'
change_mode = True
elif ((line.find(":t11#")) > 0):
system("echo '\nTransmit Commands Mode!!\n'")
mode = 'n'
change_mode = True
elif (mode == 'e'):
blink(6)
sleep(1)
elif (mode == 'j'):
blink(7)
sleep(1)
elif (mode == 'a'):
mode = 'a'
blink(1)
sleep(1)
try:
file = open("/home/pi/CubeSatSim/command_count.txt", "r")
string = file.read()
file.close()
command_count = int(string)
command_count += 1
filec = open("/home/pi/CubeSatSim/command_count.txt", "w")
command_count_string = str(command_count)
print(command_count_string)
string = filec.write(command_count_string)
filec.close()
except:
print("Can't write command_count file!")
print("Command_count: ")
print(command_count)
# GPIO.output(txLed, 0)
# GPIO.output(powerPin, 0)
system("gpio write 27 1")
system("gpio write 0 0")
system("gpio write 2 0")
elif ((line.find("MODE=o")) > 0):
system("echo '\nBeacon Mode toggle!!\n'")
mode = 'o'
change_mode = True
# counter = (counter + 1) % 2
elif ((line.find(":t10#")) > 0):
system("echo '\nBeacon Mode toggle!!\n'")
mode = 'o'
change_mode = True
if (debug_mode == False) and (change_mode == True) and (counter == 1): # skip every other APRS command since Direwolf prints them twice
system("sudo systemctl stop transmit")
# system("sudo systemctl stop cubesatsim")
print("\n/home/pi/CubeSatSim/config -" + mode)
system("/home/pi/CubeSatSim/config -" + mode)
if (mode == 'f'):
blink(2)
sleep(1)
elif (mode == 'b'):
blink(3)
sleep(1)
elif (mode == 's'):
blink(4)
sleep(1)
elif (mode == 'm'):
blink(5)
sleep(1)
elif (mode == 'e'):
blink(6)
sleep(1)
elif (mode == 'j'):
blink(7)
sleep(1)
elif (mode == 'p'):
blink(8)
sleep(1)
elif (mode == 'a'):
blink(1)
sleep(1)
try:
file = open("/home/pi/CubeSatSim/command_count.txt", "r")
string = file.read()
file.close()
command_count = int(string)
command_count += 1
filec = open("/home/pi/CubeSatSim/command_count.txt", "w")
command_count_string = str(command_count)
print(command_count_string)
string = filec.write(command_count_string)
filec.close()
except:
print("Can't write command_count file!")
print("Command_count: ")
print(command_count)
system("gpio write " + str(txLed) + " 0")
system("gpio write " + str(powerPin) + " 0")
system("sudo systemctl stop transmit")
# system("sudo systemctl stop cubesatsim")
print("\n/home/pi/CubeSatSim/config -" + mode)
system("/home/pi/CubeSatSim/config -" + mode)
change_mode = False
except:
print("Error reading line (probably due to UTF-8 issue)")
change_mode = False
print("Waiting 5 seconds to allow unplug and plug of soundcard")
sleep(5)
print("Done")

@ -0,0 +1,10 @@
[Desktop Entry]
Type=Application
Exec=/home/pi/CubeSatSim/groundstation/sdrpp.sh
Name=SDRpp
Comment=SDRpp
Icon=/home/pi/Icons/sdrpp.png
Path=/home/pi
Terminal=true
Categories=HamRadio
Keywords=Ham Radio;SDR

@ -2,7 +2,7 @@
Name=APRS Decode using Direwolf
GenericName=Decodes APRS using rtl_fm and Direwolf
Comment=APRS signals
Exec=/home/pi/CubeSatSim/groundstation/aprs.sh
Exec=/usr/bin/x-terminal-emulator --geometry=120x40 -e "/home/pi/CubeSatSim/groundstation/packet.sh"
Icon=/home/pi/Icons/aprs.png
Terminal=true
Type=Application

@ -3,12 +3,14 @@
sudo modprobe snd-aloop
sudo systemctl stop openwebrx
sudo systemctl stop openwebrx &>/dev/null
sudo systemctl stop rtl_tcp
sudo systemctl stop rtl_tcp &>/dev/null
pkill -o chromium &>/dev/null
sudo killall -9 sdrpp &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
sudo killall -9 direwolf &>/dev/null
@ -78,7 +80,7 @@ echo -e "Auto decoding APRS packets on $frequency Hz"
#sudo rtl_fm -f 144.39M -s 22050 -g 48 - | multimon-ng -a AFSK1200 -A -t raw -
direwolf -r 48000 -t 0 &
direwolf -c /home/pi/CubeSatSim/groundstation/direwolf.conf -r 48000 -t 0 &
sleep 5
@ -87,6 +89,7 @@ echo "$value" > /dev/null
set -- $value
#rtl_fm -M fm -f 144.39M -s 48k | aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1
rtl_fm -M fm -f $frequency -s 48k | tee >(aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1) | aplay -D hw:0,0 -r 48000 -t raw -f S16_LE -c 1
#rtl_fm -M fm -f $frequency -s 48k | tee >(aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1) | aplay -D hw:0,0 -r 48000 -t raw -f S16_LE -c 1
rtl_fm -M fm -f $frequency -s 48k | aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1
sleep 5

@ -2,4 +2,4 @@
[Desktop Entry]
Type=Application
Name=Chromium with WebSDR
Exec=chromium-browser --check-for-update-interval=1 --simulate-critical-update --noerrdialogs --disable-infobars http://127.0.0.1:8073
Exec=chromium-browser --check-for-update-interval=1 --simulate-critical-update --noerrdialogs --disable-infobars --app=http://localhost:8073

@ -1,137 +1,57 @@
[
{
"name": "ISS APRS",
"frequency": 145825000,
"modulation": "nfm"
},
{
"name": "ISS SSTV/Voice",
"frequency": 145800000,
"modulation": "nfm"
},
{
"name": "ARISS Repeater Downlink",
"frequency": 437800000,
"modulation": "nfm"
},
{
"name": "AO-27",
"frequency": 436795000,
"modulation": "nfm"
},
{
"name": "AO-73",
"frequency": 145815000,
"modulation": "usb"
},
{
"name": "Fox-1B AO-91",
"frequency": 145960000,
"modulation": "nfm"
},
{
"name": "Fox-1D AO-92",
"frequency": 145880000,
"modulation": "nfm"
},
{
"name": "HuskySat-1 HO-107",
"frequency": 435800000,
"modulation": "usb"
},
{
"name": "Fox-1E",
"frequency": 435750000,
"modulation": "usb"
},
{
"name": "MAX VALIER",
"frequency": 145860000,
"modulation": "usb"
},
{
"name": "NOAA WX Radio 1",
"frequency": 162400000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 2",
"frequency": 162425000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 3",
"frequency": 162450000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 4",
"frequency": 162475000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 5",
"frequency": 162500000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 6",
"frequency": 162525000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 7",
"frequency": 162550000,
"modulation": "nfm"
},
{
"name": "CAS-4A",
"frequency": 145855000,
"modulation": "usb"
},
{
"name": "CAS-4B",
"frequency": 145910000,
"modulation": "usb"
},
{
"name": "XW-2A",
"frequency": 145660000,
"modulation": "usb"
},
{
"name": "XW-2B",
"frequency": 145725000,
"modulation": "usb"
},
{
"name": "XW-2C",
"frequency": 145790000,
"modulation": "usb"
},
{
"name": "XW-2F",
"frequency": 145975000,
"modulation": "usb"
},
{
"name": "NOAA-19",
"frequency": 137100000,
"modulation": "nfm"
},
{
"name": "NOAA-18",
"frequency": 137912500,
"modulation": "nfm"
},
{
"name": "NOAA-15",
"frequency": 137620000,
"modulation": "nfm"
},
{
"name": "CubeSatSim",
"frequency": 434900000,
"modulation": "packet"
}
{
"name": "NOAA WX Radio 1",
"frequency": 162400000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 2",
"frequency": 162425000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 3",
"frequency": 162450000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 4",
"frequency": 162475000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 5",
"frequency": 162500000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 6",
"frequency": 162525000,
"modulation": "nfm"
},
{
"name": "NOAA WX Radio 7",
"frequency": 162550000,
"modulation": "nfm"
},
{
"name": "CubeSatSim",
"frequency": 434900000,
"modulation": "packet"
},
{
"name": "ISS SSTV/Voice",
"frequency": 145800000,
"modulation": "nfm"
},
{
"name": "ISS APRS",
"frequency": 145825000,
"modulation": "packet"
},
{
"name": "ISS Voice Repeater",
"frequency": 437800000,
"modulation": "nfm"
}
]

@ -3,7 +3,7 @@ Type=Application
Exec=/home/pi/CubeSatSim/groundstation/cubicsdr.sh
Name=SDR FM Broadcast
Comment=CubicSDR FM Broadcast
Icon=/home/pi/Downloads/cubicsdr.png
Icon=/home/pi/Icons/cubicsdr.png
Path=/home/pi
Terminal=true
Categories=HamRadio

@ -9,19 +9,21 @@ echo "Note: Select Generic RTL2832 device then click Start to begin"
echo
sudo systemctl stop openwebrx
sudo systemctl stop openwebrx &>/dev/null
sudo killall -9 java &>/dev/null
sudo systemctl stop rtl_tcp
sudo systemctl stop rtl_tcp &>/dev/null
pkill -o chromium &>/dev/null
sudo killall -9 sdrpp &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
sudo killall -9 direwolf &>/dev/null
sudo killall -9 aplay &>/dev/null
#sudo killall -9 aplay &>/dev/null
sudo killall -9 qsstv &>/dev/null
@ -39,11 +41,28 @@ sudo killall -9 sdrpp &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
sudo killall -9 rtl_fm &>/dev/null
zenity --info --width=650 --height=140 --title="Instructions" --text="When CubicSDR opens, select <i>Generic RTL2832U</i> device then click <b>Start</b> to begin.\n\nThen click on a signal in the watefall to listen." &
sleep 5
setsid CubicSDR
sleep 10
#$SHELL
#sudo kill `ps -aux | grep sstv_decode_prompt| grep -v grep | awk '{ print $2 }'` &>/dev/null && killall inotifywait &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
zenity --info --width=650 --height=140 --title="Instructions" --text="When CubicSDR opens, select <i>Generic RTL2832U</i> device then click <b>Start</b> to begin.\n\nThen click on a signal in the watefall to listen." &
sleep 5

@ -1 +1 @@
ADEVICE plughw:CARD=Loopback,DEV=1 plughw:CARD=b1,DEV=0
ADEVICE plughw:CARD=Loopback,DEV=1 default

@ -0,0 +1,9 @@
CHANNEL 0
MODEM 1200
KISSPORT 8100
AGWPORT 8002
DWAIT 20
SLOTTIME 300
PERSIST 63
TXDELAY 1000
FULLDUP OFF

@ -2,7 +2,7 @@
Type=Application
Exec=/home/pi/CubeSatSim/groundstation/fox-download.sh
Name=FoxTelem Download
Comment=FIAB-v3
Comment=FIAB-v4
Icon=/home/pi/Icons/FoxTelemDownload.png
Path=/home/pi
Terminal=true

@ -2,8 +2,8 @@
Type=Application
Exec=/home/pi/CubeSatSim/groundstation/fox-profile.sh
Name=Change FoxTelem Profile
Comment=FIAB-v3
Icon=/home/pi/Downloads/foxtelem.png
Comment=FIAB-v4
Icon=/home/pi/Icons/foxtelem.png
Path=/home/pi
Terminal=true
Categories=HamRadio

@ -5,6 +5,8 @@ echo "Startup script to run FoxTelem for FIAB v4"
echo
source /home/pi/venv/bin/activate
sudo killall -9 FoxTelem &>/dev/null
sudo killall -9 zenity &>/dev/null
@ -12,7 +14,7 @@ sudo killall -9 zenity &>/dev/null
FILE=/home/pi/FoxTelemetryData/.foxprofile
if [ ! -f "$FILE" ]; then
profile=$(zenity --text="Choose your default FoxTelem profile:" --list 2>/dev/null --width=410 --height=120 --title="Set FoxTelem Profile" --column="Profile" --column="Receive and decode telemetry from" Fox-in-a-Box "AMSAT Fox satellites" "CubeSatSim" "AMSAT CubeSat Simulator")
profile=$(zenity --text="Choose your default FoxTelem profile:" --list 2>/dev/null --width=410 --height=120 --title="Set FoxTelem Profile" --column="Profile" --column="Receive and decode telemetry from" Fox-in-a-Box "AMSAT Satellites" "CubeSatSim" "AMSAT CubeSat Simulator")
echo $profile

@ -5,12 +5,14 @@ echo "Script to run FoxTelem for ARISS Radio Pi"
echo
sudo systemctl stop openwebrx
sudo systemctl stop openwebrx &>/dev/null
sudo systemctl stop rtl_tcp
sudo systemctl stop rtl_tcp &>/dev/null
pkill -o chromium &>/dev/null
sudo killall -9 sdrpp &>/dev/null
sudo killall -9 rtl_tcp &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
@ -23,12 +25,15 @@ sudo killall -9 sdrpp &>/dev/null
sudo killall -9 direwolf &>/dev/null
sudo killall -9 aplay &>/dev/null
#sudo killall -9 aplay &>/dev/null
sudo killall -9 qsstv &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
sudo killall -9 rtl_fm &>/dev/null
sleep 5

@ -2,8 +2,8 @@
Type=Application
Exec=/home/pi/CubeSatSim/groundstation/fox-run.sh
Name=FoxTelem
Comment=FIAB-v3
Icon=/home/pi/Downloads/foxtelem.png
Comment=FIAB-v4
Icon=/home/pi/Icons/foxtelem.png
Path=/home/pi
Terminal=true
Categories=HamRadio

@ -3,7 +3,7 @@ Type=Application
Exec=/usr/bin/gpredict
Name=Gpredict
Comment=ISS and Satellite Tracking for ARISS Radio Pi
Icon=/home/pi/Downloads/gpredict.png
Icon=/home/pi/Icons/gpredict.png
Path=/home/pi
Terminal=false
Categories=HamRadio

@ -118,6 +118,16 @@ if (latitude != 0) and (longitude != 0):
system(longSedStr)
print("\nKLAtracker configuration updated with your latitude and longitude")
latSedStr = 'sed -i "s/latitude=.*/latitude=' + str(latitude) + '/g" /home/pi/PacSatGround/PacSatGround.properties'
#print (latSedStr)
system(latSedStr)
longSedStr = 'sed -i "s/longitude=.*/longitude=' + str(longitude) + '/g" /home/pi/PacSatGround/PacSatGround.properties'
#print (longSedStr)
system(longSedStr)
print("\nPacsat configuration updated with your latitude and longitude")
receiver_gpsSedStr = 'sudo sed -i "s/ ' + dquote + 'lat' + dquote + ': .*/ ' + dquote + 'lat' + dquote + ': ' + str(latitude) + ',/g" /var/lib/openwebrx/settings.json'
#print (receiver_gpsSedStr)

@ -12,4 +12,3 @@ python3 /home/pi/CubeSatSim/groundstation/loc-foxtelem.py
#/usr/bin/gpredict
nohup /usr/bin/gpredict </dev/null >/dev/null 2>&1 &

@ -14,6 +14,8 @@ pkill -o chromium &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
sudo killall -9 sdrpp &>/dev/null
sudo killall -9 direwolf &>/dev/null
sudo killall -9 aplay &>/dev/null
@ -166,5 +168,4 @@ rtl_fm -M fm -f $frequency -s 48k | tee >(aplay -D hw:${2:0:1},0,0 -r 48000 -t r
rtl_fm -M fm -f $frequency -s 48k | aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1
sleep 5

@ -0,0 +1,206 @@
#!/bin/bash
# script to run FoxTelem
echo "Script to configure the PacSat Ground Station for FIAB v4"
echo
#source /home/pi/venv/bin/activate
sudo killall -9 java &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo killall -9 direwolf &>/dev/null
#FILE=/home/pi/.pacsatprofile
#if [ ! -f "$FILE" ]; then
# profile=$(zenity --text="Choice:" --list 2>/dev/null --width=410 --height=120 --title="PacSat Ground Station Choice" --column="Choice" --column="Result" "PacSat" "Receive from CubeSatSim PacSatSim" "Configure" "Configure PacSat Ground Station" "Loopback" "Run a Locally Simulated PacSat")
# echo $profile
echo "Here are the PacSat configuration choices:"
echo
echo " 1. PacSat Ground Station Configuration"
echo
echo " 2. PacSat Ground Station Simulation Configuration"
echo
echo " 3. Set Frequencies"
echo
echo " 4. Reset PacSat Satellite"
echo
echo "Which do you choose? Enter 1 - 4"
echo
read -r ANS
if [ -z "$ANS" ]; then
echo "No choice made. Exiting."
sleep 3
exit
fi
if [ "$ANS" = "1" ] || [ "$ANS" = "2" ] ; then
if [ "$ANS" = "1" ] ; then
echo "Here are your PacSat Ground Station Configuration choices:"
else
echo "Here are your PacSat Ground Station Simulation Configuration choices:"
fi
echo
echo " 1. PacSat Ground Station Callsign"
echo
echo " 2. Set Remote PacSat Satellite Callsign in Ground Station configuration"
echo
echo " 3. Reset PacSat Ground Station Configuration"
echo
read -r CH
if [ -z "$CH" ]; then
echo "No choice made. Exiting."
sleep 3
exit
fi
if [ "$CH" = "1" ] ; then
echo
if [ "$ANS" = "1" ] ; then
oldcallsign=$(grep -oP '(?<=callsign=).*$' /home/pi/PacSatGround/PacSatGround.properties)
else
oldcallsign=$(grep -oP '(?<=callsign=).*$' /home/pi/PacSatGroundLoop/PacSatGround.properties)
fi
echo "Callsign in PacSatGround.properties is "
echo $oldcallsign
echo "Enter new callsign in all capitals: "
echo
read callsign
if [ -z $callsign ] ; then
callsign="$1"
echo "Keeping value of" $oldcallsign
else
echo "Configured callsign is "
echo $callsign
if [ ! "$callsign" = "$oldcallsign" ] ; then
if [ "$ANS" = "1" ] ; then
sudo sed -i "s/callsign=$oldcallsign/callsign=$callsign/g" /home/pi/PacSatGround/PacSatGround.properties
cat /home/pi/PacSatGround/PacSatGround.properties
else
sudo sed -i "s/callsign=$oldcallsign/callsign=$callsign/g" /home/pi/PacSatGroundLoop/PacSatGround.properties
cat /home/pi/PacSatGroundLoop/PacSatGround.properties
fi
fi
fi
elif [ "$CH" = "2" ] ; then
echo "You have chosen to set the remote CubeSatSim PacSat Satellite callsign in ground station configuration"
echo
PROPERTIES=/home/pi/PacSatGround/spacecraft/PacSatSim.properties
PROPERTIES_L=/home/pi/PacSatGroundLoop/spacecraft/PacSatSim.properties
if [ "$ANS" = "1" ] ; then
oldcallsign=$(grep -oP '(?<=bbsCallsign=).*(?=-)' $PROPERTIES )
else
oldcallsign=$(grep -oP '(?<=bbsCallsign=).*(?=-)' $PROPERTIES_L )
fi
echo "Current value of remote PacSat callsign is"
echo $oldcallsign
echo
echo "Enter new callsign in all capitals: "
echo
read callsign
if [ -z $callsign ] ; then
callsign="$1"
echo "Keeping value of" $oldcallsign
else
if [ "$ANS" = "1" ] ; then
sudo sed -i "s/$oldcallsign/$callsign/g" $PROPERTIES
else
sudo sed -i "s/$oldcallsign/$callsign/g" $PROPERTIES_L
fi
echo
echo "Changing callsign to "
echo $callsign
echo
echo "You will see the change next time you run the PacSat Ground Station"
echo "You can close this window"
fi
elif [ "$CH" = "3" ] ; then
echo "You have chosen to reset the PacSat Ground Station Configuration"
echo
# echo "Next time you run the Ground Station you will need to Add the PacSatSim spacecraft"
# echo
if [ "$ANS" = "1" ] ; then
sudo rm -r /home/pi/PacSatGround
# cd
# sudo rm PacSatGround.zip
# wget https://github.com/alanbjohnston/CubeSatSim/raw/refs/heads/master-b-p-s/spacecraft/PacSatGround_0.46o/PacSatGround.zip
# unzip PacSatGround.zip -d PacSatGround
# sudo rm PacSatGround.zip
else
sudo rm -r /home/pi/PacSatGroundLoop
# cd
# sudo rm PacSatGround.zip
# wget https://github.com/alanbjohnston/CubeSatSim/raw/refs/heads/master-b-p-s/spacecraft/PacSatGround_0.46o/PacSatGround.zip
# unzip PacSatGround.zip -d PacSatGroundLoop
# sudo rm PacSatGround.zip
fi
echo "You can close this window now"
else
echo "Please choose an option 1-3"
echo
fi
elif [ "$ANS" = "3" ] ; then
echo "You have chosen to set the Frequency of the PacSat Ground Station"
echo
/home/pi/CubeSatSim/config -F n
elif [ "$ANS" = "4" ] ; then
echo "You have chosen to reset the PacSat Satellite"
echo
/home/pi/CubeSatSim/config -k n
else
echo "Please enter only 1 to 4"
fi
# sleep 10
#$SHELL

@ -0,0 +1,85 @@
#!/bin/bash
# script to run FoxTelem
echo "Startup script to run the PacSat Ground Station for FIAB v4"
echo
# source /home/pi/venv/bin/activate
sudo killall -9 java &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo killall -9 direwolf &>/dev/null
#FILE=/home/pi/.pacsatprofile
#if [ ! -f "$FILE" ]; then
profile=$(zenity --text="Choose what you want to do:" --list 2>/dev/null --width=410 --height=220 --title="PacSat Ground Station" --column="Choice" --column="Result" "PacSat" "Run PacSat Ground Station" "Configure" "Configure the Pacsat Ground Station" "Simulate" "Run a Locally Simulated PacSat")
echo $profile
if [ -z "$profile" ]; then
echo "No choice made. Exiting."
sleep 3
exit
#echo "You need to choose your default FoxTelem profile."
#echo
#echo "The choices are:"
#echo
#echo "1. Fox-in-a-Box. Use this profile if you want to receive and decode telemetry from the AMSAT Fox satellites. If you enter a callsign and a grid square, you can upload to the AMSAT telemetry server."
#echo
#echo "2. CubeSatSim Ground Station. Use this profile if you want to receive and decode telemetry from an AMSAT CubeSatSim or CubeSatSim Lite."
#echo
#echo "Which profile do you choose? Enter 1 or 2"
#read -r ANS
fi
if [ "$ANS" = "1" ] || [ "$profile" = "PacSat" ] ; then
echo "You have chosen to run the PacSat Ground Station"
# echo "p" > /home/pi/.pacsatprofile
echo
/home/pi/CubeSatSim/groundstation/pacsat.sh
elif [ "$ANS" = "2" ] || [ "$profile" = "Configure" ] ; then
echo "You have chosen to configure the PacSat Ground Station"
echo
/home/pi/CubeSatSim/groundstation/pacsat-config.sh
elif [ "$ANS" = "3" ] || [ "$profile" = "Simulate" ] ; then
sudo systemctl stop transmit
echo "You have chosen the PacSat Ground Station with Local Simulated Satellite"
sleep 1
/usr/bin/x-terminal-emulator --geometry=120x40 -e "bash /home/pi/CubeSatSim/pacsatsim.sh l"
sleep 1
/home/pi/CubeSatSim/groundstation/pacsat.sh l
else
echo "Please enter only 1 or 2 or 3"
fi
sudo killall -9 direwolf &>/dev/null
sleep 10
#$SHELL

@ -0,0 +1,10 @@
[Desktop Entry]
Name=Pacsat
GenericName=Pacsat Loopback
Comment=Pacsat
Exec=/usr/bin/x-terminal-emulator --geometry=120x40 -e "/home/pi/CubeSatSim/groundstation/pacsat-run.sh"
Icon=/home/pi/Icons/pacsat.png
Terminal=true
Type=Application
Categories=HamRadio;
Keywords=APRS;

@ -0,0 +1,302 @@
#!/bin/bash
# script to auto decode packets using Direwolf and FM TXC and run Pacsat Ground Station
sudo pkill -f "/home/pi/CubeSatSim/groundstation/direwolf-pacsat-tmp.conf"
loopback=0
vox=0
safe=0
card=0
pwm=0
if [ "$1" = "l" ] ; then
loopback=1
elif [ "$1" = "v" ] ; then
vox=1
elif [ "$1" = "c" ] ; then
card=1
else
pwm=1
fi
if [[ $(arecord -l | grep "USB Audio Device") ]] ; then
echo "USB Sound Card detected"
soundcard=1
else
echo "No USB Sound Card detected"
soundcard=0
fi
gpio -g mode 7 up
if [[ $(gpio -g read 7 | grep 0) ]] ; then
echo "TXC is present"
txc=1
else
echo "TXC not present"
txc=0
fi
timeout 1 rtl_test &> out.txt
if [[ $(grep "No supported" out.txt) ]] ; then
echo "No RTL-SDR detected"
rtl=0
else
echo "RTL-SDR detected."
rtl=1
fi
FILE=/home/pi/CubeSatSim/battery_saver
if [ -f "$FILE" ]; then
safe=1
fi
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
MODE=$1
if [ ! "$MODE" = "P" ] && [ ! "$loopback" = "1" ] ; then
echo
echo "Mode is not PacSat Ground Station"
echo
echo "Would you like to change to PacSat Ground Station mode and reboot? (y/n)?"
read -r ANS
if [ "$ANS" = "y" ]; then
/home/pi/CubeSatSim/config -I
exit
else
echo
echo "You can run the PacSat Ground Station after you change mode and reboot."
sleep 10
exit
fi
elif [ "$loopback" = "1" ] ; then
# if [ ! "$MODE" = "p" ] ; then
echo
echo "Switching to PacSat mode for the Simulated PacSat Satellite"
echo
/home/pi/CubeSatSim/config -G n
# fi
if [ ! -d "/home/pi/PacSatGroundLoop" ] ; then
# if [ ! "$loopback" = "1" ] ; then # don't do this for now.
cd
sudo rm PacSatGroundLoop.zip &>/dev/null
wget https://github.com/alanbjohnston/CubeSatSim/raw/refs/heads/master-b-p/spacecraft/PacSatGround_0.46o/PacSatGroundLoop.zip
unzip PacSatGroundLoop.zip -d PacSatGroundLoop
sudo rm PacSatGroundLoop.zip
echo
echo "The first time you run the Ground Station, you will need to select Yes to override files, then put in your callsign"
sleep 10
fi
else
echo
echo "Mode is PacSat Ground Station"
echo
if [ ! -d "/home/pi/PacSatGround" ] ; then
cd
sudo rm PacSatGround.zip &>/dev/null
wget https://github.com/alanbjohnston/CubeSatSim/raw/refs/heads/master-b-p/spacecraft/PacSatGround_0.46o/PacSatGround.zip
unzip PacSatGround.zip -d PacSatGround
sudo rm PacSatGround.zip
echo
echo "The first time you run the Ground Station, you will need to select Yes to override files, then put in your callsign"
sleep 10
fi
fi
value=`cat /home/pi/CubeSatSim/sim.cfg`
echo "$value" > /dev/null
set -- $value
callsign="$1"
txfrequency="$7e3"
rxfrequency="$8e3"
echo -n "Callsign is "
echo $callsign
echo -n "Transmit Frequency is "
echo $txfrequency
echo -n "Receive Frequency is "
echo $rxfrequency
echo
sleep 2
sudo sed -i "s/TNC_TX_DELAY=.*$/TNC_TX_DELAY=750/g" /home/pi/PacSatGround/PacSatGround.properties
sudo sed -i "s/TNC_TX_DELAY=.*$/TNC_TX_DELAY=750/g" /home/pi/PacSatGroundLoop/PacSatGround.properties
sudo modprobe snd-aloop
#sudo systemctl stop cubesatsim >/dev/null 2>&1
#sudo systemctl stop transmit >/dev/null 2>&1
sudo systemctl stop command >/dev/null 2>&1
#/home/pi/CubeSatSim/config -I
sudo systemctl stop command >/dev/null 2>&1
sudo systemctl stop openwebrx >/dev/null 2>&1
sudo systemctl stop rtl_tcp >/dev/null 2>&1
pkill -o chromium &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
#sudo killall -9 direwolf &>/dev/null
sudo killall -9 sdrpp &>/dev/null
#sudo killall -9 aplay &>/dev/null
sudo killall -9 qsstv &>/dev/null
sudo killall -9 rtl_tcp &>/dev/null
sudo killall -9 java &>/dev/null
sudo killall -9 CubicSDR &>/dev/null
sudo killall -9 zenity &>/dev/null
#sudo systemctl restart pacsatsim
#sudo /etc/init.d/alsa-utils stop
#sudo /etc/init.d/alsa-utils start
sudo usermod -a -G gpio pi
if [ "$loopback" = "1" ] ; then
echo "Using Audio Loopback"
ADEVICE="ADEVICE plughw:CARD=Loopback,DEV=1"
PTT="PTT GPIOD gpiochip0 17"
elif [ "$safe" = "1" ] ; then
ADEVICE="ADEVICE shared_mic plughw:CARD=Loopback,DEV=0"
PTT="PTT GPIOD gpiochip0 17"
if [ ! "$txc" = "1" ] ; then
echo "Safe mode - battery saver won't work since no TXC present"
sleep 5
elif [ ! "$soundcard" = "1" ] ; then
echo "Safe mode - battery saver won't work since no sound card present"
sleep 5
else
echo "Safe mode - battery saver"
fi
elif [ "$vox" = "1" ] ; then
ADEVICE="ADEVICE plughw:CARD=Device,DEV=0"
PTT="PTT GPIOD gpiochip0 17"
if [ "$soundcard" = "1" ] ; then
echo "Using Soundcard Audio TX and RX (VOX, no PTT)"
else
echo "Soundcard Audio TX and RX (VOX, no PTT) will not work since no sound card present"
sleep 5
fi
elif [ "$pwm" = "1" ] ; then
ADEVICE="ADEVICE shared_mic plughw:CARD=Headphones,DEV=0"
PTT="PTT GPIOD gpiochip0 -20"
if [ ! "$txc" = "1" ] ; then
echo "FM TXC using Soundcard input (JP13), PWM output won't work since no TXC present"
sleep 5
elif [ ! "$soundcard" = "1" ] ; then
echo "FM TXC using Soundcard input (JP13), PWM output won't work since no sound card present"
sleep 5
else
echo "FM TXC using Soundcard input (JP13), PWM output"
fi
else
echo "FM TXC using Soundcard input (JP13) and output (JP14)"
ADEVICE="ADEVICE shared_mic plughw:CARD=Device,DEV=0"
PTT="PTT GPIOD gpiochip0 -20"
if [ ! "$txc" = "1" ] ; then
echo "FM TXC using Soundcard input (JP13) and output (JP14) won't work since no TXC present"
sleep 5
elif [ ! "$soundcard" = "1" ] ; then
echo "FM TXC using Soundcard input (JP13), output (JP14) won't work since no sound card present"
sleep 5
else
echo "FM TXC using Soundcard input (JP13), output JP14"
fi
fi
DIREWOLF_CONF="/home/pi/CubeSatSim/groundstation/direwolf-pacsat-tmp.conf"
echo "$ADEVICE" > $DIREWOLF_CONF
echo "MYCALL $callsign-1" >> $DIREWOLF_CONF
echo "$PTT" >> $DIREWOLF_CONF
cat /home/pi/CubeSatSim/groundstation/direwolf/direwolf-pacsat.conf >> $DIREWOLF_CONF
echo
echo "$DIREWOLF_CONF"
echo
cat $DIREWOLF_CONF
echo
direwolf -r 48000 -c $DIREWOLF_CONF -t 0 &
cd /home/pi/Desktop/PacsatGround/
if [ "$loopback" = "1" ] ; then
setsid java -Xmx512M -jar PacSatGround.jar "/home/pi/PacSatGroundLoop" # removed &
else
setsid java -Xmx512M -jar PacSatGround.jar "/home/pi/PacSatGround" # removed &
fi
sleep 10
#echo "Stopping Pacsatsim"
#$SHELL

@ -3,7 +3,7 @@ Type=Application
Exec=/home/pi/CubeSatSim/groundstation/rtl-tcp.sh
Name=RTL-TCP
Comment=RTL-TCP for SDR#
Icon=/home/pi/Downloads/SDRSharp.png
Icon=/home/pi/Icons/SDRSharp.png
Path=/home/pi
Terminal=true
Categories=HamRadio

@ -23,13 +23,15 @@ echo "Note: you need to be on the Wifi network: $ssid"
echo
sudo systemctl stop openwebrx
sudo systemctl stop openwebrx &>/dev/null
sleep 2
pkill -o chromium &>/dev/null
sudo systemctl stop rtl_tcp
sudo systemctl stop rtl_tcp &>/dev/null
sudo killall -9 sdrpp &>/dev/null
sudo killall -9 java &>/dev/null
@ -45,10 +47,13 @@ sudo killall -9 qsstv &>/dev/null
sudo killall -9 direwolf &>/dev/null
sudo killall -9 aplay &>/dev/null
#sudo killall -9 aplay &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
sudo killall -9 rtl_fm &>/dev/null
sudo /bin/sh -c 'rtl_tcp -a $(hostname -I|cut -f1 -d " ")'

@ -3,7 +3,7 @@ Description=RTL-TCP
[Service]
TimeoutStopSec = 5
ExecStart=/bin/sh -c '/usr/local/bin/rtl_tcp -a $(hostname -I)'
ExecStart=/bin/sh -c 'rtl_tcp -a $(hostname -I|cut -f1 -d " ")'
WorkingDirectory=/home/pi
StandardOutput=inherit
StandardError=inherit

@ -0,0 +1,9 @@
[Unit]
Description=RTL TCP Socket
PartOf=rtltcp.service
[Socket]
ListenStream=[::]:1234
[Install]
WantedBy=sockets.target

@ -24,6 +24,8 @@ echo "Note: you need to be on the Wifi network: $ssid"
echo
sudo killall -9 sdrpp &>/dev/null
sudo killall -9 java &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
@ -38,13 +40,18 @@ sudo killall -9 sdrpp &>/dev/null
sudo killall -9 qsstv &>/dev/null
sudo killall -9 aplay &>/dev/null
#sudo killall -9 aplay &>/dev/null
sudo killall -9 direwolf &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo systemctl stop rtl_tcp
sudo systemctl stop rtl_tcp &>/dev/null
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
sudo killall -9 rtl_fm &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
@ -52,7 +59,7 @@ sudo systemctl restart openwebrx
sleep 10
setsid chromium-browser --check-for-update-interval=1 --simulate-critical-update --noerrdialogs --disable-infobars http://127.0.0.1:8073 &>/dev/null &
setsid chromium-browser --check-for-update-interval=1 --simulate-critical-update --noerrdialogs --disable-infobars --app=http://localhost:8073 &>/dev/null &
sleep 10

@ -0,0 +1,47 @@
#!/bin/bash
# script to run sdrpp
echo "Script to run SDRpp for ARISS Radio Pi"
echo
sudo systemctl stop openwebrx
sudo killall -9 java &>/dev/null
sudo killall -9 sdrpp &>/dev/null
sudo systemctl stop rtl_tcp
pkill -o chromium &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
sudo killall -9 direwolf &>/dev/null
#sudo killall -9 aplay &>/dev/null
sudo killall -9 qsstv &>/dev/null
sudo killall -9 rtl_tcp &>/dev/null
sudo killall -9 CubicSDR &>/dev/null
#sudo kill `ps -aux | grep cubicsdr-packet | grep -v grep | awk '{ print $2 }'` &>/dev/null && killall inotifywait &>/dev/null
#sudo kill `ps -aux | grep packet | grep -v grep | awk '{ print $2 }'` &>/dev/null && killall inotifywait &>/dev/null
#sudo kill `ps -aux | grep sstv_decode_prompt| grep -v grep | awk '{ print $2 }'` &>/dev/null && killall inotifywait &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
sleep 5
setsid sdrpp &
sleep 10
#$SHELL

@ -3,7 +3,7 @@ Type=Application
Exec=/home/pi/CubeSatSim/groundstation/loc.sh
Name=Set My Location
Comment=Set Location for Gpredict
Icon=/home/pi/Downloads/gpredict.png
Icon=/home/pi/Icons/gpredict.png
Path=/home/pi
Terminal=true
Categories=HamRadio

@ -0,0 +1,808 @@
{
"version": 8,
"sdrs": {
"rtlsdr": {
"name": "RTL-SDR",
"type": "rtl_sdr",
"profiles": {
"70cm": {
"name": "70cm Ham Band 435 MHz (CubeSatSim)",
"center_freq": 435000000,
"rf_gain": 10.0,
"samp_rate": 2400000,
"start_freq": 434900000,
"start_mod": "nfm",
"tuning_step": 1000,
"direct_sampling": 0
},
"2m": {
"name": "WX Band 161 MHz",
"center_freq": 162400000,
"rf_gain": 29,
"samp_rate": 2048000,
"start_freq": 157000000,
"start_mod": "nfm"
},
"e59a4765-4139-4ab8-89c5-d8ac3343ba70": {
"name": "2m Ham Band 146 MHz (ISS)",
"center_freq": 145000000,
"samp_rate": 2400000,
"start_freq": 145000000,
"start_mod": "nfm",
"rf_gain": 42.0,
"direct_sampling": 0
},
"faf80b0b-1a96-4a9b-96fa-ce40b109c7e0": {
"name": "70cm Ham Band 438 MHz (ISS)",
"rf_gain": 29.0,
"center_freq": 438000000,
"samp_rate": 2400000,
"start_freq": 437800000,
"start_mod": "nfm"
},
"a4fd4a5d-d2d0-4949-87e2-bda83cd83a37": {
"name": "FM Band 95 MHz",
"rf_gain": 29.0,
"center_freq": 95000000,
"samp_rate": 2400000,
"start_freq": 94000000,
"start_mod": "wfm"
},
"ce2bca29-78cb-45d8-ab46-8dea3135981c": {
"name": "10m Ham Band 28 MHz",
"rf_gain": 29.0,
"center_freq": 28000000,
"samp_rate": 2400000,
"start_freq": 28000000,
"start_mod": "usb",
"direct_sampling": 0
},
"d6cdbf2d-74e4-4cac-aaa8-e793103a8e89": {
"name": "6m Ham Band 51 MHz",
"rf_gain": 29.0,
"center_freq": 51000000,
"samp_rate": 2400000,
"start_freq": 51000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"e2aba387-1d3b-4ca8-b280-e119282b8812": {
"name": "90 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 90000000,
"samp_rate": 2400000,
"start_freq": 90000000,
"start_mod": "wfm"
},
"f700b99d-3c51-4524-b151-a0809b868ecc": {
"name": "92 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 92000000,
"samp_rate": 2400000,
"start_freq": 92000000,
"start_mod": "wfm"
},
"dc6af94f-d607-4fee-a522-7f375f66a62c": {
"name": "94 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 94000000,
"samp_rate": 2400000,
"start_freq": 94000000,
"start_mod": "wfm"
},
"6887e85a-a4dc-4245-810f-99801fc5e824": {
"name": "96 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 96000000,
"samp_rate": 2400000,
"start_freq": 96000000,
"start_mod": "wfm"
},
"a2182ed6-70a8-4377-b233-ac6f8ccc91d7": {
"name": "98 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 96000000,
"samp_rate": 2400000,
"start_freq": 96000000,
"start_mod": "wfm"
},
"57e38353-fb86-4935-899b-e365228b8ae5": {
"name": "100 MHz FM Band",
"center_freq": 100000000,
"samp_rate": 2400000,
"start_freq": 100000000,
"start_mod": "wfm"
},
"5e9ec6dd-905d-4781-bd13-9cb702f58e84": {
"name": "102 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 102000000,
"samp_rate": 2400000,
"start_freq": 102000000,
"start_mod": "wfm"
},
"ef2c703c-2e22-4e87-82b5-581420d704bd": {
"name": "104 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 104000000,
"samp_rate": 2400000,
"start_freq": 104000000,
"start_mod": "wfm"
},
"34cc3ddf-8018-4288-acb9-29e6940bc37e": {
"name": "106 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 106000000,
"samp_rate": 2400000,
"start_freq": 106000000,
"start_mod": "wfm"
},
"b4693683-ccf5-474d-a2d9-9a47b0a18ee2": {
"name": "108 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 108000000,
"samp_rate": 2400000,
"start_freq": 108000000,
"start_mod": "wfm"
},
"34224d77-7b61-467c-b78f-18c7f3af1a0c": {
"name": "110 MHz FM Band",
"rf_gain": 29.0,
"center_freq": 110000000,
"samp_rate": 2400000,
"start_freq": 110000000,
"start_mod": "wfm"
},
"8dd82d97-73db-4fa7-ac41-263c3026ea1d": {
"name": "112 MHz",
"rf_gain": 29.0,
"center_freq": 112000000,
"samp_rate": 2400000,
"start_freq": 112000000,
"start_mod": "nfm"
},
"79304b30-f10d-469e-9617-50a19bfdb435": {
"name": "114 MHz",
"rf_gain": 29.0,
"center_freq": 114000000,
"samp_rate": 2400000,
"start_freq": 114000000,
"start_mod": "nfm"
},
"c00bf096-27b8-4262-832c-df1a308d7eb9": {
"name": "116 MHz",
"rf_gain": 29.0,
"center_freq": 116000000,
"samp_rate": 2400000,
"start_freq": 116000000,
"start_mod": "nfm"
},
"669d25a6-6c15-4131-a330-3c33dd2147f0": {
"name": "118 Mhz Air Band",
"rf_gain": 29.0,
"center_freq": 118000000,
"samp_rate": 2400000,
"start_freq": 118000000,
"start_mod": "am"
},
"948248fa-43d9-4e7d-bf86-afaadd391779": {
"name": "120 MHz Air Band",
"rf_gain": 29.0,
"center_freq": 120000000,
"samp_rate": 2400000,
"start_freq": 120000000,
"start_mod": "am"
},
"b634273b-8fc8-4e87-b5c4-e6226d4be0ac": {
"name": "122 MHz Air Band",
"rf_gain": 42.0,
"center_freq": 122000000,
"samp_rate": 2400000,
"start_freq": 121000000,
"start_mod": "nfm"
},
"c55289a2-8286-4a3d-a505-37ba2867571a": {
"name": "124 Mhz Air Band",
"rf_gain": 42.0,
"center_freq": 124000000,
"samp_rate": 2400000,
"start_freq": 124000000,
"start_mod": "am"
},
"4fe488b7-f369-43ba-bb49-91e1a185be7a": {
"name": "126 MHz Air Band",
"rf_gain": 29.0,
"center_freq": 126000000,
"samp_rate": 2400000,
"start_freq": 126000000,
"start_mod": "am"
},
"e79639a2-1384-4e92-8e46-f6e5670ec9fd": {
"name": "128 MHz Air Band",
"rf_gain": 42.0,
"center_freq": 128000000,
"samp_rate": 2400000,
"start_freq": 128000000,
"start_mod": "am"
},
"319f3fb2-b98a-4620-85a7-a99d5a722bd5": {
"name": "130 MHz Air Band",
"rf_gain": 42.0,
"center_freq": 130000000,
"samp_rate": 2400000,
"start_freq": 130000000,
"start_mod": "am"
},
"63c5c2ce-07de-496c-81f6-b188a7adbf39": {
"name": "132 MHz Air Band",
"rf_gain": 42.0,
"center_freq": 132000000,
"samp_rate": 2400000,
"start_freq": 132000000,
"start_mod": "am"
},
"386bdc7b-eb10-4e05-972a-69d730a23cd8": {
"name": "134 MHz Air Band",
"rf_gain": 29.0,
"center_freq": 134000000,
"samp_rate": 2400000,
"start_freq": 134000000,
"start_mod": "am"
},
"ae8ea8b1-23de-45ef-b8c4-3b83a188e65d": {
"name": "136 MHz Air Band",
"rf_gain": 42.0,
"center_freq": 136000000,
"samp_rate": 2400000,
"start_freq": 136000000,
"start_mod": "am"
},
"c0b1a28c-5e07-400a-a5f3-07c62db27587": {
"name": "138 MHz NOAA Weather Satellite Band",
"rf_gain": 42.0,
"center_freq": 138000000,
"samp_rate": 2400000,
"start_freq": 138000000,
"start_mod": "nfm"
},
"20f7ce56-fd85-4b3e-8fac-94cbe9ba0e1d": {
"name": "140 MHz ",
"rf_gain": 42.0,
"center_freq": 140000000,
"samp_rate": 2400000,
"start_freq": 140000000,
"start_mod": "nfm"
},
"882079f8-5697-428a-ae9d-bcc091269c7f": {
"name": "142 MHz ",
"rf_gain": 42.0,
"center_freq": 142000000,
"samp_rate": 2400000,
"start_freq": 142000000,
"start_mod": "nfm"
},
"da1b3f12-2eba-40e9-8c62-33493adf74b3": {
"name": "144 MHz 2m Ham Band",
"rf_gain": 42.0,
"center_freq": 144000000,
"samp_rate": 2400000,
"start_freq": 144000000,
"start_mod": "nfm"
},
"8d9cf1e1-44c5-41c4-bcea-7b1c69446e62": {
"name": "146 MHz 2m Ham Band",
"rf_gain": 42.0,
"center_freq": 146000000,
"samp_rate": 2400000,
"start_freq": 146000000,
"start_mod": "nfm"
},
"eec8aa0d-3485-43d2-baa4-82f7d9e14df6": {
"name": "148 MHz 2m Ham Band",
"rf_gain": 42.0,
"center_freq": 148000000,
"samp_rate": 2400000,
"start_freq": 148000000,
"start_mod": "nfm"
},
"bf66a908-1988-4aec-b998-06e2bc7d0a84": {
"name": "150 MHz",
"rf_gain": 42.0,
"center_freq": 150000000,
"samp_rate": 2400000,
"start_freq": 150000000,
"start_mod": "nfm"
},
"0389f270-b919-4aae-a313-f73697059f70": {
"name": "152 MHz",
"rf_gain": 42.0,
"center_freq": 152000000,
"samp_rate": 2400000,
"start_freq": 152000000,
"start_mod": "nfm"
},
"6ef9d955-76aa-46c0-8463-2c23def5e37b": {
"name": "154 MHz",
"rf_gain": 42.0,
"center_freq": 154000000,
"samp_rate": 2400000,
"start_freq": 154000000,
"start_mod": "nfm"
},
"5d0a64c7-3bce-408e-94d9-c8315bef7540": {
"name": "156 MHz",
"rf_gain": 42.0,
"center_freq": 156000000,
"samp_rate": 2400000,
"start_freq": 156000000,
"start_mod": "nfm"
},
"5b869cae-ffa7-4554-96af-7acd497bbaf3": {
"name": "158 MHz",
"rf_gain": 42.0,
"center_freq": 158000000,
"samp_rate": 2400000,
"start_freq": 158000000,
"start_mod": "nfm"
},
"0de7c5d4-14fc-4655-9a81-2bcebb2f4147": {
"name": "160 MHz",
"rf_gain": 42.0,
"center_freq": 160000000,
"samp_rate": 2400000,
"start_freq": 160000000,
"start_mod": "nfm"
},
"8ca54821-8b80-4938-a35c-9fe25e2320d1": {
"name": "162 MHz",
"rf_gain": 42.0,
"center_freq": 162000000,
"samp_rate": 2400000,
"start_freq": 162000000,
"start_mod": "nfm"
},
"f74d262d-9e98-4030-86b2-45676121ff1e": {
"name": "164 MHz",
"rf_gain": 42.0,
"center_freq": 164000000,
"samp_rate": 2400000,
"start_freq": 164000000,
"start_mod": "nfm"
},
"bfc9c686-6c06-4de2-b1d5-c8f012131042": {
"name": "168 MHz",
"rf_gain": 42.0,
"center_freq": 168000000,
"samp_rate": 2400000,
"start_freq": 167000000,
"start_mod": "nfm"
},
"5468e597-d529-42fe-9fcf-0ff4fa9e2d06": {
"name": "170 MHz",
"rf_gain": 42.0,
"center_freq": 170000000,
"samp_rate": 2400000,
"start_freq": 170000000,
"start_mod": "nfm"
},
"e124cc6e-7177-4d5f-ae5b-2ec6a6fa2956": {
"name": "172 MHz",
"rf_gain": 42.0,
"center_freq": 172000000,
"samp_rate": 2400000,
"start_freq": 172000000,
"start_mod": "nfm"
},
"1ce0f3ed-4763-4f00-916a-4f72d29ba410": {
"name": "174 MHz ",
"rf_gain": 42.0,
"center_freq": 174000000,
"samp_rate": 2400000,
"start_freq": 174000000,
"start_mod": "nfm"
},
"639b1496-a2b9-4a42-ad28-3cda89fbe2fb": {
"name": "420 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 420000000,
"samp_rate": 2400000,
"start_freq": 420000000,
"start_mod": "nfm"
},
"bbc9b57e-ea86-43ef-be65-cb2337615ae5": {
"name": "422 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 422000000,
"samp_rate": 2400000,
"start_freq": 422000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"3aed286d-7d13-4338-8621-d1c0dfdf3ac6": {
"name": "424 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 424000000,
"samp_rate": 2400000,
"start_freq": 424000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"9ae664b4-48f3-410a-8995-edc60127d746": {
"name": "426 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 426000000,
"samp_rate": 2400000,
"start_freq": 426000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"24d2467b-6740-42b5-8d3f-8f389fc0860b": {
"name": "428 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 428000000,
"samp_rate": 2400000,
"start_freq": 428000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"debbc3ab-081d-41e7-80fe-7d564838154e": {
"name": "430 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 430000000,
"samp_rate": 2400000,
"start_freq": 430000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"649233e0-fc85-415d-b88e-94750f49ca4b": {
"name": "432 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 432000000,
"samp_rate": 2400000,
"start_freq": 432000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"bed3b482-fd3b-45ee-b924-200aa4223ace": {
"name": "434 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 434000000,
"samp_rate": 2400000,
"start_freq": 434000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"58dfac9e-6030-4bb3-ba28-465285baa25e": {
"name": "436 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 436000000,
"samp_rate": 2400000,
"start_freq": 436000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"4c293b84-cd43-495f-95a5-1fcabfe4e4c7": {
"name": "438 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 438000000,
"samp_rate": 2400000,
"start_freq": 438000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"0e763161-a0e8-411a-abe6-c1af13045f27": {
"name": "440 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 440000000,
"samp_rate": 2400000,
"start_freq": 440000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"6dda77d3-e859-41b7-9b0b-22c2dee47472": {
"name": "442 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 442000000,
"samp_rate": 2400000,
"start_freq": 442000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"285813ef-aa6d-433f-a316-074f47e02073": {
"name": "444 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 444000000,
"samp_rate": 2400000,
"start_freq": 444000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"e0842b63-6857-4554-874b-fad99e4db03a": {
"name": "446 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 446000000,
"samp_rate": 2400000,
"start_freq": 446000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"c7b21c80-cfef-42e8-a6fe-c5eea4556c7e": {
"name": "448 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 448000000,
"samp_rate": 2400000,
"start_freq": 448000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"d98b4d4a-8247-4a99-9fc7-89780e5e1fef": {
"name": "450 MHz 70cm Ham Band",
"rf_gain": 42.0,
"center_freq": 450000000,
"samp_rate": 2400000,
"start_freq": 450000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"a09a546f-c56f-41b5-ae34-c5511afbcef5": {
"name": "460 MHz",
"rf_gain": 42.0,
"center_freq": 460000000,
"samp_rate": 2400000,
"start_freq": 460000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"232b2ae6-88dd-4e58-b489-37f310e5e204": {
"name": "462 MHz FRS/GMRS",
"rf_gain": 42.0,
"center_freq": 462000000,
"samp_rate": 2400000,
"start_freq": 462000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"41db9b38-87d7-40a0-9f90-1f0c77c054d9": {
"name": "464 MHz FRS/GMRS",
"rf_gain": 42.0,
"center_freq": 464000000,
"samp_rate": 2400000,
"start_freq": 464000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"e9bb7781-eb9b-4314-b399-2d96c52716f0": {
"name": "466 MHz FRS/GMRS",
"rf_gain": 42.0,
"center_freq": 466000000,
"samp_rate": 2400000,
"start_freq": 466000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"5d9e07e8-eb42-4832-82c9-016f05d89027": {
"name": "468 MHz FRS/GMRS",
"rf_gain": 42.0,
"center_freq": 468000000,
"samp_rate": 2400000,
"start_freq": 468000000,
"start_mod": "nfm",
"direct_sampling": 0
},
"20m": {
"name": "20m",
"center_freq": 14150000,
"samp_rate": 384000,
"start_freq": 14070000,
"start_mod": "usb",
"tuning_step": "500",
"rf_gain": 42.0,
"direct_sampling": 1
},
"30m": {
"name": "30m",
"center_freq": 10125000,
"samp_rate": 192000,
"start_freq": 10142000,
"start_mod": "usb",
"tuning_step": "500",
"rf_gain": 42.0,
"direct_sampling": 1
},
"40m": {
"name": "40m",
"center_freq": 7100000,
"samp_rate": 256000,
"start_freq": 7070000,
"start_mod": "lsb",
"tuning_step": "500",
"rf_gain": 42.0,
"direct_sampling": 1
},
"80m": {
"name": "80m",
"center_freq": 3650000,
"samp_rate": 384000,
"start_freq": 3570000,
"start_mod": "lsb",
"tuning_step": "500",
"rf_gain": 42.0,
"direct_sampling": 1
},
"49m": {
"name": "49m Broadcast",
"center_freq": 6050000,
"samp_rate": 384000,
"start_freq": 6070000,
"start_mod": "am",
"tuning_step": "1000",
"rf_gain": 42.0,
"direct_sampling": 1
},
"c1982ce1-7504-455e-908c-dc097fa031a8": {
"name": "1090 MHz ADS-B Band",
"rf_gain": 42.0,
"center_freq": 1090000000,
"samp_rate": 2400000,
"start_freq": 1090000000,
"start_mod": "adsb",
"tuning_step": 1,
"direct_sampling": 0
},
"cb7f2f8e-e317-4a5e-9504-826dd3781791": {
"name": "978 MHz ADS-B Band",
"rf_gain": 42.0,
"center_freq": 978000000,
"samp_rate": 2400000,
"start_freq": 978000000,
"start_mod": "adsb",
"tuning_step": 1
}
}
},
"airspy": {
"name": "Airspy HF+",
"type": "airspyhf",
"rf_gain": "auto",
"profiles": {
"20m": {
"name": "20m",
"center_freq": 14150000,
"samp_rate": 384000,
"start_freq": 14070000,
"start_mod": "usb",
"tuning_step": "500"
},
"30m": {
"name": "30m",
"center_freq": 10125000,
"samp_rate": 192000,
"start_freq": 10142000,
"start_mod": "usb",
"tuning_step": "500"
},
"40m": {
"name": "40m",
"center_freq": 7100000,
"samp_rate": 256000,
"start_freq": 7070000,
"start_mod": "lsb",
"tuning_step": "500"
},
"80m": {
"name": "80m",
"center_freq": 3650000,
"samp_rate": 384000,
"start_freq": 3570000,
"start_mod": "lsb",
"tuning_step": "500"
},
"49m": {
"name": "49m Broadcast",
"center_freq": 6050000,
"samp_rate": 384000,
"start_freq": 6070000,
"start_mod": "am",
"tuning_step": "1000"
}
}
},
"sdrplay": {
"name": "SDRPlay device",
"type": "sdrplay",
"antenna": "Antenna A",
"rf_gain": "auto",
"profiles": {
"20m": {
"name": "20m",
"center_freq": 14150000,
"samp_rate": 500000,
"start_freq": 14070000,
"start_mod": "usb",
"tuning_step": "500"
},
"30m": {
"name": "30m",
"center_freq": 10125000,
"samp_rate": 250000,
"start_freq": 10142000,
"start_mod": "usb",
"tuning_step": "500"
},
"40m": {
"name": "40m",
"center_freq": 7100000,
"samp_rate": 500000,
"start_freq": 7070000,
"start_mod": "lsb",
"tuning_step": "500"
},
"80m": {
"name": "80m",
"center_freq": 3650000,
"samp_rate": 500000,
"start_freq": 3570000,
"start_mod": "lsb",
"tuning_step": "500"
},
"49m": {
"name": "49m Broadcast",
"center_freq": 6000000,
"samp_rate": 500000,
"start_freq": 6070000,
"start_mod": "am",
"tuning_step": "1000"
}
}
}
},
"receiver_name": "ARISS Radio Pi",
"receiver_location": "Budapest, Hungary",
"receiver_asl": 200,
"receiver_admin": "example@example.com",
"receiver_gps": {
"lat": 39.95233,
"lon": -75.16379
},
"photo_title": "Panorama of Budapest from Sch\u00f6nherz Zolt\u00e1n Dormitory",
"photo_desc": "",
"max_clients": 20,
"keep_files": 20,
"session_timeout": 0,
"usage_policy_url": "policy",
"allow_chat": true,
"allow_audio_recording": true,
"allow_center_freq_changes": false,
"magic_key": "memagic",
"receiver_keys": [],
"waterfall_scheme": "GoogleTurboWaterfall",
"fft_fps": 9,
"fft_size": 4096,
"fft_voverlap_factor": 0.3,
"waterfall_levels": {
"min": -88.0,
"max": -20.0
},
"waterfall_auto_levels": {
"min": 3.0,
"max": 10.0
},
"waterfall_auto_level_default_mode": false,
"waterfall_auto_min_range": 50,
"audio_compression": "adpcm",
"fft_compression": "adpcm",
"tuning_precision": 2,
"eibi_bookmarks_range": 0,
"repeater_range": 0,
"map_type": "google",
"google_maps_api_key": "",
"openweathermap_api_key": "",
"map_position_retention_time": 7200,
"map_ignore_indirect_reports": false,
"map_prefer_recent_reports": true,
"callsign_url": "https://www.qrzcq.com/call/{}",
"vessel_url": "https://www.vesselfinder.com/vessels/details/{}",
"flight_url": "https://flightaware.com/live/flight/{}",
"modes_url": "https://flightaware.com/live/modes/{}/redirect"
}

@ -4,10 +4,12 @@ echo "Script to decode SSTV using QSSTV with rtl_fm"
echo
sudo systemctl stop openwebrx
sudo systemctl stop openwebrx &>/dev/null
sudo modprobe snd-aloop
sudo killall -9 sdrpp &>/dev/null
sudo killall -9 qsstv &>/dev/null
sudo killall -9 rtl_fm &>/dev/null
@ -16,7 +18,7 @@ sudo killall -9 aplay &>/dev/null
sudo killall -9 direwolf &>/dev/null
sudo systemctl stop rtl_tcp
sudo systemctl stop rtl_tcp &>/dev/null
pkill -o chromium &>/dev/null
@ -30,6 +32,9 @@ sudo killall -9 sdrpp &>/dev/null
sudo killall -9 zenity &>/dev/null
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
sudo killall -9 rtl_fm &>/dev/null
#echo "s" >> .mode

@ -3,7 +3,7 @@ Type=Application
Exec=/home/pi/CubeSatSim/groundstation/sdr.sh
Name=Web SDR
Comment=openwebrx for Web SDR
Icon=/home/pi/Downloads/openwebrx.png
Icon=/home/pi/Icons/openwebrx.png
Path=/home/pi
Terminal=true
Categories=HamRadio

@ -12,6 +12,10 @@ if [ -f "$FILE" ]; then
echo -e "\nUpdate script for CubeSatSim v2.2\n"
sudo rm /home/pi/CubeSatSim/telem.wav &>/dev/null
sudo rm /home/pi/CubeSatSim/t.txt &>/dev/null
sudo rm /home/pi/CubeSatSim/uptime &>/dev/null
if [ -z "$1" ] ; then
checkout=0
else
@ -61,9 +65,10 @@ if [[ $(grep '11.' /etc/debian_version) ]]; then
sudo sed -i 's/console=serial0,115200 //g' /boot/cmdline.txt
sudo sed -i 's/console=tty1 r/console=tty1 maxcpus=1 r/g' /boot/cmdline.txt # single core if Pi Zero 2
# sudo sed -i 's/console=tty1 r/console=tty1 maxcpus=1 r/g' /boot/cmdline.txt # single core if Pi Zero 2
sudo sed -i 's/console=tty1 maxcpus=1 r/console=tty1 r/g' /boot/cmdline.txt
sudo sed -i 's/maxcpus=2/maxcpus=1/g' /boot/cmdline.txt # single core if Pi Zero 2
# sudo sed -i 's/maxcpus=2/maxcpus=1/g' /boot/cmdline.txt # single core if Pi Zero 2
sudo sed -i 's/#dtparam=i2c_arm=on/dtparam=i2c_arm=on/g' /boot/config.txt
@ -158,11 +163,17 @@ if [[ $(grep 'bookworm' /etc/os-release) ]]; then
sudo sed -i 's/console=serial0,115200 //g' /boot/firmware/cmdline.txt
sudo sed -i 's/console=tty1 r/console=tty1 maxcpus=1 r/g' /boot/firmware/cmdline.txt # single core if Pi Zero 2
# sudo sed -i 's/console=tty1 r/console=tty1 maxcpus=1 r/g' /boot/firmware/cmdline.txt # single core if Pi Zero 2
sudo sed -i 's/console=tty1 maxcpus=1 r/console=tty1 r/g' /boot/firmware/cmdline.txt
sudo sed -i 's/maxcpus=2/maxcpus=1/g' /boot/firmware/cmdline.txt # single core if Pi Zero 2
# sudo sed -i 's/maxcpus=2/maxcpus=1/g' /boot/firmware/cmdline.txt # single core if Pi Zero 2
sudo sed -i 's/#dtparam=i2c_arm=on/dtparam=i2c_arm=on/g' /boot/firmware/config.txt
sudo sed -i 's/#dtoverlay=vc4-fkms-v3d/dtoverlay=vc4-fkms-v3d/g' /boot/firmware/config.txt
sudo sed -i 's/#dtoverlay=vc4-kms-v3d/dtoverlay=vc4-kms-v3d/g' /boot/firmware/config.txt
if [[ $(grep 'dtoverlay=i2c-gpio,bus=3,i2c_gpio_delay_us=1,i2c_gpio_sda=23,i2c_gpio_scl=24' /boot/firmware/config.txt) ]]; then
echo "dtoverlay=i2c-gpio already in /boot/firmware/config.txt"
@ -332,6 +343,8 @@ sudo apt-get update && sudo apt-get dist-upgrade -y
# sudo apt install -y python3-pip
# fi
cp /home/pi/CubeSatSim/groundstation/pacsat.desktop /home/pi/Desktop/pacsat.desktop
if [ ! -d "/home/pi/venv" ]; then
cd
@ -353,14 +366,39 @@ sudo apt-get install -y gcc g++ make cmake libasound2-dev libudev-dev libavahi-c
# removed wiringpi and python-picamera python3-picamera
sudo apt-get install -y git libasound2-dev i2c-tools build-essential libgd-dev libmagic-dev minicom
if [ -d "/home/pi/direwolf" ]; then
cd
cd direwolf
# Get the URL of the 'origin' remote
REPO_URL=$(git config --get remote.origin.url)
# Check if the command was successful and a URL was retrieved
if [ $? -eq 0 ] && [ -n "$REPO_URL" ]; then
if [ ! "$REPO_URL" = "https://github.com/wb2osz/direwolf.git" ]; then
echo "Current Direwolf git repository URL is $REPO_URL"
sudo rm -r /home/pi/direwolf
fi
else
echo "Could not find the URL for the 'origin' remote for Direwolf"
fi
fi
if [ ! -d "/home/pi/direwolf" ]; then
echo "Installing Direwolf from https://github.com/wb2osz/direwolf.git"
cd
git clone https://github.com/alanbjohnston/direwolf.git
cd direwolf
make -j
sudo make install
make install-rpi
git clone https://github.com/wb2osz/direwolf.git
cd direwolf
mkdir build
cd build
cmake ..
make -j4
sudo make install
make install-conf
fi
sudo apt-get install -y gpsd gpsd-clients libgps-dev python3-gps
@ -399,8 +437,16 @@ if [ $checkout -eq 1 ]; then
git checkout $branch
git pull --no-rebase > .updated
FLAG=1
echo "Running update script again"
echo "Running update again"
/home/pi/CubeSatSim/install
exit
fi
grep 'install' /home/pi/CubeSatSim/.updated
if [[ $(grep 'install' /home/pi/CubeSatSim/.updated) ]]; then
echo "install script updated, running again"
/home/pi/CubeSatSim/install
exit
fi
make debug
@ -436,6 +482,121 @@ if [[ $(grep 'changed' /home/pi/pi-power-button/.updated_p) ]]; then
FLAG=1
fi
if [ ! -d "/home/pi/g0kla_common" ]; then
cd
git clone https://github.com/alanbjohnston/g0kla_common.git
cd g0kla_common/Debug/
make clean
make all
sudo ./install.sh
else
cd /home/pi/g0kla_common/Debug/
git pull --no-rebase > .updated
grep 'changed' /home/pi/g0kla_common/Debug/.updated
if [[ $(grep 'changed' /home/pi/g0kla_common/Debug/.updated) ]]; then
echo "updating g0kla_common"
make clean
make all
FLAG=1
fi
fi
FILE=/home/pi/pi_pacsat/Debug/pi_pacsat # code has already been compiled
if [ ! -f "$FILE" ]; then
cd
#git clone https://github.com/alanbjohnston/pi_pacsat.git
git clone https://github.com/ac2cz/pi_pacsat.git
cd pi_pacsat
#git checkout master-debug
cd Debug
make clean
make all
# mkdir /home/pi/PacSat
# mkdir /home/pi/PacSat/pacsat
# mkdir /home/pi/PacSat/pacsat/dir
# export LD_LIBRARY_PATH=/mnt/usb-disk/ariss/lib:/usr/local/lib/iors_common:$LD_LIBRARY_PATH
# #value=`cat /home/pi/CubeSatSim/sim.cfg`
# #echo "$value" > /dev/null
# #set -- $value
# echo "bit_rate=9600" > pacsat.config
# echo "bbs_callsign=AMSAT-12" >> pacsat.config
# echo "broadcast_callsign=AMSAT-11" >> pacsat.config
# echo "digi_callsign=AMSAT-1" >> pacsat.config
# echo "max_frames_in_tx_buffer=5" >> pacsat.config
# echo "pb_open=1" > pacsat.state
# echo "uplink_open=1" >> pacsat.state
# echo "pb_max_period_for_client_in_seconds=60" >> pacsat.state
# echo "uplink_max_period_for_client_in_seconds=60" >> pacsat.state
else
cd /home/pi/pi_pacsat/Debug/
git pull --no-rebase > .updated
grep 'changed' /home/pi/pi_pacsat/Debug/.updated
if [[ $(grep 'changed' /home/pi/pi_pacsat/Debug/.updated) ]]; then
echo "updating pi_pacsat"
make clean
make all
FLAG=1
fi
fi
FILE=/home/pi/pacsat_telem/Debug/pacsat_telem # code has already been compiled
if [ ! -f "$FILE" ]; then
cd
sudo apt-get install -y libbsd-dev
git clone https://github.com/alanbjohnston/pacsat_telem.git
cd pacsat_telem
git checkout master-fox
cd Debug
make clean
make all
fi
cd /home/pi/pacsat_telem/Debug/
git pull --no-rebase > .updated
# git checkout master-fox
grep 'changed' /home/pi/pacsat_telem/Debug/.updated
if [[ $(grep 'changed' /home/pi/pacsat_telem/Debug/.updated) ]]; then
echo "updating pacsat_telem"
make clean
make all
FLAG=1
fi
sudo sed -i 's/#hdmi_group=1/hdmi_group=2/g' /boot/config.txt
sudo sed -i 's/#hdmi_mode=1/hdmi_mode=16/g' /boot/config.txt
sudo sed -i 's/#hdmi_force_hotplug=1/hdmi_force_hotplug=1/g' /boot/config.txt
sudo raspi-config nonint do_vnc 0
if [ ! -d "/home/pi/Desktop/PacsatGround" ]; then
cd /tmp
wget https://www.g0kla.com/pacsat/downloads/test/PacsatGround_unix_0_46o.tar.gz
tar -xzf PacsatGround_unix_0_46o.tar.gz -C /home/pi/Desktop
rm PacsatGround_unix_0_46o.tar.gz
cp /home/pi/CubeSatSim/spacecraft/PacSatGround_0.46o/* /home/pi/Desktop/PacsatGround/spacecraft/
# mkdir /home/pi/PacSatGround
sudo usermod -a -G gpio pi
sudo apt-get install default-jdk -y
fi
cd
if [ ! -d "/home/pi/PiSSTVpp" ]; then
@ -481,7 +642,7 @@ if [ -f "$FILE" ]; then
else
echo "creating cubesatsim.service."
sudo cp /home/pi/CubeSatSim/systemd/cubesatsim.service /etc/systemd/system/cubesatsim.service
sudo systemctl enable command
sudo systemctl enable cubesatsim
FLAG=1
fi
@ -523,6 +684,21 @@ else
FLAG=1
fi
FILE=/etc/systemd/system/pacsatsim.service
if [ -f "$FILE" ]; then
if [[ $(diff /home/pi/CubeSatSim/systemd/pacsatsim.service /etc/systemd/system/pacsatsim.service) ]]; then
echo "changed pacsatsim.service."
sudo cp /home/pi/CubeSatSim/systemd/pacsatsim.service /etc/systemd/system/pacsatsim.service
FLAG=1
else
echo "no change to pacsatsim.service."
fi
else
echo "creating pacsatsim.service."
sudo cp /home/pi/CubeSatSim/systemd/pacsatsim.service /etc/systemd/system/pacsatsim.service
FLAG=1
fi
FILE=/etc/asound.conf
if [ -f "$FILE" ]; then
if [[ $(diff /home/pi/CubeSatSim/asound.conf /etc/asound.conf) ]]; then
@ -655,9 +831,15 @@ cd
#fi
sed -i 's/quick_exec=0/quick_exec=1/' ~/.config/libfm/libfm.conf
sudo apt install -y raspberrypi-ui-mods
sudo apt autoremove -y
if [ "$noreboot" = "0" ] ; then
if [ $FLAG -eq 1 ]; then
if [ $FLAG -eq 1 ]; then # Not sure if this is needed
echo "systemctl daemon-reload and reboot"
sudo systemctl daemon-reload
sudo reboot -h now

71
log

@ -2,16 +2,65 @@
echo -e "\nLog file script for CubeSatSim\n"
if [ "$1" = "-r" ] || [ "$1" = "-t" ] ; then
sudo journalctl -a -u transmit > /home/pi/CubeSatSim/logt.txt
cat /home/pi/CubeSatSim/logt.txt
echo -e "\nTransmit Log file also saved as /home/pi/CubeSatSim/logt.txt"
elif [ "$1" = "-c" ]; then
sudo journalctl -a -u command > /home/pi/CubeSatSim/logc.txt
cat /home/pi/CubeSatSim/logc.txt
echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logc.txt"
if [ "$1" = "-h" ] ; then
echo "Displays systemd logs for the chose process. The choices are:"
echo " -d cubesatsim (also no choice gives you this)"
echo " -t transmit"
echo " -c command and control"
echo " -p pacsat"
echo "Default is the log is dumpted to the screen and written to a file."
echo "If an additional r is included, the log is realtime, and exits with a Control-C"
echo
exit
fi
REALTIME=0
if [ "$2" = "r" ] ; then
REALTIME=1
fi
if [ "$REALTIME" = "1" ] ; then
echo "To exit, type Control-C"
echo
sleep 2
if [ "$1" = "-r" ] || [ "$1" = "-t" ] ; then
sudo journalctl -af -u transmit # > /home/pi/CubeSatSim/logt.txt
# cat /home/pi/CubeSatSim/logt.txt
# echo -e "\nTransmit Log file also saved as /home/pi/CubeSatSim/logt.txt"
elif [ "$1" = "-c" ]; then
sudo journalctl -af -u command # > /home/pi/CubeSatSim/logc.txt
cat /home/pi/CubeSatSim/logc.txt
# echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logc.txt"
elif [ "$1" = "-p" ]; then
sudo journalctl -af -u pacsatsim # > /home/pi/CubeSatSim/logp.txt
cat /home/pi/CubeSatSim/logp.txt
# echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt"
else
sudo journalctl -af -u cubesatsim # > /home/pi/CubeSatSim/log.txt
# cat /home/pi/CubeSatSim/log.txt
# echo -e "\nLog file also saved as /home/pi/CubeSatSim/log.txt"
fi
else
sudo journalctl -a -u cubesatsim > /home/pi/CubeSatSim/log.txt
cat /home/pi/CubeSatSim/log.txt
echo -e "\nLog file also saved as /home/pi/CubeSatSim/log.txt"
if [ "$1" = "-r" ] || [ "$1" = "-t" ] ; then
sudo journalctl -a -u transmit > /home/pi/CubeSatSim/logt.txt
cat /home/pi/CubeSatSim/logt.txt
echo -e "\nTransmit Log file also saved as /home/pi/CubeSatSim/logt.txt"
elif [ "$1" = "-c" ]; then
sudo journalctl -a -u command > /home/pi/CubeSatSim/logc.txt
cat /home/pi/CubeSatSim/logc.txt
echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logc.txt"
elif [ "$1" = "-p" ]; then
sudo journalctl -a -u pacsatsim > /home/pi/CubeSatSim/logp.txt
cat /home/pi/CubeSatSim/logp.txt
echo -e "\nCommand and Control Log file also saved as /home/pi/CubeSatSim/logp.txt"
else
sudo journalctl -a -u cubesatsim > /home/pi/CubeSatSim/log.txt
cat /home/pi/CubeSatSim/log.txt
echo -e "\nLog file also saved as /home/pi/CubeSatSim/log.txt"
fi
fi

133
main.c

@ -261,13 +261,28 @@ int main(int argc, char * argv[]) {
printf("Mode is Repeater\n");
} else if ( mode_string == 'n') {
mode = TXCOMMAND;
printf("Mode is Transmit Command\n");
} else {
printf("Mode is Transmit Command\n");
} else if ( mode_string == 'p') {
mode = PACSAT;
printf("Mode is Pacsat\n");
} else if ( mode_string == 'P') {
mode = PACSATGND;
printf("Mode is Pacsat Ground Station\n");
} else {
printf("Mode is BPSK\n");
}
}
}
/*
if ( mode == PACSAT) {
FILE * pacsat_file = popen("sudo systemctl restart pacsatsim", "r");
pclose(pacsat_file);
}
else {
FILE * pacsat_file = popen("sudo systemctl stop pacsatsim", "r");
pclose(pacsat_file);
}
*/
// Open telemetry file with STEM Payload Data
telem_file = fopen("/home/pi/CubeSatSim/telem.txt", "a");
if (telem_file == NULL)
@ -315,13 +330,15 @@ int main(int argc, char * argv[]) {
map[MINUS_X] = MINUS_Y;
map[PLUS_Z] = MINUS_X;
map[MINUS_Y] = PLUS_Z;
/*
if (access("/dev/i2c-11", W_OK | R_OK) >= 0) { // Test if I2C Bus 11 is present
printf("/dev/i2c-11 is present\n\n");
snprintf(busStr, 10, "%d %d", test_i2c_bus(1), test_i2c_bus(11));
} else {
snprintf(busStr, 10, "%d %d", i2c_bus1, i2c_bus3);
}
*/
snprintf(busStr, 10, "%d %d", i2c_bus1, i2c_bus3);
FILE * os_test = popen("cat /etc/os-release", "r");
fgets(cmdbuffer, 1000, os_test);
@ -503,8 +520,9 @@ int main(int argc, char * argv[]) {
printf("\n FSK Mode, %d bits per frame, %d bits per second, %d ms per frame, %d ms sample period\n",
bufLen / (samples * frameCnt), bitRate, frameTime, samplePeriod);
} else if (mode == BPSK) {
} else if ((mode == BPSK) || (mode == PACSAT) || (mode == PACSATGND)) {
//// } else {
bitRate = 1200;
rsFrames = 3;
payloads = 6;
@ -526,8 +544,11 @@ int main(int argc, char * argv[]) {
frameTime = ((float)((float)bufLen / (samples * frameCnt * bitRate))) * 1000; // frame time in ms
printf("\n BPSK Mode, bufLen: %d, %d bits per frame, %d bits per second, %d ms per frame %d ms sample period\n",
bufLen, bufLen / (samples * frameCnt), bitRate, frameTime, samplePeriod);
if (mode == BPSK)
printf("\n BPSK Mode, bufLen: %d, %d bits per frame, %d bits per second, %d ms per frame %d ms sample period\n",
bufLen, bufLen / (samples * frameCnt), bitRate, frameTime, samplePeriod);
else
printf("\n dataLen: %d \n", dataLen);
sin_samples = S_RATE/freq_Hz;
// printf("Sin map: ");
@ -580,15 +601,8 @@ int main(int argc, char * argv[]) {
memset(sensor, 0, sizeof(sensor));
memset(other, 0, sizeof(other));
// if (((mode == FSK) || (mode == BPSK))) // && !sim_mode)
if (mode == FSK) { // && !sim_mode)
get_tlm_fox();
// get_tlm_fox();
}
if (mode == BPSK) { // && !sim_mode)
if ((mode == FSK) || (mode == BPSK) || (mode == PACSAT) || (mode == PACSATGND)) // && !sim_mode)
get_tlm_fox(); // fill transmit buffer with reset count 0 packets that will be ignored
// get_tlm_fox();
}
else if (mode == FC) // && !sim_mode)
get_tlm_fc(); // fill transmit buffer with reset count 0 packets that will be ignored
else if (mode == CW)
@ -605,6 +619,8 @@ int main(int argc, char * argv[]) {
strcat(pythonConfigStr, " c");
fprintf(stderr, "pythonConfigStr: %s\n", pythonConfigStr);
FILE *file2 = sopen(pythonVenv); // activate venv
file1 = sopen(pythonConfigStr); // python sensor polling function
@ -1028,6 +1044,7 @@ int main(int argc, char * argv[]) {
}
if (sim_mode) { // simulated telemetry
printf("Simulated telemetry mode\n");
double time = ((long int)millis() - time_start) / 1000.0;
@ -1066,9 +1083,9 @@ int main(int argc, char * argv[]) {
// float charging = eclipse * (fabs(amps_max[0] * 0.707) + fabs(amps_max[1] * 0.707) + rnd_float(-4.0, 4.0));
// current[map[BAT]] = ((current[map[BAT2]] * voltage[map[BAT2]]) / batt) - charging;
current[map[BAT]] = rnd_float(320, 510) - charging;
current[map[BAT]] = rnd_float(320, 510) - charging;
printf("charging: %f bat curr: %f bus curr: %f bat volt: %f bus volt: %f \n",charging, current[map[BAT]], current[map[BAT2]], batt, voltage[map[BAT2]]);
printf("charging: %f bat curr: %f bus curr: %f bat volt: %f bus volt: %f \n",charging, current[map[BAT]], current[map[BAT2]], batt, voltage[map[BAT2]]);
batt -= (batt > 3.5) ? current[map[BAT]] / 300000 : current[map[BAT]] / 30000;
if (batt < 3.6) {
@ -1275,11 +1292,11 @@ int main(int argc, char * argv[]) {
sleep(rand_sleep);
// fprintf(stderr, "INFO: Sleeping for extra %d sec\n", rand_sleep);
} else if ((mode == FSK) || (mode == BPSK)) {// FSK or BPSK
} else if ((mode == FSK) || (mode == BPSK) || (mode == PACSAT) || (mode == PACSATGND)) {// FSK or BPSK
get_tlm_fox();
} else if ((mode == FC)) {
get_tlm_fc();
} else { // SSTV
} else { // SSTV or PACSATGND
// fprintf(stderr, "Sleeping\n");
sleep(30);
}
@ -1560,6 +1577,8 @@ void get_tlm_fox() {
smaller = (int)(S_RATE / (2 * freq_Hz));
// if (mode == PACSAT)
// dataLen = 78;
short int b[dataLen];
short int b_max[dataLen];
short int b_min[dataLen];
@ -1629,7 +1648,10 @@ void get_tlm_fox() {
sampleTime = (unsigned int)millis();
} else
printf("first or second time - no sleep\n");
{
printf("first time - no sleep\n");
firstTime = OFF;
}
printf("++++ Loop time: %5.3f sec +++++\n", (millis() - loopTime) / 1000.0);
fflush(stdout);
@ -1640,7 +1662,6 @@ void get_tlm_fox() {
for (int count1 = 0; count1 < 8; count1++) {
if (voltage[count1] < voltage_min[count1]) voltage_min[count1] = voltage[count1];
if (current[count1] < current_min[count1]) current_min[count1] = current[count1];
if (voltage[count1] > voltage_max[count1]) voltage_max[count1] = voltage[count1];
if (current[count1] > current_max[count1]) current_max[count1] = current[count1];
@ -1998,8 +2019,8 @@ void get_tlm_fox() {
encodeB(b, 52 + head_offset, rxAntennaDeployed + txAntennaDeployed * 2 + c2cStatus * 4);
encodeA(b, 53 + head_offset, groundCommandCount);
if (mode == BPSK) {
encodeA(b_max, 51 + head_offset, status);
if ((mode == BPSK) || (mode == PACSAT) || (mode == PACSATGND)) {
encodeA(b_max, 51 + head_offset, status);
encodeA(b_min, 51 + head_offset, status);
encodeB(b_max, 52 + head_offset, rxAntennaDeployed + txAntennaDeployed * 2 + c2cStatus * 4);
encodeB(b_min, 52 + head_offset, rxAntennaDeployed + txAntennaDeployed * 2 + c2cStatus * 4);
@ -2020,8 +2041,38 @@ void get_tlm_fox() {
encodeA(b, 65 + head_offset, val >> 8);
encodeA(b, 63 + head_offset, 0x00);
encodeA(b, 62 + head_offset, 0x01);
encodeB(b, 74 + head_offset, 0xfff);
encodeB(b, 74 + head_offset, 0xfff);
}
if ((mode == PACSAT) || (mode == PACSATGND))
{
FILE *telem_binary = fopen("/home/pi/CubeSatSim/tlm.bin", "wb");
if (telem_binary != NULL) {
int bytes_written = 4;
unsigned int now = (unsigned int)time(0);
fwrite(&now, sizeof(now), 1, telem_binary);
int count;
char byte;
printf("b is: \n");
for (count = 0; count < dataLen; count++) {
byte = b[count];
fwrite(&byte, 1, 1, telem_binary);
printf("%02X ", byte);
bytes_written++;
}
printf("\n");
printf("Writing %d bytes to tlm.bin\n", bytes_written + 4);
fclose(telem_binary);
}
else
printf("Error opening tlm.bin\n");
}
else
{ // extra bracket for some reason?
{
short int data10[headerLen + rsFrames * (rsFrameLen + parityLen)];
short int data8[headerLen + rsFrames * (rsFrameLen + parityLen)];
@ -2310,22 +2361,25 @@ void get_tlm_fox() {
// max -= 1;
}
/// if (sock_ret == -1) {
/// printf("Error: %s \n", strerror(errno));
/// socket_open = 0;
// transmitStatus = -1;
/// }
/// }
if (socket_open == 1)
firstTime = 0;
// else if (frames_sent > 0) //5)
// firstTime = 0;
}
} // extra bracket for some reason?
if (!transmit) {
fprintf(stderr, "\nNo CubeSatSim Band Pass Filter detected. No transmissions after the CW ID.\n");
fprintf(stderr, " See http://cubesatsim.org/wiki for info about building a CubeSatSim\n\n");
}
/// if (socket_open == 1)
/// firstTime = 0;
// else if (frames_sent > 0) //5)
// firstTime = 0;
// if (firstTime && (mode == PACSAT))
// {
// firstTime = OFF;
// fprintf(stderr, "No longer first time\n");
// fflush(stdout);
// }
return;
}
@ -2664,9 +2718,8 @@ if (setting == ON) {
FILE *command = popen("touch /home/pi/CubeSatSim/battery_saver", "r");
pclose(command);
fprintf(stderr,"Turning Safe Mode ON\n");
fprintf(stderr,"Turning Battery saver mode ON\n");
battery_saver_mode = ON;
if ((mode == AFSK) || (mode == SSTV) || (mode == CW)) {
fprintf(stderr,"Turning Battery saver mode ON\n");
if ((mode == AFSK) || (mode == SSTV) || (mode == CW) || (mode == PACSAT) || (mode == PACSATGND)) {
command = popen("echo 'reboot due to turning ON Safe Mode!' | wall", "r");
pclose(command);
command = popen("sudo reboot now", "r");
@ -2683,7 +2736,7 @@ if (setting == ON) {
pclose(command);
fprintf(stderr,"Turning Battery saver mode OFF\n");
battery_saver_mode = OFF;
if ((mode == AFSK) || (mode == SSTV) || (mode == CW)) {
if ((mode == AFSK) || (mode == SSTV) || (mode == CW) || (mode == PACSAT) || (mode == PACSATGND)) {
command = popen("echo 'reboot due to turning OFF Safe Mode!' | wall", "r");
pclose(command);
command = popen("sudo reboot now", "r");

@ -125,7 +125,9 @@ FILE *image_file;
#define CW 5
#define FC 6
#define REPEATER 7
#define PACSAT 8
#define TXCOMMAND 12
#define PACSATGND 13
#define FAIL_COUNT 11
#define FAIL_NONE -1
@ -200,6 +202,7 @@ char sensor_string[SENSOR_FIELDS][32];
int test_i2c_bus(int bus);
//const char pythonCmd[] = "python3 -u /home/pi/CubeSatSim/python/voltcurrent.py ";
const char pythonVenv[] = "source /home/pi/venv/bin/activate";
const char pythonCmd[] = "/home/pi/venv/bin/python3 -u /home/pi/CubeSatSim/ina219.py ";
char pythonStr[100], pythonConfigStr[100], busStr[10];
int map[8] = {0, 1, 2, 3, 4, 5, 6, 7};

@ -0,0 +1,322 @@
#!/bin/bash
# script to run PacsatSim
loopback=0
vox=0
safe=0
card=0
pwm=0
if [ "$1" = "l" ] ; then
loopback=1
elif [ "$1" = "v" ] ; then
vox=1
elif [ "$1" = "c" ] ; then
card=1
else
pwm=1
fi
FILE=/home/pi/CubeSatSim/battery_saver
if [ -f "$FILE" ]; then
safe=1
fi
if [[ $(arecord -l | grep "USB Audio Device") ]] ; then
echo "USB Sound Card detected"
soundcard=1
else
echo "No USB Sound Card detected"
soundcard=0
fi
gpio -g mode 7 up
if [[ $(gpio -g read 7 | grep 0) ]] ; then
echo "TXC is present"
txc=1
else
echo "TXC not present"
txc=0
fi
timeout 1 rtl_test &> out.txt
if [[ $(grep "No supported" out.txt) ]] ; then
echo "No RTL-SDR detected"
rtl=0
else
echo "RTL-SDR detected."
rtl=1
fi
value=`cat /home/pi/CubeSatSim/sim.cfg`
echo "$value" > /dev/null
set -- $value
callsign="$1"
txfrequency="$7e3"
rxfrequency="$8e3"
echo -n "PacSat allsign is "
echo $callsign
echo -n "Transmit Frequency is "
echo $txfrequency
echo -n "Receive Frequency is "
echo $rxfrequency
echo
sleep 2
if [ ! -d "/home/pi/PacSat" ]; then
echo "Setting up PacSatSim default configuration"
echo
cd
sudo rm pacsat-dir.zip
mkdir PacSat
mkdir PacSat/pacsat
mkdir PacSat/pacsat/dir
wget https://github.com/alanbjohnston/pi_pacsat/releases/download/v0.1/pacsat-dir.zip
unzip pacsat-dir.zip -d PacSat/pacsat/dir
sudo rm pacsat-dir.zip
cd
sudo rm /home/pi/pi_pacsat/Debug/pacsat.config
sudo rm /home/pi/pi_pacsat/Debug/pacsat.state
sudo rm /home/pi/pi_pacsat/Debug/pacsat_upload_table.dat
sudo rm pi_pacsat.zip
wget https://github.com/alanbjohnston/pi_pacsat/releases/download/v0.1/pi_pacsat.zip
unzip pi_pacsat.zip -d /home/pi/pi_pacsat/Debug
sudo rm pi_pacsat.zip
# mkdir /home/pi/PacSat
# mkdir /home/pi/PacSat/pacsat
# mkdir /home/pi/PacSat/pacsat/dir
# cd /home/pi/pi_pacsat/Debug
# sudo rm pacsat_last_command_time.dat
# sudo rm pacsat_upload_table.dat
# sudo rm pacsat.state
# echo "bit_rate=9600" > pacsat.config
# echo "bbs_callsign=AMSAT-12" >> pacsat.config
# echo "broadcast_callsign=AMSAT-11" >> pacsat.config
# echo "digi_callsign=AMSAT-1" >> pacsat.config
# echo "max_frames_in_tx_buffer=5" >> pacsat.config
# echo "pb_open=1" > pacsat.state
# echo "uplink_open=1" >> pacsat.state
# echo "pb_max_period_for_client_in_seconds=60" >> pacsat.state
# echo "uplink_max_period_for_client_in_seconds=60" >> pacsat.state
# touch /home/pi/pi_pacsat/Debug/pacsat_upload_table.dat
fi
value=`cat /home/pi/CubeSatSim/sim.cfg`
echo "$value" > /dev/null
set -- $value
callsign="$1"
frequency="$7e3"
echo "Configured callsign is "
echo $callsign
oldcallsign=$(grep -oP '(?<=bbs_callsign=).*(?=-)' /home/pi/pi_pacsat/Debug/pacsat.config)
echo "Callsign in pacsat.config is "
echo $oldcallsign
if [ ! "$callsign" = "$oldcallsign" ] ; then
sudo sed -i "s/bbs_callsign=$oldcallsign/bbs_callsign=$callsign/g" /home/pi/pi_pacsat/Debug/pacsat.config
sudo sed -i "s/broadcast_callsign=$oldcallsign/broadcast_callsign=$callsign/g" /home/pi/pi_pacsat/Debug/pacsat.config
sudo sed -i "s/digi_callsign=$oldcallsign/digi_callsign=$callsign/g" /home/pi/pi_pacsat/Debug/pacsat.config
echo "New pacsat.confg is"
echo
cat /home/pi/pi_pacsat/Debug/pacsat.config
fi
sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsa-utils start
# export LD_LIBRARY_PATH=/mnt/usb-disk/ariss/lib:/usr/local/lib/iors_common:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
#sudo systemctl stop cubesatsim
#sudo systemctl stop transmit
#sudo systemctl stop command &>/dev/null
sudo modprobe snd-aloop
#sudo systemctl stop openwebrx
#sudo systemctl stop rtl_tcp &>/dev/null
#pkill -o chromium &>/dev/null
#sudo killall -9 rtl_fm &>/dev/null
#sudo killall -9 direwolf &>/dev/null
#udo killall -9 aplay &>/dev/null
#sudo killall -9 qsstv &>/dev/null
#sudo killall -9 rtl_tcp &>/dev/null
#sudo killall -9 java &>/dev/null
#sudo killall -9 CubicSDR &>/dev/null
#sudo killall -9 zenity &>/dev/null
sudo killall -9 pacsat_telem &>/dev/null
sudo killall -9 pi_pacsat &>/dev/null
echo
#choice=2
#fi
# frequency=434900000
echo
echo "If your Pacsat Ground Station is transmitting packets, you will see them here"
echo
#echo
#echo "Note that the 'Tuned to' frequency will be different from the chosen frequency due to the way SDRs work."
# echo -e "Auto decoding APRS Pacsat packets on $frequency Hz"
# direwolf -P+ -D1 -qd -dp -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf-pacsatsim-loopback.conf -t 0 &
# /usr/bin/x-terminal-emulator --geometry=120x40 -e "/home/pi/CubeSatSim/pacsatsim-df.sh"
sudo usermod -a -G gpio pi
if [ "$loopback" = "1" ] ; then
echo "Using audio loopback"
ADEVICE="ADEVICE plughw:CARD=Loopback,DEV=0"
PTT="PTT GPIOD gpiochip0 17"
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
MODE=$1
if [ ! "$MODE" = "P" ] ; then
/home/pi/CubeSatSim/config -I n
fi
# sudo /home/pi/CubeSatSim/pacsatsim-d.sh &
# direwolf -P+ -D1 -qd -dp -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf-pacsatsim-loopback.conf -t 0 &
elif [ "$safe" = "1" ] ; then
echo "Safe mode - battery saver"
# sudo /home/pi/CubeSatSim/pacsatsim-d.sh &
ADEVICE="ADEVICE shared_mic plughw:CARD=Loopback,DEV=0"
PTT="PTT GPIOD gpiochip0 17"
# direwolf -P+ -D1 -qd -dp -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf-pacsatsim-pwm-loopback.conf -t 0 &
# arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f 434900 &
# arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f $frequency &
elif [ "$vox" = "1" ]; then
echo "Using Soundcard Audio TX and RX (VOX, no PTT)"
ADEVICE="ADEVICE plughw:CARD=Device,DEV=0"
PTT="PTT GPIOD gpiochip0 17"
# sudo /home/pi/CubeSatSim/pacsatsim-dj.sh &
# direwolf -P+ -D1 -qd -dp -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf-pacsatsim-jp14-half.conf -t 0 &
elif [ "$pwm" = "1" ] ; then
echo "FM TXC using Soundcard input (JP13), PWM output"
ADEVICE="ADEVICE shared_mic plughw:CARD=Headphones,DEV=0"
PTT="PTT GPIOD gpiochip0 -20"
# direwolf -P+ -D1 -qd -dp -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf-pacsatsim-pwm.conf -t 0 &
else
echo "FM TXC using Soundcard input (JP13) and output (JP14)"
ADEVICE="ADEVICE shared_mic plughw:CARD=Device,DEV=0"
PTT="PTT GPIOD gpiochip0 -20"
# direwolf -P+ -D1 -qd -dp -r 48000 -c /home/pi/CubeSatSim/direwolf/direwolf-pacsatsim-jp14.conf -t 0 &
fi
DIREWOLF_CONF="/home/pi/CubeSatSim/direwolf-pacsatsim-tmp.conf"
echo "$ADEVICE" > $DIREWOLF_CONF
echo "MYCALL $callsign-1" >> $DIREWOLF_CONF
echo "$PTT" >> $DIREWOLF_CONF
cat /home/pi/CubeSatSim/direwolf/direwolf-pacsatsim.conf >> $DIREWOLF_CONF
echo
echo "$DIREWOLF_CONF"
echo
cat $DIREWOLF_CONF
echo
direwolf -P+ -D1 -qd -dp -r 48000 -c $DIREWOLF_CONF -t 0 &
# arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 14000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f 434900 &
## arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f 434900 &
## echo "Don't close the direwolf window or the Pacsatsim will stop running."
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
/home/pi/pacsat_telem/Debug/pacsat_telem -v -d /home/pi/PacSat/pacsat &
sleep 5
value=`aplay -l | grep "Loopback"`
echo "$value" > /dev/null
set -- $value
#rtl_fm -M fm -f $frequency -s 48k | tee >(aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1) | aplay -D hw:0,0 -r 48000 -t raw -f S16_LE -c 1 &
cd /home/pi/pi_pacsat/Debug
./pi_pacsat -c pacsat.config -d /home/pi/PacSat
sleep 60

@ -0,0 +1,15 @@
Pacsat Telemetry Decoder Properties
#Sat Nov 26 18:12:20 EST 2016
numberOfLookupTables=0
measurementsFileName=measurements.csv
model=1
layout0.filename=PACSAT_rttelemetry.csv
layout0.name=TLMI_LAYOUT
passMeasurementsFileName=passmeasurements.csv
name=PacSatSim
description=PacSatSim
numberOfLayouts=1
satId=3
catalogNumber=0
conversionCoefficients=pacsat-coef.csv
layoutsUseBits=True

@ -0,0 +1,20 @@
#PacSat Ground Station Properties
#Sun Feb 17 18:25:06 EST 2019
sequence_num=3
name=PacSatSim
digiCallsign=AMSAT-1
description=PacSatSim
broadcastCallsign=AMSAT-11
DIR_AGE=10
bbsCallsign=AMSAT-12
telemLayoutFile=PacSatSim.dat
telem_server=tlm.amsatfox.org
web_site_url=http://CubeSatSim.org
show_system_files_on_dir_tab=false
show_user_files=true
supports_file_upload=true
norad_id=30776
psf_header_check_sums=false
commandsFile=pacsat.commands
is_command_station=true
secret_key=ScKQLp2ZMvCaCTK5jAmOmKmA0JiSyJ6Y15+Yfg\=\=

@ -0,0 +1,41 @@
0,-,NONE,0,1,0,0,0,0,None,0,4096,None
1,-,Boolean,0,1,0,0,0,0,Boolean,0,1,A Boolean value that prints TRUE or FALSE
2,-,Counts,0,1,0,0,0,0,Counts,0,4096,An integer count value
3,-,Date,0,1,0,0,0,0,Date,0,4096,A Unix epoch date time integer
4,-,TXPower,0,1,0,0,0,0,None,0,4096,None
5,-,IHUSpeed,0,0.1,0,0,0,0,None,0,4096,None
6,-,RSSI_1,0,-1,0,0,0,0,Counts,0,4096,Signed 8 bit
7,-,Mode,0,0,0,0,0,0,Enum,0,4096,SAFE:CREW:TELEM:X BAND RPT:APRS:SSTV:FS
8,-,Battery,0,0.001,0,0,0,0,None,0,4096,Battery Voltage
9,-,IHUTemp,0,0.1,0,0,0,0,None,0,4096,None
10,-,Mode,0,1,0,0,0,0,None,0,4096,The spacecraft Mode
11,-,FS_BYTES_PER_BLK,0,128,0,0,0,0,Counts,0,4096,The number of bytes per block in RED FS
12,-,FS_FILE_NUMBER,-4,1,0,0,0,0,Counts,0,4096,The number of files in the FS excluding core OS folders
13,-,SHTC3Temp,-45,0.002670288,0,0,0,0,None,0,4096,SHTC3 Temperature sensor
14,-,SHTC3Humidity,0,0.001525879,0,0,0,0,None,0,4096,SHTC3 Humidity sensor
15,-,LPS22Pressure,0,0.000244141,0,0,0,0,None,0,4096,LPS22 Pressure sensor
16,-,LPS22Temp,0,0.01,0,0,0,0,None,0,4096,LPS22 Temperature of sensor
17,-,IMUTemp,0,0.00390625,0,0,0,0,None,0,4096,Temperature of IMU = raw/256
18,-,Acc,0,6.10E-05,0,0,0,0,Sint16,0,4096,Accelerometer is 2g full scale
19,-,Gyro,0,0.000976563,0,0,0,0,Sint16,0,4096,Gyro scale for 32dps
20,-,Mag,0,0.149975574,0,0,0,0,Sint16,0,4096,Mag is 4912 full scale
21,-,AntMode,0,0,0,0,0,0,Enum,0,4096,MANUAL:AUTO:ORBIT
22,-,ResetReason,0,0,0,0,0,0,Enum,0,4096,NONE:SHUTDOWN:REBOOT:RADIO:TNC:TNC LISTEN:RUN TWICE:RADIO REBOOT:TNC PS REBOOT:TNC REBOOT:SOFT:THERMAL
23,-,LogLevel,0,0,0,0,0,0,Enum,0,4096,NONE:ERROR:WARN:INFO
24,-,O2FromVolts,86.434,-0.0354,0,0,0,0,None,0,4096,O2 Conc from raw voltage as a percentage
25,-,SensorState,0,0,0,0,0,0,Enum,0,4096,OFF:ON:ERR
26,-,SPARE2,0,0,0,0,0,0,Counts,0,4096,SPARE
27,-,O2Conc,0,0.01,0,0,0,0,Sint16,0,4096,O2 concentration as percentage
28,-,SSTVMode,0,0,0,0,0,0,Enum,0,4096,MartinM1:MartinM2:ScottieS1:ScottieS2:Robot36:PasokonP3:PasokonP5:PasokonP7:PD90:PD120:PD160:PD180:PD240:PD290:Robot8BW:Robot24BW
29,-,DivideBy100,0,0.01,0,0,0,0,None,0,4096,Divide by 100
30,-,DivideBy100Offset,-20.48,0.01,0,0,0,0,None,0,4096,Divide by 100 with Offset
31,-,Offset,-2048,1,0,0,0,0,Counts,0,4096,Offset
32,-,DivideBy10Offset,-204.8,0.1,0,0,0,0,None,0,4096,Divide by 10 with Offset
33,-,Status,0,0,0,0,0,0,Enum,0,4096,OFF:ON
34,-,CommandStatus,0,0,0,0,0,0,Enum,0,4096,OFF:Carrier:DTMF/APRS
35,-,FailStatus,0,0,0,0,0,0,Enum,0,4096,OK:FAIL
36,-,AntStatus,0,0,0,0,0,0,Enum,0,4096,STOWED:DEPLOYED
37,-,Times10,0,10.0,0,0,0,0,Counts,0,4096,Multiply by 10
NOTES:,,,,,,,,,,,,
Serial,Ignore,name,a,b,c,d,e,f,format,low limit,high limit,Comment
Echo value = a + bx + cx^2 + dx^3 + ex^4 + fx^5,Echo value = a + bx + cx^2 + dx^3 + ex^4 + fx^5,,,,,,,,,,,
1 0 - NONE 0 1 0 0 0 0 None 0 4096 None
2 1 - Boolean 0 1 0 0 0 0 Boolean 0 1 A Boolean value that prints TRUE or FALSE
3 2 - Counts 0 1 0 0 0 0 Counts 0 4096 An integer count value
4 3 - Date 0 1 0 0 0 0 Date 0 4096 A Unix epoch date time integer
5 4 - TXPower 0 1 0 0 0 0 None 0 4096 None
6 5 - IHUSpeed 0 0.1 0 0 0 0 None 0 4096 None
7 6 - RSSI_1 0 -1 0 0 0 0 Counts 0 4096 Signed 8 bit
8 7 - Mode 0 0 0 0 0 0 Enum 0 4096 SAFE:CREW:TELEM:X BAND RPT:APRS:SSTV:FS
9 8 - Battery 0 0.001 0 0 0 0 None 0 4096 Battery Voltage
10 9 - IHUTemp 0 0.1 0 0 0 0 None 0 4096 None
11 10 - Mode 0 1 0 0 0 0 None 0 4096 The spacecraft Mode
12 11 - FS_BYTES_PER_BLK 0 128 0 0 0 0 Counts 0 4096 The number of bytes per block in RED FS
13 12 - FS_FILE_NUMBER -4 1 0 0 0 0 Counts 0 4096 The number of files in the FS excluding core OS folders
14 13 - SHTC3Temp -45 0.002670288 0 0 0 0 None 0 4096 SHTC3 Temperature sensor
15 14 - SHTC3Humidity 0 0.001525879 0 0 0 0 None 0 4096 SHTC3 Humidity sensor
16 15 - LPS22Pressure 0 0.000244141 0 0 0 0 None 0 4096 LPS22 Pressure sensor
17 16 - LPS22Temp 0 0.01 0 0 0 0 None 0 4096 LPS22 Temperature of sensor
18 17 - IMUTemp 0 0.00390625 0 0 0 0 None 0 4096 Temperature of IMU = raw/256
19 18 - Acc 0 6.10E-05 0 0 0 0 Sint16 0 4096 Accelerometer is 2g full scale
20 19 - Gyro 0 0.000976563 0 0 0 0 Sint16 0 4096 Gyro scale for 32dps
21 20 - Mag 0 0.149975574 0 0 0 0 Sint16 0 4096 Mag is 4912 full scale
22 21 - AntMode 0 0 0 0 0 0 Enum 0 4096 MANUAL:AUTO:ORBIT
23 22 - ResetReason 0 0 0 0 0 0 Enum 0 4096 NONE:SHUTDOWN:REBOOT:RADIO:TNC:TNC LISTEN:RUN TWICE:RADIO REBOOT:TNC PS REBOOT:TNC REBOOT:SOFT:THERMAL
24 23 - LogLevel 0 0 0 0 0 0 Enum 0 4096 NONE:ERROR:WARN:INFO
25 24 - O2FromVolts 86.434 -0.0354 0 0 0 0 None 0 4096 O2 Conc from raw voltage as a percentage
26 25 - SensorState 0 0 0 0 0 0 Enum 0 4096 OFF:ON:ERR
27 26 - SPARE2 0 0 0 0 0 0 Counts 0 4096 SPARE
28 27 - O2Conc 0 0.01 0 0 0 0 Sint16 0 4096 O2 concentration as percentage
29 28 - SSTVMode 0 0 0 0 0 0 Enum 0 4096 MartinM1:MartinM2:ScottieS1:ScottieS2:Robot36:PasokonP3:PasokonP5:PasokonP7:PD90:PD120:PD160:PD180:PD240:PD290:Robot8BW:Robot24BW
30 29 - DivideBy100 0 0.01 0 0 0 0 None 0 4096 Divide by 100
31 30 - DivideBy100Offset -20.48 0.01 0 0 0 0 None 0 4096 Divide by 100 with Offset
32 31 - Offset -2048 1 0 0 0 0 Counts 0 4096 Offset
33 32 - DivideBy10Offset -204.8 0.1 0 0 0 0 None 0 4096 Divide by 10 with Offset
34 33 - Status 0 0 0 0 0 0 Enum 0 4096 OFF:ON
35 34 - CommandStatus 0 0 0 0 0 0 Enum 0 4096 OFF:Carrier:DTMF/APRS
36 35 - FailStatus 0 0 0 0 0 0 Enum 0 4096 OK:FAIL
37 36 - AntStatus 0 0 0 0 0 0 Enum 0 4096 STOWED:DEPLOYED
38 37 - Times10 0 10.0 0 0 0 0 Counts 0 4096 Multiply by 10
39 NOTES:
40 Serial Ignore name a b c d e f format low limit high limit Comment
41 Echo value = a + bx + cx^2 + dx^3 + ex^4 + fx^5 Echo value = a + bx + cx^2 + dx^3 + ex^4 + fx^5

@ -0,0 +1,37 @@
# This is a list of commands that can be sent to the spacecraft
# args are 16 bit except the special code 99099099 which is replaced with the unix time, or when special code MSB32BIT is used to combine two fields
LIST, namespaces, None, Operations, Telem, File System
LIST, IMAGE FOLDER, sstv_queue 1, sstv_queue 2, sstv_queue 3, sstv_queue 4, sstv_queue 5, sstv_queue 6, sstv_queue 7, sstv_queue 8, sstv_queue 9
LIST, FOLDER, bin, lib, config, PACSAT dir, upload queue, wod queue, log queue, text queue, sensor wod queue, data1, data2, data3, data4, data5, data6, data7, data8, data9
LIST, ENABLE, false, true
LIST, ROLL AT STARTUP, false, true
LIST, OVERWRITE, false, true
LIST, FSK, false, true
LIST, REMOVE ORPHAN FILES, false, true
LIST, STATE, stop, start
LIST, UPLINK MODE, Off, All stations, Command Stations Only
LIST, FILENAME, use id for file name, user file name
LIST, SHUTDOWN, reboot, shutdown
LIST, RESET, reboot
LIST, RATE, 1200, 9600
LIST, FEC, Off, On
LIST, FULL DUPLEX, false, true
LIST, LOG NAME, Log, WOD
LIST, LOG LEVEL, None, Error, Warnings, Info
# Name, Name space, cmd, arg0, arg1, arg2, arg3, argName0, argName1, argName2, argName3, confirm, use reset/uptime, description
#
# PACSAT
#
Pacsat Broadcast,3,1,0,0,0,0,State,Period(sec),Timeout(sec),NONE,false,false,Enable or disable the Pacsat Broadcast module. The directory entries and individual files will be broadcast based on commands from ground stations.
File Uploads,3,2,0,0,0,0,Uplink Mode,Period(sec),Timeout(sec),NONE,false,false,Enable or disable File Uploads. Limit file uploads to command stations that authenticate with a secret key.
Install File,3,3,0,0,0,0,FileId,MSB32BIT,Folder,NONE,false,false,Copy a file from the PACSAT Directory to a folder and name it with a 4 byte hex name that matches the id or the user filename.
Execute File,3,13,0,0,0,0,FileId,MSB32BIT,Arg1,Arg2,true,false,Execute a file on the ARISS-PI. The file must already be installed in the bin folder
Delete File,3,4,0,0,0,0,FileId,MSB32BIT,Folder,NONE,true,false,Delete a file on the ARISS-PI. Typically this leaves the original copy in the PACSAT dir. To delete the original copy specify the PACSAT Dir folder
Delete Folder Contents,3,5,0,0,0,0,Folder,Remove Orphan Files,NONE,NONE,true,false,Remove all files from the folder. The original files will remain in the PACSAT Directory unless deleted seperately. Orphan files are files in a folder without a corresponding Pacsat Dir file. NB: Deleting the entire Pacsat Dir is a desperate measure perhaps only useful in testing!
Default File Expiry Period,3,6,0,0,0,0,Period(days),NONE,NONE,NONE,false,false,Set the default expiry period for files without a specific expiry time. The new value will be applied to all files.
File Expiry Period,3,7,0,0,0,0,FileId,MSB32BIT,Date,MSB32BIT,false,false,Set the expiry date for a specific file`.
Directory Maintenence Period,3,8,0,0,0,0,Period(s),NONE,NONE,NONE,false,false,Period between checks to each node in the directory for file expiry.
Uplink queue maintenance Period,3,9,0,0,0,0,Period(s),NONE,NONE,NONE,false,false,Period to check the entire uplink queue for expired files.
Int File Que Check Period,3,10,0,0,0,0,Period(s),NONE,NONE,NONE,false,false,Period to check the ingestion queues for newly generated internal files.
Max File Size,3,11,0,0,0,0,Size(kb),NONE,NONE,NONE,false,false,Maximum size for an uploaded file
Max Upload File Age,3,12,0,0,0,0,Age(days),NONE,NONE,NONE,false,false,Partially uploaded files not modified for more than this period will be removed from the upload queue.

@ -0,0 +1,18 @@
#Pacsat Telemetry Decoder Properties
#Fri Feb 6 18:12:20 EST 2026
numberOfLookupTables=0
measurementsFileName=measurements.csv
model=1
layoutsUseToCallsignAsType=true
numberOfLayouts=2
layout0.filename=PacSatSim_rttelemetry.csv
layout0.name=TLMP1
layout1.filename=PacSatSim_rttelemetry.csv
layout1.name=WOD
passMeasurementsFileName=passmeasurements.csv
name=CubeSatSim
description=PacSatSim
satId=3
catalogNumber=0
conversionCoefficients=PacSatSim-coef.csv
layoutsUseBits=True

@ -0,0 +1,21 @@
#PacSat Ground Station Properties
#Fri Feb 6 18:25:06 EST 2026
sequence_num=3
name=PacSatSim
digiCallsign=AMSAT-1
description=PacSatSim
broadcastCallsign=AMSAT-11
DIR_AGE=10
bbsCallsign=AMSAT-12
telemLayoutFile=PacSatSim.dat
telem_server=tlm.amsatfox.org
web_site_url=http://CubeSatSim.org
show_system_files_on_dir_tab=false
show_user_files=true
supports_file_upload=true
norad_id=30776
psf_header_check_sums=false
is_command_station=true
secret_key=Not-required
commandsFile=PacSatSim.commands
echo_to_stdout=true

@ -0,0 +1,13 @@
CurveName,a,bx,cx^2,dx^3,ex^4,fx^5,Description
cubesatsim_voltage,0,0.01,0,0,0,0,Converts voltages read from the INA219 sensors
cubesatsim_current,-2048,1,0,0,0,0,Converts positive and negative currents read from the INA219 sensors
cubesatsim_temperature,0,0.1,0,0,0,0,Converts temperature of Pi
cubesatsim_rotation,-2048,1,0,0,0,0,Converts positive and negative dps rotation
cubesatsim_acceleration,-20.48,0.01,0,0,0,0,Converts positive and negative g acceleration
cubesatsim_altitude,0,0.1,0,0,0,0,Converts altitude
cubesatsim_pressure,0,1,0,0,0,0,Converts pressure
cubesatsim_sensor1,0,1,0,0,0,0,Conversion of Sensor 1
cubesatsim_sensor2,-2048,1,0,0,0,0,Conversion of Sensor 2
cubesatsim_sensor3,-20.48,0.01,0,0,0,0,Conversion of Sensor 3
cubesatsim_rpm,-204.8,0.1,0,0,0,0,Conversion of calculated RPM
cubesatsim_rssi,-2048,1,0,0,0,0,Conversion of Received Signal Strength
1 CurveName a bx cx^2 dx^3 ex^4 fx^5 Description
2 cubesatsim_voltage 0 0.01 0 0 0 0 Converts voltages read from the INA219 sensors
3 cubesatsim_current -2048 1 0 0 0 0 Converts positive and negative currents read from the INA219 sensors
4 cubesatsim_temperature 0 0.1 0 0 0 0 Converts temperature of Pi
5 cubesatsim_rotation -2048 1 0 0 0 0 Converts positive and negative dps rotation
6 cubesatsim_acceleration -20.48 0.01 0 0 0 0 Converts positive and negative g acceleration
7 cubesatsim_altitude 0 0.1 0 0 0 0 Converts altitude
8 cubesatsim_pressure 0 1 0 0 0 0 Converts pressure
9 cubesatsim_sensor1 0 1 0 0 0 0 Conversion of Sensor 1
10 cubesatsim_sensor2 -2048 1 0 0 0 0 Conversion of Sensor 2
11 cubesatsim_sensor3 -20.48 0.01 0 0 0 0 Conversion of Sensor 3
12 cubesatsim_rpm -204.8 0.1 0 0 0 0 Conversion of calculated RPM
13 cubesatsim_rssi -2048 1 0 0 0 0 Conversion of Received Signal Strength

@ -0,0 +1,63 @@
62,TYPE,FIELD,BITS,UNIT,CONVERSION,MODULE,MODULE_NUM,MODULE_LINE,LINE_TYPE,SHORT_NAME,DESCRIPTION
0,long,timestamp,32,Sec,0,NONE,0,0,0,timestamp,This is the unix time in seconds
1,int,Sensor 2,12,integer,2,Experiments,6,8,3,Sensor 2,STEM Payload Extra Sensor 2
2,int,Sensor 3,12,integer,2,Experiments,6,9,3,Sensor 3,STEM Payload Extra Sensor 3
3,float,BATT_V,12,V,29,Battery,4,1,3,Battery Voltage,INA219 Battery Voltage
4,float,SatelliteXAxisAcceleration,12,g,30,+X Panel,7,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around X Axis
5,float,SatelliteYAxisAcceleration,12,g,30,+Y Panel,8,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Y Axis
6,float,SatelliteZAxisAcceleration,12,g,30,+Z Panel,9,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Z Axis
7,int,BATT_I,12,mA,31,Battery,4,2,3,Battery Current,INA219 Battery Current
8,float,Temperature,12,C,5,Experiments,6,2,3,BME280 Temp,BME280 STEM Payload sensor temperature
9,float,posXv,12,V,29,+X Panel,7,1,3,Voltage,INA219 +X solar panel Voltage
10,float,posYv,12,V,29,+Y Panel,8,1,3,Voltage,INA219 +Y solar panel Voltage
11,float,posZv,12,V,29,+Z Panel,9,1,3,Voltage,INA219 +Z solar panel Voltage
12,float,negXv,12,V,29,-X Panel,10,1,3,Voltage,INA219 -X solar panel Voltage
13,float,negYv,12,V,29,-Y Panel,11,1,3,Voltage,INA219 -Y solar panel Voltage
14,float,negZv,12,V,29,-Z Panel,12,1,3,Voltage,INA219 -Z solar panel Voltage
15,int,posXi,12,mA,31,+X Panel,7,2,3,Current,INA219 +X solar panel Current
16,int,posYi,12,mA,31,+Y Panel,8,2,3,Current,INA219 +Y solar panel Current
17,int,posZi,12,mA,31,+Z Panel,9,2,3,Current,INA219 +Z solar panel Current
18,int,negXi,12,mA,31,-X Panel,10,2,3,Current,INA219 -X solar panel Current
19,int,negYi,12,mA,31,-Y Panel,11,2,3,Current,INA219 -Y solar panel Current
20,int,negZi,12,mA,31,-Z Panel,12,2,3,Current,INA219 -Z solar panel Current
21,float,BATT2_V,12,V,29,Battery2,5,1,3,Battery2 Voltage,INA219 Battery2 Voltage
22,float,spin,12,rpm,32,Computer Software,3,1,3,Spacecraft Spin,Calculated spin rate using solar cells
23,int,Pressure,12,hPa,2,Experiments,6,3,3,BME280 Pressure,BME280 STEM Payload sensor pressure
24,float,Altitude,12,m,37,Experiments,6,4,3,BME280 Altitude,BME280 STEM Payload sensor altitude
25,float,Resets,12,-,12,NONE,3,2,3,Reset Count, Software Reset Count
26,float,rssi,12,dBm,31,Radio,1,1,3,RSSI,Received Signal Strength Indication
27,float,IHUcpuTemp,12,C,5,Computer Hardware,2,1,3,IHU Temp (Pi),Internal temperature of IHU from Pi
28,float,SatelliteXAxisAngularVelocity,12,dps,31,+X Panel,7,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around X Axis
29,float,SatelliteYAxisAngularVelocity,12,dps,31,+Y Panel,8,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Y Axis
30,float,SatelliteZAxisAngularVelocity,12,dps,31,+Z Panel,9,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Z Axis
31,float,Humidity,12,%,5,Experiments,6,5,3,BME280 Humidity,BME280 Humidity
32,int,BAT2_I,12,mA,31,Battery2,5,2,3,Battery2 Current,INA219 Battery2 Current
33,float,DiodeTemp,12,C,32,Experiments,6,6,3,Diode Temp,STEM Payload Diode Temperature
34,int,Sensor 1,12,integer,2,Experiments,6,7,3,Sensor 1,STEM Payload Extra Sensor 1
35,float,STEMPayloadStatus,1,-,35,Experiments,6,1,0,STEM Payload Status, STEM Payload STEM Payload board failure Indicator
36,float,SafeMode,1,-,33,Computer Software,3,2,0,Safe Mode, Safe Mode (Low Battery Voltage)
37,float,SimulatedTelemetry,1,-,33,Computer Software,3,4,0,Simulated Telemetry,Simulated Telemetry Indicator
38,float,PayloadStatus1,1,-,35,NONE,6,8,0,Exp 3,STEM Payload status 1 failure indicator
39,float,I2CBus0Failure,1,-,35,NONE,2,2,0,I2C Bus 0,I2C bus 0 failure indicator
40,float,I2CBus1Failure,1,-,35,Computer Hardware,2,2,0,I2C Bus 1,I2C bus 1 failure indicator
41,float,I2CBus3Failure,1,-,35,Computer Hardware,2,3,0,I2C Bus 3,I2C bus 3 failure indicator
42,float,CameraFailure,1,-,35,Computer Hardware,2,4,0,Camera,Camera failure indicator
43,int,GroundCommands,4,-,2,Computer Software,3,3,0,Ground Commands,Number of ground commands received
44,float,RxAntenna,1,-,36,Radio,1,3,0,RX Antenna,Receive antenna status
45,float,TxAntenna,1,-,36,Radio,1,2,0,TX Antenna,Transmit antenna status
46,float,C2CStatus,2,-,34,Computer Software,3,5,0,Command Control, Command & Control Status
47,float,ICR3VProt,12,V,0,NONE,7,2,3,3V Prot,ICR 3V Proteted
48,float,ICR2dot5V,12,V,0,NONE,7,3,3,2.5V,ICR 2.5V
49,float,ICR2dot5VProt,12,V,0,NONE,7,4,3,2.5V Prot,ICR 2.5V Protected
50,float,rf6,12,-,0,NONE,0,0,0,None,None
51,float,rf7,12,-,0,NONE,0,0,0,None,None
52,float,MuxTest,12,V,0,NONE,7,5,3,Sensor Power,Sensor Power Voltage at the ICR
53,float,LtVGACtl,12,V,0,NONE,1,4,3,VGA Control,Control Voltage to the Variable Gain Amplifier (VGA)
54,float,pad,4,-,34,NONE,0,0,0,None,Unused
55,float,IHUdiagData,32,-,18,NONE,3,2,0,Diagnostic Info,Diagnostic Data on IHU Performance
56,float,pad1,1,-,0,NONE,0,0,0,NONE,Filler
57,float,wodSize,8,000s,36,NONE,3,3,0,WOD Stored,Number of WOD data payloads kept for each of Science and Housekeeping. In hundreds
58,float,swCmds,32,-,35,NONE,7,6,0,Diagnostic,ICR Diagnostic information
59,float,hwCmdCnt,6,-,1,NONE,7,7,0,HW Command Count,Number of hardware commands since last reset
60,float,swCmdCnt,6,-,1,NONE,7,8,0,SW Command Count,Number of software commands since last reset
61,float,pad2,27,-,0,NONE,0,0,0,NONE,Filler
1 62 TYPE FIELD BITS UNIT CONVERSION MODULE MODULE_NUM MODULE_LINE LINE_TYPE SHORT_NAME DESCRIPTION
2 0 long timestamp 32 Sec 0 NONE 0 0 0 timestamp This is the unix time in seconds
3 1 int Sensor 2 12 integer 2 Experiments 6 8 3 Sensor 2 STEM Payload Extra Sensor 2
4 2 int Sensor 3 12 integer 2 Experiments 6 9 3 Sensor 3 STEM Payload Extra Sensor 3
5 3 float BATT_V 12 V 29 Battery 4 1 3 Battery Voltage INA219 Battery Voltage
6 4 float SatelliteXAxisAcceleration 12 g 30 +X Panel 7 4 3 Acceleration STEM Payload Board MPU6050 Acceleration around X Axis
7 5 float SatelliteYAxisAcceleration 12 g 30 +Y Panel 8 4 3 Acceleration STEM Payload Board MPU6050 Acceleration around Y Axis
8 6 float SatelliteZAxisAcceleration 12 g 30 +Z Panel 9 4 3 Acceleration STEM Payload Board MPU6050 Acceleration around Z Axis
9 7 int BATT_I 12 mA 31 Battery 4 2 3 Battery Current INA219 Battery Current
10 8 float Temperature 12 C 5 Experiments 6 2 3 BME280 Temp BME280 STEM Payload sensor temperature
11 9 float posXv 12 V 29 +X Panel 7 1 3 Voltage INA219 +X solar panel Voltage
12 10 float posYv 12 V 29 +Y Panel 8 1 3 Voltage INA219 +Y solar panel Voltage
13 11 float posZv 12 V 29 +Z Panel 9 1 3 Voltage INA219 +Z solar panel Voltage
14 12 float negXv 12 V 29 -X Panel 10 1 3 Voltage INA219 -X solar panel Voltage
15 13 float negYv 12 V 29 -Y Panel 11 1 3 Voltage INA219 -Y solar panel Voltage
16 14 float negZv 12 V 29 -Z Panel 12 1 3 Voltage INA219 -Z solar panel Voltage
17 15 int posXi 12 mA 31 +X Panel 7 2 3 Current INA219 +X solar panel Current
18 16 int posYi 12 mA 31 +Y Panel 8 2 3 Current INA219 +Y solar panel Current
19 17 int posZi 12 mA 31 +Z Panel 9 2 3 Current INA219 +Z solar panel Current
20 18 int negXi 12 mA 31 -X Panel 10 2 3 Current INA219 -X solar panel Current
21 19 int negYi 12 mA 31 -Y Panel 11 2 3 Current INA219 -Y solar panel Current
22 20 int negZi 12 mA 31 -Z Panel 12 2 3 Current INA219 -Z solar panel Current
23 21 float BATT2_V 12 V 29 Battery2 5 1 3 Battery2 Voltage INA219 Battery2 Voltage
24 22 float spin 12 rpm 32 Computer Software 3 1 3 Spacecraft Spin Calculated spin rate using solar cells
25 23 int Pressure 12 hPa 2 Experiments 6 3 3 BME280 Pressure BME280 STEM Payload sensor pressure
26 24 float Altitude 12 m 37 Experiments 6 4 3 BME280 Altitude BME280 STEM Payload sensor altitude
27 25 float Resets 12 - 12 NONE 3 2 3 Reset Count Software Reset Count
28 26 float rssi 12 dBm 31 Radio 1 1 3 RSSI Received Signal Strength Indication
29 27 float IHUcpuTemp 12 C 5 Computer Hardware 2 1 3 IHU Temp (Pi) Internal temperature of IHU from Pi
30 28 float SatelliteXAxisAngularVelocity 12 dps 31 +X Panel 7 3 3 Rotation STEM Payload Board MPU6050 Angular veolcity around X Axis
31 29 float SatelliteYAxisAngularVelocity 12 dps 31 +Y Panel 8 3 3 Rotation STEM Payload Board MPU6050 Angular veolcity around Y Axis
32 30 float SatelliteZAxisAngularVelocity 12 dps 31 +Z Panel 9 3 3 Rotation STEM Payload Board MPU6050 Angular veolcity around Z Axis
33 31 float Humidity 12 % 5 Experiments 6 5 3 BME280 Humidity BME280 Humidity
34 32 int BAT2_I 12 mA 31 Battery2 5 2 3 Battery2 Current INA219 Battery2 Current
35 33 float DiodeTemp 12 C 32 Experiments 6 6 3 Diode Temp STEM Payload Diode Temperature
36 34 int Sensor 1 12 integer 2 Experiments 6 7 3 Sensor 1 STEM Payload Extra Sensor 1
37 35 float STEMPayloadStatus 1 - 35 Experiments 6 1 0 STEM Payload Status STEM Payload STEM Payload board failure Indicator
38 36 float SafeMode 1 - 33 Computer Software 3 2 0 Safe Mode Safe Mode (Low Battery Voltage)
39 37 float SimulatedTelemetry 1 - 33 Computer Software 3 4 0 Simulated Telemetry Simulated Telemetry Indicator
40 38 float PayloadStatus1 1 - 35 NONE 6 8 0 Exp 3 STEM Payload status 1 failure indicator
41 39 float I2CBus0Failure 1 - 35 NONE 2 2 0 I2C Bus 0 I2C bus 0 failure indicator
42 40 float I2CBus1Failure 1 - 35 Computer Hardware 2 2 0 I2C Bus 1 I2C bus 1 failure indicator
43 41 float I2CBus3Failure 1 - 35 Computer Hardware 2 3 0 I2C Bus 3 I2C bus 3 failure indicator
44 42 float CameraFailure 1 - 35 Computer Hardware 2 4 0 Camera Camera failure indicator
45 43 int GroundCommands 4 - 2 Computer Software 3 3 0 Ground Commands Number of ground commands received
46 44 float RxAntenna 1 - 36 Radio 1 3 0 RX Antenna Receive antenna status
47 45 float TxAntenna 1 - 36 Radio 1 2 0 TX Antenna Transmit antenna status
48 46 float C2CStatus 2 - 34 Computer Software 3 5 0 Command Control Command & Control Status
49 47 float ICR3VProt 12 V 0 NONE 7 2 3 3V Prot ICR 3V Proteted
50 48 float ICR2dot5V 12 V 0 NONE 7 3 3 2.5V ICR 2.5V
51 49 float ICR2dot5VProt 12 V 0 NONE 7 4 3 2.5V Prot ICR 2.5V Protected
52 50 float rf6 12 - 0 NONE 0 0 0 None None
53 51 float rf7 12 - 0 NONE 0 0 0 None None
54 52 float MuxTest 12 V 0 NONE 7 5 3 Sensor Power Sensor Power Voltage at the ICR
55 53 float LtVGACtl 12 V 0 NONE 1 4 3 VGA Control Control Voltage to the Variable Gain Amplifier (VGA)
56 54 float pad 4 - 34 NONE 0 0 0 None Unused
57 55 float IHUdiagData 32 - 18 NONE 3 2 0 Diagnostic Info Diagnostic Data on IHU Performance
58 56 float pad1 1 - 0 NONE 0 0 0 NONE Filler
59 57 float wodSize 8 000s 36 NONE 3 3 0 WOD Stored Number of WOD data payloads kept for each of Science and Housekeeping. In hundreds
60 58 float swCmds 32 - 35 NONE 7 6 0 Diagnostic ICR Diagnostic information
61 59 float hwCmdCnt 6 - 1 NONE 7 7 0 HW Command Count Number of hardware commands since last reset
62 60 float swCmdCnt 6 - 1 NONE 7 8 0 SW Command Count Number of software commands since last reset
63 61 float pad2 27 - 0 NONE 0 0 0 NONE Filler

@ -0,0 +1,14 @@
[Unit]
Description=PacsatSim
[Service]
TimeoutStopSec=5
ExecStart=/home/pi/CubeSatSim/pacsatsim.sh
WorkingDirectory=/home/pi/CubeSatSim
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=default.target

@ -8,7 +8,7 @@ WorkingDirectory=/home/pi/CubeSatSim
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root
User=pi
[Install]
WantedBy=default.target

@ -30,6 +30,9 @@ int main(int argc, char *argv[]) {
strcat(pythonConfigStr, " s");
char cmdbuffer[1000];
FILE *file2 = sopen(pythonVenv); // activate venv
FILE *file1 = sopen(pythonConfigStr); // try new function
fgets(cmdbuffer, 1000, file1);
if (debug == ON)

@ -1,7 +1,5 @@
#!/usr/bin/env python
#import RPi.GPIO as GPIO
#from RPi.GPIO import output
#import subprocess
import time
from time import sleep
@ -22,17 +20,20 @@ def output(pin, value):
def input(pin):
# command = "gpio -g read " + str(pin)
query = ["gpio", "-g", "read", str(pin)] # Read GPIO pin
command = "gpio -g read " + str(pin)
try:
result = subprocess.run(query, capture_output=True, text=True, check=True)
print(f"Command run was: {query}")
print("Sucess!")
print(f"Output of the command (stdout): {result.stdout}")
# print(f"Command run was: {query}")
# print("Sucess!")
# print(f"Output of the command (stdout): {result.stdout}")
# print(f"{command}: {result.stdout}")
return int(result.stdout)
except subprocess.CalledProcessError as e:
print(f"Command failed with return code: {e.returncode}")
print(f"Command run was: {e.cmd}")
print(f"Output of the command (stdout): {e.stdout}")
print(f"Error output of the command (stderr): {e.stderr}")
# print(f"Command failed with return code: {e.returncode}")
# print(f"Command run was: {e.cmd}")
# print(f"Output of the command (stdout): {e.stdout}")
# print(f"Error output of the command (stderr): {e.stderr}")
print(f"{command}: -1")
return -1
def setup(pin, config):
@ -41,7 +42,7 @@ def setup(pin, config):
system(command)
print(command)
else:
print(f"Unknown GPIO setup configuration: {config}")
print(f"Unknown gpio setup configuration: {config}")
def blink(times):
powerPin = 16
@ -150,11 +151,9 @@ def increment_mode():
file.close()
print(".mode file written")
# GPIO.setwarnings(False)
output(txLed, 0)
output(powerPin, 0)
print("sudo reboot -h now")
# GPIO.setwarnings(False)
setup(powerPin, "out")
output(powerPin, 0);
# system("reboot -h now")
@ -207,7 +206,7 @@ def camera_photo():
img = Image.open(file)
draw = ImageDraw.Draw(img)
# draw.text((10, 10), callsign, font=font2, fill='white')
# draw.text((120, 10), telem_string, font=font2, fill='white')
# draw.text((120, 10), telem_string, font=font2, fill='white')
draw.text((12, 12), callsign, font=font1, fill='black')
draw.text((10, 10), callsign, font=font1, fill='white')
draw.text((112, 12), telem_string, font=font2, fill='black') # was 122
@ -229,8 +228,6 @@ powerPin = 16
command_tx = True
# GPIO.setmode(GPIO.BCM)
# GPIO.setwarnings(False)
setup(13, "up")
setup(12, "up")
setup(27, "up")
@ -246,28 +243,22 @@ if input(12) == False:
else:
print("No LPF")
# GPIO.setup(txLed, GPIO.OUT)
# output(txLed, 0)
# GPIO.setmode(GPIO.BCM) # Repeat to make LED work on Pi 4
# GPIO.setwarnings(False)
setup(txLed, "out")
setup(pd, "out")
#output(pd, 1)
output(pd, 0)
setup(ptt, "out")
output (ptt, 1)
output(ptt, 1)
txc = False
if input(txc_pin) == False:
print("TXC is present")
txc = True;
txc = True
else:
print("TXC not present")
# txc = False # forcing it off
# False # forcing it off
output(txLed, 1)
sleep(1)
output(txLed, 0)
@ -276,8 +267,6 @@ battery_saver_check()
# print(1)
print(txLed)
# GPIO.setup(27, GPIO.OUT)
# GPIO.output(27, 0)
debug_mode = 0 # change to 1 to debug transmit
@ -308,7 +297,7 @@ if __name__ == "__main__":
print("Pi Zero 2 not detected")
try:
system("cat /proc/uptime > /home/pi/CubeSatSim/uptime")
system("sudo cat /proc/uptime > /home/pi/CubeSatSim/uptime")
file = open("/home/pi/CubeSatSim/uptime")
up = file.read().split(" ")[0]
print(up)
@ -346,6 +335,9 @@ if __name__ == "__main__":
print("Can't open beacon_off file, defaulting to False")
print("Command_tx: ")
print(command_tx)
if (mode != "p") or (command_tx == False):
system("sudo systemctl stop pacsatsim")
try:
file = open("/home/pi/CubeSatSim/command_count.txt", "r")
@ -383,18 +375,6 @@ if __name__ == "__main__":
sim_config = True
print("Simulated telemetry mode is configured")
else:
# query = ["timeout", "2", "i2cdetect", "-y", "3"] # Test if Solar board is present
# try:
# result = subprocess.run(query, capture_output=True, text=True, check=True)
# print(f"Command run was: {query}")
# print("Sucess!")
# print(f"Output of the command (stdout): {result}")
# except subprocess.CalledProcessError as e:
# print(f"Command failed with return code: {e.returncode}")
# print(f"Command run was: {e.cmd}")
# print(f"Output of the command (stdout): {e.stdout}")
# print(f"Error output of the command (stderr): {e.stderr}")
try:
if path.isfile("/home/pi/CubeSatSim/sim_mode_auto"):
print("Simulated telemetry mode automatically turned on!")
@ -403,11 +383,10 @@ if __name__ == "__main__":
except:
if (debug_mode == 1):
print("/home/pi/CubeSatSim/sim_mode_auto not found")
if len(config) > 5:
sq = config[5]
if (mode == 'p') or (mode == 'P'):
sq = 0 # turn off squelch for Pacsat
print(sq)
if len(config) > 5:
if (mode != 'p') and (mode != 'P'): # squelch off for Pacsat
sq = config[5]
print(f'squelch: {sq}')
if len(config) > 6:
txf = float(config[6])
if (mode == 'e'):
@ -457,29 +436,23 @@ if __name__ == "__main__":
no_command = True
try:
f = open("/home/pi/CubeSatSim/command_control", "r")
no_command = False
f.close()
# GPIO.setmode(GPIO.BCM)
# GPIO.setwarnings(False)
setup(squelch, "up") ## pull up in case pin is not connected
if input(squelch) == False:
print("squelch not set correctly, no command input!")
else:
if (mode != 'n') and (mode != 'x'):
print("command and control is activated")
no_command = False
system("sudo systemctl start command")
else:
print("Command and control not activated since Transmit Commands mode")
txc = True # Transmit commands only works with FM transceiver, so bypass Battery Saver if activated
# setup(squelch, "up") ## pull up in case pin is not connected
# if input(squelch) == False:
# print("squelch not set correctly, no command input!")
# else:
# if (mode != 'n') and (mode != 'x'):
# print("command and control is activated")
# no_command = False
# system("sudo systemctl start command")
# else:
# print("Command and control not activated since Transmit Commands mode")
# txc = True # Transmit commands only works with FM transceiver, so bypass Battery Saver if activated
except:
print("command and control not activated")
print(callsign)
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi 4
# print(txLed)
# print(1)
# setup(txLed, "out")
query = ["grep", "VERSION_CODENAME=bullseye", "/etc/os-release"]
try:
@ -546,9 +519,7 @@ if __name__ == "__main__":
if (hab_mode == True) and (mode == 'a'):
print("Don't transmit CW ID since APRS HAB mode is active")
else:
if (((mode == 'a') or (mode == 'b') or (mode == 'f') or (mode == 's') or (mode == 'j')) and (command_tx == True) and (skip == False)) or ((mode == 'e') and (command_tx == True)): # battery_saver_mode
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
if (((mode == 'a') or (mode == 'b') or (mode == 'f') or (mode == 's') or (mode == 'j') or (mode == 'p') or (mode == 'P')) and (command_tx == True) and (skip == False)) or ((mode == 'e') and (command_tx == True)): # battery_saver_mode
output(txLed, 1)
print("Transmit CW ID")
status = ""
@ -572,14 +543,57 @@ if __name__ == "__main__":
# if (len(sys.argv)) > 1:
# print("There are arguments!")
if (mode == 'a') or (mode == 'x') or (mode == 'n'):
if (mode == 'a') or (mode == 'x') or (mode == 'n') or (mode == 'p') or (mode == 'P'):
# command_control_check()
output(pd, 1)
output(ptt, 1)
if (mode == 'a'):
print("AFSK")
elif (mode == 'p') or (mode == 'P'):
if (mode == 'P'):
print("Pacsat Ground Station")
else:
print("Pacsat")
if (command_tx == True):
system("sudo systemctl restart pacsatsim")
print("Starting PacSatSim")
output(txLed, 0)
print("0")
rpitx = "arecord -D plughw:CARD=Loopback,DEV=1 -f S16_LE -r 48000 -c 1 | csdr convert_s16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &"
stop_rpitx = "sudo killall -9 rpitx && sudo killall -9 arecord && sudo rpitx -m RF -f 434.9e3 > /dev/null 2>&1"
if not txc:
print("txc is:")
print(txc)
system(stop_rpitx)
system(rpitx)
print("Safe Mode!!")
while (True):
if (txc):
sleep(0.1)
while (input(ptt) != 0):
sleep(0.2)
output(txLed, 1)
# print("1")
while (input(ptt) != 1):
sleep(0.2)
output(txLed, 0)
# print("0")
else:
# sleep(0.1)
while (input(17) == 0):
sleep(0.05)
## system(rpitx)
output(txLed, 1)
# print("1")
while (input(17) == 1):
sleep(0.05)
## system(stop_rpitx)
output(txLed, 0)
# print("0")
# sleep(10)
else:
# GPIO.output(powerPin, 0)
print("Transmit APRS Commands")
system("sudo systemctl stop command")
# while True:
@ -596,8 +610,6 @@ if __name__ == "__main__":
system("gen_packets -o /home/pi/CubeSatSim/telem.wav /home/pi/CubeSatSim/t.txt -r 48000 > /dev/null 2>&1")
system("cat /home/pi/CubeSatSim/t.txt")
if (command_tx == True):
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# output(pd, 1)
# output (ptt, 0)
@ -610,7 +622,7 @@ if __name__ == "__main__":
sleep(0.1) # add delay before transmit
output (ptt, 0)
sleep(0.3) # add even more time at start
system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/telem.wav")
system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/telem.wav")
sleep(0.2) # add more time at end
output (ptt, 1)
# output(pd, 0)
@ -654,8 +666,6 @@ if __name__ == "__main__":
system(command)
## chan = chan + 1
if (command_tx == True):
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
if (txc):
@ -671,7 +681,7 @@ if __name__ == "__main__":
if (debug_mode == 1):
system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3")
else:
system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1")
system("cat /home/pi/CubeSatSim/morse.wav | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1")
output(txLed, 0)
# command_control_check()
@ -694,7 +704,7 @@ if __name__ == "__main__":
if os_status == "bookworm":
system("rpicam-still -o /home/pi/CubeSatSim/camera_out.jpg --width 320 --height 256") # > /dev/null 2>&1")
else:
system("raspistill -o /home/pi/CubeSatSim/camera_out.jpg -w 320 -h 256")
system("raspistill -o /home/pi/CubeSatSim/camera_out.jpg -w 320 -h 256")
f = open("/home/pi/CubeSatSim/camera_out.jpg")
f.close()
print("Camera present")
@ -718,8 +728,6 @@ if __name__ == "__main__":
if (command_tx == True):
print ("Sending SSTV image")
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# battery_saver_check()
@ -751,8 +759,6 @@ if __name__ == "__main__":
if (command_tx == True):
print ("Sending SSTV image")
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# battery_saver_check()
@ -789,8 +795,6 @@ if __name__ == "__main__":
if (command_tx == True):
print ("Sending SSTV image")
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# battery_saver_check()
@ -827,8 +831,6 @@ if __name__ == "__main__":
if (command_tx == True):
print ("Sending SSTV image")
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# battery_saver_check()
@ -858,8 +860,6 @@ if __name__ == "__main__":
if (command_tx == True):
# command_control_check()
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# battery_saver_check()
@ -888,9 +888,6 @@ if __name__ == "__main__":
print("turn on FM rx")
output(pd, 1)
output(ptt, 1)
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi 4
# setup(txLed, "out")
if (command_tx == True):
# system("sudo nc -l 8080 | csdr convert_i16_f | csdr fir_interpolate_cc 2 | csdr dsb_fc | csdr bandpass_fir_fft_cc 0.002 0.06 0.01 | csdr fastagc_ff | sudo /home/pi/rpitx/sendiq -i /dev/stdin -s 96000 -f 434.9e6 -t float &")
@ -909,11 +906,7 @@ if __name__ == "__main__":
# command_control_check()
if (command_tx == True):
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# print(txLed)
# print(1)
if (mode == 'b'):
sleep(4.2)
@ -949,11 +942,7 @@ if __name__ == "__main__":
print("turn on FM rx")
output(pd, 1)
output(ptt, 1)
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi 4
# setup(txLed, "out")
# GPIO.setup(powerPin, GPIO.OUT)
setup(squelch, "up") ## pull up in case pin is not connected
# GPIO.output(powerPin, 1) # was 0
# txf = float(tx) - 288.9
# print("Transmit frequency: ",txf)
if (command_tx != True):
@ -963,10 +952,8 @@ if __name__ == "__main__":
while True:
if (input(squelch) == False) and (command_tx == True):
print("Carrier detected, starting repeater")
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 16000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &")
system("sudo nc -l 8011 | csdr convert_i16_f | csdr gain_ff 4000 | csdr convert_f_samplerf 20833 | sudo rpitx -i- -m RF -f " + tx + "e3 > /dev/null 2>&1 &")
sleep(0.5)
system("sudo arecord -D shared_mic -r48000 -fS16_LE -c1 | nc localhost 8011 &")
while (input(squelch) == False):
@ -988,9 +975,6 @@ if __name__ == "__main__":
output(pd, 1)
output(ptt, 1)
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi 4
# setup(txLed, "out")
if (command_tx == True):
system("sudo nc -l 8080 | csdr convert_i16_f | csdr gain_ff 7000 | csdr convert_f_samplerf 20833 | sudo /home/pi/rpitx/rpitx -i- -m RF -f " + tx + "e3 &")
print("Turning LED on/off and listening for carrier")
@ -1003,11 +987,7 @@ if __name__ == "__main__":
# output(txLed, 0)
# command_control_check()
if (command_tx == True):
# GPIO.setmode(GPIO.BCM) # added to make Tx LED work on Pi Zero 2 and Pi 4
# setup(txLed, "out")
output(txLed, 1)
# print(txLed)
# print(1)
sleep(4.2)
else:
print("No Low Pass Filter so no telemetry transmit. See http://cubesatsim.org/wiki for instructions on how to build the LPF.")

Loading…
Cancel
Save

Powered by TurnKey Linux.