Revert "bme and mpu sensors on pi zero and simulated failures"

revert-402-pi-sensors-auto
Alan Johnston 4 weeks ago committed by GitHub
parent 2cb8665cd5
commit db6b89d2ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -41,10 +41,9 @@ cubesatsim: libax5043.a
cubesatsim: afsk/ax25.o cubesatsim: afsk/ax25.o
cubesatsim: afsk/ax5043.o cubesatsim: afsk/ax5043.o
cubesatsim: TelemEncoding.o cubesatsim: TelemEncoding.o
cubesatsim: sensor_extension.o
cubesatsim: main.o cubesatsim: main.o
cubesatsim: codecAO40.o cubesatsim: codecAO40.o
gcc -std=gnu99 $(DEBUG_BEHAVIOR) -o cubesatsim -Wall -Wextra -L./ afsk/ax25.o afsk/ax5043.o TelemEncoding.o sensor_extension.o codecAO40.o main.o -lwiringPi -lax5043 -lm gcc -std=gnu99 $(DEBUG_BEHAVIOR) -o cubesatsim -Wall -Wextra -L./ afsk/ax25.o afsk/ax5043.o TelemEncoding.o codecAO40.o main.o -lwiringPi -lax5043 -lm
telem: telem.o telem: telem.o
gcc -std=gnu99 $(DEBUG_BEHAVIOR) -o telem -Wall -Wextra -L./ telem.o -lwiringPi gcc -std=gnu99 $(DEBUG_BEHAVIOR) -o telem -Wall -Wextra -L./ telem.o -lwiringPi
@ -53,9 +52,6 @@ TelemEncoding.o: TelemEncoding.c
TelemEncoding.o: TelemEncoding.h TelemEncoding.o: TelemEncoding.h
gcc -std=gnu99 $(DEBUG_BEHAVIOR) -Wall -Wextra -c TelemEncoding.c gcc -std=gnu99 $(DEBUG_BEHAVIOR) -Wall -Wextra -c TelemEncoding.c
sensor_extension.o: sensor_extension.c
gcc -std=gnu99 $(DEBUG_BEHAVIOR) -Wall -Wextra -c sensor_extension.c
codecAO40.o: codecAO40.c codecAO40.o: codecAO40.c
codecAO40.o: codecAO40.h codecAO40.o: codecAO40.h
gcc -std=gnu99 $(DEBUG_BEHAVIOR) -Wall -Wextra -c codecAO40.c gcc -std=gnu99 $(DEBUG_BEHAVIOR) -Wall -Wextra -c codecAO40.c

420
config

@ -54,7 +54,7 @@ function transmit_command_fsk {
echo "Resuming command and control" echo "Resuming command and control"
sudo systemctl start command sudo systemctl start command
else
STRING="AMSAT-11>APCSS:=3901.40N\07704.39WShi hi MODE=f" STRING="AMSAT-11>APCSS:=3901.40N\07704.39WShi hi MODE=f"
sudo rm /home/pi/CubeSatSim/t.txt > /dev/null 2>&1 sudo rm /home/pi/CubeSatSim/t.txt > /dev/null 2>&1
@ -89,7 +89,7 @@ function transmit_command_bpsk {
echo "Resuming command and control" echo "Resuming command and control"
sudo systemctl start command sudo systemctl start command
else
STRING="AMSAT-11>APCSS:=3901.40N\07704.39WShi hi MODE=b" STRING="AMSAT-11>APCSS:=3901.40N\07704.39WShi hi MODE=b"
sudo rm /home/pi/CubeSatSim/t.txt > /dev/null 2>&1 sudo rm /home/pi/CubeSatSim/t.txt > /dev/null 2>&1
@ -210,8 +210,7 @@ function transmit_command_beacon {
exit exit
} }
echo echo "CubeSatSim v2.1 configuration tool"
echo "CubeSatSim v2.2 configuration tool"
echo echo
# echo $1 # echo $1
# echo $2 # echo $2
@ -223,13 +222,8 @@ sudo modprobe snd-aloop
if [ -z "$2" ] ; then if [ -z "$2" ] ; then
noreboot=0 noreboot=0
else else
if [ "$2" = "n" ] ; then noreboot=1
echo "Reboot disabled" echo "Reboot disabled"
noreboot=1
else
fail=$2
fi
fi fi
# echo "No reboot" # echo "No reboot"
@ -280,67 +274,7 @@ if [ "$1" = "" ]; then
# sim="no" # sim="no"
echo "Simulated Telemetry is OFF" echo "Simulated Telemetry is OFF"
fi fi
# echo echo
FILE=/home/pi/CubeSatSim/failure_mode.txt
if [ -f "$FILE" ]; then
if [[ $(grep "\-1" $FILE) ]]; then
echo "No simulated failure"
else
fail=$(<$FILE)
echo -n "Simulated "
# cat $FILE
case $fail in
1)
echo "+Y Solar Panel Unplugged (1)"
;;
2)
echo "+X Solar Panel Failure (2)"
;;
3)
echo "-X Solar Panel Degredation (3)"
;;
4)
echo "-Y Solar Panel Short Circuit (4)"
;;
5)
echo "Failed I2C Bus 1 (5)"
;;
6)
echo "Failed I2C Bus 3 (6)"
;;
7)
echo "Failed Camera (7)"
;;
8)
echo "Failed Payload (8)"
;;
9)
echo "Failed BME Sensor (9)"
;;
10)
echo "Failed MPU Sensor (10)"
;;
"11")
echo "Failed FM Audio (11)"
;;
*)
echo "Unknown Failure"
;;
esac
# echo $fail
fi
else
echo "No simulated failure"
fi
if [ "${12}" = "y" ] || [ "${12}" = "yes" ] ; then
echo "Random Failure Mode is ON with time period" ${13} "seconds"
else
echo "Random Failure Mode is OFF"
fi
if [ "$9" = "yes" ] || [ "$9" = "y" ]; then if [ "$9" = "yes" ] || [ "$9" = "y" ]; then
echo "Balloon mode is ON" echo "Balloon mode is ON"
@ -348,7 +282,7 @@ if [ "$1" = "" ]; then
echo "Balloon mode is OFF" echo "Balloon mode is OFF"
fi fi
# echo echo
echo -n "Current command count is: " echo -n "Current command count is: "
cat /home/pi/CubeSatSim/command_count.txt cat /home/pi/CubeSatSim/command_count.txt
echo echo
@ -359,7 +293,7 @@ if [ "$1" = "" ]; then
echo -n "Squelch level is: " echo -n "Squelch level is: "
echo $6 echo $6
# echo echo
FILE=/home/pi/CubeSatSim/command_control FILE=/home/pi/CubeSatSim/command_control
if [ -f "$FILE" ]; then if [ -f "$FILE" ]; then
@ -378,14 +312,14 @@ if [ "$1" = "" ]; then
echo "Radio command and control is OFF" echo "Radio command and control is OFF"
fi fi
# echo echo
echo -n "RX PL code is: " echo -n "RX PL code is: "
echo -n ${10} echo -n ${10}
# echo # echo
echo -n " TX PL code is: " echo -n " TX PL code is: "
echo ${11} echo ${11}
# echo echo
FILE=/home/pi/CubeSatSim/battery_saver FILE=/home/pi/CubeSatSim/battery_saver
if [ -f "$FILE" ]; then if [ -f "$FILE" ]; then
@ -394,7 +328,7 @@ if [ "$1" = "" ]; then
echo "Battery saver mode is OFF" echo "Battery saver mode is OFF"
fi fi
# echo echo
FILE=/home/pi/CubeSatSim/beacon_off FILE=/home/pi/CubeSatSim/beacon_off
if [ -f "$FILE" ]; then if [ -f "$FILE" ]; then
echo "Transmit beacon telemetry is OFF" echo "Transmit beacon telemetry is OFF"
@ -406,7 +340,7 @@ if [ "$1" = "" ]; then
echo -e "Current sim.cfg configuration file:" echo -e "Current sim.cfg configuration file:"
# echo # echo
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
echo echo
echo "To change, include an OPTION" echo "To change, include an OPTION"
@ -552,7 +486,7 @@ elif [ "$1" = "-t" ]; then
echo echo
# $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} # $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
echo "Do you want Simulated Telemetry ON (y/n) " echo "Do you want Simulated Telemetry ON (y/n) "
read sim read sim
@ -564,14 +498,13 @@ elif [ "$1" = "-t" ]; then
else else
sim="no" sim="no"
echo "Simulated Telemetry is OFF" echo "Simulated Telemetry is OFF"
echo "-1" > /home/pi/CubeSatSim/failure_mode.txt # make sure to turn off any simulated failures
fi fi
# echo # echo
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
# echo # echo
echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11}
echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $1 $2 $3 $4 $sim $6 $7 $8 $9 ${10} ${11} > /home/pi/CubeSatSim/sim.cfg
echo echo
## echo "Rebooting CubeSatSim with new configuration file" ## echo "Rebooting CubeSatSim with new configuration file"
## echo ## echo
@ -598,7 +531,7 @@ elif [ "$1" = "-c" ]; then
echo $1 echo $1
echo echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13} # echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
echo "Enter callsign in all capitals: " echo "Enter callsign in all capitals: "
read callsign read callsign
@ -612,8 +545,8 @@ elif [ "$1" = "-c" ]; then
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $callsign $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} > /home/pi/CubeSatSim/sim.cfg
fi fi
if [ "$norestart" = "1" ]; then if [ "$norestart" = "1" ]; then
@ -646,7 +579,7 @@ elif [ "$1" = "-r" ]; then
echo $2 echo $2
echo echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} # echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
echo -e "Enter Reset Count (integer): " echo -e "Enter Reset Count (integer): "
@ -666,8 +599,8 @@ elif [ "$1" = "-r" ]; then
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $1 $resets $3 $4 $5 $6 $7 $8 $9 ${10} ${11} > /home/pi/CubeSatSim/sim.cfg
fi fi
if [ "$norestart" = "1" ]; then if [ "$norestart" = "1" ]; then
@ -701,7 +634,7 @@ elif [ "$1" = "-l" ]; then
echo $3 echo $3
echo echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} # echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
echo -e "Enter latitude (decimal degrees, positive is north): " echo -e "Enter latitude (decimal degrees, positive is north): "
@ -743,8 +676,8 @@ elif [ "$1" = "-l" ]; then
fi fi
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11}
echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $1 $2 $lat $long $5 $6 $7 $8 $9 ${10} ${11} > /home/pi/CubeSatSim/sim.cfg
if [ "$norestart" = "1" ]; then if [ "$norestart" = "1" ]; then
echo echo
@ -1036,7 +969,7 @@ elif [ "$1" = "-q" ]; then
echo $6 echo $6
echo echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} # echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
echo -e "Enter squelch (integer 1 - 8): " echo -e "Enter squelch (integer 1 - 8): "
@ -1058,8 +991,8 @@ elif [ "$1" = "-q" ]; then
# echo # echo
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
# echo # echo
echo $1 $2 $3 $4 $5 $sq $7 $8 $9 ${10} ${11} ${12} ${13} echo $1 $2 $3 $4 $5 $sq $7 $8 $9 ${10} ${11}
echo $1 $2 $3 $4 $4 $sq $7 $8 $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $1 $2 $3 $4 $4 $sq $7 $8 $9 ${10} ${11} > /home/pi/CubeSatSim/sim.cfg
echo echo
echo "Restarting CubeSatSim with new configuration file" echo "Restarting CubeSatSim with new configuration file"
## echo ## echo
@ -1081,7 +1014,7 @@ elif [ "$1" = "-P" ]; then
echo echo
echo "Editing the PL (Private Line) CTCSS/CDCSS setting in" echo "Editing the PL (Private Line) CTCSS/CDCSS setting in"
echo "the configuration file for CubeSatSim" echo "the configuration file for CubeSatSim"
echo echo
value=`cat /home/pi/CubeSatSim/sim.cfg` value=`cat /home/pi/CubeSatSim/sim.cfg`
@ -1095,7 +1028,7 @@ elif [ "$1" = "-P" ]; then
echo ${11} echo ${11}
echo echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} # echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
echo -e "Enter RX PL value integer 0: None, 01-38 CTCSS analog, 39-121CDCSS digital" echo -e "Enter RX PL value integer 0: None, 01-38 CTCSS analog, 39-121CDCSS digital"
@ -1138,8 +1071,8 @@ elif [ "$1" = "-P" ]; then
# echo # echo
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
# echo # echo
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl ${12} ${13} echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $rxpl $txpl > /home/pi/CubeSatSim/sim.cfg
echo echo
## echo "Rebooting CubeSatSim with new configuration file" ## echo "Rebooting CubeSatSim with new configuration file"
## echo ## echo
@ -1169,7 +1102,7 @@ elif [ "$1" = "-F" ]; then
echo $8 echo $8
echo echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} # echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
echo "Enter tx frequency as 4XX.XXXX: " echo "Enter tx frequency as 4XX.XXXX: "
read tx read tx
@ -1192,8 +1125,8 @@ elif [ "$1" = "-F" ]; then
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11}
echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $1 $2 $3 $4 $5 $6 $tx $rx $9 ${10} ${11} > /home/pi/CubeSatSim/sim.cfg
# fi # fi
# if [ "$norestart" = "1" ]; then # if [ "$norestart" = "1" ]; then
@ -1275,7 +1208,7 @@ elif [ "$1" = "-H" ]; then
echo echo
# echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} # echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}
echo "Do you want Balloon mode ON (y/n) " echo "Do you want Balloon mode ON (y/n) "
read hab read hab
@ -1292,8 +1225,8 @@ elif [ "$1" = "-H" ]; then
# echo # echo
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n" echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
# echo # echo
echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11} ${12} ${13} echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11}
echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg echo $1 $2 $3 $4 $5 $6 $7 $8 $hab ${10} ${11} > /home/pi/CubeSatSim/sim.cfg
echo echo
## echo "Rebooting CubeSatSim with new configuration file" ## echo "Rebooting CubeSatSim with new configuration file"
## echo ## echo
@ -1497,281 +1430,6 @@ elif [ "$1" = "-j" ]; then
restart=1 restart=1
# fi # fi
elif [ "$1" = "-M" ]; then
if [ $fail ]; then
MODE=$fail
else
FILE=/home/pi/CubeSatSim/failure_mode.txt
if [ -f "$FILE" ]; then
if [[ $(grep "\-1" $FILE) ]]; then
echo "Currently, no simulated failure (0)"
else
fail=$(<$FILE)
echo -n "Currently, simulated "
case $fail in
1)
echo "+Y Solar Panel Unplugged (1)"
;;
2)
echo "+X Solar Panel Failure (2)"
;;
3)
echo "-X Solar Panel Degredation (3)"
;;
4)
echo "-Y Solar Panel Short Circuit (4)"
;;
5)
echo "Failed I2C Bus 1 (5)"
;;
6)
echo "Failed I2C Bus 3 (6)"
;;
7)
echo "Failed Camera (7)"
;;
8)
echo "Failed Payload (8)"
;;
9)
echo "Failed BME Sensor (9)"
;;
"10")
echo "Failed MPU Sensor (10)"
;;
"11")
echo "Failed FM Audio (11)"
;;
*)
echo "Unknown Failure"
;;
esac
fi
else
echo "Currently, no simulated failure"
fi
echo
echo "Set simulated failure mode (or Return to turn OFF)"
echo
echo " 0 No Failure (turn OFF)"
echo " 1 +Y Solar Panel Unplugged"
echo " 2 +X Solar Panel Failure"
echo " 3 -X Solar Panel Degredation"
echo " 4 -Y Solar Panel Short Circuit"
echo " 5 Failed I2C Bus 1"
echo " 6 Failed I2C Bus 3"
echo " 7 Failed Camera"
echo " 8 Failed Payload"
echo " 9 Failed BME Sensor"
echo "10 Failed MPU Sensor"
echo "11 Failed FM Audio"
echo
echo "Enter the failure number to set: 0 - 11"
read MODE
echo
fi
if [ "$MODE" = "0" ]; then
echo "Setting No Simulated Failure"
MODE=-1
# elif [ "$MODE" = "12" ]; then
# if [ "$norestart" = "1" ]; then
# echo
# else
# reboot=1
# fi
else
case $MODE in
1)
echo "+Y Solar Panel Unplugged"
;;
2)
echo "Setting Simulated +X Solar Panel Failure"
;;
3)
echo "Setting Simulated -X Solar Panel Degredation"
;;
4)
echo "Setting Simulated -Y Solar Panel Short Circuit"
;;
5)
echo "Setting Simulated Failed I2C Bus 1"
;;
6)
echo "Setting Simulated Failed I2C Bus 3"
;;
7)
echo "Setting Simulated Failed Camera"
;;
8)
echo "Setting Simulated Failed Payload"
;;
9)
echo "Setting Simulated Failed BME Sensor"
;;
"10")
echo "Setting Simulated Failed MPU Sensor"
;;
"11")
echo "Setting Failed FM Audio"
;;
*)
echo "Setting No Simulated Failure"
MODE=-1
;;
esac
fi
# echo $MODE
echo
echo $MODE > /home/pi/CubeSatSim/failure_mode.txt
echo "Changing simulated failure mode to $MODE" | wall
elif [ "$1" = "-N" ]; then
FILE=/home/pi/CubeSatSim/failure_mode.txt
if [ -f "$FILE" ]; then
if [[ $(grep "\-1" $FILE) ]]; then
echo "No simulated failure"
fail=0
else
echo "Simulated failure mode"
fail=$(<$FILE)
echo $fail
fi
else
echo "No simulated failure"
fail=0
fi
if [ $fail == 0 ]; then
echo "Changing to next mode"
value=`cat /home/pi/CubeSatSim/.mode`
echo "$value" > /dev/null
set -- $value
if [ "$1" = "a" ]; then
echo "Current mode is APRS"
echo "Next mode is FSK"
/home/pi/CubeSatSim/config -f
elif [ "$1" = "m" ]; then
echo "Current mode is CW"
echo "Next mode is FunCube"
/home/pi/CubeSatSim/config -j
elif [ "$1" = "f" ]; then
echo "Current mode is FSK"
echo "Next mode is BPSK"
/home/pi/CubeSatSim/config -b
elif [ "$1" = "b" ]; then
echo "Current mode is BPSK"
echo "Next mode is SSTV"
/home/pi/CubeSatSim/config -s
elif [ "$1" = "s" ]; then
echo "Current mode is SSTV"
echo "Next mode is CW"
/home/pi/CubeSatSim/config -m
elif [ "$1" = "e" ]; then
echo "Current mode is Repeater"
echo "Next mode is APRS"
/home/pi/CubeSatSim/config -a
elif [ "$1" = "j" ]; then
echo "Current mode is FUNcube"
echo "Next mode is Repeater"
/home/pi/CubeSatSim/config -e
else
echo "Unknown mode"
fi
else
echo "Changing to next simulated failure mode"
fail=$((fail + 1))
# if [ $fail == 12 ]; then
if [ "$fail" -gt "11" ]; then
fail=1
fi
echo $fail
/home/pi/CubeSatSim/config -M $fail
fi
elif [ "$1" = "-U" ]; then
echo
echo "Changing the Random Simulated Failure setting in"
echo "the configuration file for CubeSatSim"
echo
value=`cat /home/pi/CubeSatSim/sim.cfg`
echo "$value" > /dev/null
set -- $value
if [ "${12}" = "yes" ] || [ "${12}" = "y" ]; then
echo "Random Simulated Failure is ON"
else
echo "Random Simulated Failure is OFF"
fi
echo
# $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${12} ${13}
echo "Do you want Random Simulated Failure ON (y/n) "
read sim
echo
if [ "$sim" = "y" ] || [ "$sim" = "yes" ] ; then
sim="yes"
echo "Random Simulated Failure is ON"
echo
echo "A new random failure is selected every"
echo ${13} "seconds."
echo
echo "Enter a new value or Return keeps current value."
echo "Enter time in seconds (integer): "
read time
if [ -z $time ] ; then
time="${13}"
echo "Keeping value of " $time " seconds"
fi
if ! [[ $time =~ ^[0-9]+$ ]] ; then
echo "Error: not an integer!"
time="${13}"
echo "Keeping value of" $time
fi
else
sim="no"
echo "Random Simulated Failure is OFF"
time="${13}"
# echo "-1" > /home/pi/CubeSatSim/failure_mode.txt # make sure to turn off any simulated failures
fi
# echo
echo -e "\nCubeSatSim configuration sim.cfg file updated to: \n"
# echo
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} $sim $time
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} $sim $time > /home/pi/CubeSatSim/sim.cfg
echo
if [ "${12}" != "$sim" ] || [ "${13}" != "$time" ] ; then
reboot=1
fi
elif [ "$1" = "-h" ]; then elif [ "$1" = "-h" ]; then
echo "config OPTION" echo "config OPTION"
@ -1810,9 +1468,7 @@ elif [ "$1" = "-h" ]; then
echo " -o Change telemetry beacon transmit state" echo " -o Change telemetry beacon transmit state"
echo " -L Change microphone level for command and control" echo " -L Change microphone level for command and control"
echo " -g Reset configuration back to default settings" echo " -g Reset configuration back to default settings"
echo " -M Set simulated failure mode"
echo " -U Change the random failure mode setting"
echo " -N Set next mode or failure"
echo echo
exit exit

@ -1,17 +1,6 @@
#!/bin/bash #!/bin/bash
echo -e "\ninstallation script for CubeSatSim v2.2\n" echo -e "\ninstallation script for CubeSatSim v2.1\n"
if [[ $(grep '11.' /etc/debian_version) ]]; then
echo "Installing on Debian 11 (Bullseye)"
else
echo "The OS is not Debian 11 (Bullseye)!"
echo "Installation is not likely to work."
echo "It is recommended you start with"
echo "Bullseye as your OS."
echo
sleep 10
fi
FILE=/home/pi/CubeSatSim/sim.cfg FILE=/home/pi/CubeSatSim/sim.cfg
if [ -f "$FILE" ]; then if [ -f "$FILE" ]; then
@ -123,7 +112,7 @@ mkdir /home/pi/fctelem
mkdir /home/pi/fctelem/public_html mkdir /home/pi/fctelem/public_html
cd fctelem cd fctelem
wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip
unzip -u fctelem.zip unzip fctelem.zip
cd cd
echo "Installing fcdctl to set FUNcubeDongle Pro gain" echo "Installing fcdctl to set FUNcubeDongle Pro gain"

684
main.c

@ -25,11 +25,10 @@
int main(int argc, char * argv[]) { int main(int argc, char * argv[]) {
printf("\n\nCubeSatSim v2.2 starting...\n\n"); printf("\n\nCubeSatSim v2.1 starting...\n\n");
wiringPiSetup(); wiringPiSetup();
strcpy(fail_yes, "no");
// Open configuration file with callsign and reset count // Open configuration file with callsign and reset count
FILE * config_file = fopen("/home/pi/CubeSatSim/sim.cfg", "r"); FILE * config_file = fopen("/home/pi/CubeSatSim/sim.cfg", "r");
if (config_file == NULL) { if (config_file == NULL) {
@ -42,11 +41,11 @@ int main(int argc, char * argv[]) {
// char * cfg_buf[100]; // char * cfg_buf[100];
fscanf(config_file, "%s %d %f %f %s %d %s %s %s %d %d %s %d", fscanf(config_file, "%s %d %f %f %s %d %s %s %s %d %d",
call, &reset_count, &lat_file, &long_file, sim_yes, &squelch, tx, rx, hab_yes, &rx_pl, &tx_pl, fail_yes, &fail_time); call, & reset_count, & lat_file, & long_file, sim_yes, & squelch, tx, rx, hab_yes, & rx_pl, & tx_pl);
fclose(config_file); fclose(config_file);
fprintf(stderr,"Config file /home/pi/CubeSatSim/sim.cfg contains %s %d %f %f %s %d %s %s %s %d %d %s %d\n", fprintf(stderr,"Config file /home/pi/CubeSatSim/sim.cfg contains %s %d %f %f %s %d %s %s %s %d %d\n",
call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time); call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl);
fprintf(stderr, "Transmit on %s MHz Receive on %s MHz\n", tx, rx); fprintf(stderr, "Transmit on %s MHz Receive on %s MHz\n", tx, rx);
@ -87,10 +86,6 @@ int main(int argc, char * argv[]) {
hab_mode = TRUE; hab_mode = TRUE;
fprintf(stderr, "HAB mode is ON\n"); fprintf(stderr, "HAB mode is ON\n");
} }
if (strcmp(fail_yes, "yes") == 0) {
fail_rnd_mode = TRUE;
fprintf(stderr, "Random fail mode is ON\n");
}
FILE * command_file = fopen("/home/pi/CubeSatSim/command_control", "r"); FILE * command_file = fopen("/home/pi/CubeSatSim/command_control", "r");
if (command_file == NULL) { if (command_file == NULL) {
@ -277,10 +272,47 @@ int main(int argc, char * argv[]) {
/**/ /**/
fflush(stderr); fflush(stderr);
if (mode == AFSK)
{
// Check for SPI and AX-5043 Digital Transceiver Board
FILE * file = popen("sudo raspi-config nonint get_spi", "r");
// printf("getc: %c \n", fgetc(file));
if (fgetc(file) == 48) {
printf("SPI is enabled!\n");
FILE * file2 = popen("ls /dev/spidev0.* 2>&1", "r");
printf("Result getc: %c \n", getc(file2));
if (fgetc(file2) != 'l') {
printf("SPI devices present!\n");
// }
setSpiChannel(SPI_CHANNEL);
setSpiSpeed(SPI_SPEED);
initializeSpi();
ax25_init( & hax25, (uint8_t * ) dest_addr, 11, (uint8_t * ) call, 11, AX25_PREAMBLE_LEN, AX25_POSTAMBLE_LEN);
if (init_rf()) {
printf("AX5043 successfully initialized!\n");
ax5043 = TRUE;
cw_id = OFF;
// mode = AFSK;
// cycle = OFF;
printf("Mode AFSK with AX5043\n");
transmit = TRUE;
// sleep(10); // just in case CW ID is sent
} else
printf("AX5043 not present!\n");
pclose(file2);
}
}
pclose(file);
}
txLed = 2; txLed = 2;
txLedOn = HIGH; txLedOn = HIGH;
txLedOff = LOW; txLedOff = LOW;
vB5 = TRUE;
onLed = 27; onLed = 27;
onLedOn = HIGH; onLedOn = HIGH;
onLedOff = LOW; onLedOff = LOW;
@ -294,23 +326,34 @@ int main(int argc, char * argv[]) {
} }
config_file = fopen("sim.cfg", "w"); config_file = fopen("sim.cfg", "w");
fprintf(config_file, "%s %d %8.4f %8.4f %s %d %s %s %s %d %d %s %d", fprintf(config_file, "%s %d %8.4f %8.4f %s %d %s %s %s %d %d", call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl);
call, reset_count, lat_file, long_file, sim_yes, squelch, tx, rx, hab_yes, rx_pl, tx_pl, fail_yes, fail_time);
// fprintf(config_file, "%s %d", call, reset_count); // fprintf(config_file, "%s %d", call, reset_count);
fclose(config_file); fclose(config_file);
config_file = fopen("sim.cfg", "r"); config_file = fopen("sim.cfg", "r");
map[MINUS_X] = MINUS_Y; if (vB4) {
map[PLUS_Z] = MINUS_X; map[BAT] = BAT2;
map[MINUS_Y] = PLUS_Z; map[BAT2] = BAT;
snprintf(busStr, 10, "%d %d", i2c_bus1, test_i2c_bus(0));
} else if (vB5) {
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 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"); printf("/dev/i2c-11 is present\n\n");
snprintf(busStr, 10, "%d %d", test_i2c_bus(1), test_i2c_bus(11)); snprintf(busStr, 10, "%d %d", test_i2c_bus(1), test_i2c_bus(11));
} else { } else {
snprintf(busStr, 10, "%d %d", i2c_bus1, i2c_bus3); snprintf(busStr, 10, "%d %d", i2c_bus1, i2c_bus3);
}
} else {
map[BAT2] = MINUS_Z;
map[BAT] = BAT2;
map[PLUS_Z] = BAT;
map[MINUS_Z] = PLUS_Z;
snprintf(busStr, 10, "%d %d", i2c_bus1, test_i2c_bus(0));
voltageThreshold = 8.0;
} }
// check for camera // check for camera
// char cmdbuffer1[1000]; // char cmdbuffer1[1000];
@ -330,6 +373,8 @@ int main(int argc, char * argv[]) {
//file5 = popen("sudo rm /home/pi/CubeSatSim/camera_out.jpg.wav > /dev/null 2>&1", "r"); //file5 = popen("sudo rm /home/pi/CubeSatSim/camera_out.jpg.wav > /dev/null 2>&1", "r");
pclose(file5); pclose(file5);
if (!ax5043) // don't test for payload if AX5043 is present
{
payload = OFF; payload = OFF;
fprintf(stderr,"Opening serial\n"); fprintf(stderr,"Opening serial\n");
if ((uart_fd = serialOpen("/dev/ttyAMA0", 115200)) >= 0) { // was 9600 if ((uart_fd = serialOpen("/dev/ttyAMA0", 115200)) >= 0) { // was 9600
@ -341,8 +386,7 @@ int main(int argc, char * argv[]) {
} else { } else {
fprintf(stderr, "Unable to open UART: %s\n -> Did you configure /boot/config.txt and /boot/cmdline.txt?\n", strerror(errno)); fprintf(stderr, "Unable to open UART: %s\n -> Did you configure /boot/config.txt and /boot/cmdline.txt?\n", strerror(errno));
} }
}
sensor_setup();
if ((i2c_bus3 == OFF) || (sim_mode == TRUE)) { if ((i2c_bus3 == OFF) || (sim_mode == TRUE)) {
@ -352,33 +396,29 @@ int main(int argc, char * argv[]) {
srand((unsigned int)time(0)); srand((unsigned int)time(0));
axis[X] = rnd_float(-0.2, 0.2); axis[0] = rnd_float(-0.2, 0.2);
if (axis[X] == 0) if (axis[0] == 0)
axis[X] = rnd_float(-0.2, 0.2); axis[0] = rnd_float(-0.2, 0.2);
axis[Y] = rnd_float(-0.2, 0.2); axis[1] = rnd_float(-0.2, 0.2);
float axis_z; axis[2] = (rnd_float(-0.2, 0.2) > 0) ? 1.0 : -1.0;
axis_z = sqrt(1 - axis[X] * axis[X] - axis[Y] * axis[Y]);
axis[Z] = (rnd_float(-0.2, 0.2) > 0) ? axis_z : -1.0 * axis_z;
angle[X] = (float) atan(axis[Y] / axis[Z]); angle[0] = (float) atan(axis[1] / axis[2]);
angle[Y] = (float) atan(axis[Z] / axis[X]); angle[1] = (float) atan(axis[2] / axis[0]);
angle[Z] = (float) atan(axis[Y] / axis[X]); angle[2] = (float) atan(axis[1] / axis[0]);
volts_max[X] = rnd_float(9.0, 12.0) * (float) sin(angle[Y]); volts_max[0] = rnd_float(4.5, 5.5) * (float) sin(angle[1]);
volts_max[Y] = rnd_float(9.0, 12.0) * (float) cos(angle[X]); volts_max[1] = rnd_float(4.5, 5.5) * (float) cos(angle[0]);
volts_max[Z] = rnd_float(9.0, 12.0) * (float) cos(angle[Y] - angle[X]); volts_max[2] = rnd_float(4.5, 5.5) * (float) cos(angle[1] - angle[0]);
float amps_avg = rnd_float(150, 750); float amps_avg = rnd_float(150, 300);
amps_max[X] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) sin(angle[Y]); amps_max[0] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) sin(angle[1]);
amps_max[Y] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) cos(angle[X]); amps_max[1] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) cos(angle[0]);
amps_max[Z] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) cos(angle[Y] - angle[X]); amps_max[2] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) cos(angle[1] - angle[0]);
batt = rnd_float(3.8, 4.1); batt = rnd_float(3.8, 4.3);
speed = rnd_float(1.0, 2.5); speed = rnd_float(1.0, 2.5);
eclipse = (rnd_float(-1, +4) > 0) ? 1.0 : 0.0; eclipse = (rnd_float(-1, +4) > 0) ? 1.0 : 0.0;
atmosphere = (rnd_float(-1, +4) > 0) ? 0.0 : 1.0;
// eclipse = 1; // eclipse = 1;
period = rnd_float(150, 300); period = rnd_float(150, 300);
tempS = rnd_float(20, 55); tempS = rnd_float(20, 55);
@ -386,7 +426,7 @@ int main(int argc, char * argv[]) {
temp_min = rnd_float(10, 20); temp_min = rnd_float(10, 20);
// #ifdef DEBUG_LOGGING // #ifdef DEBUG_LOGGING
for (int i = X; i <= Z; i++) for (int i = 0; i < 3; i++)
printf("axis: %f angle: %f v: %f i: %f \n", axis[i], angle[i], volts_max[i], amps_max[i]); printf("axis: %f angle: %f v: %f i: %f \n", axis[i], angle[i], volts_max[i], amps_max[i]);
printf("batt: %f speed: %f eclipse_time: %f eclipse: %f period: %f temp: %f max: %f min: %f\n", batt, speed, eclipse_time, eclipse, period, tempS, temp_max, temp_min); printf("batt: %f speed: %f eclipse_time: %f eclipse: %f period: %f temp: %f max: %f min: %f\n", batt, speed, eclipse_time, eclipse, period, tempS, temp_max, temp_min);
// #endif // #endif
@ -508,9 +548,8 @@ int main(int argc, char * argv[]) {
get_tlm_fox(); // fill transmit buffer with reset count 0 packets that will be ignored get_tlm_fox(); // fill transmit buffer with reset count 0 packets that will be ignored
else if (((mode == FC))) // && !sim_mode) else if (((mode == FC))) // && !sim_mode)
get_tlm_fc(); // fill transmit buffer with reset count 0 packets that will be ignored get_tlm_fc(); // fill transmit buffer with reset count 0 packets that will be ignored
if (firstTime == 0) firstTime = 1;
firstTime = 1;
// if (!sim_mode) // always read sensors, even in sim mode // if (!sim_mode) // always read sensors, even in sim mode
{ {
@ -549,13 +588,11 @@ int main(int argc, char * argv[]) {
fflush(stdout); fflush(stdout);
fflush(stderr); fflush(stderr);
// frames_sent++; // frames_sent++;
// if (!sim_mode) {
sensor_payload[0] = '\0';
memset(sensor, 0, sizeof(sensor));
// }
sensor_payload[0] = 0;
memset(voltage, 0, sizeof(voltage)); memset(voltage, 0, sizeof(voltage));
memset(current, 0, sizeof(current)); memset(current, 0, sizeof(current));
memset(sensor, 0, sizeof(sensor));
memset(other, 0, sizeof(other)); memset(other, 0, sizeof(other));
FILE * uptime_file = fopen("/proc/uptime", "r"); FILE * uptime_file = fopen("/proc/uptime", "r");
@ -568,35 +605,6 @@ int main(int argc, char * argv[]) {
// #endif // #endif
fclose(uptime_file); fclose(uptime_file);
if (fail_rnd_mode) {
// if (loop % 10 == 0) {
if ((loopTime - failTime) > fail_time * 1000) {
// failureMode = (int) rnd_float(1, FAIL_COUNT);
failureMode = (int) rnd_float(1, 9);
printf("Sim Mode Random Failure Change\n");
FILE * failure_mode_file = fopen("/home/pi/CubeSatSim/failure_mode.txt", "w");
fprintf(failure_mode_file, "%d", failureMode);
fclose(failure_mode_file);
failTime = loopTime;
}
}
// else
// {
// failureMode = OFF;
FILE * failure_mode_file = fopen("/home/pi/CubeSatSim/failure_mode.txt", "r");
if (failure_mode_file != NULL) {
char failure_string[10];
if ( (fgets(failure_string, 10, failure_mode_file)) != NULL) {
failureMode = atoi(failure_string);
fclose(failure_mode_file);
printf("Failure mode: %d\n", failureMode);
}
} else {
failureMode = FAIL_NONE;
printf("No simulated failure.\n");
}
// }
{ {
int count1; int count1;
char * token; char * token;
@ -627,55 +635,38 @@ int main(int argc, char * argv[]) {
} }
} }
if (voltage[map[BAT]] == 0.0) // No BAT Board if (voltage[map[BAT]] == 0.0) // No BAT Board
if (voltage[map[BAT2]] == 0.0) // No BAT2 Board if (voltage[map[BAT2]] == 0.0) // No BAT2 Board
batteryVoltage = 4.5; batteryVoltage = 4.5;
else { else {
batteryVoltage = voltage[map[BAT2]]; // only BAT2 Board present batteryVoltage = voltage[map[BAT2]]; // only BAT2 Board present
if (sim_mode && !sim_config) { // if Voltage sensor on Battery board is present, exit simulated telemetry mode
sim_mode = FALSE;
fprintf(stderr, "Turning off sim_mode since battery sensor 2 is present\n");
}
}
else {
batteryVoltage = voltage[map[BAT]]; // BAT Board present
if (sim_mode && !sim_config) { // if Voltage sensor on Battery board is present, exit simulated telemetry mode if (sim_mode && !sim_config) { // if Voltage sensor on Battery board is present, exit simulated telemetry mode
sim_mode = FALSE; sim_mode = FALSE;
fprintf(stderr, "Turning off sim_mode since battery sensor is present\n"); fprintf(stderr, "Turning off sim_mode since battery sensor 2 is present\n");
} }
} }
else {
batteryVoltage = voltage[map[BAT]]; // BAT Board present
if (sim_mode && !sim_config) { // if Voltage sensor on Battery board is present, exit simulated telemetry mode
sim_mode = FALSE;
fprintf(stderr, "Turning off sim_mode since battery sensor is present\n");
}
}
batteryCurrent = current[map[BAT]] + current[map[BAT2]]; // Sum BAT and BAT2 currents batteryCurrent = current[map[BAT]] + current[map[BAT2]]; // Sum BAT and BAT2 currents
} }
// if (payload == ON) { // moved to here
if (!ax5043) {
// if ((payload == ON) && (mode != BPSK)) { // moved to here
payload = get_payload_serial(FALSE); // not debug // STEMBoardFailure = 0;
printf("get_payload_status: %d \n", payload); payload = get_payload_serial(FALSE);
if (payload == FALSE) { printf("get_payload_status: %d \n", payload); // not debug
payload = pi_sensors(buffer2);
printf("pi_sensors status: %d \n", payload);
}
fflush(stdout); fflush(stdout);
// printf("String: %s\n", buffer2); // printf("String: %s\n", buffer2);
fflush(stdout); fflush(stdout);
strcpy(sensor_payload, buffer2); strcpy(sensor_payload, buffer2);
// printf(" Response from STEM Payload board: %s\n", sensor_payload);
printf(" Response from STEM Payload: %s\n", sensor_payload);
char sensor_buffer[30];
int sensor_count;
sensor_buffer[0] = 0;
sensor_count = sensor_loop(sensor_buffer);
if (sensor_count > NEW_SENSOR_FIELDS_MAX)
sensor_count = NEW_SENSOR_FIELDS_MAX;
if (sensor_count > 0) {
char space[] = " ";
strcat(sensor_payload, space);
strcat(sensor_payload, sensor_buffer);
printf(" Payload after new sensor read: %s\n", sensor_payload);
}
telem_file = fopen("/home/pi/CubeSatSim/telem.txt", "a"); telem_file = fopen("/home/pi/CubeSatSim/telem.txt", "a");
// printf("Writing payload string\n"); // printf("Writing payload string\n");
time_t timeStamp; time_t timeStamp;
@ -685,30 +676,17 @@ int main(int argc, char * argv[]) {
char timeStampNoNl[31], bat_string[31]; char timeStampNoNl[31], bat_string[31];
snprintf(timeStampNoNl, 30, "%.24s", ctime(&timeStamp)); snprintf(timeStampNoNl, 30, "%.24s", ctime(&timeStamp));
// printf("TimeStamp: %s\n", timeStampNoNl); // printf("TimeStamp: %s\n", timeStampNoNl);
/*
if (c2cStatus == DISABLED) if (c2cStatus == DISABLED)
snprintf(bat_string, 30, "BAT %4.2f %5.1f", batteryVoltage, batteryCurrent); snprintf(bat_string, 30, "BAT %4.2f %5.1f", batteryVoltage, batteryCurrent);
else else
snprintf(bat_string, 30, "BAT %4.2f %5.1f C", batteryVoltage, batteryCurrent); snprintf(bat_string, 30, "BAT %4.2f %5.1f C", batteryVoltage, batteryCurrent);
*/
snprintf(bat_string, 30, "BAT %.2f %.1f", batteryVoltage, batteryCurrent);
if (c2cStatus != DISABLED)
strcat(bat_string," C");
if (sim_mode || (failureMode != FAIL_NONE))
strcat(bat_string," S");
fprintf(telem_file, "%s %s %s\n", timeStampNoNl, bat_string, sensor_payload); // write telemetry string to telem.txt file fprintf(telem_file, "%s %s %s\n", timeStampNoNl, bat_string, sensor_payload); // write telemetry string to telem.txt file
fclose(telem_file); fclose(telem_file);
if (failureMode == FAIL_PAYLOAD) {
sensor_payload[0] = '\0'; // This will cause the payload to not be processed.
printf("Simulated Payload Failure.\n");
}
//// if (!sim_mode) {
{
if ((sensor_payload[0] == 'O') && (sensor_payload[1] == 'K')) // only process if valid payload response if ((sensor_payload[0] == 'O') && (sensor_payload[1] == 'K')) // only process if valid payload response
{ {
// printf("Valid Payload!\n");
int count1; int count1;
char * token; char * token;
@ -718,15 +696,12 @@ int main(int argc, char * argv[]) {
for (count1 = 0; count1 < SENSOR_FIELDS; count1++) { for (count1 = 0; count1 < SENSOR_FIELDS; count1++) {
if (token != NULL) { if (token != NULL) {
sensor[count1] = (float) atof(token); sensor[count1] = (float) atof(token);
strcpy(sensor_string[count1], token);
// #ifdef DEBUG_LOGGING // #ifdef DEBUG_LOGGING
// printf("sensor: %f ", sensor[count1]); // print sensor data // printf("sensor: %f ", sensor[count1]); // print sensor data
// printf("Sensor String %d is %s\n",count1, sensor_string[count1]);
// #endif // #endif
token = strtok(NULL, space); token = strtok(NULL, space);
} }
} }
printf("\n"); printf("\n");
// if (sensor[GPS1] != 0) { // if (sensor[GPS1] != 0) {
@ -745,11 +720,10 @@ int main(int argc, char * argv[]) {
newGpsTime = millis(); newGpsTime = millis();
} }
} }
} }
} else
// else ; //payload = OFF; // turn off since STEM Payload is not responding
// ; //payload = OFF; // turn off since STEM Payload is not responding }
if ((millis() - newGpsTime) > 60000) { if ((millis() - newGpsTime) > 60000) {
longitude += rnd_float(-0.05, 0.05) / 100.0; // was .05 longitude += rnd_float(-0.05, 0.05) / 100.0; // was .05
latitude += rnd_float(-0.05, 0.05) / 100.0; latitude += rnd_float(-0.05, 0.05) / 100.0;
@ -757,103 +731,8 @@ int main(int argc, char * argv[]) {
// printf("GPS Location with Rnd: APRS %07.2f, %08.2f \n", toAprsFormat(latitude), toAprsFormat(longitude)); // printf("GPS Location with Rnd: APRS %07.2f, %08.2f \n", toAprsFormat(latitude), toAprsFormat(longitude));
newGpsTime = millis(); newGpsTime = millis();
} }
if (sim_mode && (failureMode != FAIL_PAYLOAD) && !payload) {
printf("Generating simulated payload telemetry\n");
if (atmosphere == 0) {
sensor[PRES] = 0;
strcpy(sensor_string[PRES], "0.0");
sensor[ALT] = 400;
strcpy(sensor_string[ALT], "30000");
sensor[HUMI] = 0;
strcpy(sensor_string[HUMI], "0.0");
sensor[TEMP] = 0;
strcpy(sensor_string[TEMP], "0.0");
} else {
sensor[PRES] = 1015;
strcpy(sensor_string[PRES], "1015");
sensor[ALT] = 75;
strcpy(sensor_string[ALT], "75");
sensor[HUMI] = 48;
strcpy(sensor_string[HUMI], "48");
sensor[TEMP] = 27;
strcpy(sensor_string[TEMP], "27.0");
}
char sensor_number[20];
sensor[ACCEL_X] = axis[X];
sprintf(sensor_number, "%.2f", axis[X]);
strcpy(sensor_string[ACCEL_X], sensor_number);
sensor[ACCEL_Y] = axis[Y];
sprintf(sensor_number, "%.2f", axis[Y]);
strcpy(sensor_string[ACCEL_Y], sensor_number);
sensor[ACCEL_Z] = axis[Z];
sprintf(sensor_number, "%.2f", axis[Z]);
strcpy(sensor_string[ACCEL_Z], sensor_number);
float spin;
spin = rnd_float(-30.0, 30.0);
sensor[GYRO_X] = axis[X] * spin;
sprintf(sensor_number, "%.2f", sensor[GYRO_X]);
strcpy(sensor_string[GYRO_X], sensor_number);
sensor[GYRO_Y] = axis[Y] * spin;
sprintf(sensor_number, "%.2f", sensor[GYRO_Y]);
strcpy(sensor_string[GYRO_Y], sensor_number);
sensor[GYRO_Z] = axis[Z] * spin;
sprintf(sensor_number, "%.2f", sensor[GYRO_Z]);
strcpy(sensor_string[GYRO_Z], sensor_number);
// printf("sim sensor: %s\n", sensor_string[GYRO_Z]);
printf("sim sensor spin: %f value: %f length: %d string: %s\n", spin, sensor[GYRO_Z], strlen(sensor_string[GYRO_Z]), sensor_string[GYRO_Z]);
}
if (failureMode == FAIL_BME) {
sensor[TEMP] = 0.0;
strcpy(sensor_string[TEMP], "0.0");
sensor[PRES] = 0.0;
strcpy(sensor_string[PRES], "0.0");
sensor[HUMI] = 0.0;
strcpy(sensor_string[HUMI], "0.0");
sensor[ALT] = 0.0;
strcpy(sensor_string[ALT], "0.0");
printf("Simulated BME Failure!\n");
}
if (failureMode == FAIL_MPU) {
sensor[ACCEL_X] = 0.0;
strcpy(sensor_string[ACCEL_X], "0.0");
sensor[ACCEL_Y] = 0.0;
strcpy(sensor_string[ACCEL_Y], "0.0");
sensor[ACCEL_Z] = 0.0;
strcpy(sensor_string[ACCEL_Z], "0.0");
sensor[GYRO_X] = 0.0;
strcpy(sensor_string[GYRO_X], "0.0");
sensor[GYRO_Y] = 0.0;
strcpy(sensor_string[GYRO_Y], "0.0");
sensor[GYRO_Z] = 0.0;
strcpy(sensor_string[GYRO_Z], "0.0");
printf("Simulated MPU Failure!\n");
}
if ((failureMode == FAIL_BME) || (failureMode == FAIL_MPU) || sim_mode) // recreaate sensor_payload string
{
sensor_payload[0] = '\0';
strcpy(sensor_string[0], "OK");
strcpy(sensor_string[1], "BME280");
strcpy(sensor_string[6], "MPU6050");
for (count1 = 0; count1 < SENSOR_FIELDS; count1++) {
strcat(sensor_payload, sensor_string[count1]);
strcat(sensor_payload, " ");
}
printf("Updated Sensor String: %s\n", sensor_payload);
}
else if (failureMode != FAIL_PAYLOAD) {
printf("Restoring sensor_payload\n");
strcpy(sensor_payload, buffer2); // restore sensor_payload after strtok operation
}
if ((sensor_payload[0] == 'O') && (sensor_payload[1] == 'K')) { if ((sensor_payload[0] == 'O') && (sensor_payload[1] == 'K')) {
// printf("Valid Payload!!\n");
for (int count1 = 0; count1 < SENSOR_FIELDS; count1++) { for (int count1 = 0; count1 < SENSOR_FIELDS; count1++) {
if (sensor[count1] < sensor_min[count1]) if (sensor[count1] < sensor_min[count1])
sensor_min[count1] = sensor[count1]; sensor_min[count1] = sensor[count1];
@ -890,6 +769,15 @@ int main(int argc, char * argv[]) {
current[map[PLUS_Z]] = (Zi >= 0) ? Zi : 0; current[map[PLUS_Z]] = (Zi >= 0) ? Zi : 0;
current[map[MINUS_Z]] = (Zi >= 0) ? 0 : ((-1.0f) * Zi); current[map[MINUS_Z]] = (Zi >= 0) ? 0 : ((-1.0f) * Zi);
voltage[map[PLUS_X]] = (Xv >= 1) ? Xv : rnd_float(0.9, 1.1);
voltage[map[MINUS_X]] = (Xv <= -1) ? ((-1.0f) * Xv) : rnd_float(0.9, 1.1);
voltage[map[PLUS_Y]] = (Yv >= 1) ? Yv : rnd_float(0.9, 1.1);
voltage[map[MINUS_Y]] = (Yv <= -1) ? ((-1.0f) * Yv) : rnd_float(0.9, 1.1);
voltage[map[PLUS_Z]] = (Zv >= 1) ? Zv : rnd_float(0.9, 1.1);
voltage[map[MINUS_Z]] = (Zv <= -1) ? ((-1.0f) * Zv) : rnd_float(0.9, 1.1);
printf("temp: %f Time: %f Eclipse: %d : %f %f | %f %f | %f %f\n",tempS, time, eclipse, voltage[map[PLUS_X]], voltage[map[MINUS_X]], voltage[map[PLUS_Y]], voltage[map[MINUS_Y]], current[map[PLUS_Z]], current[map[MINUS_Z]]);
tempS += (eclipse > 0) ? ((temp_max - tempS) / 50.0f) : ((temp_min - tempS) / 50.0f); tempS += (eclipse > 0) ? ((temp_max - tempS) / 50.0f) : ((temp_min - tempS) / 50.0f);
tempS += +rnd_float(-1.0, 1.0); tempS += +rnd_float(-1.0, 1.0);
// IHUcpuTemp = (int)((tempS + rnd_float(-1.0, 1.0)) * 10 + 0.5); // IHUcpuTemp = (int)((tempS + rnd_float(-1.0, 1.0)) * 10 + 0.5);
@ -902,43 +790,27 @@ 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)); // 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]] = ((current[map[BAT2]] * voltage[map[BAT2]]) / batt) - charging;
current[map[BAT]] = rnd_float(320, 510) - charging; current[map[BAT]] = rnd_float(285, 305) - 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; batt -= (batt > 3.5) ? current[map[BAT]] / 30000 : current[map[BAT]] / 3000;
if (batt < 3.6) { if (batt < 3.0) {
batt = 3.6; batt = 3.0;
SafeMode = 1; SafeMode = 1;
printf("Safe Mode!\n"); printf("Safe Mode!\n");
} else } else
SafeMode= 0; SafeMode= 0;
if (batt > 4.1) if (batt > 4.5)
batt = 4.1; batt = 4.5;
voltage[map[BAT]] = batt + rnd_float(-0.01, 0.01); voltage[map[BAT]] = batt + rnd_float(-0.01, 0.01);
float Vm, Vp;
Vm = batt + 0.5;
Vp = (Xv > 0) ? Xv : rnd_float(0.0, 0.1);
voltage[map[PLUS_X]] = (Vp >= Vm) ? (Vm + rnd_float(-0.1, 0.1)) : Vp;
Vp = (Xv < 0) ? ((-1.0f) * Xv) : rnd_float(0.0, 0.1);
voltage[map[MINUS_X]] = (Vp >= Vm) ? (Vm + rnd_float(-0.1, 0.1)) : Vp;
Vp = (Yv > 0) ? Yv : rnd_float(0.0, 0.1);
voltage[map[PLUS_Y]] = (Vp >= Vm) ? (Vm + rnd_float(-0.1, 0.1)) : Vp;
Vp = (Yv < 0) ? ((-1.0f) * Yv) : rnd_float(0.0, 0.1);
voltage[map[MINUS_Y]] = (Vp >= Vm) ? (Vm + rnd_float(-0.1, 0.1)) : Vp;
Vp = (Zv > 0) ? Zv : rnd_float(0.0, 0.1);
voltage[map[PLUS_Z]] = (Vp >= Vm) ? (Vm + rnd_float(-0.1, 0.1)) : Vp;
Vp = (Zv < 0) ? ((-1.0f) * Zv) : rnd_float(0.0, 0.1);
voltage[map[MINUS_Z]] = (Vp >= Vm) ? (Vm + rnd_float(-0.1, 0.1)) : Vp;
printf("temp: %f Time: %f Eclipse: %d : %f %f | %f %f | %f %f\n",tempS, time, eclipse, voltage[map[PLUS_X]], voltage[map[MINUS_X]], voltage[map[PLUS_Y]], voltage[map[MINUS_Y]], current[map[PLUS_Z]], current[map[MINUS_Z]]);
// end of simulated telemetry // end of simulated telemetry
} }
else {
}
FILE * cpuTempSensor = fopen("/sys/class/thermal/thermal_zone0/temp", "r"); FILE * cpuTempSensor = fopen("/sys/class/thermal/thermal_zone0/temp", "r");
if (cpuTempSensor) { if (cpuTempSensor) {
// double cpuTemp; // double cpuTemp;
@ -1007,33 +879,14 @@ int main(int argc, char * argv[]) {
FILE * fp = fopen("/home/pi/CubeSatSim/telem_string.txt", "w"); FILE * fp = fopen("/home/pi/CubeSatSim/telem_string.txt", "w");
if (fp != NULL) { if (fp != NULL) {
// printf("Writing telem_string.txt\n"); // printf("Writing telem_string.txt\n");
if (batteryVoltage != 4.5) { if (batteryVoltage != 4.5)
/*
if (c2cStatus == DISABLED) if (c2cStatus == DISABLED)
fprintf(fp, "BAT %4.2fV %4.0fmA\n", batteryVoltage, batteryCurrent); fprintf(fp, "BAT %4.2fV %4.0fmA\n", batteryVoltage, batteryCurrent);
else else
fprintf(fp, "BAT %4.2fV %4.0fmA C\n", batteryVoltage, batteryCurrent); // show command and control is on fprintf(fp, "BAT %4.2fV %4.0fmA C\n", batteryVoltage, batteryCurrent); // show command and control is on
*/ else
fprintf(fp, "BAT %.2fV %.0fmA", batteryVoltage, batteryCurrent); fprintf(fp, "\n"); // don't show voltage and current if it isn't a sensor value
if (c2cStatus != DISABLED)
fprintf(fp," C");
if (sim_mode || (failureMode != FAIL_NONE))
fprintf(fp," S\n");
else
fprintf(fp,"\n");
}
else {
printf("Write simulted voltage and current to telem_string.txt\n");
// fprintf(fp, "\n"); // don't show voltage and current if it isn't a sensor value
fprintf(fp, "BAT %.2fV %.0fmA", voltage[map[BAT]], current[map[BAT]]); // display simulated voltage and current
if (c2cStatus != DISABLED)
fprintf(fp," C");
if (sim_mode || (failureMode != FAIL_NONE))
fprintf(fp," S\n");
else
fprintf(fp,"\n");
}
fclose(fp); fclose(fp);
} else } else
printf("Error writing to telem_string.txt\n"); printf("Error writing to telem_string.txt\n");
@ -1136,6 +989,20 @@ int upper_digit(int number) {
return digit; return digit;
} }
static int init_rf() {
int ret;
fprintf(stderr, "Initializing AX5043\n");
ret = ax5043_init( & hax5043, XTAL_FREQ_HZ, VCO_INTERNAL);
if (ret != PQWS_SUCCESS) {
fprintf(stderr,
"ERROR: Failed to initialize AX5043 with error code %d\n", ret);
// exit(EXIT_FAILURE);
return (0);
}
return (1);
}
void get_tlm(void) { void get_tlm(void) {
FILE * txResult; FILE * txResult;
@ -1198,16 +1065,17 @@ void get_tlm(void) {
// char footer_str[] = "-11>APCSS:010101/hi hi ' >> t.txt && touch /home/pi/CubeSatSim/ready"; // transmit is done by transmit.py // char footer_str[] = "-11>APCSS:010101/hi hi ' >> t.txt && touch /home/pi/CubeSatSim/ready"; // transmit is done by transmit.py
char footer_str[] = " && echo 'AMSAT-11>APCSS:010101/hi hi ' >> t.txt && touch /home/pi/CubeSatSim/ready"; // transmit is done by transmit.py char footer_str[] = " && echo 'AMSAT-11>APCSS:010101/hi hi ' >> t.txt && touch /home/pi/CubeSatSim/ready"; // transmit is done by transmit.py
char footer_str2[] = " && touch /home/pi/CubeSatSim/ready"; char footer_str2[] = " && touch /home/pi/CubeSatSim/ready";
char zero[] = "0.0";
if (ax5043) {
strcpy(str, header_str);
} else {
strcpy(str, header_str3); strcpy(str, header_str3);
// } // }
if (mode == AFSK) { if (mode == AFSK) {
strcat(str, call); strcat(str, call);
strcat(str, header_str2); strcat(str, header_str2);
} }
}
// printf("Str: %s \n", str); // printf("Str: %s \n", str);
if (mode != CW) { if (mode != CW) {
// sprintf(header_str2b, "=%7.2f%c%c%c%08.2f%cShi hi ",4003.79,'N',0x5c,0x5c,07534.33,'W'); // add APRS lat and long // sprintf(header_str2b, "=%7.2f%c%c%c%08.2f%cShi hi ",4003.79,'N',0x5c,0x5c,07534.33,'W'); // add APRS lat and long
@ -1220,6 +1088,9 @@ void get_tlm(void) {
else else
sprintf(header_long, "%08.2f%c",toAprsFormat( longitude) * (-1.0), 'W'); // long sprintf(header_long, "%08.2f%c",toAprsFormat( longitude) * (-1.0), 'W'); // long
if (ax5043)
sprintf(header_str2b, "=%s%c%sShi hi ", header_lat, 0x5c, header_long); // add APRS lat and long
else
//#ifdef HAB //#ifdef HAB
if (hab_mode) if (hab_mode)
sprintf(header_str2b, "=%s%c%sOhi hi ", header_lat, 0x2f, header_long); // add APRS lat and long with Balloon HAB icon sprintf(header_str2b, "=%s%c%sOhi hi ", header_lat, 0x2f, header_long); // add APRS lat and long with Balloon HAB icon
@ -1234,11 +1105,8 @@ void get_tlm(void) {
strcat(str, header_str4); strcat(str, header_str4);
strcat(str, call); strcat(str, call);
if (c2cStatus != DISABLED) { if (c2cStatus != DISABLED) {
strcat(str, " C"); strcat(str, header_c2c);
} }
if (sim_mode || failureMode != FAIL_NONE) {
strcat(str, " S");
}
sprintf(tlm_str, "%s' > cw0.txt", &str); sprintf(tlm_str, "%s' > cw0.txt", &str);
printf("CW string to execute: %s\n", &tlm_str); printf("CW string to execute: %s\n", &tlm_str);
@ -1270,23 +1138,16 @@ void get_tlm(void) {
// fclose(file_append); // fclose(file_append);
// } // }
} else { // APRS } else { // APRS
/*
if (c2cStatus == 0) if (c2cStatus == 0)
sprintf(tlm_str, "BAT %4.2f %5.1f ", batteryVoltage, batteryCurrent); sprintf(tlm_str, "BAT %4.2f %5.1f ", batteryVoltage, batteryCurrent);
else else
sprintf(tlm_str, "BAT %4.2f %5.1f C ", batteryVoltage, batteryCurrent); sprintf(tlm_str, "BAT %4.2f %5.1f C ", batteryVoltage, batteryCurrent);
*/
snprintf(tlm_str, 30, "BAT %.2f %.1f ", batteryVoltage, batteryCurrent); strcat(str, tlm_str);
if (c2cStatus != DISABLED)
strcat(tlm_str,"C ");
if (sim_mode || (failureMode != FAIL_NONE))
strcat(tlm_str,"S ");
// printf("tlm_str: %s\n", tlm_str);
strcat(str, tlm_str);
} }
strcpy(sensor_payload, buffer2);
// strcpy(sensor_payload, buffer2); printf(" Response from STEM Payload board:: %s\n", sensor_payload);
printf(" sensor_payload: %s\n", sensor_payload);
// printf(" Str so far: %s\n", str); // printf(" Str so far: %s\n", str);
if (mode != CW) if (mode != CW)
@ -1310,7 +1171,30 @@ void get_tlm(void) {
sleep(5); sleep(5);
} }
} }
else { // APRS using transmit else if (ax5043) {
digitalWrite(txLed, txLedOn);
fprintf(stderr, "INFO: Transmitting X.25 packet using AX5043\n");
memcpy(data, str, strnlen(str, 256));
printf("data: %s \n", data);
int ret = ax25_tx_frame( & hax25, & hax5043, data, strnlen(str, 256));
if (ret) {
fprintf(stderr,
"ERROR: Failed to transmit AX.25 frame with error code %d\n",
ret);
exit(EXIT_FAILURE);
}
ax5043_wait_for_transmit();
digitalWrite(txLed, txLedOff);
if (ret) {
fprintf(stderr,
"ERROR: Failed to transmit entire AX.25 frame with error code %d\n",
ret);
exit(EXIT_FAILURE);
}
sleep(4); // was 2
} else { // APRS using transmit
strcat(str, footer_str1); strcat(str, footer_str1);
// strcat(str, call); // strcat(str, call);
@ -1319,7 +1203,7 @@ void get_tlm(void) {
else else
strcat(str, footer_str2); strcat(str, footer_str2);
fprintf(stderr, "APRS String to execute: %s\n", str); fprintf(stderr, "String to execute: %s\n", str);
printf("\n\nTelemetry string is %s \n\n", str); printf("\n\nTelemetry string is %s \n\n", str);
@ -1350,7 +1234,6 @@ void get_tlm_fox() {
int i; int i;
long int sync = syncWord; long int sync = syncWord;
int cam = ON;
smaller = (int) (S_RATE / (2 * freq_Hz)); smaller = (int) (S_RATE / (2 * freq_Hz));
@ -1378,68 +1261,10 @@ void get_tlm_fox() {
int posXi = 0, negXi = 0, posYi = 0, negYi = 0, posZi = 0, negZi = 0; int posXi = 0, negXi = 0, posYi = 0, negYi = 0, posZi = 0, negZi = 0;
int head_offset = 0; int head_offset = 0;
STEMBoardFailure = 1;
short int buffer_test[bufLen]; short int buffer_test[bufLen];
int buffSize; int buffSize;
buffSize = (int) sizeof(buffer_test); buffSize = (int) sizeof(buffer_test);
if (failureMode == FAIL_NONE)
printf("No Simulated Failure!\n");
// if (failureMode == -1) {
// failureMode = (int) rnd_float(1, FAIL_COUNT);
// printf("Random Failure\n");
// }
if (failureMode == FAIL_UNPLUG) {
voltage[map[PLUS_Y]] = rnd_float(0.8, 0.95);
current[map[PLUS_Y]] = 0.0;
printf("+Y Solar Unplugged Failure\n");
}
if (failureMode == FAIL_SOLAR) {
voltage[map[PLUS_X]] = 0.0;
current[map[PLUS_X]] = 0.0;
printf("+X Solar Simulated Failure\n");
}
if (failureMode == FAIL_DEGRADE) {
voltage[map[MINUS_X]] = voltage[map[MINUS_X]] * 0.5;
current[map[MINUS_X]] = current[map[MINUS_X]] * 0.5;
printf("-X Solar Deg Simulated Failure\n");
}
if (failureMode == FAIL_SHORT) {
voltage[map[MINUS_Y]] = 0.0;
printf("-Y Solar SC Simulated Failure!\n");
}
if (failureMode == FAIL_I2C1) {
voltage[map[PLUS_X]] = 0.0;
current[map[PLUS_X]] = 0.0;
voltage[map[PLUS_Y]] = 0.0;
current[map[PLUS_Y]] = 0.0;
voltage[map[BAT]] = 0.0;
current[map[BAT]] = 0.0;
voltage[map[BAT2]] = 0.0;
current[map[BAT2]] = 0.0;
printf("I2C Bus 1 Simulated Failure!\n");
}
if (failureMode == FAIL_I2C3) {
voltage[map[MINUS_X]] = 0.0;
current[map[MINUS_X]] = 0.0;
voltage[map[MINUS_Y]] = 0.0;
current[map[MINUS_Y]] = 0.0;
voltage[map[MINUS_Z]] = 0.0;
current[map[MINUS_Z]] = 0.0;
voltage[map[PLUS_Z]] = 0.0;
current[map[PLUS_Z]] = 0.0;
printf("I2C Bus 3 Simulated Failure!\n");
}
if (failureMode == FAIL_PAYLOAD) {
payload = OFF;
printf("Payload Simulated Failure!\n");
}
if (failureMode == FAIL_CAMERA) {
cam = OFF;
printf("Camera Simulated Failure!\n");
}
if (mode == FSK) if (mode == FSK)
id = 7; id = 7;
else else
@ -1448,8 +1273,7 @@ void get_tlm_fox() {
// for (int frames = 0; frames < FRAME_CNT; frames++) // for (int frames = 0; frames < FRAME_CNT; frames++)
for (int frames = 0; frames < frameCnt; frames++) { for (int frames = 0; frames < frameCnt; frames++) {
// if (firstTime != ON) { if (firstTime != ON) {
if (TRUE) {
// delay for sample period // delay for sample period
/**/ /**/
@ -1467,7 +1291,7 @@ void get_tlm_fox() {
sampleTime = (unsigned int) millis(); sampleTime = (unsigned int) millis();
} else } else
printf("first or second time - no sleep\n"); printf("first time - no sleep\n");
printf("++++ Loop time: %5.3f sec +++++\n", (millis() - loopTime)/1000.0); printf("++++ Loop time: %5.3f sec +++++\n", (millis() - loopTime)/1000.0);
fflush(stdout); fflush(stdout);
@ -1587,7 +1411,7 @@ void get_tlm_fox() {
encodeA(b, 9 + head_offset, battCurr); encodeA(b, 9 + head_offset, battCurr);
encodeB(b, 10 + head_offset, (int)(sensor[TEMP] * 10 + 0.5)); // Temp encodeB(b, 10 + head_offset, (int)(sensor[TEMP] * 10 + 0.5)); // Temp
if (mode == FSK) { if (mode == FSK) {
encodeA(b, 12 + head_offset, posXv); encodeA(b, 12 + head_offset, posXv);
@ -1741,52 +1565,25 @@ void get_tlm_fox() {
encodeA(b, 33 + head_offset, (int)(sensor[PRES] + 0.5)); // Pressure encodeA(b, 33 + head_offset, (int)(sensor[PRES] + 0.5)); // Pressure
encodeB(b, 34 + head_offset, (int)(sensor[ALT] / 10.0 + 0.5)); // Altitude encodeB(b, 34 + head_offset, (int)(sensor[ALT] / 10.0 + 0.5)); // Altitude
encodeA(b, 36 + head_offset, Resets);
encodeB(b_min, 49 + head_offset, (int)(sensor_min[XS1])); encodeB(b, 37 + head_offset, (int)(other[RSSI] + 0.5) + 2048);
encodeA(b_min, 0 + head_offset, (int)(sensor_min[XS2]));
encodeB(b_min, 1 + head_offset, (int)(sensor_min[XS3]));
}
else
{
encodeB(b_min, 4 + head_offset, 2048); // 0
encodeA(b_min, 6 + head_offset, 2048); // 0
encodeB(b_min, 7 + head_offset, 2048); // 0
encodeB(b_min, 40 + head_offset, 2048);
encodeA(b_min, 42 + head_offset, 2048);
encodeB(b_min, 43 + head_offset, 2048);
encodeA(b_min, 48 + head_offset, 2048);
// encodeB(b_min, 49 + head_offset, 2048);
}
} encodeA(b, 39 + head_offset, (int)(other[IHU_TEMP] * 10 + 0.5));
encodeA(b, 30 + head_offset, BAT2Voltage);
encodeB(b, 31 + head_offset, ((int)(other[SPIN] * 10)) + 2048); encodeB(b, 40 + head_offset, (int)(sensor[GYRO_X] + 0.5) + 2048);
encodeA(b, 42 + head_offset, (int)(sensor[GYRO_Y] + 0.5) + 2048);
encodeB(b, 43 + head_offset, (int)(sensor[GYRO_Z] + 0.5) + 2048);
encodeA(b, 33 + head_offset, (int)(sensor[PRES] + 0.5)); // Pressure encodeA(b, 45 + head_offset, (int)(sensor[HUMI] * 10 + 0.5)); // in place of sensor1
encodeB(b, 34 + head_offset, (int)(sensor[ALT] * 10.0 + 0.5)); // Altitude
encodeA(b, 45 + head_offset, (int)(sensor[HUMI] * 10 + 0.5)); // in place of sensor1
encodeA(b, 39 + head_offset, (int)(other[TEMP] * 10 + 0.5));
encodeA(b, 36 + head_offset, Resets);
encodeB(b, 37 + head_offset, (int)(other[RSSI] + 0.5) + 2048);
encodeB(b, 40 + head_offset, (int)(sensor[GYRO_X] + 0.5) + 2048);
encodeA(b, 42 + head_offset, (int)(sensor[GYRO_Y] + 0.5) + 2048);
encodeB(b, 43 + head_offset, (int)(sensor[GYRO_Z] + 0.5) + 2048);
encodeA(b, 48 + head_offset, (int)(sensor[DTEMP] * 10 + 0.5) + 2048);
encodeB(b, 49 + head_offset, (int)(sensor[XS1]));
encodeA(b, 0 + head_offset, (int)(sensor[XS2]));
encodeB(b, 1 + head_offset, (int)(sensor[XS3]));
encodeB(b, 46 + head_offset, BAT2Current); encodeB(b, 46 + head_offset, BAT2Current);
encodeA(b, 39 + head_offset, (int)(other[IHU_TEMP] * 10 + 0.5)); encodeA(b, 48 + head_offset, (int)(sensor[DTEMP] * 10 + 0.5) + 2048);
// encodeB(b, 49 + head_offset, (int)(sensor[XS1] * 10 + 0.5) + 2048); // encodeB(b, 49 + head_offset, (int)(sensor[XS1] * 10 + 0.5) + 2048);
encodeB(b, 49 + head_offset, (int)(sensor[XS1]));
encodeA(b, 0 + head_offset, (int)(sensor[XS2]));
encodeB(b, 1 + head_offset, (int)(sensor[XS3]));
FILE * command_count_file = fopen("/home/pi/CubeSatSim/command_count.txt", "r"); FILE * command_count_file = fopen("/home/pi/CubeSatSim/command_count.txt", "r");
if (command_count_file != NULL) { if (command_count_file != NULL) {
char count_string[10]; char count_string[10];
@ -1797,28 +1594,10 @@ void get_tlm_fox() {
printf("Error opening command_count.txt!\n"); printf("Error opening command_count.txt!\n");
fclose(command_count_file); fclose(command_count_file);
// printf("Command count: %d\n", groundCommandCount); // printf("Command count: %d\n", groundCommandCount);
int simulated;
simulated = sim_mode; int status = STEMBoardFailure + SafeMode * 2 + sim_mode * 4 + PayloadFailure1 * 8 +
if (failureMode != FAIL_NONE) { (i2c_bus0 == OFF) * 16 + (i2c_bus1 == OFF) * 32 + (i2c_bus3 == OFF) * 64 + (camera == OFF) * 128 + groundCommandCount * 256;
simulated = TRUE;
printf("Showing Simulated in FoxTelem\n");
}
int i2c_1, i2c_3;
i2c_1 = i2c_bus1;
i2c_3 = i2c_bus3;
// printf("Bus1: %d Bus2: %d \n", i2c_1, i2c_3);
if (failureMode == FAIL_I2C1) {
i2c_1 = OFF;
// printf("I2C Bus 1 Simulated Failure\n");
} else if (failureMode == FAIL_I2C3) {
i2c_3 = OFF;
// printf("I2C Bus 3 Simulated Failure\n");
}
// int status = STEMBoardFailure + SafeMode * 2 + sim_mode * 4 + PayloadFailure1 * 8 +
// (i2c_bus0 == OFF) * 16 + (i2c_bus1 == OFF) * 32 + (i2c_bus3 == OFF) * 64 + (camera == OFF) * 128 + groundCommandCount * 256;
int status = STEMBoardFailure + SafeMode * 2 + simulated * 4 + PayloadFailure1 * 8 +
(i2c_bus0 == OFF) * 16 + (i2c_1 == OFF) * 32 + (i2c_3 == OFF) * 64 + (cam == OFF) * 128 + groundCommandCount * 256;
encodeA(b, 51 + head_offset, status); encodeA(b, 51 + head_offset, status);
encodeB(b, 52 + head_offset, rxAntennaDeployed + txAntennaDeployed * 2 + c2cStatus * 4); encodeB(b, 52 + head_offset, rxAntennaDeployed + txAntennaDeployed * 2 + c2cStatus * 4);
@ -2947,50 +2726,3 @@ void socket_send(int length) {
if (socket_open == 1) if (socket_open == 1)
firstTime = 0; firstTime = 0;
} }
int pi_sensors(char *buffer)
{
char sensor_buffer[1000];
FILE *sensor_read;
strcpy(buffer, "OK BME280 ");
sensor_read = sopen("/home/pi/raspberry-pi-bme280/bme280"); // read BME if present
fgets(sensor_buffer, 1000, sensor_read);
fprintf(stderr, "bme result: %s\n", sensor_buffer);
fclose(sensor_read);
if (sensor_buffer[strlen(sensor_buffer) - 1] == '\n')
sensor_buffer[strlen(sensor_buffer) - 1] = '\0'; // remove newline at end
strcat(buffer, sensor_buffer);
strcat(buffer, " MPU6050 ");
sensor_read = sopen("/home/pi/MPU6050-C-CPP-Library-for-Raspberry-Pi/mpu6050"); // read MPU if present
fgets(sensor_buffer, 1000, sensor_read);
fprintf(stderr, "mpu result: %s\n", sensor_buffer);
fclose(sensor_read);
if (sensor_buffer[strlen(sensor_buffer) - 1] == '\n')
sensor_buffer[strlen(sensor_buffer) - 1] = '\0'; // remove newline at end
strcat(buffer, sensor_buffer);
fprintf(stderr, "pi_sensors string: %s\n", buffer);
strcat(buffer, " GPS 0.0 0.0 0.0 TMP 0.0"); // place holders for GPS and diode temp
/*
strcat(buffer, " YPR ");
sensor_read = sopen("/home/pi/MPU6050-C-CPP-Library-for-Raspberry-Pi/ypr"); // read MPU if present
fgets(sensor_buffer, 1000, sensor_read);
fprintf(stderr, "mpu result: %s\n", sensor_buffer);
fclose(sensor_read);
if (sensor_buffer[strlen(sensor_buffer) - 1] == '\n')
sensor_buffer[strlen(sensor_buffer) - 1] = '\0'; // remove newline at end
strcat(buffer, sensor_buffer); // no need to remove newline at end
fprintf(stderr, "pi_sensors string: %s\n", buffer);
*/
if (strcmp(buffer, "OK BME280 0.0 0.0 0.0 0.0 MPU6050 0.0 0.0 0.0 0.0 0.0 0.0 GPS 0.0 0.0 0.0 TMP 0.0 YPR 0.0 0.0 0.0") == 0)
return (0);
else
return (1);
}

@ -52,15 +52,11 @@
#define XS1 20 // NEW user defined token will be position 19 #define XS1 20 // NEW user defined token will be position 19
#define XS2 21 #define XS2 21
#define XS3 22 #define XS3 22
#define NEW_SENSOR_FIELDS_MAX 6 #define SENSOR_FIELDS 26
#define SENSOR_FIELDS (26 + 6)
#define FC_EPS 1 #define FC_EPS 1
#define FC_BOB 25 #define FC_BOB 25
#define FC_SW 50 #define FC_SW 50
#define FC_PAYLOAD 55 #define FC_PAYLOAD 55
#define X 0
#define Y 1
#define Z 2
#define RSSI 0 #define RSSI 0
#define IHU_TEMP 2 #define IHU_TEMP 2
@ -77,6 +73,9 @@ uint32_t tx_freq_hz = 434900000 + FREQUENCY_OFFSET;
uint8_t data[1024]; uint8_t data[1024];
uint32_t tx_channel = 0; uint32_t tx_channel = 0;
ax5043_conf_t hax5043;
ax25_conf_t hax25;
int twosToInt(int val, int len); int twosToInt(int val, int len);
float toAprsFormat(float input); float toAprsFormat(float input);
float rnd_float(double min, double max); float rnd_float(double min, double max);
@ -102,7 +101,6 @@ int socket_open = 0;
int sock = 0; int sock = 0;
int loop = -1, loop_count = 0; int loop = -1, loop_count = 0;
int firstTime = ON; // 0; int firstTime = ON; // 0;
int secondTime = ON;
long start; long start;
int testCount = 0; int testCount = 0;
long time_start; long time_start;
@ -126,21 +124,6 @@ FILE *image_file;
#define REPEATER 7 #define REPEATER 7
#define TXCOMMAND 12 #define TXCOMMAND 12
#define FAIL_COUNT 11
#define FAIL_NONE -1
#define FAIL_UNPLUG 1
#define FAIL_SOLAR 2
#define FAIL_DEGRADE 3
#define FAIL_SHORT 4
#define FAIL_I2C1 5
#define FAIL_I2C3 6
#define FAIL_CAMERA 7
#define FAIL_PAYLOAD 8
#define FAIL_BME 9
#define FAIL_MPU 10
#define FAIL_AUDIO 11
int failureMode = FAIL_NONE;
int transmitStatus = -1; int transmitStatus = -1;
float amplitude; // = ; // 20000; // 32767/(10%amp+5%amp+100%amp) float amplitude; // = ; // 20000; // 32767/(10%amp+5%amp+100%amp)
@ -165,8 +148,6 @@ long int uptime;
char call[5]; char call[5];
char sim_yes[10]; char sim_yes[10];
char hab_yes[10]; char hab_yes[10];
char fail_yes[10];
int fail_time = 60;
int squelch = 3; // default squelch int squelch = 3; // default squelch
char rx[12], tx[12]; char rx[12], tx[12];
int tx_pl = 0; int tx_pl = 0;
@ -177,16 +158,16 @@ float sleepTime;
unsigned int sampleTime = 0; unsigned int sampleTime = 0;
int frames_sent = 0; int frames_sent = 0;
int cw_id = ON; int cw_id = ON;
int transmit = FALSE, onLed, onLedOn, onLedOff, txLed, txLedOn, txLedOff, payload = OFF; int vB4 = FALSE, vB5 = FALSE, vB3 = FALSE, ax5043 = FALSE, transmit = FALSE, onLed, onLedOn, onLedOff, txLed, txLedOn, txLedOff, payload = OFF;
// float voltageThreshold = 3.6, batteryVoltage = 4.5, batteryCurrent = 0, currentThreshold = 100; // float voltageThreshold = 3.6, batteryVoltage = 4.5, batteryCurrent = 0, currentThreshold = 100;
float voltageThreshold = 3.55, batteryVoltage = 4.5, batteryCurrent = 0, currentThreshold = 100; float voltageThreshold = 3.5, batteryVoltage = 4.5, batteryCurrent = 0, currentThreshold = 100;
float latitude = 39.027702f, longitude = -77.078064f; float latitude = 39.027702f, longitude = -77.078064f;
float lat_file, long_file; float lat_file, long_file;
double cpuTemp; double cpuTemp;
int frameTime; int frameTime;
long int newGpsTime; long int newGpsTime;
float axis[3], angle[3], volts_max[3], amps_max[3], batt, speed, period, tempS, temp_max, temp_min, eclipse, atmosphere; float axis[3], angle[3], volts_max[3], amps_max[3], batt, speed, period, tempS, temp_max, temp_min, eclipse;
int i2c_bus0 = OFF, i2c_bus1 = OFF, i2c_bus3 = OFF, camera = OFF, sim_mode = FALSE, SafeMode = FALSE; int i2c_bus0 = OFF, i2c_bus1 = OFF, i2c_bus3 = OFF, camera = OFF, sim_mode = FALSE, SafeMode = FALSE;
int rxAntennaDeployed = 0, txAntennaDeployed = 0, c2cStatus = 0; int rxAntennaDeployed = 0, txAntennaDeployed = 0, c2cStatus = 0;
int sim_config = FALSE; // sim mode not set by configuration int sim_config = FALSE; // sim mode not set by configuration
@ -194,7 +175,6 @@ double eclipse_time;
float voltage[9], current[9], sensor[SENSOR_FIELDS], other[3]; float voltage[9], current[9], sensor[SENSOR_FIELDS], other[3];
char sensor_payload[500]; char sensor_payload[500];
char sensor_string[SENSOR_FIELDS][32];
int test_i2c_bus(int bus); int test_i2c_bus(int bus);
@ -231,10 +211,8 @@ int pi_zero_2_offset = 0;
int hab_mode = FALSE; int hab_mode = FALSE;
int fail_rnd_mode = FALSE;
int battery_saver_mode = FALSE; int battery_saver_mode = FALSE;
long int loopTime; long int loopTime;
long int failTime = 0;
int error_count = 0; int error_count = 0;
int groundCommandCount = 0; int groundCommandCount = 0;
@ -245,9 +223,6 @@ int groundCommandCount = 0;
int m_ileaver_index; /* Byte counter for interleaver */ int m_ileaver_index; /* Byte counter for interleaver */
unsigned char m_conv_sr; /* Convolutional encoder shift register state */ unsigned char m_conv_sr; /* Convolutional encoder shift register state */
void sensor_setup(); // defined in sensor_extension.c
int sensor_loop(char *sensor_buffer); // defined in sensor_extension.c
int pi_sensors(char *buffer); // used to read BME and MPU sensor if connected to Pi
// from funcubeLib/common/fecConstants.h // from funcubeLib/common/fecConstants.h

@ -1,34 +0,0 @@
// Use this template for adding additional sensors
// see example ...
// put your library includes here
#include <stdio.h>
#include <string.h>
// put your globals here
// put your setup code here
void sensor_setup() {
// printf("Starting new sensor!\n");
}
// put your loop code here
// Very Important: only use print, not println!!
int sensor_loop(char *sensor_buffer) {
int sensors = 0; // set to the number of sensor readings adding.
sensor_buffer[0] = 0; // make sure buffer is empty
// printf("Reading new sensors!\n");
// sensors = 3;
// strcpy(sensor_buffer, "NEW 0.0 0.0 0.0");
// printf("New sensor string: %s\n", sensor_buffer);
return(sensors);
}

@ -15,7 +15,7 @@ int main(int argc, char *argv[]) {
} }
} }
printf("CubeSatSim v2.2 INA219 Voltage and Current Telemetry\n"); printf("CubeSatSim v2.1 INA219 Voltage and Current Telemetry\n");
map[MINUS_X] = MINUS_Y; map[MINUS_X] = MINUS_Y;
map[PLUS_Z] = MINUS_X; map[PLUS_Z] = MINUS_X;
map[MINUS_Y] = PLUS_Z; map[MINUS_Y] = PLUS_Z;

@ -12,30 +12,6 @@ from PIL import Image, ImageDraw, ImageFont, ImageColor
import serial import serial
import random import random
def sim_failure_check():
try:
global card
global cam_fail
cam_fail = False
file = open("/home/pi/CubeSatSim/failure_mode.txt")
fail_mode = int(file.read(2))
# print("Fail_mode: ")
# print(fail_mode)
if (fail_mode == 11):
card = "Device" # Change audio so no FM audio plays
print("Failure mode no FM audio")
elif (fail_mode == 7):
cam_fail = True
print("Failure mode camera fail")
elif (fail_mode == -1):
print("No failure mode")
else:
print("Other failure mode")
card = "Headphones"
except:
print("No failure mode")
card = "Headphones"
def battery_saver_check(): def battery_saver_check():
try: try:
global txc global txc
@ -119,8 +95,6 @@ def increment_mode():
print("can't write to .mode file") print("can't write to .mode file")
def camera_photo(): def camera_photo():
global cam_fail
sim_failure_check()
system("sudo rm /home/pi/CubeSatSim/camera_out.jpg") system("sudo rm /home/pi/CubeSatSim/camera_out.jpg")
stored_image = False stored_image = False
try: try:
@ -128,10 +102,6 @@ def camera_photo():
f = open("/home/pi/CubeSatSim/camera_out.jpg") f = open("/home/pi/CubeSatSim/camera_out.jpg")
f.close() f.close()
print("Photo taken") print("Photo taken")
if (cam_fail == True):
system("cp /home/pi/CubeSatSim/sstv//sstv_image_2_320_x_256.jpeg /home/pi/CubeSatSim/camera_out.jpg")
print("Using stored image")
stored_image = True
except: except:
system("cp /home/pi/CubeSatSim/sstv//sstv_image_2_320_x_256.jpeg /home/pi/CubeSatSim/camera_out.jpg") system("cp /home/pi/CubeSatSim/sstv//sstv_image_2_320_x_256.jpeg /home/pi/CubeSatSim/camera_out.jpg")
print("Using stored image") print("Using stored image")
@ -156,11 +126,11 @@ def camera_photo():
# 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((12, 12), callsign, font=font1, fill='black')
draw.text((10, 10), callsign, font=font1, fill='white') draw.text((10, 10), callsign, font=font1, fill='white')
draw.text((112, 12), telem_string, font=font2, fill='black') # was 122 draw.text((122, 12), telem_string, font=font2, fill='black')
draw.text((110, 10), telem_string, font=font2, fill='white') # was 120 draw.text((120, 10), telem_string, font=font2, fill='white')
img.save(file) img.save(file)
print("CubeSatSim v2.2 transmit.py starting...") print("CubeSatSim v2.1 transmit.py starting...")
pd = 21 pd = 21
ptt = 20 ptt = 20
@ -476,7 +446,6 @@ if __name__ == "__main__":
# #
# battery_saver_check() # battery_saver_check()
if (txc): if (txc):
sim_failure_check()
# output(pd, 1) # output(pd, 1)
sleep(0.1) # add delay before transmit sleep(0.1) # add delay before transmit
output (ptt, 0) output (ptt, 0)
@ -503,7 +472,6 @@ if __name__ == "__main__":
print("Ready for next packet!") print("Ready for next packet!")
sleep(0.5) sleep(0.5)
except: except:
# command_control_check() # command_control_check()
sleep(1) sleep(1)
@ -530,7 +498,6 @@ if __name__ == "__main__":
output(txLed, txLedOn) output(txLed, txLedOn)
if (txc): if (txc):
sim_failure_check()
# output (pd, 1) # output (pd, 1)
sleep(0.3) sleep(0.3)
output (ptt, 0) output (ptt, 0)
@ -592,7 +559,6 @@ if __name__ == "__main__":
# battery_saver_check() # battery_saver_check()
if (txc): if (txc):
sim_failure_check()
# output(pd, 1) # output(pd, 1)
output (ptt, 0) output (ptt, 0)
system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv_image_2_320_x_256.jpg.wav") system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv_image_2_320_x_256.jpg.wav")
@ -611,7 +577,35 @@ if __name__ == "__main__":
print("image 2 did not load - copy from CubeSatSim/sstv directory") print("image 2 did not load - copy from CubeSatSim/sstv directory")
while 1: while 1:
# command_control_check() # command_control_check()
camera_photo() camera_photo()
## system("raspistill -o /home/pi/CubeSatSim/camera_out.jpg -w 320 -h 256") # > /dev/null 2>&1")
## print("Photo taken")
##
## file='/home/pi/CubeSatSim/camera_out.jpg'
## font1 = ImageFont.truetype('DejaVuSerif.ttf', 20)
## font2 = ImageFont.truetype('DejaVuSerif-Bold.ttf', 16)
##
## try:
## filep = open("/home/pi/CubeSatSim/telem_string.txt")
## telem_string = filep.readline()
## except:
## telem_string = ""
## if (debug_mode == 1):
## print("Can't read telem_string.txt")
## print(telem_string)
##
## 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((12, 12), callsign, font=font1, fill='black')
## draw.text((10, 10), callsign, font=font1, fill='white')
## draw.text((122, 12), telem_string, font=font2, fill='black')
## draw.text((120, 10), telem_string, font=font2, fill='white')
## img.save(file)
# command_control_check()
system("/home/pi/PiSSTVpp/pisstvpp -r 48000 -p s2 /home/pi/CubeSatSim/camera_out.jpg") system("/home/pi/PiSSTVpp/pisstvpp -r 48000 -p s2 /home/pi/CubeSatSim/camera_out.jpg")
system("sudo rm /home/pi/CubeSatSim/camera_out.jpg > /dev/null 2>&1") system("sudo rm /home/pi/CubeSatSim/camera_out.jpg > /dev/null 2>&1")
@ -625,7 +619,6 @@ if __name__ == "__main__":
# battery_saver_check() # battery_saver_check()
if (txc): if (txc):
sim_failure_check()
# output(pd, 1) # output(pd, 1)
output (ptt, 0) output (ptt, 0)
system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/camera_out.jpg.wav") system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/camera_out.jpg.wav")
@ -663,7 +656,6 @@ if __name__ == "__main__":
# battery_saver_check() # battery_saver_check()
if (txc): if (txc):
sim_failure_check()
# output(pd, 1) # output(pd, 1)
output (ptt, 0) output (ptt, 0)
system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg.wav") system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg.wav")
@ -700,7 +692,6 @@ if __name__ == "__main__":
# battery_saver_check() # battery_saver_check()
if (txc): if (txc):
sim_failure_check()
# output(pd, 1) # output(pd, 1)
output (ptt, 0) output (ptt, 0)
system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg.wav") system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv_image_1_320_x_256.jpg.wav")
@ -732,7 +723,6 @@ if __name__ == "__main__":
# battery_saver_check() # battery_saver_check()
if (txc): if (txc):
sim_failure_check()
# output(pd, 1) # output(pd, 1)
output (ptt, 0) output (ptt, 0)
system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv.wav") system("aplay -D plughw:CARD=" + card + ",DEV=0 /home/pi/CubeSatSim/sstv.wav")

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
echo -e "\nupdate script for CubeSatSim v2.2\n" echo -e "\nupdate script for CubeSatSim v2.1\n"
FLAG=0 FLAG=0
checkout=0 checkout=0
@ -263,7 +263,7 @@ if [ ! -d "/home/pi/fctelem" ]; then
mkdir /home/pi/fctelem/public_html mkdir /home/pi/fctelem/public_html
cd fctelem cd fctelem
wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip
unzip -u fctelem.zip unzip fctelem.zip
FLAG=1 FLAG=1
elif [ ! -f "/home/pi/fctelem/v0.2" ]; then elif [ ! -f "/home/pi/fctelem/v0.2" ]; then
echo "Updating fctelem binary to version v0.2 for FUNcube mode" echo "Updating fctelem binary to version v0.2 for FUNcube mode"
@ -273,61 +273,15 @@ elif [ ! -f "/home/pi/fctelem/v0.2" ]; then
sudo mv fcdecode.conf fcdecode.conf.bk sudo mv fcdecode.conf fcdecode.conf.bk
sudo mv fctelem.zip fctelem.zip.1 sudo mv fctelem.zip fctelem.zip.1
wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip wget https://github.com/alanbjohnston/go/releases/download/v0.2/fctelem.zip
unzip -u fctelem.zip unzip fctelem.zip
FLAG=1 FLAG=1
fi fi
if [ ! -f "/home/pi/MPU6050-C-CPP-Library-for-Raspberry-Pi/mpu6050" ]; then
echo "Installing MPU6050-C-CPP-Library-for-Raspberry-Pi"
sudo apt-get install -y libi2c-dev
cd
git clone https://github.com/alanbjohnston/MPU6050-C-CPP-Library-for-Raspberry-Pi.git
cd MPU6050-C-CPP-Library-for-Raspberry-Pi
sudo make install
make payload
fi
cd /home/pi/MPU6050-C-CPP-Library-for-Raspberry-Pi
git checkout master
git pull --no-rebase > .updated_p
if [[ $(grep 'changed' /home/pi/MPU6050-C-CPP-Library-for-Raspberry-Pi/.updated_p) ]]; then
echo "updating MPU6050-C-CPP-Library-for-Raspberry-Pi"
sudo make install
make payload
else
echo "nothing to do for MPU6050-C-CPP-Library-for-Raspberry-Pi."
fi
if [ ! -f "/home/pi/raspberry-pi-bme280/bme280" ]; then
echo "Installing raspberry-pi-bme280"
sudo apt-get install -y libi2c-dev
cd
git clone https://github.com/alanbjohnston/raspberry-pi-bme280.git
cd raspberry-pi-bme280
git checkout payload
make
fi
cd /home/pi/raspberry-pi-bme280
git checkout payload
git pull --no-rebase > .updated_p
if [[ $(grep 'changed' /home/pi/raspberry-pi-bme280/.updated_p) ]]; then
echo "updating raspberry-pi-bme280"
make
else
echo "nothing to do for raspberry-pi-bme280."
fi
if [ ! -f "/home/pi/fcdctl/fcdctl" ]; then if [ ! -f "/home/pi/fcdctl/fcdctl" ]; then
echo "Installing fcdctl to set FUNcubeDongle Pro gain" echo "Installing fcdctl to set FUNcubeDongle Pro gain"
sudo rm /var/lib/dpkg/info/python3-pip.list sudo rm /var/lib/dpkg/info/python3-pip.list
sudo apt install python3-pip --reinstall sudo apt install python3-pip --reinstall
sudo apt-get install -y python3-smbus libusb-1.0 sudo apt-get install -y python3-smbus libusb-1.0 -y
cd cd
git clone https://github.com/csete/fcdctl.git git clone https://github.com/csete/fcdctl.git
cd fcdctl cd fcdctl
@ -336,22 +290,24 @@ fi
cd /home/pi/pi-power-button cd /home/pi/pi-power-button
git pull --no-rebase > .updated_p
git checkout master git checkout master
# grep 'changed' /home/pi/pi-power-button/.updated_p git pull --no-rebase > .updated_p
# if [[ $(grep 'changed' /home/pi/pi-power-button/.updated_p) ]]; then
grep 'changed' /home/pi/pi-power-button/.updated_p
if [[ $(grep 'changed' /home/pi/pi-power-button/.updated_p) ]]; then
echo "updating pi-power-button." echo "updating pi-power-button."
# git checkout master
script/install script/install
FLAG=1 FLAG=1
# else else
# echo "nothing to do for pi-power-button." echo "nothing to do for pi-power-button."
# fi fi
cd /home/pi/ssdv cd /home/pi/ssdv

Loading…
Cancel
Save

Powered by TurnKey Linux.