>7) )
+ {
+ error_count++ ;
+ }
+ }
+ return error_count;
+}
diff --git a/codecAO40.h b/codecAO40.h
new file mode 100644
index 00000000..3ca2c11c
--- /dev/null
+++ b/codecAO40.h
@@ -0,0 +1,110 @@
+/* AO40 encoder / decoder
+ * Copyright 2002 Phil Karn, KA9Q
+ * May be used under the terms of the GNU General Public License (GPL)
+ * See CodecAO40.cpp for lineage
+ *
+ * This file is part of FUNcubeLib.
+ *
+ * FUNcubeLib is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FUNcubeLib is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with FUNcubeLib If not, see .
+ *
+*/
+
+#pragma once
+
+//#include "fecConstants.h"
+
+
+/*
+ Amsat P3 FEC Encoder/decoder system. Look-up tables
+ Created by Phil Karn KA9Q and James Miller G3RUH
+ Last modified 2003 Jun 20
+*/
+
+/* Defines for Viterbi Decoder for r=1/2 k=7 (to CCSDS convention) */
+#define K 7 /* Constraint length */
+#define N 2 /* Number of symbols per data bit */
+#define CPOLYA 0x4f /* First convolutional encoder polynomial */
+#define CPOLYB 0x6d /* Second convolutional encoder polynomial */
+
+#define SYNC_POLY 0x48 /* Sync vector PN polynomial */
+
+#define NN 255
+#define KK 223
+#define NROOTS 32 /* NN-KK */
+#define A0 (NN)
+#define FCR 112
+#define PRIM 11
+#define IPRIM 116
+#define BLOCKSIZE 256 /* Data bytes per frame */
+#define RSBLOCKS 2 /* Number of RS decoder blocks */
+#define RSPAD 95 /* Unused bytes in block (KK-BLOCKSIZE/RSBLOCKS) */
+
+/* Defines for Interleaver */
+#define ROWS 80 /* Block interleaver rows */
+#define COLUMNS 65 /* Block interleaver columns */
+#define SYMPBLOCK (ROWS*COLUMNS) /* Encoded symbols per block */
+
+/* Number of symbols in an FEC block that are */
+/* passed to the Viterbi decoder (320*8 + 6) */
+#define NBITS ((BLOCKSIZE+NROOTS*RSBLOCKS)*8+K-1)
+/* Number of bits obtained from Viterbi decoder */
+#define NBITS_OUT (BLOCKSIZE+NROOTS*RSBLOCKS)
+
+
+extern unsigned char m_RS_block[RSBLOCKS][NROOTS]; /* RS parity blocks */
+extern unsigned char m_encoded[SYMPBLOCK] ; /* encoded symbols */
+extern int m_encoded_bytes; /* Byte counter for encode_data() */
+extern int m_ileaver_index; /* Byte counter for interleaver */
+extern unsigned char m_conv_sr; /* Convolutional encoder shift register state */
+
+extern const unsigned char RS_poly[];
+extern const unsigned char ALPHA_TO[];
+extern const unsigned char INDEX_OF[];
+extern const unsigned char Partab[];
+extern const unsigned char Scrambler[];
+
+//class CCodecAO40
+//{
+//public:
+// CCodecAO40(void);
+// virtual ~CCodecAO40(void);
+
+ int decode(unsigned char viterbi_decoded[NBITS_OUT], unsigned char *decoded_data);
+
+ /* Encodes the 256 byte source block into 5200 byte block of symbols into m_encoded buffer */
+ const unsigned char *encode(
+ unsigned char *source_bytes, /* input to encode */
+ int byte_count); /* input length in bytes */
+
+ /* Compares raw input symbols to current buffer of encoded symbols and counts the errors */
+ int count_errors( unsigned char *raw_symbols);
+
+//private:
+ int mod255(int x);
+ int decode_rs_8(char *data, int *eras_pos, int no_eras);
+ void scramble_and_encode(unsigned char c);
+ void encode_and_interleave(unsigned char c,int cnt);
+
+ void descramble_to_rsblocks(
+ unsigned char viterbi_decoded[NBITS_OUT],
+ char rsblocks[RSBLOCKS][NN]);
+
+ void init_encoder(void);
+ void encode_byte(unsigned char c);
+ void encode_parity(void);
+
+ void interleave_symbol(int c);
+
+
+//};
diff --git a/command b/command
index dccd9382..4021f59b 100755
--- a/command
+++ b/command
@@ -1,6 +1,8 @@
#!/bin/bash
-echo -e "\nCommand and Control script for CubeSatSim v2.0\n"
+echo -e "\nCommand and Control script for CubeSatSim v2.1\n"
+
+sudo modprobe snd-aloop
sudo modprobe snd-aloop
@@ -37,9 +39,17 @@ else
fi
-echo "Waiting 20 seconds for USB"
+uptime=`cat /proc/uptime | awk '{printf "%0.f", $1}'`
+
+echo -n "Uptime since boot is "
+echo $uptime
-sleep 20
+if [[ "$uptime" -lt "60" ]]; then
+
+ echo "Waiting 20 seconds for USB"
+
+ sleep 20
+fi
FILE=/home/pi/CubeSatSim/command_control_direwolf
if [[ $(arecord -l | grep "USB Audio Device") ]] && [ -f "$FILE" ]; then
diff --git a/config b/config
index 22fb272d..0a5993d3 100755
--- a/config
+++ b/config
@@ -436,6 +436,8 @@ elif [ "$1" = "-s" ]; then
check_restart
sudo echo "s" > /home/pi/CubeSatSim/.mode
+ fi
+
elif [ "$1" = "-t" ]; then
echo
@@ -519,7 +521,6 @@ elif [ "$1" = "-c" ]; then
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} ${12} ${13} > /home/pi/CubeSatSim/sim.cfg
-
fi
if [ "$norestart" = "1" ]; then
diff --git a/direwolf/direwolf-transmit-dtmf-beacon.conf b/direwolf/direwolf-transmit-dtmf-beacon.conf
deleted file mode 100644
index 6c022dea..00000000
--- a/direwolf/direwolf-transmit-dtmf-beacon.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-ADEVICE hw:CARD=Loopback,DEV=0 hw:CARD=Headphones,DEV=0
-MYCALL AMSAT
-CHANNEL 0
-MODEM 1200
-CBEACON dest="DTMF-3" info="10 #" delay=0
diff --git a/direwolf/direwolf-transmit-dtmf-bpsk.conf b/direwolf/direwolf-transmit-dtmf-bpsk.conf
deleted file mode 100644
index a0ae9b54..00000000
--- a/direwolf/direwolf-transmit-dtmf-bpsk.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-ADEVICE hw:CARD=Loopback,DEV=0 hw:CARD=Headphones,DEV=0
-MYCALL AMSAT
-CHANNEL 0
-MODEM 1200
-CBEACON dest="DTMF-3" info="3 #" delay=0
diff --git a/direwolf/direwolf-transmit-dtmf-cw.conf b/direwolf/direwolf-transmit-dtmf-cw.conf
deleted file mode 100644
index 8629754f..00000000
--- a/direwolf/direwolf-transmit-dtmf-cw.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-ADEVICE hw:CARD=Loopback,DEV=0 hw:CARD=Headphones,DEV=0
-MYCALL AMSAT
-CHANNEL 0
-MODEM 1200
-CBEACON dest="DTMF-3" info="5 #" delay=0
diff --git a/direwolf/direwolf-transmit-dtmf-fsk.conf b/direwolf/direwolf-transmit-dtmf-fsk.conf
deleted file mode 100644
index f197e583..00000000
--- a/direwolf/direwolf-transmit-dtmf-fsk.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-ADEVICE hw:CARD=Loopback,DEV=0 hw:CARD=Headphones,DEV=0
-MYCALL AMSAT
-CHANNEL 0
-MODEM 1200
-CBEACON dest="DTMF-3" info="2 #" delay=0
diff --git a/direwolf/direwolf-transmit-dtmf-sstv.conf b/direwolf/direwolf-transmit-dtmf-sstv.conf
deleted file mode 100644
index c58cb77f..00000000
--- a/direwolf/direwolf-transmit-dtmf-sstv.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-ADEVICE hw:CARD=Loopback,DEV=0 hw:CARD=Headphones,DEV=0
-MYCALL AMSAT
-CHANNEL 0
-MODEM 1200
-CBEACON dest="DTMF-3" info="4 #" delay=0
diff --git a/direwolf/direwolf-transmit-dtmf-aprs.conf b/direwolf/direwolf-transmit-dtmf.conf
similarity index 71%
rename from direwolf/direwolf-transmit-dtmf-aprs.conf
rename to direwolf/direwolf-transmit-dtmf.conf
index 37ddbe97..f5853dff 100644
--- a/direwolf/direwolf-transmit-dtmf-aprs.conf
+++ b/direwolf/direwolf-transmit-dtmf.conf
@@ -3,4 +3,5 @@ PTT GPIO 20
MYCALL AMSAT
CHANNEL 0
MODEM 1200
-CBEACON dest="DTMF-3" info="1 #" delay=0
+KISSPORT 8003
+AGWPORT 8004
diff --git a/dtmf_aprs_cc.py b/dtmf_aprs_cc.py
index 67b82ec8..6afef09e 100644
--- a/dtmf_aprs_cc.py
+++ b/dtmf_aprs_cc.py
@@ -18,7 +18,7 @@ def blink(times):
if __name__ == "__main__":
powerPin = 16
- txLed = 27
+ txLed = 17
change_mode = False
debug_mode = False
counter = 1
@@ -187,6 +187,7 @@ if __name__ == "__main__":
change_mode = False
except:
print("Error reading line (probably due to UTF-8 issue)")
+
print("Waiting 5 seconds to allow unplug and plug of soundcard")
sleep(5)
print("Done")
diff --git a/fecConstants.h b/fecConstants.h
new file mode 100644
index 00000000..850c0aa6
--- /dev/null
+++ b/fecConstants.h
@@ -0,0 +1,128 @@
+#pragma once
+
+/*
+ Amsat P3 FEC Encoder/decoder system. Look-up tables
+ Created by Phil Karn KA9Q and James Miller G3RUH
+ Last modified 2003 Jun 20
+*/
+
+/* Defines for Viterbi Decoder for r=1/2 k=7 (to CCSDS convention) */
+#define K 7 /* Constraint length */
+#define N 2 /* Number of symbols per data bit */
+#define CPOLYA 0x4f /* First convolutional encoder polynomial */
+#define CPOLYB 0x6d /* Second convolutional encoder polynomial */
+
+#define SYNC_POLY 0x48 /* Sync vector PN polynomial */
+
+#define NN 255
+#define KK 223
+#define NROOTS 32 /* NN-KK */
+#define A0 (NN)
+#define FCR 112
+#define PRIM 11
+#define IPRIM 116
+#define BLOCKSIZE 256 /* Data bytes per frame */
+#define RSBLOCKS 2 /* Number of RS decoder blocks */
+#define RSPAD 95 /* Unused bytes in block (KK-BLOCKSIZE/RSBLOCKS) */
+
+/* Defines for Interleaver */
+#define ROWS 80 /* Block interleaver rows */
+#define COLUMNS 65 /* Block interleaver columns */
+#define SYMPBLOCK (ROWS*COLUMNS) /* Encoded symbols per block */
+
+/* Number of symbols in an FEC block that are */
+/* passed to the Viterbi decoder (320*8 + 6) */
+#define NBITS ((BLOCKSIZE+NROOTS*RSBLOCKS)*8+K-1)
+/* Number of bits obtained from Viterbi decoder */
+#define NBITS_OUT (BLOCKSIZE+NROOTS*RSBLOCKS)
+
+const unsigned char RS_poly[] = {
+ 249, 59, 66, 4, 43,126,251, 97, 30, 3,213, 50, 66,170, 5, 24
+};
+
+/* Tables for RS decoder */
+/* Galois field log/antilog tables */
+const unsigned char ALPHA_TO[] =
+{
+ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x87, 0x89, 0x95, 0xad, 0xdd, 0x3d, 0x7a, 0xf4,
+ 0x6f, 0xde, 0x3b, 0x76, 0xec, 0x5f, 0xbe, 0xfb, 0x71, 0xe2, 0x43, 0x86, 0x8b, 0x91, 0xa5, 0xcd,
+ 0x1d, 0x3a, 0x74, 0xe8, 0x57, 0xae, 0xdb, 0x31, 0x62, 0xc4, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, 0x67,
+ 0xce, 0x1b, 0x36, 0x6c, 0xd8, 0x37, 0x6e, 0xdc, 0x3f, 0x7e, 0xfc, 0x7f, 0xfe, 0x7b, 0xf6, 0x6b,
+ 0xd6, 0x2b, 0x56, 0xac, 0xdf, 0x39, 0x72, 0xe4, 0x4f, 0x9e, 0xbb, 0xf1, 0x65, 0xca, 0x13, 0x26,
+ 0x4c, 0x98, 0xb7, 0xe9, 0x55, 0xaa, 0xd3, 0x21, 0x42, 0x84, 0x8f, 0x99, 0xb5, 0xed, 0x5d, 0xba,
+ 0xf3, 0x61, 0xc2, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0,
+ 0x47, 0x8e, 0x9b, 0xb1, 0xe5, 0x4d, 0x9a, 0xb3, 0xe1, 0x45, 0x8a, 0x93, 0xa1, 0xc5, 0x0d, 0x1a,
+ 0x34, 0x68, 0xd0, 0x27, 0x4e, 0x9c, 0xbf, 0xf9, 0x75, 0xea, 0x53, 0xa6, 0xcb, 0x11, 0x22, 0x44,
+ 0x88, 0x97, 0xa9, 0xd5, 0x2d, 0x5a, 0xb4, 0xef, 0x59, 0xb2, 0xe3, 0x41, 0x82, 0x83, 0x81, 0x85,
+ 0x8d, 0x9d, 0xbd, 0xfd, 0x7d, 0xfa, 0x73, 0xe6, 0x4b, 0x96, 0xab, 0xd1, 0x25, 0x4a, 0x94, 0xaf,
+ 0xd9, 0x35, 0x6a, 0xd4, 0x2f, 0x5e, 0xbc, 0xff, 0x79, 0xf2, 0x63, 0xc6, 0x0b, 0x16, 0x2c, 0x58,
+ 0xb0, 0xe7, 0x49, 0x92, 0xa3, 0xc1, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0xc7, 0x09, 0x12, 0x24,
+ 0x48, 0x90, 0xa7, 0xc9, 0x15, 0x2a, 0x54, 0xa8, 0xd7, 0x29, 0x52, 0xa4, 0xcf, 0x19, 0x32, 0x64,
+ 0xc8, 0x17, 0x2e, 0x5c, 0xb8, 0xf7, 0x69, 0xd2, 0x23, 0x46, 0x8c, 0x9f, 0xb9, 0xf5, 0x6d, 0xda,
+ 0x33, 0x66, 0xcc, 0x1f, 0x3e, 0x7c, 0xf8, 0x77, 0xee, 0x5b, 0xb6, 0xeb, 0x51, 0xa2, 0xc3, 0x00,
+};
+
+const unsigned char INDEX_OF[]=
+{
+ 0xff, 0x00, 0x01, 0x63, 0x02, 0xc6, 0x64, 0x6a, 0x03, 0xcd, 0xc7, 0xbc, 0x65, 0x7e, 0x6b, 0x2a,
+ 0x04, 0x8d, 0xce, 0x4e, 0xc8, 0xd4, 0xbd, 0xe1, 0x66, 0xdd, 0x7f, 0x31, 0x6c, 0x20, 0x2b, 0xf3,
+ 0x05, 0x57, 0x8e, 0xe8, 0xcf, 0xac, 0x4f, 0x83, 0xc9, 0xd9, 0xd5, 0x41, 0xbe, 0x94, 0xe2, 0xb4,
+ 0x67, 0x27, 0xde, 0xf0, 0x80, 0xb1, 0x32, 0x35, 0x6d, 0x45, 0x21, 0x12, 0x2c, 0x0d, 0xf4, 0x38,
+ 0x06, 0x9b, 0x58, 0x1a, 0x8f, 0x79, 0xe9, 0x70, 0xd0, 0xc2, 0xad, 0xa8, 0x50, 0x75, 0x84, 0x48,
+ 0xca, 0xfc, 0xda, 0x8a, 0xd6, 0x54, 0x42, 0x24, 0xbf, 0x98, 0x95, 0xf9, 0xe3, 0x5e, 0xb5, 0x15,
+ 0x68, 0x61, 0x28, 0xba, 0xdf, 0x4c, 0xf1, 0x2f, 0x81, 0xe6, 0xb2, 0x3f, 0x33, 0xee, 0x36, 0x10,
+ 0x6e, 0x18, 0x46, 0xa6, 0x22, 0x88, 0x13, 0xf7, 0x2d, 0xb8, 0x0e, 0x3d, 0xf5, 0xa4, 0x39, 0x3b,
+ 0x07, 0x9e, 0x9c, 0x9d, 0x59, 0x9f, 0x1b, 0x08, 0x90, 0x09, 0x7a, 0x1c, 0xea, 0xa0, 0x71, 0x5a,
+ 0xd1, 0x1d, 0xc3, 0x7b, 0xae, 0x0a, 0xa9, 0x91, 0x51, 0x5b, 0x76, 0x72, 0x85, 0xa1, 0x49, 0xeb,
+ 0xcb, 0x7c, 0xfd, 0xc4, 0xdb, 0x1e, 0x8b, 0xd2, 0xd7, 0x92, 0x55, 0xaa, 0x43, 0x0b, 0x25, 0xaf,
+ 0xc0, 0x73, 0x99, 0x77, 0x96, 0x5c, 0xfa, 0x52, 0xe4, 0xec, 0x5f, 0x4a, 0xb6, 0xa2, 0x16, 0x86,
+ 0x69, 0xc5, 0x62, 0xfe, 0x29, 0x7d, 0xbb, 0xcc, 0xe0, 0xd3, 0x4d, 0x8c, 0xf2, 0x1f, 0x30, 0xdc,
+ 0x82, 0xab, 0xe7, 0x56, 0xb3, 0x93, 0x40, 0xd8, 0x34, 0xb0, 0xef, 0x26, 0x37, 0x0c, 0x11, 0x44,
+ 0x6f, 0x78, 0x19, 0x9a, 0x47, 0x74, 0xa7, 0xc1, 0x23, 0x53, 0x89, 0xfb, 0x14, 0x5d, 0xf8, 0x97,
+ 0x2e, 0x4b, 0xb9, 0x60, 0x0f, 0xed, 0x3e, 0xe5, 0xf6, 0x87, 0xa5, 0x17, 0x3a, 0xa3, 0x3c, 0xb7,
+};
+
+/* 8-bit parity table */
+const unsigned char Partab[] = {
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1,
+ 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0,
+};
+
+/* Scramble byte table */
+const unsigned char Scrambler[]=
+{
+ 0xff, 0x48, 0x0e, 0xc0, 0x9a, 0x0d, 0x70, 0xbc, 0x8e, 0x2c, 0x93, 0xad, 0xa7, 0xb7, 0x46, 0xce,
+ 0x5a, 0x97, 0x7d, 0xcc, 0x32, 0xa2, 0xbf, 0x3e, 0x0a, 0x10, 0xf1, 0x88, 0x94, 0xcd, 0xea, 0xb1,
+ 0xfe, 0x90, 0x1d, 0x81, 0x34, 0x1a, 0xe1, 0x79, 0x1c, 0x59, 0x27, 0x5b, 0x4f, 0x6e, 0x8d, 0x9c,
+ 0xb5, 0x2e, 0xfb, 0x98, 0x65, 0x45, 0x7e, 0x7c, 0x14, 0x21, 0xe3, 0x11, 0x29, 0x9b, 0xd5, 0x63,
+ 0xfd, 0x20, 0x3b, 0x02, 0x68, 0x35, 0xc2, 0xf2, 0x38, 0xb2, 0x4e, 0xb6, 0x9e, 0xdd, 0x1b, 0x39,
+ 0x6a, 0x5d, 0xf7, 0x30, 0xca, 0x8a, 0xfc, 0xf8, 0x28, 0x43, 0xc6, 0x22, 0x53, 0x37, 0xaa, 0xc7,
+ 0xfa, 0x40, 0x76, 0x04, 0xd0, 0x6b, 0x85, 0xe4, 0x71, 0x64, 0x9d, 0x6d, 0x3d, 0xba, 0x36, 0x72,
+ 0xd4, 0xbb, 0xee, 0x61, 0x95, 0x15, 0xf9, 0xf0, 0x50, 0x87, 0x8c, 0x44, 0xa6, 0x6f, 0x55, 0x8f,
+ 0xf4, 0x80, 0xec, 0x09, 0xa0, 0xd7, 0x0b, 0xc8, 0xe2, 0xc9, 0x3a, 0xda, 0x7b, 0x74, 0x6c, 0xe5,
+ 0xa9, 0x77, 0xdc, 0xc3, 0x2a, 0x2b, 0xf3, 0xe0, 0xa1, 0x0f, 0x18, 0x89, 0x4c, 0xde, 0xab, 0x1f,
+ 0xe9, 0x01, 0xd8, 0x13, 0x41, 0xae, 0x17, 0x91, 0xc5, 0x92, 0x75, 0xb4, 0xf6, 0xe8, 0xd9, 0xcb,
+ 0x52, 0xef, 0xb9, 0x86, 0x54, 0x57, 0xe7, 0xc1, 0x42, 0x1e, 0x31, 0x12, 0x99, 0xbd, 0x56, 0x3f,
+ 0xd2, 0x03, 0xb0, 0x26, 0x83, 0x5c, 0x2f, 0x23, 0x8b, 0x24, 0xeb, 0x69, 0xed, 0xd1, 0xb3, 0x96,
+ 0xa5, 0xdf, 0x73, 0x0c, 0xa8, 0xaf, 0xcf, 0x82, 0x84, 0x3c, 0x62, 0x25, 0x33, 0x7a, 0xac, 0x7f,
+ 0xa4, 0x07, 0x60, 0x4d, 0x06, 0xb8, 0x5e, 0x47, 0x16, 0x49, 0xd6, 0xd3, 0xdb, 0xa3, 0x67, 0x2d,
+ 0x4b, 0xbe, 0xe6, 0x19, 0x51, 0x5f, 0x9f, 0x05, 0x08, 0x78, 0xc4, 0x4a, 0x66, 0xf5, 0x58, 0xff,
+ 0x48, 0x0e, 0xc0, 0x9a, 0x0d, 0x70, 0xbc, 0x8e, 0x2c, 0x93, 0xad, 0xa7, 0xb7, 0x46, 0xce, 0x5a,
+ 0x97, 0x7d, 0xcc, 0x32, 0xa2, 0xbf, 0x3e, 0x0a, 0x10, 0xf1, 0x88, 0x94, 0xcd, 0xea, 0xb1, 0xfe,
+ 0x90, 0x1d, 0x81, 0x34, 0x1a, 0xe1, 0x79, 0x1c, 0x59, 0x27, 0x5b, 0x4f, 0x6e, 0x8d, 0x9c, 0xb5,
+ 0x2e, 0xfb, 0x98, 0x65, 0x45, 0x7e, 0x7c, 0x14, 0x21, 0xe3, 0x11, 0x29, 0x9b, 0xd5, 0x63, 0xfd,
+};
diff --git a/gps_client.py b/gps_client.py
new file mode 100644
index 00000000..87c4aa45
--- /dev/null
+++ b/gps_client.py
@@ -0,0 +1,72 @@
+#! /usr/bin/env python3
+"""
+example Python gpsd client
+run this way: python3 example1.py.txt
+"""
+
+# from https://gpsd.gitlab.io/gpsd/gpsd-client-example-code.html
+
+# this client is for the CubeSatSim Lite which does not have a Pico microcontroller
+
+try:
+
+ import gps # the gpsd interface module
+ import time
+
+ mode = -1
+ lat = 0
+ lon = 0
+ alt = 0
+
+ session = gps.gps(mode=gps.WATCH_ENABLE)
+
+ start = time.perf_counter()
+
+ try:
+# while (session.read() == 0) and ((time.perf_counter() - start) < 2) and (mode < 2):
+ while ((time.perf_counter() - start) < 2) and (mode < 2):
+ if session.waiting(2.0):
+ session.read()
+
+ # print(gps.MODE_SET)
+ # print(session.valid)
+ if (session.valid):
+ # not useful, probably not a TPV message
+ # continue
+
+ # print('Mode: %s(%d) Time: ' %
+ # (("Invalid", "NO_FIX", "2D", "3D")[session.fix.mode],
+ # session.fix.mode), end="")
+ # print time, if we have it
+# print("%d " % session.fix.mode, end="")
+ if (session.fix.mode > mode):
+ mode = session.fix.mode
+ # if gps.TIME_SET & session.valid:
+ # print(session.fix.time, end="")
+ # else:
+ # print('n/a', end="")
+
+ if gps.isfinite(session.fix.latitude):
+ lat = session.fix.latitude
+ if gps.isfinite(session.fix.longitude):
+ lon = session.fix.longitude
+ if gps.isfinite(session.fix.altitude):
+ alt = session.fix.altitude
+# print("%.6f %.6f %.6f" % (session.fix.latitude, session.fix.longitude, session.fix.altitude))
+
+ # else:
+ # print(" 0 0 0")
+
+ except KeyboardInterrupt:
+ # got a ^C. Say bye, bye
+ print('')
+
+ # Got ^C, or fell out of the loop. Cleanup, and leave.
+ session.close()
+ print("%d %.6f %.6f %.1f" % (mode, lat, lon, alt))
+# exit(0)
+
+except:
+ print("-1 0 0 0")
+ exit(0)
+
diff --git a/groundstation/bands.json b/groundstation/bands.json
index ea638154..dde2db0a 100644
--- a/groundstation/bands.json
+++ b/groundstation/bands.json
@@ -173,7 +173,8 @@
"upper_bound": 440000000,
"frequencies": {
"packet": 434900000,
- "pocsag": 439987500
+ "pocsag": 439987500,
+ "sstv": { "frequency": 434900000, "underlying": "nfm" }
}
},
{
diff --git a/groundstation/fc_block_decode.py b/groundstation/fc_block_decode.py
new file mode 100644
index 00000000..144b07b6
--- /dev/null
+++ b/groundstation/fc_block_decode.py
@@ -0,0 +1,213 @@
+import sys
+from os import system
+from time import sleep
+import logging
+import random
+from PIL import Image, ImageDraw, ImageFont, ImageColor
+import subprocess
+import io
+import datetime
+
+logging.basicConfig(format='%(message)s')
+# logging.warning('CC-Warning!')
+
+
+def fstr(template):
+ return eval(f"f'{template}'")
+
+def system_and_print(string):
+ print(string)
+ system(string)
+
+FC_EPS = 1
+FC_BOB = 25
+FC_SW = 50
+FC_PAYLOAD = 55
+extended = 1
+
+sequence, image_id, image_count = 0, 0, 0
+Vx, Vy, Vz, Vb = 0, 0, 0, 0
+Ix, Iy, Iz, Ic, Ib = 0, 0, 0, 0, 0
+frame_count, frame_type = 0, " "
+frequency_string, frequency, errors, first_byte = " ", 0, 0, 0
+
+#html_dir = "/home/pi/CubeSatSim/groundstation/public_html/"
+html_dir = "/home/pi/fctelem/public_html/"
+image_dir = "/home/pi/fctelem/"
+image = "image_file"
+ssdv = "/home/pi/ssdv/ssdv -d -J "
+
+date_time_string = str(datetime.datetime.now())
+date_time = date_time_string[:21]
+
+system_and_print("sudo rm " + image_dir + image)
+#system_and_print("sudo rm " + html_dir + "*")
+system_and_print("sudo rm " + html_dir + "images/*")
+
+try:
+ with open('/home/pi/fctelem/fctelem.cfg', 'r') as config:
+ config_string = config.read()
+ print(config_string)
+except:
+ print("Error loading fctelem.cfg")
+
+#system_and_print("cp /home/pi/CubeSatSim/sstv/sstv_image_1_320_x_256.jpg " + html_dir + "image_file.jpeg")
+
+head_string = 'FUNcube CubeSatSim Telemetry\n\nFUNcube CubeSatSim Telemetry
' + \
+ 'fcdctl ' + config_string + ' 
All images
'
+foot_string = ''
+telem_string_format = " Image: {image_id:3d} count: {image_count:2d}" + \
+ " Vx(mV): {Vx:5d} Vy(mV): {Vy:5d} Vz(mV): {Vz:5d}
" + \
+ " Ix(mA): {Ix:5d} Iy(mA): {Iy:5d} Iz(mA): {Iz:5d}
" + \
+ " Vbat(mV): {Vb:5d} Ibat(mA): {Ib:5d}
" + \
+ " Freq: {frequency:10.1f} errors: {errors} Seq: {sequence:d} {frame_type} frames: {frame_count:d}"
+label_string = "date time , frm, freq off, err, h, seq, frame, img, c, Vx, Vy, Vz, Ix, Iy, Iz, Vb, Ib "
+label_string_html = label_string.replace(" "," ")
+csv_format = "{date_time:21s}, {frame_count:4d}, {frequency:10.1f}, {errors:3d}, {first_byte: 2x}, {sequence:5d}, {frame_type:9s}, {image_id:3d}, {image_count:2d}, " + \
+ "{Vx:5d}, {Vy:5d}, {Vz:5d}, {Ix:5d}, {Iy:5d}, {Iz:5d}, {Vb:5d}, {Ib:5d}"
+
+
+telem_string = fstr(telem_string_format)
+with open(html_dir + "index.html", "w+") as html_file:
+ html_file.write(head_string)
+ html_file.write(telem_string)
+ html_file.write(foot_string)
+
+with open(html_dir + "images/telem.csv.txt", "w+") as csv_file:
+# csv_file.write(csv_format)
+ csv_file.write(label_string)
+ csv_file.write("\n")
+
+image_id = 256 # set illegal image ID for null # random.randint(0, 255)
+image_count = 1;
+
+# sys.exit()
+
+if __name__ == "__main__":
+ debug_mode = False
+ counter = 1
+ if (len(sys.argv)) > 1:
+# print("There are arguments!")
+ if ('d' == sys.argv[1]):
+ debug_mode = True
+ print(debug_mode)
+ for line in sys.stdin:
+ if (debug_mode):
+ print(line, end =" ")
+ logging.warning(line)
+
+ if ((line.find("data: ")) > 0):
+ print("\ndata block found!\n")
+ frame_count += 1
+ data_block_string = line.split()
+# print(data_block_string)
+ frequency_string = data_block_string[2]
+ print(frequency_string)
+ frequency = float(frequency_string[:len(frequency_string) - 2])
+ print(frequency)
+ errors = int(data_block_string[5])
+ data_block = [int(number_string,16) for number_string in data_block_string[7:]]
+ first_byte = data_block[0]
+ if (first_byte == 0xE0) or (first_byte == 0xE1):
+ if (data_block[0] == 0xE0):
+ frame_type = "RT1+IMG1"
+ if (data_block[0] == 0xE1):
+ frame_type = "RT2+IMG2"
+# print(frame_type)
+ print("Frame Type: {:02X}".format(data_block[0]))
+ print("Sat Id: {:02X}".format(data_block[1]))
+ print(data_block[extended + 51], data_block[extended + 50], data_block[extended + 49])
+ sequence = data_block[extended + 51] + data_block[extended + 50] * 2**8 + data_block[extended + 49] * 2**16
+ print("Sequence number: {:d}".format(sequence))
+ Vx = (data_block[extended + FC_EPS + 0] * 2**6) + (data_block[extended + FC_EPS + 1] >> 2)
+ Vy = (0x03 & data_block[extended + FC_EPS + 1]) * 2**12 + data_block[extended + FC_EPS + 2] * 2**4 + (data_block[extended + FC_EPS + 3] >> 4)
+ Vz = (0x0f & data_block[extended + FC_EPS + 3]) * 2**10 + data_block[extended + FC_EPS + 4] * 2**2 + (data_block[extended + FC_EPS + 5] >> 6)
+ Vb = (0x3f & data_block[extended + FC_EPS + 5]) * 2**8 + data_block[extended + FC_EPS + 6]
+ Ix = data_block[extended + FC_EPS + 7] * 2**2 + (data_block[extended + FC_EPS + 8] >> 6)
+ Iy = (0x3f & data_block[extended + FC_EPS + 8]) * 2**4 + (data_block[extended + FC_EPS + 9] >> 4)
+ Iz = (0x0f & data_block[extended + FC_EPS + 9]) * 2**6 + (data_block[extended + FC_EPS + 10] >> 2)
+ Ic = (0x03 & data_block[extended + FC_EPS + 10]) * 2**8 + data_block[extended + FC_EPS + 11]
+ Ib = data_block[extended + FC_EPS + 12] * 2**2 + ((0xc0 & data_block[extended + FC_EPS + 13]) >> 6)
+ if (Ib == 0):
+ Ib = 0 - Ic
+ print("Vx: {:d} mV Vy: {:d} mV Vz: {:d} mV".format(Vx, Vy, Vz))
+ print('Payload {:x} {:x} \n'.format(data_block[FC_PAYLOAD + extended], data_block[FC_PAYLOAD + extended + 1]))
+ if (data_block[FC_PAYLOAD + extended] == 0x55) and (data_block[FC_PAYLOAD + extended + 1] == 0x68):
+ try:
+ print("Writing this image payload block to file " + image + "_payload")
+ immutable_payload = bytes(bytearray(data_block[(FC_PAYLOAD + extended):])) # payload)
+# print(immutable_payload)
+ with open(image_dir + image + "_payload", "wb") as binary_file:
+ binary_file.write(immutable_payload)
+ except:
+ print("File error")
+# try:
+ print("Processing payload with ssdv, saving image to " + image + "_paylad.jpeg and log to ssdv_output")
+ system_and_print(ssdv + image_dir + image + "_payload " +
+ image_dir + image + "_payload.jpeg 2>&1 | sudo tee /home/pi/fctelem/ssdv_output")
+ print("Parsing ssdv_output")
+ with open("/home/pi/fctelem/ssdv_output", "r") as file:
+ for line in file:
+# print("line:")
+# print(line)
+ if ((line.find("mage ID:")) > 0):
+# print("\nImage ID found!\n")
+ image_id_string = line.split()
+# print(image_id_string)
+ new_image_id = int(image_id_string[2], 16)
+# print(new_image_id)
+ if (new_image_id != image_id):
+ print("End of image")
+ if (image_id != 256):
+ print("Saving complete image")
+ system_and_print("cp " + html_dir + "image_file.jpeg " + html_dir + "images/" + image + str(image_id) + "." + str(image_count) + ".jpeg")
+ system_and_print("sudo rm " + image_dir + image)
+ else:
+ system_and_print("sudo rm " + image_dir + image)
+ print("New Image ID: ")
+ print(new_image_id)
+ image_id = new_image_id
+ image_count = 1
+ else:
+ image_count += 1
+ print("new image_count:")
+ print(image_count)
+ print("Appending block to file " + image)
+ with open(image_dir + image, "ab") as binary_file:
+ binary_file.write(immutable_payload)
+ print("Running ssdv with all blocks in file " + image + " saving as " + html_dir + "image_file.jpeg")
+ system_and_print(ssdv + image_dir + image + " " + html_dir + "image_file.jpeg")
+ telem_string = fstr(telem_string_format)
+ print("Writing index.html file")
+ with open(html_dir + "index.html", "w") as html_file:
+ html_file.write(head_string)
+ html_file.write(telem_string)
+ html_file.write("
")
+ with open(html_dir + "/images/telem.csv.txt", "r") as csv_file:
+ for line in csv_file:
+ html_file.write(line)
+ html_file.write("
")
+ date_time_string = str(datetime.datetime.now())
+ date_time = date_time_string[:21]
+ tlm_string = fstr(csv_format)
+ html_file.write(tlm_string)
+ html_file.write("
")
+ html_file.write(foot_string)
+ else:
+ print("Payload not an image!")
+ # image_id = 256 # set illegal image_id to force new image
+ else:
+ print("Unknown Sat Id or Frame")
+ sequence, image_id, image_count = 0, 0, 0
+ Vx, Vy, Vz, Vb = 0, 0, 0, 0
+ Ix, Iy, Iz, Ic, Ib = 0, 0, 0, 0, 0
+ frame_count, frame_type = 0, " "
+ frequency_string, errors = " ", 0
+
+ tlm_string = fstr(csv_format)
+ with open(html_dir + "/images/telem.csv.txt", "a") as csv_file:
+ csv_file.write(tlm_string)
+ csv_file.write("\n")
+
+
diff --git a/groundstation/fctelem.desktop b/groundstation/fctelem.desktop
new file mode 100644
index 00000000..26f353fd
--- /dev/null
+++ b/groundstation/fctelem.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Exec=/home/pi/CubeSatSim/groundstation/fctelem.sh
+Name=FUNcube Telem
+Comment=FUNcube Telemetry Web App
+Icon=/home/pi/Icons/fc-icon.png
+Path=/home/pi
+Terminal=true
+Categories=HamRadio
+Keywords=Ham Radio;SDR
diff --git a/groundstation/fctelem.sh b/groundstation/fctelem.sh
new file mode 100755
index 00000000..4beb88a3
--- /dev/null
+++ b/groundstation/fctelem.sh
@@ -0,0 +1,154 @@
+#!/bin/bash
+# script to run FUNcube Pi Telemetry App
+
+echo "Script to run FUNcube CubeSatSim Telemetry"
+
+echo
+
+echo "The Chromium browser will load in a few seconds with fctelem."
+
+echo "You can also use another web browser if you are on the same network as your Pi."
+
+
+echo
+
+ip=$(hostname -I|cut -f1 -d ' ')
+
+echo "IP Address to use in web browser is: $ip:8002"
+
+echo
+
+ssid=$(iwgetid -r)
+
+echo "Note: you need to be on the Wifi network: $ssid"
+
+echo
+
+sudo killall -9 fctelem &>/dev/null
+
+sudo killall -9 python3 &>/dev/null
+
+#sudo killall -9 java &>/dev/null
+
+#sudo killall -9 rtl_fm &>/dev/null
+
+#pkill -o chromium &>/dev/null
+
+#sudo killall -9 rtl_tcp &>/dev/null
+
+#sudo killall -9 CubicSDR &>/dev/null
+
+#sudo killall -9 qsstv &>/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 openwebrx
+
+
+if [[ $(/home/pi/fcdctl/fcdctl -l | grep "No FCD found") ]]; then
+ echo "No FUNcube Dongle Found!"
+ echo "Plug in FCD and try running again"
+ sleep 30
+ exit
+else
+ echo "FCD Found! Setting Gain"
+
+ FILE=/home/pi/fctelem/fctelem.cfg
+ if [ -f "$FILE" ]; then
+
+# config_string=$(> FILE
+ fi
+
+ /home/pi/fcdctl/fcdctl $config_string
+
+ # /home/pi/fcdctl/fcdctl -g 1 -m 1 -i 0
+ echo
+ echo "You can adjust the FCD settings by running the command fcdctl/fcdctl"
+ echo
+fi
+
+
+frequency=$(zenity --timeout=10 --list 2>/dev/null --width=410 --height=180 --title="FUNcube Telem Decoding" --text="Choose the frequency for FUNcube decoding:" --column="kHz" --column="Use" 434900 "CubeSatSim" Other "Choose another frequency")
+
+echo $frequency
+
+if [ -z "$frequency" ]; then
+
+ echo "No choice made."
+ frequency=434900
+
+fi
+
+if [ "$frequency" = "434900" ]; then
+
+ frequency=434900000
+
+elif [ "$frequency" = "Other" ]; then
+
+ echo
+
+ echo "Enter the frequency in kiloHertz"
+
+ echo
+
+ read -r frequency
+
+ frequency=$frequency"000"
+
+fi
+
+echo "Frequency is" $frequency
+echo
+echo "If your CubeSatSim is transmitting in FUNcube mode (mode 7) you should get some frames after 30 seconds"
+echo
+
+sleep 3
+
+echo "connectport=64516 connectaddress='localhost' autotuneoffset=100000 outdir='/home/pi/go/app/fctelem/data' frequency=$frequency" > /home/pi/fctelem/fcdecode.conf
+
+# FILE=/home/pi/CubeSatSim/groundstation/public_html
+FILE=/home/pi/CubeSatSim/fctelem/public_html
+if [ ! -d "$FILE" ]; then
+ echo "Making public_html directory"
+ mkdir /home/pi/fctelem/public_html
+ mkdir /home/pi/fctelem/public_html/images
+fi
+
+cd /home/pi/fctelem/public_html
+
+cp /home/pi/CubeSatSim/groundstation/index.html .
+
+cp /home/pi/CubeSatSim/sstv/sstv_image_1_320_x_256.jpg ./image_file.jpeg
+
+python3 -m http.server 8002 &
+
+setsid chromium-browser --check-for-update-interval=1 --simulate-critical-update --noerrdialogs --disable-infobars http://127.0.0.1:8002 &>/dev/null &
+
+cd /home/pi/fctelem
+
+sudo ./fctelem | python3 /home/pi/CubeSatSim/groundstation/fc_block_decode.py
+
+# sleep 10
+
+#read val
+
+#sudo killall -9 fctelem &>/dev/null
+
+#sudo killall -9 python3 &>/dev/null
+
+sleep 10
+
+#$SHELL
diff --git a/groundstation/fox-profile.sh b/groundstation/fox-profile.sh
index 1610e293..91290402 100755
--- a/groundstation/fox-profile.sh
+++ b/groundstation/fox-profile.sh
@@ -5,6 +5,8 @@ echo "Script to change your default FoxTelem profile for FIAB v4"
echo
+source /home/pi/venv/bin/activate
+
sudo rm /home/pi/FoxTelemetryData/.foxprofile
/home/pi/CubeSatSim/groundstation/fox-run.sh
diff --git a/groundstation/fox-run.sh b/groundstation/fox-run.sh
index 3f1ec4c5..d321719d 100755
--- a/groundstation/fox-run.sh
+++ b/groundstation/fox-run.sh
@@ -82,8 +82,8 @@ if [ ! -f "$FILE" ]; then
sudo sed -i "s/stationDetails=.*/stationDetails=FoxInABox/g" /home/pi/FoxTelemetryData/FoxTelem.properties
- # sudo sed -i "s/soundCard=NONE/soundCard=RTL SDR/g" /home/pi/FoxTelemetryData/FoxTelem.properties # change to FunCube
- sudo sed -i "s/soundCard=NONE/soundCard=Direct Audio Device\: FUNcube Dongle V2.0, USB Audi/g" /home/pi/FoxTelemetryData/FoxTelem.properties # change to FunCube
+ # sudo sed -i "s/soundCard=NONE/soundCard=RTL SDR/g" /home/pi/FoxTelemetryData/FoxTelem.properties # change to FUNcbe
+ sudo sed -i "s/soundCard=NONE/soundCard=Direct Audio Device\: FUNcube Dongle V2.0, USB Audi/g" /home/pi/FoxTelemetryData/FoxTelem.properties # change to FUNcube
diff --git a/groundstation/frequency_manager_config.json b/groundstation/frequency_manager_config.json
new file mode 100644
index 00000000..31e6e4b8
--- /dev/null
+++ b/groundstation/frequency_manager_config.json
@@ -0,0 +1,171 @@
+{
+ "bookmarkDisplayMode": 1,
+ "lists": {
+ "General": {
+ "bookmarks": {
+ "AO-73": {
+ "bandwidth": 5000.0,
+ "frequency": 145935000.0,
+ "mode": 4
+ },
+ "APRS Packet": {
+ "bandwidth": 12500.0,
+ "frequency": 144390000.0,
+ "mode": 0
+ },
+ "ATC Clearance Delivery": {
+ "bandwidth": 12500.0,
+ "frequency": 118850000.0,
+ "mode": 2
+ },
+ "ATC Ground East": {
+ "bandwidth": 12500.0,
+ "frequency": 121900000.0,
+ "mode": 2
+ },
+ "ATC Ground West": {
+ "bandwidth": 12500.0,
+ "frequency": 121650000.0,
+ "mode": 2
+ },
+ "ATC Local East": {
+ "bandwidth": 12500.0,
+ "frequency": 118500000.0,
+ "mode": 2
+ },
+ "ATC Local West": {
+ "bandwidth": 12500.0,
+ "frequency": 135100000.0,
+ "mode": 2
+ },
+ "CAS-4A": {
+ "bandwidth": 5000.0,
+ "frequency": 145836000.0,
+ "mode": 4
+ },
+ "CAS-4B": {
+ "bandwidth": 5000.0,
+ "frequency": 145893000.0,
+ "mode": 4
+ },
+ "CubeSatSim": {
+ "bandwidth": 12500.0,
+ "frequency": 434900000.0,
+ "mode": 0
+ },
+ "Ham APRS": {
+ "bandwidth": 12500.0,
+ "frequency": 144390000.0,
+ "mode": 2
+ },
+ "Ham Beacon PHL": {
+ "bandwidth": 3000.0,
+ "frequency": 144272000.0,
+ "mode": 4
+ },
+ "Ham Cherry Hill": {
+ "bandwidth": 201869.15625,
+ "frequency": 145370000.0,
+ "mode": 0
+ },
+ "Ham Munroe": {
+ "bandwidth": 12500.0,
+ "frequency": 145390000.0,
+ "mode": 0
+ },
+ "Ham Newtown": {
+ "bandwidth": 12500.0,
+ "frequency": 147060000.0,
+ "mode": 0
+ },
+ "Ham Paoli": {
+ "bandwidth": 18495.533203125,
+ "frequency": 145130000.0,
+ "mode": 0
+ },
+ "ISS": {
+ "bandwidth": 5000.0,
+ "frequency": 437800000.0,
+ "mode": 0
+ },
+ "ISS-SSTV": {
+ "bandwidth": 5000.0,
+ "frequency": 145800000.0,
+ "mode": 0
+ },
+ "NOAA Allentown": {
+ "bandwidth": 18495.533203125,
+ "frequency": 162400000.0,
+ "mode": 0
+ },
+ "NOAA Harrisburg": {
+ "bandwidth": 18495.533203125,
+ "frequency": 162550000.0,
+ "mode": 0
+ },
+ "NOAA Hiburnia Park": {
+ "bandwidth": 18495.533203125,
+ "frequency": 162425000.0,
+ "mode": 0
+ },
+ "NOAA PHL": {
+ "bandwidth": 18495.533203125,
+ "frequency": 162475000.0,
+ "mode": 0
+ },
+ "NOAA Sudlersville": {
+ "bandwidth": 18495.533203125,
+ "frequency": 162500000.0,
+ "mode": 0
+ },
+ "PHL": {
+ "bandwidth": 12500.0,
+ "frequency": 133275000.0,
+ "mode": 2
+ },
+ "PHL 2": {
+ "bandwidth": 12500.0,
+ "frequency": 133475000.0,
+ "mode": 2
+ },
+ "PHL 3": {
+ "bandwidth": 12500.0,
+ "frequency": 133500000.0,
+ "mode": 2
+ },
+ "PHL 5": {
+ "bandwidth": 12500.0,
+ "frequency": 133575000.0,
+ "mode": 2
+ },
+ "PHL 6": {
+ "bandwidth": 12500.0,
+ "frequency": 134600000.0,
+ "mode": 2
+ },
+ "PHL 7": {
+ "bandwidth": 12500.0,
+ "frequency": 135450000.0,
+ "mode": 2
+ },
+ "PHL 8": {
+ "bandwidth": 12500.0,
+ "frequency": 128795000.0,
+ "mode": 2
+ },
+ "PHL Automated": {
+ "bandwidth": 18495.533203125,
+ "frequency": 133400000.0,
+ "mode": 0
+ },
+ "The Roar WXVL": {
+ "bandwidth": 201869.15625,
+ "frequency": 89100000.0,
+ "mode": 1
+ }
+ },
+ "showOnWaterfall": true
+ }
+ },
+ "selectedList": "General"
+}
\ No newline at end of file
diff --git a/groundstation/index.html b/groundstation/index.html
new file mode 100644
index 00000000..df3363d5
--- /dev/null
+++ b/groundstation/index.html
@@ -0,0 +1,9 @@
+
+
+FUNcube CubeSatSim Telemetry
+
+
+
+
diff --git a/groundstation/packet.sh b/groundstation/packet.sh
index 2b47089f..2213b052 100755
--- a/groundstation/packet.sh
+++ b/groundstation/packet.sh
@@ -152,6 +152,7 @@ echo
echo -e "Auto decoding APRS packets on $frequency Hz"
+ # direwolf -r 48000 -c /home/pi/CubeSatSim/groundstation/direwolf/direwolf.conf -t 0 &
setsid direwolf -r 48000 -c /home/pi/CubeSatSim/groundstation/direwolf/direwolf.conf &
#fi
diff --git a/groundstation/sdr.sh b/groundstation/sdr.sh
index 2821d7c0..54ddb7a3 100755
--- a/groundstation/sdr.sh
+++ b/groundstation/sdr.sh
@@ -53,6 +53,8 @@ sudo /etc/init.d/alsa-utils start
sudo killall -9 rtl_fm &>/dev/null
+sudo killall -9 rtl_fm &>/dev/null
+
sudo systemctl restart openwebrx
sleep 10
diff --git a/groundstation/sstv_decode_prompt.sh b/groundstation/sstv_decode_prompt.sh
index ae49a758..07c4cf05 100755
--- a/groundstation/sstv_decode_prompt.sh
+++ b/groundstation/sstv_decode_prompt.sh
@@ -135,7 +135,7 @@ set -- $value
#rtl_fm -M fm -f 434.9M -s 48k | aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1
#rtl_fm -M fm -f 434.9M -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 -f $frequency -s 48k | tee >(aplay -D hw:${2:0:1},0,0 -r 48000 -t raw -f S16_LE -c 1) | aplay -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 -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
diff --git a/hardware/frame/v2.0/2u/cubesatsim_frame_connector.v2.0.stl b/hardware/frame/v2.0/2u/cubesatsim_frame_connector.v2.0.stl
new file mode 100644
index 00000000..b63a2af7
Binary files /dev/null and b/hardware/frame/v2.0/2u/cubesatsim_frame_connector.v2.0.stl differ
diff --git a/hardware/frame/v2.0/2u/readme.md b/hardware/frame/v2.0/2u/readme.md
new file mode 100644
index 00000000..ec399b3b
--- /dev/null
+++ b/hardware/frame/v2.0/2u/readme.md
@@ -0,0 +1,7 @@
+Here is the source for the 2U Connector part: https://cad.onshape.com/documents/eecb39d3cd81220d3a56ce06/v/fdc9aca356206986ef6440e6/e/f881e9547bb3cd4fd653d041
+
+You can export it in other formats
+
+You will also need two additional frame sides
+
+Here's how to upgrade a 1U CubeSatSim https://github.com/alanbjohnston/CubeSatSim/wiki/Upgrading-to-2U
diff --git a/hardware/frame/v2.0/plug_circle_24.stl b/hardware/frame/v2.0/plug_circle_24.stl
new file mode 100644
index 00000000..890e3305
Binary files /dev/null and b/hardware/frame/v2.0/plug_circle_24.stl differ
diff --git a/hardware/frame/v2.0/readme.md b/hardware/frame/v2.0/readme.md
index ccb58d26..b5828009 100644
--- a/hardware/frame/v2.0/readme.md
+++ b/hardware/frame/v2.0/readme.md
@@ -2,10 +2,12 @@ These are the STL files for printing the frame.

-You will need to print two of the top/bottom, and one of each side
+You will need to print two of the top/bottom, and one of each side, PLA material, 20% infill.
The source is availale at:
https://cad.onshape.com/documents/ba47819ff100597297d1d967/w/f19409ec7cd5459afb429cb9/e/a0e0cc37dee6fb879c4bcc2b
https://cad.onshape.com/documents/1515e31c7fa5f6258ef39ae7/w/36f6069826ee0c0263f8d85e/e/2b7801717a8e1af3df455057
https://cad.onshape.com/documents/188300bd4469521b14597507/w/546e1730182c1520c46b050d/e/ceef7084a00eb9b26c486bb6
+
+To make a 2U frame, also print the 2U connector part in https://github.com/alanbjohnston/CubeSatSim/tree/master/hardware/frame/v2.0/2u and print two additional side parts. See https://github.com/alanbjohnston/CubeSatSim/wiki/Upgrading-to-2U for more information.
diff --git a/hardware/lite/v2/README.md b/hardware/lite/v2/README.md
new file mode 100644
index 00000000..3810277c
--- /dev/null
+++ b/hardware/lite/v2/README.md
@@ -0,0 +1,13 @@
+Here is information about the CubeSatSim Lite v2 hardware
+
+cubesatsim-Lite_2.0.1_gerbers.zip -- All gerber files used to fabricate PCBs
+
+cubesatsim-Lite_2.0.1_schematic.pdf -- Schematic
+
+cubesatsim-Lite_2.0.1.mnt -- SMD file
+
+cubesatsim-lLite_2.0.1_pcb.png -- image of board
+
+cubesatsim-Lite_2.0.1_bom.csv.txt -- Bill of Materials (BOM)
+
+For more information see https://github.com/alanbjohnston/CubeSatSim/wiki/CubeSatSim-Lite
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1.mnb b/hardware/lite/v2/cubesatsim-Lite-v2.0.1.mnb
new file mode 100644
index 00000000..e97af237
--- /dev/null
+++ b/hardware/lite/v2/cubesatsim-Lite-v2.0.1.mnb
@@ -0,0 +1,5 @@
+JP1 44.68 53.87 0 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
+JP2 23.14 59.97 0 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP3 21.74 56.03 270 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
+JP6 33.99 59.61 0 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
+JP7 16.00 63.09 90 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1.mnt b/hardware/lite/v2/cubesatsim-Lite-v2.0.1.mnt
new file mode 100644
index 00000000..9e31062d
--- /dev/null
+++ b/hardware/lite/v2/cubesatsim-Lite-v2.0.1.mnt
@@ -0,0 +1,26 @@
+C1 8.36 61.93 0 18pF C0603
+C2 10.03 61.90 0 16pF C0603
+C3 56.06 58.32 90 18pF C0603
+C4 55.47 62.84 270 16pF C0603
+C7 49.23 56.57 0 DNI/47uF C0603
+C8 50.47 47.68 270 DNI/100nF C0603
+E1 3.63 53.23 270 ANT-916-CHP-T XDCR_ANT-916-CHP-T
+E2 61.39 53.21 270 ANT-916-CHP-T XDCR_ANT-916-CHP-T
+J1 32.55 66.61 0 CONN_20X2 2X20
+J13 9.25 45.02 180 SJ1-2503A CONN_SJ1-2503A
+J14 55.07 45.08 180 SJ1-2503A CONN_SJ1-2503A
+L1 9.22 59.44 180 13nH L0603
+L2 56.24 60.55 270 13nH L0603
+LED5 19.08 42.09 270 GREEN LED-0603
+LED6 43.94 41.91 270 BLUE LED-0603
+R2 46.63 62.48 180 DNI/1k R0603
+R4 51.18 62.51 180 DNI/1k R0603
+R10 12.70 41.91 90 DNI/1k 0603-RES
+R11 51.66 41.91 90 DNI/100 0603-RES
+R16 13.79 60.22 0 DNI/68 R0805
+R17 18.44 60.33 270 DNI/180 R0603
+R18 26.67 60.22 180 DNI/68 R0805
+R21 48.90 51.23 0 DNI/100 R0603
+R22 55.14 51.99 0 DNI/220 R0603
+S2 7.80 51.82 90 DTSM-6 DTSM-6
+U6 32.94 51.75 270 SR105U SR_FRS_0W5
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_bom.csv.txt b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_bom.csv.txt
new file mode 100644
index 00000000..44718daa
--- /dev/null
+++ b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_bom.csv.txt
@@ -0,0 +1,53 @@
+"Part";"Value";"Device";"Package";"Description";"";
+"C1";"18pF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
+"C2";"16pF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
+"C3";"18pF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
+"C4";"16pF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
+"C5";"47uF";"CAPPTH";"CAP-PTH-SMALL";"Capacitor";"";
+"C6";"100nF";"CAPPTH";"CAP-PTH-SMALL";"Capacitor";"";
+"C7";"DNI/47uF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
+"C8";"DNI/100nF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
+"E1";"ANT-916-CHP-T";"ANT-916-CHP-T";"XDCR_ANT-916-CHP-T";"868MHz ISM, LoRa, Sensor Networks, SigFox Chip RF Antenna 863MHz ~ 873MHz 0.5dBi Solder Surface Mount Check prices";"";
+"E2";"ANT-916-CHP-T";"ANT-916-CHP-T";"XDCR_ANT-916-CHP-T";"868MHz ISM, LoRa, Sensor Networks, SigFox Chip RF Antenna 863MHz ~ 873MHz 0.5dBi Solder Surface Mount Check prices";"";
+"J1";"CONN_20X2";"CONN_20X2";"2X20";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"J2";"";"CONN_021X02_NO_SILK";"1X02_NO_SILK";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"J6";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
+"J10";"DNI/Sparkfun QWIIC Breakout";"CONN_041X04_NO_SILK";"1X04_NO_SILK";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"J12";"DNI/1x4 pin header";"CONN_041X04_NO_SILK";"1X04_NO_SILK";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"J13";"SJ1-2503A";"SJ1-2503A";"CONN_SJ1-2503A";"";"";
+"J14";"SJ1-2503A";"SJ1-2503A";"CONN_SJ1-2503A";"";"";
+"J15";"";"CONN_06NO_SILK_NO_POP";"1X06_NO_SILK";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"JP1";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"Normally closed trace jumper";"";
+"JP2";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
+"JP3";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"Normally closed trace jumper";"";
+"JP6";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"Normally closed trace jumper";"";
+"JP7";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
+"L1";"13nH";"SMD-FERRITE-CHIP-120-OHM-500MA(0603)";"L0603";"303030001";"";
+"L2";"13nH";"SMD-FERRITE-CHIP-120-OHM-500MA(0603)";"L0603";"303030001";"";
+"LED3";"Green 5mm";"LED3MM";"LED3MM";"LED";"";
+"LED4";"Blue 5mm";"LED3MM";"LED3MM";"LED";"";
+"LED5";"GREEN";"LED-GREEN0603";"LED-0603";"Green SMD LED";"";
+"LED6";"BLUE";"LED-BLUE0603";"LED-0603";"Blue SMD LED";"";
+"R1";"1K";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"Resistor";"";
+"R2";"DNI/1k";"R-EU_R0603";"R0603";"RESISTOR, European symbol";"";
+"R3";"1K";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"Resistor";"";
+"R4";"DNI/1k";"R-EU_R0603";"R0603";"RESISTOR, European symbol";"";
+"R7";"1k";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"Resistor";"";
+"R8";"DNI/100";"RESISTOR0603";"0603-RES";"Resistor";"";
+"R10";"DNI/1k";"RESISTOR0603-RES";"0603-RES";"Resistor";"";
+"R11";"100";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"Resistor";"";
+"R13";"68";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"Resistor";"";
+"R14";"180";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"Resistor";"";
+"R15";"68";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"Resistor";"";
+"R16";"DNI/68";"R-US_R0805";"R0805";"RESISTOR, American symbol";"";
+"R17";"DNI/180";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"301010206";"";
+"R18";"DNI/68";"R-US_R0805";"R0805";"RESISTOR, American symbol";"";
+"R19";"100";"RESISTORPTH-1/4W-VERT-KIT";"AXIAL-0.1EZ";"Resistor";"";
+"R20";"220";"RESISTORPTH-1/4W-VERT-KIT";"AXIAL-0.1EZ";"Resistor";"";
+"R21";"DNI/100";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"301010206";"";
+"R22";"DNI/220";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"301010206";"";
+"S1";"RA-SPST";"RA-SPST";"RA-SPST";"";"";
+"S2";"DTSM-6";"DTSM-6";"DTSM-6";"";"";
+"U1";"SR105U";"SR_FRS_0W5";"SR_FRS_0W5";"";"";
+"X2";"SMA-VERT";"SMA-VERT";"SMA-VERT";"";"";
+"X3";"SMA-VERT";"SMA-VERT";"SMA-VERT";"";"";
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_bottom.png b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_bottom.png
new file mode 100644
index 00000000..ecafa19d
Binary files /dev/null and b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_bottom.png differ
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_centroid.zip b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_centroid.zip
new file mode 100644
index 00000000..314a9832
Binary files /dev/null and b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_centroid.zip differ
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_gerbers.zip b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_gerbers.zip
new file mode 100644
index 00000000..ad1a58ef
Binary files /dev/null and b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_gerbers.zip differ
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_pcb.png b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_pcb.png
new file mode 100644
index 00000000..be0e7e5d
Binary files /dev/null and b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_pcb.png differ
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_pour.png b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_pour.png
new file mode 100644
index 00000000..6eb98adf
Binary files /dev/null and b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_pour.png differ
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_schematic.pdf b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_schematic.pdf
new file mode 100644
index 00000000..b3b16fc0
Binary files /dev/null and b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_schematic.pdf differ
diff --git a/hardware/lite/v2/cubesatsim-Lite-v2.0.1_top.png b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_top.png
new file mode 100644
index 00000000..2f3b0145
Binary files /dev/null and b/hardware/lite/v2/cubesatsim-Lite-v2.0.1_top.png differ
diff --git a/hardware/lite/vB5/README.md b/hardware/lite/vB5/README.md
index af044d35..8d6f40d6 100644
--- a/hardware/lite/vB5/README.md
+++ b/hardware/lite/vB5/README.md
@@ -10,4 +10,4 @@ cubesatsim-lite-0.5_pcb.png -- image of board
cubesatsim-lite-0.5.csv.txt -- Bill of Materials (BOM)
-For more information see https://github.com/alanbjohnston/CubeSatSim/wiki/CubeSatSim-Lite
+For more information see https://github.com/alanbjohnston/CubeSatSim/wiki/CubeSatSim-Lite-Beta-vB5
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1.mnb b/hardware/v2.0/cubesatsim-battery-v2.0.1.mnb
deleted file mode 100644
index 48b4e2ca..00000000
--- a/hardware/v2.0/cubesatsim-battery-v2.0.1.mnb
+++ /dev/null
@@ -1,3 +0,0 @@
-JP4 12.92 79.27 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP5 66.93 74.27 90 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
-JP6 17.51 69.85 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1.mnt b/hardware/v2.0/cubesatsim-battery-v2.0.1.mnt
deleted file mode 100644
index 5646f168..00000000
--- a/hardware/v2.0/cubesatsim-battery-v2.0.1.mnt
+++ /dev/null
@@ -1,11 +0,0 @@
-BT1 44.48 57.58 0 1024 BAT_1024
-BT2 41.27 29.90 0 1012 BAT_1012
-C1 4.88 58.78 0 DNI/0.1µF 0603
-J1 32.68 74.23 0 CONN_20X2 2X20
-JP9 3.38 54.25 0 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
-JP10 6.71 50.72 0 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
-JP11 6.85 54.23 0 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP12 3.31 50.70 0 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-R1 17.45 69.49 0 DNI/R100 R0805
-U1 12.19 67.41 180 INA219 purple board INA219
-U2 4.55 62.79 0 INA219AIDR D0008A_N
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_centroid.zip b/hardware/v2.0/cubesatsim-battery-v2.0.1_centroid.zip
deleted file mode 100644
index d7223876..00000000
Binary files a/hardware/v2.0/cubesatsim-battery-v2.0.1_centroid.zip and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_pcb.png b/hardware/v2.0/cubesatsim-battery-v2.0.1_pcb.png
deleted file mode 100644
index 1d2f98ad..00000000
Binary files a/hardware/v2.0/cubesatsim-battery-v2.0.1_pcb.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_pour.png b/hardware/v2.0/cubesatsim-battery-v2.0.1_pour.png
deleted file mode 100644
index ab4c3385..00000000
Binary files a/hardware/v2.0/cubesatsim-battery-v2.0.1_pour.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_top.png b/hardware/v2.0/cubesatsim-battery-v2.0.1_top.png
deleted file mode 100644
index 9a5cad77..00000000
Binary files a/hardware/v2.0/cubesatsim-battery-v2.0.1_top.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.2_bom.csv.txt b/hardware/v2.0/cubesatsim-battery-v2.0.2_bom.csv.txt
new file mode 100644
index 00000000..91d1919f
--- /dev/null
+++ b/hardware/v2.0/cubesatsim-battery-v2.0.2_bom.csv.txt
@@ -0,0 +1,13 @@
+"Qty";"Value";"Device";"Package";"Parts";"Description";"";
+"5";"";"CONN_01";"1X01";"JP2, JP3, JP7, JP13, JP14";"Single connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"1";"1012";"1012";"BAT_1012";"BT2";"Check availability";"";
+"1";"1024";"1024";"BAT_1024";"BT1";"Check availability";"";
+"1";"CONN_20X2";"CONN_20X2";"2X20";"J1";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"1";"DNI/0.1µF";"CAP_CERAMIC0603";"0603";"C1";"Ceramic Capacitors";"";
+"1";"DNI/R100";"R-US_R0805";"R0805";"R1";"RESISTOR, American symbol";"";
+"1";"INA219 purple board";"INA219";"INA219";"U1";"";"";
+"1";"INA219AIDR";"INA219AIDR";"D0008A_N";"U2";"";"";
+"3";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"JP5, JP9, JP10";"Normally closed trace jumper";"";
+"4";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"JP4, JP6, JP11, JP12";"Normally open jumper";"";
+"2";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"JP1, JP8";"Standard 2-pin 0.1" header. Use with";"";
+"1";"PTC";"PTCPTH";"PTC";"F1";"Resettable Fuse PTC";"";
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_bottom.png b/hardware/v2.0/cubesatsim-battery-v2.0.2_bottom.png
similarity index 100%
rename from hardware/v2.0/cubesatsim-battery-v2.0.1_bottom.png
rename to hardware/v2.0/cubesatsim-battery-v2.0.2_bottom.png
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.2_centroid.zip b/hardware/v2.0/cubesatsim-battery-v2.0.2_centroid.zip
new file mode 100644
index 00000000..daaeefb2
Binary files /dev/null and b/hardware/v2.0/cubesatsim-battery-v2.0.2_centroid.zip differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_gerbers.zip b/hardware/v2.0/cubesatsim-battery-v2.0.2_gerbers.zip
similarity index 65%
rename from hardware/v2.0/cubesatsim-battery-v2.0.1_gerbers.zip
rename to hardware/v2.0/cubesatsim-battery-v2.0.2_gerbers.zip
index 27317983..f0da43b4 100644
Binary files a/hardware/v2.0/cubesatsim-battery-v2.0.1_gerbers.zip and b/hardware/v2.0/cubesatsim-battery-v2.0.2_gerbers.zip differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.2_pcb.png b/hardware/v2.0/cubesatsim-battery-v2.0.2_pcb.png
new file mode 100644
index 00000000..45af2f66
Binary files /dev/null and b/hardware/v2.0/cubesatsim-battery-v2.0.2_pcb.png differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.2_pour.png b/hardware/v2.0/cubesatsim-battery-v2.0.2_pour.png
new file mode 100644
index 00000000..70211388
Binary files /dev/null and b/hardware/v2.0/cubesatsim-battery-v2.0.2_pour.png differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_schematic.pdf b/hardware/v2.0/cubesatsim-battery-v2.0.2_schematic.pdf
similarity index 61%
rename from hardware/v2.0/cubesatsim-battery-v2.0.1_schematic.pdf
rename to hardware/v2.0/cubesatsim-battery-v2.0.2_schematic.pdf
index 681a87c7..6065ca27 100644
Binary files a/hardware/v2.0/cubesatsim-battery-v2.0.1_schematic.pdf and b/hardware/v2.0/cubesatsim-battery-v2.0.2_schematic.pdf differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.2_top.png b/hardware/v2.0/cubesatsim-battery-v2.0.2_top.png
new file mode 100644
index 00000000..79155867
Binary files /dev/null and b/hardware/v2.0/cubesatsim-battery-v2.0.2_top.png differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_bom.csv.txt b/hardware/v2.0/cubesatsim-main-v2.0.1_bom.csv.txt
new file mode 100644
index 00000000..fb6e9718
--- /dev/null
+++ b/hardware/v2.0/cubesatsim-main-v2.0.1_bom.csv.txt
@@ -0,0 +1,57 @@
+"Qty";"Value";"Device";"Package";"Parts";"Description";"";
+"1";"";"CONN_06NO_SILK_NO_POP";"1X06_NO_SILK";"J15";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"1";"100";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R8";"Resistor";"";
+"1";"100";"RESISTORPTH-1/4W-VERT-KIT";"AXIAL-0.1EZ";"R19";"Resistor";"";
+"2";"100nF";"CAPPTH";"CAP-PTH-SMALL";"C6, C9";"Capacitor";"";
+"1";"10K";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R27";"Resistor";"";
+"2";"13nH";"SMD-FERRITE-CHIP-120-OHM-500MA(0603)";"L0603";"L1, L2";"303030001";"";
+"2";"16pF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"C2, C4";"302010097";"";
+"1";"180";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R14";"Resistor";"";
+"2";"18pF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"C1, C3";"302010097";"";
+"2";"1K";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R1, R3";"Resistor";"";
+"1";"1N4148";"DIODE-D-2.5";"D-2.5";"D3";"DIODE";"";
+"4";"1N5817";"DIODE-D-2.5";"D-2.5";"D1, D2, D4, D10";"DIODE";"";
+"2";"1k";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R7, R30";"Resistor";"";
+"2";"220";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R9, R29";"Resistor";"";
+"1";"220";"RESISTORPTH-1/4W-VERT-KIT";"AXIAL-0.1EZ";"R20";"Resistor";"";
+"2";"4.7k";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R23, R24";"Resistor";"";
+"1";"47uF";"CAPPTH";"CAP-PTH-SMALL";"C5";"Capacitor";"";
+"2";"68";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R13, R15";"Resistor";"";
+"2";"ANT-916-CHP-T";"ANT-916-CHP-T";"XDCR_ANT-916-CHP-T";"E1, E2";"868MHz ISM, LoRa, Sensor Networks, SigFox Chip RF Antenna 863MHz ~ 873MHz 0.5dBi Solder Surface Mount Check prices";"";
+"1";"BME280";"M04NO_SILK_ALL_ROUND";"1X04_NO_SILK_ALL_ROUND";"J5";"Header 4";"";
+"1";"Blue 5mm";"LED3MM";"LED3MM";"LED4";"LED";"";
+"1";"CONN_20X2";"CONN_20X2";"2X20";"J1";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"2";"DNI/100";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"R11, R21";"301010206";"";
+"2";"DNI/100nF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"C8, C10";"302010097";"";
+"1";"DNI/10k";"R-EU_R0603";"R0603";"R28";"RESISTOR, European symbol";"";
+"1";"DNI/180";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"R17";"301010206";"";
+"1";"DNI/1N5817";"DIODE-D-2.5";"D-2.5";"D9";"DIODE";"";
+"2";"DNI/1k";"R-EU_R0603";"R0603";"R2, R4";"RESISTOR, European symbol";"";
+"2";"DNI/1k";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"R10, R32";"301010206";"";
+"1";"DNI/1x4 pin header";"CONN_041X04_NO_SILK";"1X04_NO_SILK";"J12";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"3";"DNI/220";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"R12, R22, R31";"301010206";"";
+"2";"DNI/4.7k";"RESISTORPTH-1/4W-VERT";"AXIAL-0.1";"R33, R34";"Resistor";"";
+"2";"DNI/4.7k";"SMD-RES-1.2K-1%-1/10W(0603)";"R0603";"R25, R26";"301010206";"";
+"1";"DNI/4148WS";"DIODESOD-323F";"SOD-323F";"D7";"Diode";"";
+"1";"DNI/47uF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"C7";"302010097";"";
+"2";"DNI/5.1k";"R-EU_R0603";"R0603";"R5, R6";"RESISTOR, European symbol";"";
+"1";"DNI/5V1 Zener 1W";"ZENER-DIODEZD-2.5";"ZDIO-2.5";"D8";"Z-Diode";"";
+"2";"DNI/68";"R-US_R0805";"R0805";"R16, R18";"RESISTOR, American symbol";"";
+"3";"DNI/B5817WS";"DIODESOD-323F";"SOD-323F";"D5, D6, D11";"Diode";"";
+"1";"DNI/Sparkfun QWIIC Breakout";"CONN_041X04_NO_SILK";"1X04_NO_SILK";"J10";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"1";"DNI/USB4105-GF-A or GT-USB-7010B";"USB_C_2-LAYER_PADS";"USB-C-16P-2LAYER-PADS";"J9";"USB Type C 16Pin Connector";"";
+"1";"Green 5mm";"LED3MM";"LED3MM";"LED3";"LED";"";
+"3";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"JP3, JP4, JP6";"Normally closed trace jumper";"";
+"7";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"JP1, JP2, JP5, JP7, JP8, JP9, JP10";"Normally open jumper";"";
+"1";"MPU6050";"M08NO_SILK_FEMALE_PTH";"1X08_NO_SILK@1";"J4";"Header 8";"";
+"2";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"J6, J7";"Standard 2-pin 0.1" header. Use with";"";
+"1";"RA-SPST";"RA-SPST";"RA-SPST";"S1";"";"";
+"1";"Raspberry Pi Pico";"RASPBERRY_PICO-NO_DEBUG";"PICO-PKG-NO_DEBUG";"U1";"";"";
+"1";"Red 5mm";"LED3MM";"LED3MM";"LED5";"LED";"";
+"1";"SC1464-ND";"PG203J";"PG203J";"X1";"MIC/HEADPHONE JACK";"";
+"2";"SJ1-2503A";"SJ1-2503A";"CONN_SJ1-2503A";"J13, J14";"";"";
+"2";"SMA-VERT";"SMA-VERT";"SMA-VERT";"X2, X3";"";"";
+"1";"SR105U";"SR_FRS_0W5";"SR_FRS_0W5";"U6";"";"";
+"1";"Sparkfun USB-C Breakout";"CONN_06NO_SILK_FEMALE_PTH";"1X06_NO_SILK";"J8";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"1";"White 5mm";"LED3MM";"LED3MM";"LED1";"LED";"";
+"1";"Yellow 5mm";"LED3MM";"LED3MM";"LED2";"LED";"";
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_bottom.png b/hardware/v2.0/cubesatsim-main-v2.0.1_bottom.png
new file mode 100644
index 00000000..2624b6ed
Binary files /dev/null and b/hardware/v2.0/cubesatsim-main-v2.0.1_bottom.png differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_centroid.zip b/hardware/v2.0/cubesatsim-main-v2.0.1_centroid.zip
new file mode 100644
index 00000000..740ebc9b
Binary files /dev/null and b/hardware/v2.0/cubesatsim-main-v2.0.1_centroid.zip differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_gerbers.zip b/hardware/v2.0/cubesatsim-main-v2.0.1_gerbers.zip
new file mode 100644
index 00000000..7c451de2
Binary files /dev/null and b/hardware/v2.0/cubesatsim-main-v2.0.1_gerbers.zip differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_pcb.png b/hardware/v2.0/cubesatsim-main-v2.0.1_pcb.png
new file mode 100644
index 00000000..8b641c01
Binary files /dev/null and b/hardware/v2.0/cubesatsim-main-v2.0.1_pcb.png differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_pour.png b/hardware/v2.0/cubesatsim-main-v2.0.1_pour.png
new file mode 100644
index 00000000..7ee53492
Binary files /dev/null and b/hardware/v2.0/cubesatsim-main-v2.0.1_pour.png differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_schematic.pdf b/hardware/v2.0/cubesatsim-main-v2.0.1_schematic.pdf
new file mode 100644
index 00000000..54349cba
Binary files /dev/null and b/hardware/v2.0/cubesatsim-main-v2.0.1_schematic.pdf differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.1_top.png b/hardware/v2.0/cubesatsim-main-v2.0.1_top.png
new file mode 100644
index 00000000..15e08dfa
Binary files /dev/null and b/hardware/v2.0/cubesatsim-main-v2.0.1_top.png differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.mnb b/hardware/v2.0/cubesatsim-main-v2.0.mnb
deleted file mode 100644
index 8d335ba6..00000000
--- a/hardware/v2.0/cubesatsim-main-v2.0.mnb
+++ /dev/null
@@ -1,18 +0,0 @@
-D1 63.55 60.58 0 1N5817 D-2.5
-D2 72.01 10.49 0 1N5817 D-2.5
-D3 66.45 10.62 180 1N4148 D-2.5
-D4 63.65 54.61 0 1N5817 D-2.5
-D8 59.31 7.52 270 DNI/5V1 Zener 1W ZDIO-2.5
-D9 19.71 45.92 0 DNI/1N5817 D-2.5
-D10 77.50 10.46 0 1N5817 D-2.5
-JP1 72.17 8.66 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP2 24.73 59.61 0 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP3 19.63 58.93 270 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
-JP4 51.94 53.34 180 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
-JP5 75.08 56.49 270 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP6 26.31 37.01 180 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
-JP7 15.95 61.99 90 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP8 37.93 40.67 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP9 45.17 51.10 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-JP10 63.64 56.54 0 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
-X1 71.86 61.21 270 SC1464-ND PG203J
diff --git a/hardware/v2.0/cubesatsim-main-v2.0_bottom.png b/hardware/v2.0/cubesatsim-main-v2.0_bottom.png
deleted file mode 100644
index 83baa402..00000000
Binary files a/hardware/v2.0/cubesatsim-main-v2.0_bottom.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0_gerbers.zip b/hardware/v2.0/cubesatsim-main-v2.0_gerbers.zip
deleted file mode 100644
index eed74445..00000000
Binary files a/hardware/v2.0/cubesatsim-main-v2.0_gerbers.zip and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0_pcb.png b/hardware/v2.0/cubesatsim-main-v2.0_pcb.png
deleted file mode 100644
index 29633023..00000000
Binary files a/hardware/v2.0/cubesatsim-main-v2.0_pcb.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0_pour.png b/hardware/v2.0/cubesatsim-main-v2.0_pour.png
deleted file mode 100644
index 96f24219..00000000
Binary files a/hardware/v2.0/cubesatsim-main-v2.0_pour.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0_schematic.pdf b/hardware/v2.0/cubesatsim-main-v2.0_schematic.pdf
deleted file mode 100644
index d266622b..00000000
Binary files a/hardware/v2.0/cubesatsim-main-v2.0_schematic.pdf and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-main-v2.0_top.png b/hardware/v2.0/cubesatsim-main-v2.0_top.png
deleted file mode 100644
index b80e3c79..00000000
Binary files a/hardware/v2.0/cubesatsim-main-v2.0_top.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1_bottom.png b/hardware/v2.0/cubesatsim-solar-v2.0.1_bottom.png
deleted file mode 100644
index 5d033c7c..00000000
Binary files a/hardware/v2.0/cubesatsim-solar-v2.0.1_bottom.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1_pcb.png b/hardware/v2.0/cubesatsim-solar-v2.0.1_pcb.png
deleted file mode 100644
index d9996de9..00000000
Binary files a/hardware/v2.0/cubesatsim-solar-v2.0.1_pcb.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1_pour.png b/hardware/v2.0/cubesatsim-solar-v2.0.1_pour.png
deleted file mode 100644
index a759ae6e..00000000
Binary files a/hardware/v2.0/cubesatsim-solar-v2.0.1_pour.png and /dev/null differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.2_bom.csv.txt b/hardware/v2.0/cubesatsim-solar-v2.0.2_bom.csv.txt
new file mode 100644
index 00000000..ab57f669
--- /dev/null
+++ b/hardware/v2.0/cubesatsim-solar-v2.0.2_bom.csv.txt
@@ -0,0 +1,17 @@
+"Qty";"Value";"Device";"Package";"Parts";"Description";"COPYRIGHT";"DIGI-KEY_PART_NUMBER_1";"DIGI-KEY_PART_NUMBER_2";"DIGI-KEY_PART_NUMBER_3";"DIGI-KEY_PART_NUMBER_4";"MANUFACTURER_PART_NUMBER";"MFR_NAME";"PROD_ID";"REFDES";"TYPE";"VALUE";
+"2";"";"CONN_01PTH_NO_SILK_YES_STOP";"1X01_NO_SILK";"JP16, JP19";"Single connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";"";"";"";"";"";"";"";"";"";"";
+"6";"0.1µF";"CAP_CERAMIC0603";"0603";"C2, C3, C4, C5, C6, C7";"Ceramic Capacitors";"";"";"";"";"";"";"";"";"";"";"";
+"6";"1A/23V/620mV";"DIODE-SCHOTTKY-BAT20J";"SOD-323";"D7, D8, D9, D10, D11, D12";"Schottky diode";"";"";"";"";"";"";"";"DIO-11623";"";"";"1A/23V/620mV";
+"6";"1N5817";"DIODE-D-2.5";"D-2.5";"D1, D2, D3, D4, D5, D6";"DIODE";"";"";"";"";"";"";"";"";"";"";"";
+"2";"4.7k";"RESISTORPTH-1/4W-VERT-KIT";"AXIAL-0.1EZ";"R3, R4";"Resistor";"";"";"";"";"";"";"";"";"";"";"";
+"1";"CONN_20X2";"CONN_20X2";"2X20";"J1";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";"";"";"";"";"";"";"";"";"";"";
+"2";"DNI-4.7k";"R-US_R0603";"R0603";"R11, R12";"RESISTOR, American symbol";"";"";"";"";"";"";"";"";"";"";"";
+"2";"DNI-4.7k";"RESISTORPTH-1/4W-VERT-KIT";"AXIAL-0.1EZ";"R7, R8";"Resistor";"";"";"";"";"";"";"";"";"";"";"";
+"1";"DNI/Sparkfun QWIIC Breakout";"CONN_041X04_NO_SILK";"1X04_NO_SILK";"J5";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";"";"";"";"";"";"";"CONN-09696";"";"";"";
+"6";"INA219 purple board";"INA219";"INA219";"U3, U4, U5, U6, U7, U8";"";"";"";"";"";"";"";"";"";"";"";"";
+"6";"INA219AIDR";"INA219AIDR";"D0008A_N";"U2, U10, U11, U12, U13, U14";"";"Copyright (C) 2022 Ultra Librarian. All rights reserved.";"296-23978-1-ND";"296-23978-2-ND";"296-23978-6-ND";"2156-INA219AIDR-ND";"INA219AIDR";"Texas Instruments";"";"RefDes";"TYPE";"";
+"1";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"JP18";"Normally open jumper";"";"";"";"";"";"";"";"";"";"";"";
+"1";"Micro JST";"CONN_021X02_NO_SILK";"1X02_NO_SILK";"JP8";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";"";"";"";"";"";"";"";"";"";"";
+"14";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"JP1, JP2, JP3, JP4, JP5, JP6, JP7, JP10, JP11, JP12, JP13, JP14, JP15, JP17";"Standard 2-pin 0.1" header. Use with";"";"";"";"";"";"";"";"";"";"";"";
+"6";"R100";"R-US_R0805";"R0805";"R1, R2, R5, R6, R9, R10";"RESISTOR, American symbol";"";"";"";"";"";"";"";"";"";"";"";
+"1";"VDD-EN";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"JP9";"Normally closed trace jumper";"";"";"";"";"";"";"";"";"";"";"";
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.2_bottom.png b/hardware/v2.0/cubesatsim-solar-v2.0.2_bottom.png
new file mode 100644
index 00000000..47885a16
Binary files /dev/null and b/hardware/v2.0/cubesatsim-solar-v2.0.2_bottom.png differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.2_centroid.zip b/hardware/v2.0/cubesatsim-solar-v2.0.2_centroid.zip
new file mode 100644
index 00000000..715a46ae
Binary files /dev/null and b/hardware/v2.0/cubesatsim-solar-v2.0.2_centroid.zip differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1_gerbers.zip b/hardware/v2.0/cubesatsim-solar-v2.0.2_gerbers.zip
similarity index 66%
rename from hardware/v2.0/cubesatsim-solar-v2.0.1_gerbers.zip
rename to hardware/v2.0/cubesatsim-solar-v2.0.2_gerbers.zip
index 8f17bb5e..adac2140 100644
Binary files a/hardware/v2.0/cubesatsim-solar-v2.0.1_gerbers.zip and b/hardware/v2.0/cubesatsim-solar-v2.0.2_gerbers.zip differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.2_pcb.png b/hardware/v2.0/cubesatsim-solar-v2.0.2_pcb.png
new file mode 100644
index 00000000..32e1af68
Binary files /dev/null and b/hardware/v2.0/cubesatsim-solar-v2.0.2_pcb.png differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.2_pour.png b/hardware/v2.0/cubesatsim-solar-v2.0.2_pour.png
new file mode 100644
index 00000000..0ed4780c
Binary files /dev/null and b/hardware/v2.0/cubesatsim-solar-v2.0.2_pour.png differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1_schematic.pdf b/hardware/v2.0/cubesatsim-solar-v2.0.2_schematic.pdf
similarity index 99%
rename from hardware/v2.0/cubesatsim-solar-v2.0.1_schematic.pdf
rename to hardware/v2.0/cubesatsim-solar-v2.0.2_schematic.pdf
index aaa8f820..e03c570d 100644
Binary files a/hardware/v2.0/cubesatsim-solar-v2.0.1_schematic.pdf and b/hardware/v2.0/cubesatsim-solar-v2.0.2_schematic.pdf differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1_top.png b/hardware/v2.0/cubesatsim-solar-v2.0.2_top.png
similarity index 76%
rename from hardware/v2.0/cubesatsim-solar-v2.0.1_top.png
rename to hardware/v2.0/cubesatsim-solar-v2.0.2_top.png
index 407b7c38..a2c88eaa 100644
Binary files a/hardware/v2.0/cubesatsim-solar-v2.0.1_top.png and b/hardware/v2.0/cubesatsim-solar-v2.0.2_top.png differ
diff --git a/hardware/v2.1/CubeSatSim Main v2.1.0 BOM.xls b/hardware/v2.1/CubeSatSim Main v2.1.0 BOM.xls
new file mode 100644
index 00000000..ae5f101c
Binary files /dev/null and b/hardware/v2.1/CubeSatSim Main v2.1.0 BOM.xls differ
diff --git a/hardware/v2.0/cubesatsim-battery-v2.0.1_bom.csv.txt b/hardware/v2.1/cubesatsim-battery-v2.1.0_bom.csv.txt
similarity index 90%
rename from hardware/v2.0/cubesatsim-battery-v2.0.1_bom.csv.txt
rename to hardware/v2.1/cubesatsim-battery-v2.1.0_bom.csv.txt
index d7850b63..a60a8138 100644
--- a/hardware/v2.0/cubesatsim-battery-v2.0.1_bom.csv.txt
+++ b/hardware/v2.1/cubesatsim-battery-v2.1.0_bom.csv.txt
@@ -12,12 +12,12 @@
"JP6";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
"JP7";"";"CONN_01";"1X01";"Single connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
"JP8";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
-"JP9";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"Normally closed trace jumper";"";
"JP10";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"Normally closed trace jumper";"";
"JP11";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
-"JP12";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
"JP13";"";"CONN_01";"1X01";"Single connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
"JP14";"";"CONN_01";"1X01";"Single connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
"R1";"DNI/R100";"R-US_R0805";"R0805";"RESISTOR, American symbol";"";
+"R2";"10k";"R-EU_R0603";"R0603";"RESISTOR, European symbol";"";
+"R3";"10k";"R-EU_R0603";"R0603";"RESISTOR, European symbol";"";
"U1";"INA219 purple board";"INA219";"INA219";"";"";
"U2";"INA219AIDR";"INA219AIDR";"D0008A_N";"";"";
diff --git a/hardware/v2.1/cubesatsim-battery-v2.1.0_bottom.png b/hardware/v2.1/cubesatsim-battery-v2.1.0_bottom.png
new file mode 100644
index 00000000..58d2adcd
Binary files /dev/null and b/hardware/v2.1/cubesatsim-battery-v2.1.0_bottom.png differ
diff --git a/hardware/v2.1/cubesatsim-battery-v2.1.0_centroid.zip b/hardware/v2.1/cubesatsim-battery-v2.1.0_centroid.zip
new file mode 100644
index 00000000..ab278a89
Binary files /dev/null and b/hardware/v2.1/cubesatsim-battery-v2.1.0_centroid.zip differ
diff --git a/hardware/v2.1/cubesatsim-battery-v2.1.0_gerbers.zip b/hardware/v2.1/cubesatsim-battery-v2.1.0_gerbers.zip
new file mode 100644
index 00000000..428226d4
Binary files /dev/null and b/hardware/v2.1/cubesatsim-battery-v2.1.0_gerbers.zip differ
diff --git a/hardware/v2.1/cubesatsim-battery-v2.1.0_pcb.png b/hardware/v2.1/cubesatsim-battery-v2.1.0_pcb.png
new file mode 100644
index 00000000..a8b4d242
Binary files /dev/null and b/hardware/v2.1/cubesatsim-battery-v2.1.0_pcb.png differ
diff --git a/hardware/v2.1/cubesatsim-battery-v2.1.0_pour.png b/hardware/v2.1/cubesatsim-battery-v2.1.0_pour.png
new file mode 100644
index 00000000..b9e7ebdc
Binary files /dev/null and b/hardware/v2.1/cubesatsim-battery-v2.1.0_pour.png differ
diff --git a/hardware/v2.1/cubesatsim-battery-v2.1.0_schematic.pdf b/hardware/v2.1/cubesatsim-battery-v2.1.0_schematic.pdf
new file mode 100644
index 00000000..f0375bc0
Binary files /dev/null and b/hardware/v2.1/cubesatsim-battery-v2.1.0_schematic.pdf differ
diff --git a/hardware/v2.1/cubesatsim-battery-v2.1.0_top.png b/hardware/v2.1/cubesatsim-battery-v2.1.0_top.png
new file mode 100644
index 00000000..7c8db0c7
Binary files /dev/null and b/hardware/v2.1/cubesatsim-battery-v2.1.0_top.png differ
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0.mnb b/hardware/v2.1/cubesatsim-main-v2.1.0.mnb
new file mode 100644
index 00000000..b8b888f9
--- /dev/null
+++ b/hardware/v2.1/cubesatsim-main-v2.1.0.mnb
@@ -0,0 +1,18 @@
+D1 63.55 60.58 0 BYW27-400 D-2.5
+D2 72.01 10.49 0 1N5817 D-2.5
+D3 66.45 10.62 180 1N4148 D-2.5
+D8 59.31 7.52 270 DNI/5V1 Zener 1W ZDIO-2.5
+D10 77.50 10.46 0 1N5817 D-2.5
+JP1 72.17 8.66 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP2 24.73 60.99 0 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP3 16.08 58.12 270 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
+JP4 59.36 56.39 180 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
+JP5 75.08 56.48 270 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP6 26.21 35.94 180 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
+JP7 15.95 62.24 90 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP8 47.28 30.91 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP9 44.21 61.82 180 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP10 63.61 56.54 0 JUMPER-SMT_2_NO_SILK SMT-JUMPER_2_NO_SILK
+JP11 14.63 52.17 180 JUMPER-SMT_2_NC_TRACE_SILK SMT-JUMPER_2_NC_TRACE_SILK
+U7 36.42 49.89 0 DRA818V DORJI_DRA818V
+X1 71.86 61.21 270 SC1464-ND PG203J
diff --git a/hardware/v2.0/cubesatsim-main-v2.0.mnt b/hardware/v2.1/cubesatsim-main-v2.1.0.mnt
similarity index 94%
rename from hardware/v2.0/cubesatsim-main-v2.0.mnt
rename to hardware/v2.1/cubesatsim-main-v2.1.0.mnt
index a364bdeb..c33a4c37 100644
--- a/hardware/v2.0/cubesatsim-main-v2.0.mnt
+++ b/hardware/v2.1/cubesatsim-main-v2.1.0.mnt
@@ -5,12 +5,12 @@ C4 20.68 10.16 180 16pF C0603
C7 55.60 56.62 0 DNI/47uF C0603
C8 59.00 47.55 270 DNI/100nF C0603
C10 66.83 3.91 270 DNI/100nF C0603
-D5 63.53 62.56 180 DNI/B5817WS SOD-323F
+D5 63.42 62.53 0 DNI/1N4007FL SOD-123FL
D6 72.16 8.69 180 DNI/B5817WS SOD-323F
D7 66.47 8.84 0 DNI/4148WS SOD-323F
-D11 63.65 56.59 180 DNI/B5817WS SOD-323F
E1 6.80 76.35 180 ANT-916-CHP-T XDCR_ANT-916-CHP-T
E2 19.18 3.81 0 ANT-916-CHP-T XDCR_ANT-916-CHP-T
+F2 63.68 57.18 180 DNI/MF-FSML100/8-2 0603
J1 32.55 66.61 0 CONN_20X2 2X20
J8 36.17 72.01 0 Sparkfun USB-C Breakout 1X06_NO_SILK
J9 36.35 74.15 180 DNI/USB4105-GF-A or GT-USB-7010B USB-C-16P-2LAYER-PADS
diff --git a/hardware/v2.0/cubesatsim-main-v2.0_bom.csv.txt b/hardware/v2.1/cubesatsim-main-v2.1.0_bom.csv.txt
similarity index 92%
rename from hardware/v2.0/cubesatsim-main-v2.0_bom.csv.txt
rename to hardware/v2.1/cubesatsim-main-v2.1.0_bom.csv.txt
index 55ff16da..b75fcd21 100644
--- a/hardware/v2.0/cubesatsim-main-v2.0_bom.csv.txt
+++ b/hardware/v2.1/cubesatsim-main-v2.1.0_bom.csv.txt
@@ -9,19 +9,18 @@
"C8";"DNI/100nF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
"C9";"100nF";"CAPPTH";"CAP-PTH-SMALL";"Capacitor";"";
"C10";"DNI/100nF";"CERAMIC-10PF-50V-5%-NPO(0603)";"C0603";"302010097";"";
-"D1";"1N5817";"DIODE-D-2.5";"D-2.5";"DIODE";"";
+"D1";"BYW27-400";"DIODE-D-2.5";"D-2.5";"DIODE";"";
"D2";"1N5817";"DIODE-D-2.5";"D-2.5";"DIODE";"";
"D3";"1N4148";"DIODE-D-2.5";"D-2.5";"DIODE";"";
-"D4";"1N5817";"DIODE-D-2.5";"D-2.5";"DIODE";"";
-"D5";"DNI/B5817WS";"DIODESOD-323F";"SOD-323F";"Diode";"";
+"D5";"DNI/1N4007FL";"DIODE_SOD-123FL";"SOD-123FL";"Diode";"";
"D6";"DNI/B5817WS";"DIODESOD-323F";"SOD-323F";"Diode";"";
"D7";"DNI/4148WS";"DIODESOD-323F";"SOD-323F";"Diode";"";
"D8";"DNI/5V1 Zener 1W";"ZENER-DIODEZD-2.5";"ZDIO-2.5";"Z-Diode";"";
-"D9";"DNI/1N5817";"DIODE-D-2.5";"D-2.5";"DIODE";"";
"D10";"1N5817";"DIODE-D-2.5";"D-2.5";"DIODE";"";
-"D11";"DNI/B5817WS";"DIODESOD-323F";"SOD-323F";"Diode";"";
"E1";"ANT-916-CHP-T";"ANT-916-CHP-T";"XDCR_ANT-916-CHP-T";"868MHz ISM, LoRa, Sensor Networks, SigFox Chip RF Antenna 863MHz ~ 873MHz 0.5dBi Solder Surface Mount Check prices";"";
"E2";"ANT-916-CHP-T";"ANT-916-CHP-T";"XDCR_ANT-916-CHP-T";"868MHz ISM, LoRa, Sensor Networks, SigFox Chip RF Antenna 863MHz ~ 873MHz 0.5dBi Solder Surface Mount Check prices";"";
+"F1";"RHEF100-2";"PTCPTH";"PTC";"Resettable Fuse PTC";"";
+"F2";"DNI/MF-FSML100/8-2";"PTC0603";"0603";"Resettable Fuse PTC";"";
"J1";"CONN_20X2";"CONN_20X2";"2X20";"Multi connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
"J4";"MPU6050";"M08NO_SILK_FEMALE_PTH";"1X08_NO_SILK@1";"Header 8";"";
"J5";"BME280";"M04NO_SILK_ALL_ROUND";"1X04_NO_SILK_ALL_ROUND";"Header 4";"";
@@ -44,10 +43,11 @@
"JP8";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
"JP9";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
"JP10";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
+"JP11";"JUMPER-SMT_2_NC_TRACE_SILK";"JUMPER-SMT_2_NC_TRACE_SILK";"SMT-JUMPER_2_NC_TRACE_SILK";"Normally closed trace jumper";"";
"L1";"13nH";"SMD-FERRITE-CHIP-120-OHM-500MA(0603)";"L0603";"303030001";"";
"L2";"13nH";"SMD-FERRITE-CHIP-120-OHM-500MA(0603)";"L0603";"303030001";"";
-"LED1";"Yellow 5mm";"LED3MM";"LED3MM";"LED";"";
-"LED2";"White 5mm";"LED3MM";"LED3MM";"LED";"";
+"LED1";"White 5mm";"LED3MM";"LED3MM";"LED";"";
+"LED2";"Yellow 5mm";"LED3MM";"LED3MM";"LED";"";
"LED3";"Green 5mm";"LED3MM";"LED3MM";"LED";"";
"LED4";"Blue 5mm";"LED3MM";"LED3MM";"LED";"";
"LED5";"Red 5mm";"LED3MM";"LED3MM";"LED";"";
@@ -88,6 +88,7 @@
"S1";"RA-SPST";"RA-SPST";"RA-SPST";"";"";
"U1";"Raspberry Pi Pico";"RASPBERRY_PICO-NO_DEBUG";"PICO-PKG-NO_DEBUG";"";"";
"U6";"SR105U";"SR_FRS_0W5";"SR_FRS_0W5";"";"";
+"U7";"DRA818V";"DRA818V";"DORJI_DRA818V";"Check availability";"";
"X1";"SC1464-ND";"PG203J";"PG203J";"MIC/HEADPHONE JACK";"";
"X2";"SMA-VERT";"SMA-VERT";"SMA-VERT";"";"";
"X3";"SMA-VERT";"SMA-VERT";"SMA-VERT";"";"";
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0_bottom.png b/hardware/v2.1/cubesatsim-main-v2.1.0_bottom.png
new file mode 100644
index 00000000..c5a4429a
Binary files /dev/null and b/hardware/v2.1/cubesatsim-main-v2.1.0_bottom.png differ
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0_centroid.zip b/hardware/v2.1/cubesatsim-main-v2.1.0_centroid.zip
new file mode 100644
index 00000000..27156c2c
Binary files /dev/null and b/hardware/v2.1/cubesatsim-main-v2.1.0_centroid.zip differ
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0_gerbers.zip b/hardware/v2.1/cubesatsim-main-v2.1.0_gerbers.zip
new file mode 100644
index 00000000..095b9c1a
Binary files /dev/null and b/hardware/v2.1/cubesatsim-main-v2.1.0_gerbers.zip differ
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0_pcb.png b/hardware/v2.1/cubesatsim-main-v2.1.0_pcb.png
new file mode 100644
index 00000000..92150f61
Binary files /dev/null and b/hardware/v2.1/cubesatsim-main-v2.1.0_pcb.png differ
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0_pour.png b/hardware/v2.1/cubesatsim-main-v2.1.0_pour.png
new file mode 100644
index 00000000..5c4dce49
Binary files /dev/null and b/hardware/v2.1/cubesatsim-main-v2.1.0_pour.png differ
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0_schematic.pdf b/hardware/v2.1/cubesatsim-main-v2.1.0_schematic.pdf
new file mode 100644
index 00000000..46ae259f
Binary files /dev/null and b/hardware/v2.1/cubesatsim-main-v2.1.0_schematic.pdf differ
diff --git a/hardware/v2.1/cubesatsim-main-v2.1.0_top.png b/hardware/v2.1/cubesatsim-main-v2.1.0_top.png
new file mode 100644
index 00000000..180a19c5
Binary files /dev/null and b/hardware/v2.1/cubesatsim-main-v2.1.0_top.png differ
diff --git a/hardware/v2.1/cubesatsim-solar-v2.1.0._gerbers.zip b/hardware/v2.1/cubesatsim-solar-v2.1.0._gerbers.zip
new file mode 100644
index 00000000..ed8ec3cb
Binary files /dev/null and b/hardware/v2.1/cubesatsim-solar-v2.1.0._gerbers.zip differ
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1.mnb b/hardware/v2.1/cubesatsim-solar-v2.1.0.mnb
similarity index 100%
rename from hardware/v2.0/cubesatsim-solar-v2.0.1.mnb
rename to hardware/v2.1/cubesatsim-solar-v2.1.0.mnb
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1.mnt b/hardware/v2.1/cubesatsim-solar-v2.1.0.mnt
similarity index 100%
rename from hardware/v2.0/cubesatsim-solar-v2.0.1.mnt
rename to hardware/v2.1/cubesatsim-solar-v2.1.0.mnt
diff --git a/hardware/v2.0/cubesatsim-solar-v2.0.1_bom.csv.txt b/hardware/v2.1/cubesatsim-solar-v2.1.0_bom.csv.txt
similarity index 88%
rename from hardware/v2.0/cubesatsim-solar-v2.0.1_bom.csv.txt
rename to hardware/v2.1/cubesatsim-solar-v2.1.0_bom.csv.txt
index c761de98..200e9fdb 100644
--- a/hardware/v2.0/cubesatsim-solar-v2.0.1_bom.csv.txt
+++ b/hardware/v2.1/cubesatsim-solar-v2.1.0_bom.csv.txt
@@ -38,6 +38,13 @@
"JP17";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
"JP18";"JUMPER-SMT_2_NO_SILK";"JUMPER-SMT_2_NO_SILK";"SMT-JUMPER_2_NO_SILK";"Normally open jumper";"";
"JP19";"";"CONN_01PTH_NO_SILK_YES_STOP";"1X01_NO_SILK";"Single connection point. Often used as Generic Header-pin footprint for 0.1 inch spaced/style header connections";"";
+"JP20";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
+"JP21";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
+"JP22";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
+"JP23";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
+"JP24";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
+"JP25";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
+"JP26";"Micro JST";"M02JST-PTH-VERT";"JST-2-PTH-VERT";"Standard 2-pin 0.1" header. Use with";"";
"R1";"R100";"R-US_R0805";"R0805";"RESISTOR, American symbol";"";
"R2";"R100";"R-US_R0805";"R0805";"RESISTOR, American symbol";"";
"R3";"4.7k";"RESISTORPTH-1/4W-VERT-KIT";"AXIAL-0.1EZ";"Resistor";"";
diff --git a/hardware/v2.1/cubesatsim-solar-v2.1.0_bottom.png b/hardware/v2.1/cubesatsim-solar-v2.1.0_bottom.png
new file mode 100644
index 00000000..ee63809f
Binary files /dev/null and b/hardware/v2.1/cubesatsim-solar-v2.1.0_bottom.png differ
diff --git a/hardware/v2.1/cubesatsim-solar-v2.1.0_centroid.zip b/hardware/v2.1/cubesatsim-solar-v2.1.0_centroid.zip
new file mode 100644
index 00000000..e80ca696
Binary files /dev/null and b/hardware/v2.1/cubesatsim-solar-v2.1.0_centroid.zip differ
diff --git a/hardware/v2.1/cubesatsim-solar-v2.1.0_pcb.png b/hardware/v2.1/cubesatsim-solar-v2.1.0_pcb.png
new file mode 100644
index 00000000..5ab20a76
Binary files /dev/null and b/hardware/v2.1/cubesatsim-solar-v2.1.0_pcb.png differ
diff --git a/hardware/v2.1/cubesatsim-solar-v2.1.0_pour.png b/hardware/v2.1/cubesatsim-solar-v2.1.0_pour.png
new file mode 100644
index 00000000..8dd7bf7a
Binary files /dev/null and b/hardware/v2.1/cubesatsim-solar-v2.1.0_pour.png differ
diff --git a/hardware/v2.1/cubesatsim-solar-v2.1.0_schematic.pdf b/hardware/v2.1/cubesatsim-solar-v2.1.0_schematic.pdf
new file mode 100644
index 00000000..77e59fb7
Binary files /dev/null and b/hardware/v2.1/cubesatsim-solar-v2.1.0_schematic.pdf differ
diff --git a/hardware/v2.1/cubesatsim-solar-v2.1.0_top.png b/hardware/v2.1/cubesatsim-solar-v2.1.0_top.png
new file mode 100644
index 00000000..2c8e3ee3
Binary files /dev/null and b/hardware/v2.1/cubesatsim-solar-v2.1.0_top.png differ
diff --git a/hardware/v2.1/readme.md b/hardware/v2.1/readme.md
new file mode 100644
index 00000000..6e079749
--- /dev/null
+++ b/hardware/v2.1/readme.md
@@ -0,0 +1,33 @@
+
+
+
+
+Here is information about the CubeSatSim PCBs, version v2.1
+
+There are 3 boards: Main, Solar, and Battery
+
+Here's what the files are:
+
+*_gerbers.zip -- All gerber files used to fabricate PCBs along with .TXT drill file
+
+*_schematic.pdf -- Schematic
+
+*_pcb.png -- View of board
+
+*_pour.png -- View of board with fill
+
+*_top.png -- Top view of PCB generated by gerbers
+
+*_bottom.png -- Bottom view of PCB generated by gerbers
+
+*.mnt -- top SMD component placement data
+
+*.mnb -- bottom SMD component placement data
+
+*_bom.csv.txt -- Bill of Materials in CSV format
+
+I use PCBWay to fabricate PCBs https://pcbway.com
+
+Here is the bill of materials: https://CubeSatSim.org/bom
+
+Wiki instructions: https://github.com/alanbjohnston/CubeSatSim/wiki/
diff --git a/install b/install
index b1981204..adbc9fc1 100755
--- a/install
+++ b/install
@@ -261,7 +261,6 @@ elif [[ $(grep 'trixie' /etc/os-release) ]]; then
exit 1
fi
fi
->>>>>>> 9518ba870ed4548fcaf00285b0578312a9a300c2
FILE=/home/pi/CubeSatSim/sim.cfg
if [ -f "$FILE" ]; then
@@ -348,7 +347,6 @@ if [ ! -d "/home/pi/venv" ]; then
sudo /home/pi/venv/bin/pip3 install adafruit-circuitpython-ina219
fi
->>>>>>> 9518ba870ed4548fcaf00285b0578312a9a300c2
sudo apt-get remove pulseaudio -y
@@ -360,11 +358,14 @@ sudo apt-get install -y git libasound2-dev i2c-tools build-essential libgd-dev l
if [ ! -d "/home/pi/direwolf" ]; then
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
@@ -417,19 +418,6 @@ else
echo "b" > .mode
fi
-cd
-
-git clone https://github.com/wb2osz/direwolf.git
-cd direwolf
-mkdir build
-cd build
-cmake ..
-make -j4
-sudo make install
-make install-conf
-
-cd
-
if [ ! -d "/home/pi/pi-power-button" ]; then
cd
@@ -447,6 +435,7 @@ git pull --no-rebase > .updated_p
git checkout master
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."
script/install
FLAG=1
diff --git a/main.c b/main.c
index bcb7d75d..26bb93ff 100644
--- a/main.c
+++ b/main.c
@@ -1660,7 +1660,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];
@@ -2735,6 +2734,8 @@ if (setting == ON) {
pclose(command);
fprintf(stderr,"Turning Battery saver mode OFF\n");
if ((mode == AFSK) || (mode == SSTV) || (mode == CW) || (mode == PACSAT)) {
+ battery_saver_mode = OFF;
+ if ((mode == AFSK) || (mode == SSTV) || (mode == CW)) {
command = popen("echo 'reboot due to turning OFF Safe Mode!' | wall", "r");
pclose(command);
command = popen("sudo reboot now", "r");
diff --git a/main.h b/main.h
index dfa37b2e..058c0012 100644
--- a/main.h
+++ b/main.h
@@ -145,6 +145,21 @@ FILE *image_file;
#define FAIL_AUDIO 11
int failureMode = FAIL_NONE;
+#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;
float amplitude; // = ; // 20000; // 32767/(10%amp+5%amp+100%amp)
diff --git a/motd.txt b/motd.txt
new file mode 100644
index 00000000..09ff7ac9
--- /dev/null
+++ b/motd.txt
@@ -0,0 +1,11 @@
+
+This Raspberry Pi has the CubeSatSim v2.x software installed
+and runs automatically as systemd cubesatsim.service. For more
+information see https://CubeSatSim.org. To update
+to the latest version, enter this command:
+
+CubeSatSim/update
+
+To see configuration options, enter this command:
+
+CubeSatSim/config
diff --git a/sensor_extension.c b/sensor_extension.c
new file mode 100644
index 00000000..5c958a5a
--- /dev/null
+++ b/sensor_extension.c
@@ -0,0 +1,34 @@
+// Use this template for adding additional sensors
+// see example ...
+
+// put your library includes here
+#include
+#include
+
+// 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);
+
+}
diff --git a/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_maxtelemetry.csv b/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_maxtelemetry.csv
new file mode 100644
index 00000000..f99efb04
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_maxtelemetry.csv
@@ -0,0 +1,62 @@
+61,TYPE,FIELD,BITS,UNIT,CONVERSION,MODULE,MODULE_NUM,MODULE_LINE,LINE_TYPE,SHORT_NAME,DESCRIPTION
+0,MAX,Sensor 2,12,integer,1,NONE,6,8,3,Sensor 2,STEM Payload Extra Sensor 2
+1,MAX,Sensor 3,12,integer,1,NONE,6,9,3,Sensor 3,STEM Payload Extra Sensor 3
+2,MAX,BATT_V,12,V,cubesatsim_voltage|FLOAT2,NONE,4,1,3,Battery Voltage,INA219 Battery Voltage
+3,MAX,SatelliteXAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,7,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around X Axis
+4,MAX,SatelliteYAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,8,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Y Axis
+5,MAX,SatelliteZAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,9,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Z Axis
+6,MAX,BATT_I,12,mA,cubesatsim_current,NONE,4,2,3,Battery Current,INA219 Battery Current
+7,MAX,Temperature,12,C,cubesatsim_temperature,NONE,6,2,3,BME280 Temp,BME280 STEM Payload sensor temperature
+8,MAX,posXv,12,V,cubesatsim_voltage|FLOAT2,NONE,7,1,3,Voltage,INA219 +X solar panel Voltage
+9,MAX,posYv,12,V,cubesatsim_voltage|FLOAT2,NONE,8,1,3,Voltage,INA219 +Y solar panel Voltage
+10,MAX,posZv,12,V,cubesatsim_voltage|FLOAT2,NONE,9,1,3,Voltage,INA219 +Z solar panel Voltage
+11,MAX,negXv,12,V,cubesatsim_voltage|FLOAT2,NONE,10,1,3,Voltage,INA219 -X solar panel Voltage
+12,MAX,negYv,12,V,cubesatsim_voltage|FLOAT2,NONE,11,1,3,Voltage,INA219 -Y solar panel Voltage
+13,MAX,negZv,12,V,cubesatsim_voltage|FLOAT2,NONE,12,1,3,Voltage,INA219 -Z solar panel Voltage
+14,MAX,posXi,12,mA,cubesatsim_current,NONE,7,2,3,Current,INA219 +X solar panel Current
+15,MAX,posYi,12,mA,cubesatsim_current,NONE,8,2,3,Current,INA219 +Y solar panel Current
+16,MAX,posZi,12,mA,cubesatsim_current,NONE,9,2,3,Current,INA219 +Z solar panel Current
+17,MAX,negXi,12,mA,cubesatsim_current,NONE,10,2,3,Current,INA219 -X solar panel Current
+18,MAX,negYi,12,mA,cubesatsim_current,NONE,11,2,3,Current,INA219 -Y solar panel Current
+19,MAX,negZi,12,mA,cubesatsim_current,NONE,12,2,3,Current,INA219 -Z solar panel Current
+20,MAX,BATT2_V,12,V,cubesatsim_voltage|FLOAT2,NONE,5,1,3,Battery 2 Voltage,INA219 Battery 2 Voltage
+21,MAX,spin,12,rpm,cubesatsim_rpm,NONE,3,1,3,Spacecraft Spin,Calculated spin rate using solar cells
+22,MAX,Pressure,12,hPa,cubesatsim_pressure,NONE,6,3,3,BME280 Pressure,BME280 STEM Payload sensor pressure
+23,MAX,Altitude,12,m,cubesatsim_altitude|INT,NONE,6,4,3,BME280 Altitude,BME280 STEM Payload sensor altitude
+24,MAX,Resets,12,-,12,NONE,3,2,3,Reset Count, Software Reset Count
+25,MAX,rssi,12,dBm,cubesatsim_rssi|INT,NONE,1,1,3,RSSI,Received Signal Strength Indication
+26,MAX,IHUcpuTemp,12,C,cubesatsim_temperature,NONE,2,1,3,IHU Temp (Pi),Internal temperature of IHU from Pi
+27,MAX,SatelliteXAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,7,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around X Axis
+28,MAX,SatelliteYAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,8,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Y Axis
+29,MAX,SatelliteZAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,9,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Z Axis
+30,MAX,Humidity,12,%,cubesatsim_temperature,NONE,6,5,3,BME280 Humidity,BME280 Humidity
+31,MAX,BAT2_I,12,mA,cubesatsim_current,NONE,5,2,3,Battery 2 Current,INA219 Battery 2 Current
+32,MAX,DiodeTemp,12,C,cubesatsim_rpm,NONE,6,6,3,Diode Temp,STEM Payload Diode Temperature
+33,MAX,Sensor 1,12,integer,1,NONE,6,7,3,Sensor 1,STEM Payload Extra Sensor 1
+34,MAX,STEMPayloadStatus,1,-,17,NONE,6,1,0,STEM Payload Status, STEM Payload STEM Payload board failure Indicator
+35,MAX,SafeMode,1,-,STATUS_ON_OFF,NONE,3,2,0,Safe Mode, Safe Mode (Low Battery Voltage)
+36,MAX,SimulatedTelemetry,1,-,STATUS_ON_OFF,NONE,3,4,0,Simulated Telemetry,Simulated Telemetry Indicator
+37,MAX,PayloadStatus1,1,-,17,NONE,6,8,0,Exp 3,STEM Payload status 1 failure indicator
+38,MAX,I2CBus0Failure,1,-,17,NONE,2,2,0,I2C Bus 0,I2C bus 0 failure indicator
+39,MAX,I2CBus1Failure,1,-,17,NONE,2,2,0,I2C Bus 1,I2C bus 1 failure indicator
+40,MAX,I2CBus3Failure,1,-,17,NONE,2,3,0,I2C Bus 3,I2C bus 3 failure indicator
+41,MAX,CameraFailure,1,-,17,NONE,2,4,0,Camera,Camera failure indicator
+42,MAX,GroundCommands,4,-,1,NONE,3,3,0,Ground Commands,Number of ground commands received
+43,MAX,RxAntenna,1,-,16,NONE,1,3,0,RX Antenna,Receive antenna status
+44,MAX,TxAntenna,1,-,16,NONE,1,2,0,TX Antenna,Transmit antenna status
+45,MAX,C2CStatus,2,-,COMMAND_STATUS,NONE,3,5,0,Command Control, Command & Control Status
+46,MAX,ICR3VProt,12,V,43,NONE,7,2,3,3V Prot,ICR 3V Proteted
+47,MAX,ICR2dot5V,12,V,43,NONE,7,3,3,2.5V,ICR 2.5V
+48,MAX,ICR2dot5VProt,12,V,43,NONE,7,4,3,2.5V Prot,ICR 2.5V Protected
+49,MAX,rf6,12,-,0,NONE,0,0,0,None,None
+50,MAX,rf7,12,-,0,NONE,0,0,0,None,None
+51,MAX,MuxTest,12,V,43,NONE,7,5,3,Sensor Power,Sensor Power Voltage at the ICR
+52,MAX,LtVGACtl,12,V,42,NONE,1,4,3,VGA Control,Control Voltage to the Variable Gain Amplifier (VGA)
+53,MAX,pad,4,-,34,NONE,0,0,0,None,Unused
+54,MAX,IHUdiagData,32,-,18,NONE,3,2,0,Diagnostic Info,Diagnostic Data on IHU Performance
+55,MAX,pad1,1,-,0,NONE,0,0,0,NONE,Filler
+56,MAX,wodSize,8,000s,36,NONE,3,3,0,WOD Stored,Number of WOD data payloads kept for each of Science and Housekeeping. In hundreds
+57,MAX,swCmds,32,-,35,NONE,7,6,0,Diagnostic,ICR Diagnostic information
+58,MAX,hwCmdCnt,6,-,1,NONE,7,7,0,HW Command Count,Number of hardware commands since last reset
+59,MAX,swCmdCnt,6,-,1,NONE,7,8,0,SW Command Count,Number of software commands since last reset
+60,MAX,pad2,27,-,0,NONE,0,0,0,NONE,Filler byets
diff --git a/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_mintelemetry.csv b/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_mintelemetry.csv
new file mode 100644
index 00000000..7d69fce6
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_mintelemetry.csv
@@ -0,0 +1,62 @@
+61,TYPE,FIELD,BITS,UNIT,CONVERSION,MODULE,MODULE_NUM,MODULE_LINE,LINE_TYPE,SHORT_NAME,DESCRIPTION
+0,MIN,Sensor 2,12,integer,1,NONE,6,8,3,Sensor 2,STEM Payload Extra Sensor 2
+1,MIN,Sensor 3,12,integer,1,NONE,6,9,3,Sensor 3,STEM Payload Extra Sensor 3
+2,MIN,BATT_V,12,V,cubesatsim_voltage|FLOAT2,NONE,4,1,3,Battery Voltage,INA219 Battery Voltage
+3,MIN,SatelliteXAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,7,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around X Axis
+4,MIN,SatelliteYAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,8,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Y Axis
+5,MIN,SatelliteZAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,9,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Z Axis
+6,MIN,BATT_I,12,mA,cubesatsim_current,NONE,4,2,3,Battery Current,INA219 Battery Current
+7,MIN,Temperature,12,C,cubesatsim_temperature,NONE,6,2,3,BME280 Temp,BME280 STEM Payload sensor temperature
+8,MIN,posXv,12,V,cubesatsim_voltage|FLOAT2,NONE,7,1,3,Voltage,INA219 +X solar panel Voltage
+9,MIN,posYv,12,V,cubesatsim_voltage|FLOAT2,NONE,8,1,3,Voltage,INA219 +Y solar panel Voltage
+10,MIN,posZv,12,V,cubesatsim_voltage|FLOAT2,NONE,9,1,3,Voltage,INA219 +Z solar panel Voltage
+11,MIN,negXv,12,V,cubesatsim_voltage|FLOAT2,NONE,10,1,3,Voltage,INA219 -X solar panel Voltage
+12,MIN,negYv,12,V,cubesatsim_voltage|FLOAT2,NONE,11,1,3,Voltage,INA219 -Y solar panel Voltage
+13,MIN,negZv,12,V,cubesatsim_voltage|FLOAT2,NONE,12,1,3,Voltage,INA219 -Z solar panel Voltage
+14,MIN,posXi,12,mA,cubesatsim_current,NONE,7,2,3,Current,INA219 +X solar panel Current
+15,MIN,posYi,12,mA,cubesatsim_current,NONE,8,2,3,Current,INA219 +Y solar panel Current
+16,MIN,posZi,12,mA,cubesatsim_current,NONE,9,2,3,Current,INA219 +Z solar panel Current
+17,MIN,negXi,12,mA,cubesatsim_current,NONE,10,2,3,Current,INA219 -X solar panel Current
+18,MIN,negYi,12,mA,cubesatsim_current,NONE,11,2,3,Current,INA219 -Y solar panel Current
+19,MIN,negZi,12,mA,cubesatsim_current,NONE,12,2,3,Current,INA219 -Z solar panel Current
+20,MIN,BATT2_V,12,V,cubesatsim_voltage|FLOAT2,NONE,5,1,3,Battery 2 Voltage,INA219 Battery 2 Voltage
+21,MIN,spin,12,rpm,cubesatsim_rpm,NONE,3,1,3,Spacecraft Spin,Calculated spin rate using solar cells
+22,MIN,Pressure,12,hPa,cubesatsim_pressure,NONE,6,3,3,BME280 Pressure,BME280 STEM Payload sensor pressure
+23,MIN,Altitude,12,m,cubesatsim_altitude|INT,NONE,6,4,3,BME280 Altitude,BME280 STEM Payload sensor altitude
+24,MIN,Resets,12,-,12,NONE,3,2,3,Reset Count, Software Reset Count
+25,MIN,rssi,12,dBm,cubesatsim_rssi|INT,NONE,1,1,3,RSSI,Received Signal Strength Indication
+26,MIN,IHUcpuTemp,12,C,cubesatsim_temperature,NONE,2,1,3,IHU Temp (Pi),Internal temperature of IHU from Pi
+27,MIN,SatelliteXAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,7,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around X Axis
+28,MIN,SatelliteYAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,8,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Y Axis
+29,MIN,SatelliteZAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,9,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Z Axis
+30,MIN,Humidity,12,%,cubesatsim_temperature,NONE,6,5,3,BME280 Humidity,BME280 Humidity
+31,MIN,BAT2_I,12,mA,cubesatsim_current,NONE,5,2,3,Battery 2 Current,INA219 Battery 2 Current
+32,MIN,DiodeTemp,12,C,cubesatsim_rpm,NONE,6,6,3,Diode Temp,STEM Payload Diode Temperature
+33,MIN,Sensor 1,12,integer,1,NONE,6,7,3,Sensor 1,STEM Payload Extra Sensor 1
+34,MIN,STEMPayloadStatus,1,-,17,NONE,6,1,0,STEM Payload Status, STEM Payload STEM Payload board failure Indicator
+35,MIN,SafeMode,1,-,STATUS_ON_OFF,NONE,3,2,0,Safe Mode, Safe Mode (Low Battery Voltage)
+36,MIN,SimulatedTelemetry,1,-,STATUS_ON_OFF,NONE,3,4,0,Simulated Telemetry,Simulated Telemetry Indicator
+37,MIN,PayloadStatus1,1,-,17,NONE,6,8,0,Exp 3,STEM Payload status 1 failure indicator
+38,MIN,I2CBus0Failure,1,-,17,NONE,2,2,0,I2C Bus 0,I2C bus 0 failure indicator
+39,MIN,I2CBus1Failure,1,-,17,NONE,2,2,0,I2C Bus 1,I2C bus 1 failure indicator
+40,MIN,I2CBus3Failure,1,-,17,NONE,2,3,0,I2C Bus 3,I2C bus 3 failure indicator
+41,MIN,CameraFailure,1,-,17,NONE,2,4,0,Camera,Camera failure indicator
+42,MIN,GroundCommands,4,-,1,NONE,3,3,0,Ground Commands,Number of ground commands received
+43,MIN,RxAntenna,1,-,16,NONE,1,3,0,RX Antenna,Receive antenna status
+44,MIN,TxAntenna,1,-,16,NONE,1,2,0,TX Antenna,Transmit antenna status
+45,MIN,C2CStatus,2,-,COMMAND_STATUS,NONE,3,5,0,Command Control, Command & Control Status
+46,MIN,ICR3VProt,12,V,43,NONE,7,2,3,3V Prot,ICR 3V Proteted
+47,MIN,ICR2dot5V,12,V,43,NONE,7,3,3,2.5V,ICR 2.5V
+48,MIN,ICR2dot5VProt,12,V,43,NONE,7,4,3,2.5V Prot,ICR 2.5V Protected
+49,MIN,rf6,12,-,0,NONE,0,0,0,None,None
+50,MIN,rf7,12,-,0,NONE,0,0,0,None,None
+51,MIN,MuxTest,12,V,43,NONE,7,5,3,Sensor Power,Sensor Power Voltage at the ICR
+52,MIN,LtVGACtl,12,V,42,NONE,1,4,3,VGA Control,Control Voltage to the Variable Gain Amplifier (VGA)
+53,MIN,pad,4,-,34,NONE,0,0,0,None,Unused
+54,MIN,IHUdiagData,32,-,18,NONE,3,2,0,Diagnostic Info,Diagnostic Data on IHU Performance
+55,MIN,pad1,1,-,0,NONE,0,0,0,NONE,Filler
+56,MIN,wodSize,8,000s,36,NONE,3,3,0,WOD Stored,Number of WOD data payloads kept for each of Science and Housekeeping. In hundreds
+57,MIN,swCmds,32,-,35,NONE,7,6,0,Diagnostic,ICR Diagnostic information
+58,MIN,hwCmdCnt,6,-,1,NONE,7,7,0,HW Command Count,Number of hardware commands since last reset
+59,MIN,swCmdCnt,6,-,1,NONE,7,8,0,SW Command Count,Number of software commands since last reset
+60,MIN,pad2,27,-,0,NONE,0,0,0,NONE,Filler
diff --git a/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_rttelemetry.csv b/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_rttelemetry.csv
new file mode 100644
index 00000000..9fdaed04
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/CubeSatSim_PSK_rttelemetry.csv
@@ -0,0 +1,63 @@
+62,TYPE,FIELD,BITS,UNIT,CONVERSION,MODULE,MODULE_NUM,MODULE_LINE,LINE_TYPE,SHORT_NAME,DESCRIPTION
+0,realTime,Sensor 2,12,integer,1,Experiments,6,8,3,Sensor 2,STEM Payload Extra Sensor 2
+1,realTime,Sensor 3,12,integer,1,Experiments,6,9,3,Sensor 3,STEM Payload Extra Sensor 3
+2,realTime,BATT_V,12,V,cubesatsim_voltage|FLOAT2,Battery,4,1,3,Battery Voltage,INA219 Battery Voltage
+3,realTime,SatelliteXAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,+X Panel,7,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around X Axis
+4,realTime,SatelliteYAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,+Y Panel,8,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Y Axis
+5,realTime,SatelliteZAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,+Z Panel,9,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Z Axis
+6,realTime,BATT_I,12,mA,cubesatsim_current,Battery,4,2,3,Battery Current,INA219 Battery Current
+7,realTime,Temperature,12,C,cubesatsim_temperature,Experiments,6,2,3,BME280 Temp,BME280 STEM Payload sensor temperature
+8,realTime,posXv,12,V,cubesatsim_voltage|FLOAT2,+X Panel,7,1,3,Voltage,INA219 +X solar panel Voltage
+9,realTime,posYv,12,V,cubesatsim_voltage|FLOAT2,+Y Panel,8,1,3,Voltage,INA219 +Y solar panel Voltage
+10,realTime,posZv,12,V,cubesatsim_voltage|FLOAT2,+Z Panel,9,1,3,Voltage,INA219 +Z solar panel Voltage
+11,realTime,negXv,12,V,cubesatsim_voltage|FLOAT2,-X Panel,10,1,3,Voltage,INA219 -X solar panel Voltage
+12,realTime,negYv,12,V,cubesatsim_voltage|FLOAT2,-Y Panel,11,1,3,Voltage,INA219 -Y solar panel Voltage
+13,realTime,negZv,12,V,cubesatsim_voltage|FLOAT2,-Z Panel,12,1,3,Voltage,INA219 -Z solar panel Voltage
+14,realTime,posXi,12,mA,cubesatsim_current,+X Panel,7,2,3,Current,INA219 +X solar panel Current
+15,realTime,posYi,12,mA,cubesatsim_current,+Y Panel,8,2,3,Current,INA219 +Y solar panel Current
+16,realTime,posZi,12,mA,cubesatsim_current,+Z Panel,9,2,3,Current,INA219 +Z solar panel Current
+17,realTime,negXi,12,mA,cubesatsim_current,-X Panel,10,2,3,Current,INA219 -X solar panel Current
+18,realTime,negYi,12,mA,cubesatsim_current,-Y Panel,11,2,3,Current,INA219 -Y solar panel Current
+19,realTime,negZi,12,mA,cubesatsim_current,-Z Panel,12,2,3,Current,INA219 -Z solar panel Current
+20,realTime,BATT2_V,12,V,cubesatsim_voltage|FLOAT2,Battery2,5,1,3,Battery2 Voltage,INA219 Battery2 Voltage
+21,realTime,spin,12,rpm,cubesatsim_rpm,Computer Software,3,1,3,Spacecraft Spin,Calculated spin rate using solar cells
+22,realTime,Pressure,12,hPa,cubesatsim_pressure,Experiments,6,3,3,BME280 Pressure,BME280 STEM Payload sensor pressure
+23,realTime,Altitude,12,m,cubesatsim_altitude|INT,Experiments,6,4,3,BME280 Altitude,BME280 STEM Payload sensor altitude
+24,realTime,Resets,12,-,12,NONE,3,2,3,Reset Count, Software Reset Count
+25,realTime,rssi,12,dBm,cubesatsim_rssi|INT,Radio,1,1,3,RSSI,Received Signal Strength Indication
+26,realTime,IHUcpuTemp,12,C,cubesatsim_temperature,Computer Hardware,2,1,3,IHU Temp (Pi),Internal temperature of IHU from Pi
+27,realTime,SatelliteXAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,+X Panel,7,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around X Axis
+28,realTime,SatelliteYAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,+Y Panel,8,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Y Axis
+29,realTime,SatelliteZAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,+Z Panel,9,3,3,Rotation,STEM Payload Board MPU6050 Angular veolcity around Z Axis
+30,realTime,Humidity,12,%,cubesatsim_temperature,Experiments,6,5,3,BME280 Humidity,BME280 Humidity
+31,realTime,BAT2_I,12,mA,cubesatsim_current,Battery2,5,2,3,Battery2 Current,INA219 Battery2 Current
+32,realTime,DiodeTemp,12,C,cubesatsim_rpm,Experiments,6,6,3,Diode Temp,STEM Payload Diode Temperature
+33,realTime,Sensor 1,12,integer,1,Experiments,6,7,3,Sensor 1,STEM Payload Extra Sensor 1
+34,realTime,STEMPayloadStatus,1,-,17,Experiments,6,1,0,STEM Payload Status, STEM Payload STEM Payload board failure Indicator
+35,realTime,SafeMode,1,-,STATUS_ON_OFF,Computer Software,3,2,0,Safe Mode, Safe Mode (Low Battery Voltage)
+36,realTime,SimulatedTelemetry,1,-,STATUS_ON_OFF,Computer Software,3,4,0,Simulated Telemetry,Simulated Telemetry Indicator
+37,realTime,PayloadStatus1,1,-,17,NONE,6,8,0,Exp 3,STEM Payload status 1 failure indicator
+38,realTime,I2CBus0Failure,1,-,17,NONE,2,2,0,I2C Bus 0,I2C bus 0 failure indicator
+39,realTime,I2CBus1Failure,1,-,17,Computer Hardware,2,2,0,I2C Bus 1,I2C bus 1 failure indicator
+40,realTime,I2CBus3Failure,1,-,17,Computer Hardware,2,3,0,I2C Bus 3,I2C bus 3 failure indicator
+41,realTime,CameraFailure,1,-,17,Computer Hardware,2,4,0,Camera,Camera failure indicator
+42,realTime,GroundCommands,4,-,1,NONE,0,0,0,Ground Commands,Number of ground commands received
+43,realTime,RxAntenna,1,-,16,Radio,1,3,0,RX Antenna,Receive antenna status
+44,realTime,TxAntenna,1,-,16,Radio,1,2,0,TX Antenna,Transmit antenna status
+45,realTime,C2CStatus,2,-,COMMAND_STATUS,Computer Software,3,5,0,Command Control, Command & Control Status
+46,realTime,GroundCommands2,10,-,1,Computer Software,3,3,0,Ground Commands,Number of ground commands received
+47,realTime,ICR3VProt,12,V,43,NONE,7,2,3,3V Prot,ICR 3V Proteted
+48,realTime,ICR2dot5V,12,V,43,NONE,7,3,3,2.5V,ICR 2.5V
+49,realTime,ICR2dot5VProt,12,V,43,NONE,7,4,3,2.5V Prot,ICR 2.5V Protected
+50,realTime,rf6,12,-,0,NONE,0,0,0,None,None
+51,realTime,rf7,12,-,0,NONE,0,0,0,None,None
+52,realTime,MuxTest,12,V,43,NONE,7,5,3,Sensor Power,Sensor Power Voltage at the ICR
+53,realTime,LtVGACtl,12,V,42,NONE,1,4,3,VGA Control,Control Voltage to the Variable Gain Amplifier (VGA)
+54,realTime,pad,4,-,34,NONE,0,0,0,None,Unused
+55,realTime,IHUdiagData,32,-,18,NONE,3,2,0,Diagnostic Info,Diagnostic Data on IHU Performance
+56,realTime,pad1,1,-,0,NONE,0,0,0,NONE,Filler
+57,realTime,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,realTime,swCmds,32,-,35,NONE,7,6,0,Diagnostic,ICR Diagnostic information
+59,realTime,hwCmdCnt,6,-,1,NONE,7,7,0,HW Command Count,Number of hardware commands since last reset
+60,realTime,swCmdCnt,6,-,1,NONE,7,8,0,SW Command Count,Number of software commands since last reset
+61,realTime,pad2,17,-,0,NONE,0,0,0,NONE,Filler
diff --git a/spacecraft/FoxTelem_1.13i/CubeSatSim_conversion_curves.csv b/spacecraft/FoxTelem_1.13i/CubeSatSim_conversion_curves.csv
new file mode 100644
index 00000000..38f4351b
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/CubeSatSim_conversion_curves.csv
@@ -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,10,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
diff --git a/spacecraft/FoxTelem_1.13i/CubeSatSim_maxtelemetry.csv b/spacecraft/FoxTelem_1.13i/CubeSatSim_maxtelemetry.csv
new file mode 100644
index 00000000..9bcc637e
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/CubeSatSim_maxtelemetry.csv
@@ -0,0 +1,48 @@
+47,TYPE,FIELD,BITS,UNIT,CONVERSION,MODULE,MODULE_NUM,MODULE_LINE,LINE_TYPE,SHORT_NAME,DESCRIPTION
+0,MAX,Sensor 2,12,integer,1,NONE,6,8,3,Sensor 2,STEM Payload Extra Sensor 2
+1,MAX,Sensor 3,12,integer,1,NONE,6,9,3,Sensor 3,STEM Payload Extra Sensor 3
+2,MAX,BATT_V,12,V,cubesatsim_voltage|FLOAT2,NONE,4,1,3,Battery Voltage,INA219 Battery Voltage
+3,MAX,SatelliteXAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,7,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around X Axis
+4,MAX,SatelliteYAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,8,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Y Axis
+5,MAX,SatelliteZAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,9,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Z Axis
+6,MAX,BATT_I,12,mA,cubesatsim_current,NONE,4,2,3,Battery Current,INA219 Battery Current
+7,MAX,Temperature,12,C,cubesatsim_temperature,NONE,6,2,3,BME280 Temp,STEM Payload Sensor BME280 Temperature
+8,MAX,PANEL_PLUS_X_V,12,V,cubesatsim_voltage|FLOAT2,NONE,7,1,3,Voltage,INA219 +X Panel Voltage
+9,MAX,PANEL_MINUS_X_V,12,V,cubesatsim_voltage|FLOAT2,NONE,10,1,3,Voltage,INA219 -X Panel Voltage
+10,MAX,PANEL_PLUS_Y_V,12,V,cubesatsim_voltage|FLOAT2,NONE,8,1,3,Voltage,INA219 +Y Panel Voltage
+11,MAX,PANEL_MINUS_Y_V,12,V,cubesatsim_voltage|FLOAT2,NONE,11,1,3,Voltage,INA219 -Y Panel Voltage
+12,MAX,PANEL_PLUS_Z_V,12,V,cubesatsim_voltage|FLOAT2,NONE,9,1,3,Voltage,INA219 +Z Panel Voltage
+13,MAX,PANEL_MINUS_Z_V,12,V,cubesatsim_voltage|FLOAT2,NONE,12,1,3,Voltage,INA219 -Z Panel Voltage
+14,MAX,PANEL_PLUS_X_I,12,mA,cubesatsim_current,NONE,7,2,3,Current,INA219 +X Panel Current
+15,MAX,PANEL_MINUS_X_I,12,mA,cubesatsim_current,NONE,10,2,3,Current,INA219 -X Panel Current
+16,MAX,PANEL_PLUS_Y_I,12,mA,cubesatsim_current,NONE,8,2,3,Current,INA219 +Y Panel Current
+17,MAX,PANEL_MINUS_Y_I,12,mA,cubesatsim_current,NONE,11,2,3,Current,INA219 -Y Panel Current
+18,MAX,PANEL_PLUS_Z_I,12,mA,cubesatsim_current,NONE,9,2,3,Current,INA219 +Z Panel Current
+19,MAX,PANEL_MINUS_Z_I,12,mA,cubesatsim_current,NONE,12,2,3,Current,INA219 -Z Panel Current
+20,MAX,BATT2_V,12,V,cubesatsim_voltage|FLOAT2,NONE,5,1,3,Battery 2 Voltage,INA219 Battery 2 Voltage
+21,MAX,SPIN,12,rpm,cubesatsim_rpm,NONE,3,1,3,Spacecraft Spin,Calculated spin rate using solar cells
+22,MAX,Pressure,12,hPa,cubesatsim_pressure,NONE,6,3,3,BME280 Pressure,STEM Payload Sensor BME280 Pressure
+23,MAX,Altitude,12,m,cubesatsim_altitude|INT,NONE,6,4,3,BME280 Altitude,STEM Payload Sensor BME280 Altitude
+24,MAX,Resets,12,-,12,NONE,3,2,3,Reset Count, Software Reset Count
+25,MAX,RSSI,12,dBm,cubesatsim_rssi|INT,NONE,1,1,3,RSSI,Received Signal Strength Indication
+26,MAX,IHUTemperature,12,C,cubesatsim_temperature,NONE,2,1,3,IHU Temp (Pi),Internal Temperature of Pi IHU
+27,MAX,SatelliteXAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,7,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around X Axis
+28,MAX,SatelliteYAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,8,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around Y Axis
+29,MAX,SatelliteZAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,9,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around Z Axis
+30,MAX,Humidity,12,%,cubesatsim_temperature,NONE,6,5,3,BME280 Humidity,STEM Payload Sensor BME280 Humidity
+31,MAX,BATT2_I,12,mA,cubesatsim_current,NONE,5,2,3,Battery 2 Current,INA219 Battery 2 Current
+32,MAX,DiodeTemp,12,C,cubesatsim_rpm,NONE,6,6,3,Diode Temp,STEM Payload Diode Temperature
+33,MAX,Sensor 1,12,integer,1,NONE,6,7,3,Sensor 1,STEM Payload Extra Sensor 1
+34,MAX,STEMPayloadStatus,1,-,17,NONE,6,1,0,STEM Payload Status,STEM Payload Board Status
+35,MAX,SafeMode,1,-,STATUS_ON_OFF,NONE,3,2,0,Safe Mode, Safe Mode (Low Battery Voltage)
+36,MAX,SimulatedTelemetry,1,-,STATUS_ON_OFF,NONE,3,4,0,Simulated Telemetry, Simulated Telemetry Indicator
+37,MAX,PayloadStatus1,1,-,17,NONE,0,0,0,Exp 3,STEM Payload status 1 failure indicator
+38,MAX,I2CBus0Failure,1,-,17,NONE,2,2,0,I2C Bus 0,I2C bus 0 failure indicator
+39,MAX,I2CBus1Failure,1,-,17,NONE,2,2,0,I2C Bus 1,I2C bus 1 failure indicator
+40,MAX,I2CBus3Failure,1,-,17,NONE,2,3,0,I2C Bus 3,I2C bus 3 failure indicator
+41,MAX,CameraFailure,1,-,17,NONE,2,4,0,Camera,Camera failure indicator
+42,MAX,GroundCommands,4,-,1,NONE,3,3,0,Ground Commands,Number of ground commands received
+43,MAX,RXAntenna,1,-,16,NONE,1,3,0,RX Antenna,Receive antenna status
+44,MAX,TXAntenna,1,-,16,NONE,1,2,0,TX Antenna,Transmit antenna status
+45,MAX,C2CStatus,2,-,COMMAND_STATUS,NONE,3,5,0,Command Control, Command & Control Status
+46,MAX,Pad,56,-,0,NONE,0,0,0,NONE,NONE
diff --git a/spacecraft/FoxTelem_1.13i/CubeSatSim_mintelemetry.csv b/spacecraft/FoxTelem_1.13i/CubeSatSim_mintelemetry.csv
new file mode 100644
index 00000000..5d6627a9
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/CubeSatSim_mintelemetry.csv
@@ -0,0 +1,48 @@
+47,TYPE,FIELD,BITS,UNIT,CONVERSION,MODULE,MODULE_NUM,MODULE_LINE,LINE_TYPE,SHORT_NAME,DESCRIPTION
+0,MIN,Sensor 2,12,integer,1,NONE,6,8,3,Sensor 2,STEM Payload Extra Sensor 2
+1,MIN,Sensor 3,12,integer,1,NONE,6,9,3,Sensor 3,STEM Payload Extra Sensor 3
+2,MIN,BATT_V,12,V,cubesatsim_voltage|FLOAT2,NONE,4,1,3,Battery Voltage,INA219 Battery Voltage
+3,MIN,SatelliteXAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,7,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around X Axis
+4,MIN,SatelliteYAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,8,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Y Axis
+5,MIN,SatelliteZAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,NONE,9,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Z Axis
+6,MIN,BATT_I,12,mA,cubesatsim_current,NONE,4,2,3,Battery Current,INA219 Battery Current
+7,MIN,Temperature,12,C,cubesatsim_temperature,NONE,6,2,3,BME280 Temp,STEM Payload Sensor BME280 Temperature
+8,MIN,PANEL_PLUS_X_V,12,V,cubesatsim_voltage|FLOAT2,NONE,7,1,3,Voltage,INA219 +X Panel Voltage
+9,MIN,PANEL_MINUS_X_V,12,V,cubesatsim_voltage|FLOAT2,NONE,10,1,3,Voltage,INA219 -X Panel Voltage
+10,MIN,PANEL_PLUS_Y_V,12,V,cubesatsim_voltage|FLOAT2,NONE,8,1,3,Voltage,INA219 +Y Panel Voltage
+11,MIN,PANEL_MINUS_Y_V,12,V,cubesatsim_voltage|FLOAT2,NONE,11,1,3,Voltage,INA219 -Y Panel Voltage
+12,MIN,PANEL_PLUS_Z_V,12,V,cubesatsim_voltage|FLOAT2,NONE,9,1,3,Voltage,INA219 +Z Panel Voltage
+13,MIN,PANEL_MINUS_Z_V,12,V,cubesatsim_voltage|FLOAT2,NONE,12,1,3,Voltage,INA219 -Z Panel Voltage
+14,MIN,PANEL_PLUS_X_I,12,mA,cubesatsim_current,NONE,7,2,3,Current,INA219 +X Panel Current
+15,MIN,PANEL_MINUS_X_I,12,mA,cubesatsim_current,NONE,10,2,3,Current,INA219 -X Panel Current
+16,MIN,PANEL_PLUS_Y_I,12,mA,cubesatsim_current,NONE,8,2,3,Current,INA219 +Y Panel Current
+17,MIN,PANEL_MINUS_Y_I,12,mA,cubesatsim_current,NONE,11,2,3,Current,INA219 -Y Panel Current
+18,MIN,PANEL_PLUS_Z_I,12,mA,cubesatsim_current,NONE,9,2,3,Current,INA219 +Z Panel Current
+19,MIN,PANEL_MINUS_Z_I,12,mA,cubesatsim_current,NONE,12,2,3,Current,INA219 -Z Panel Current
+20,MIN,BATT2_V,12,V,cubesatsim_voltage|FLOAT2,NONE,5,1,3,Battery 2 Voltage,INA219 Battery 2 Voltage
+21,MIN,SPIN,12,rpm,cubesatsim_rpm,NONE,3,1,3,Spacecraft Spin,Calculated spin rate using solar cells
+22,MIN,Pressure,12,hPa,cubesatsim_pressure,NONE,6,3,3,BME280 Pressure,STEM Payload Sensor BME280 Pressure
+23,MIN,Altitude,12,m,cubesatsim_altitude|INT,NONE,6,4,3,BME280 Altitude,STEM Payload Sensor BME280 Altitude
+24,MIN,Resets,12,-,12,NONE,3,2,3,Reset Count, Software Reset Count
+25,MIN,RSSI,12,dBm,cubesatsim_rssi|INT,NONE,1,1,3,RSSI,Received Signal Strength Indication
+26,MIN,IHUTemperature,12,C,cubesatsim_temperature,NONE,2,1,3,IHU Temp (Pi),Internal Temperature of Pi IHU
+27,MIN,SatelliteXAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,7,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around X Axis
+28,MIN,SatelliteYAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,8,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around Y Axis
+29,MIN,SatelliteZAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,NONE,9,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around Z Axis
+30,MIN,Humidity,12,%,cubesatsim_temperature,NONE,6,5,3,BME280 Humidity,STEM Payload Sensor BME280 Humidity
+31,MIN,BATT2_I,12,mA,cubesatsim_current,NONE,5,2,3,Battery 2 Current,INA219 Battery 2 Current
+32,MIN,DiodeTemp,12,C,cubesatsim_rpm,NONE,6,6,3,Diode Temp,STEM Payload Diode Temperature
+33,MIN,Sensor 1,12,integer,1,NONE,6,7,3,Sensor 1,STEM Payload Extra Sensor 1
+34,MIN,STEMPayloadStatus,1,-,17,NONE,6,1,0,STEM Payload Status,STEM Payload Board Status
+35,MIN,SafeMode,1,-,STATUS_ON_OFF,NONE,3,2,0,Safe Mode, Safe Mode (Low Battery Voltage)
+36,MIN,SimulatedTelemetry,1,-,STATUS_ON_OFF,NONE,3,4,0,Simulated Telemetry, Simulated Telemetry Indicator
+37,MIN,PayloadStatus1,1,-,17,NONE,0,0,0,Exp 3,STEM Payload status 1 failure indicator
+38,MIN,I2CBus0Failure,1,-,17,NONE,2,2,0,I2C Bus 0,I2C bus 0 failure indicator
+39,MIN,I2CBus1Failure,1,-,17,NONE,2,2,0,I2C Bus 1,I2C bus 1 failure indicator
+40,MIN,I2CBus3Failure,1,-,17,NONE,2,3,0,I2C Bus 3,I2C bus 3 failure indicator
+41,MIN,CameraFailure,1,-,17,NONE,2,4,0,Camera,Camera failure indicator
+42,MIN,GroundCommands,4,-,1,NONE,3,3,0,Ground Commands,Number of ground commands received
+43,MIN,RXAntenna,1,-,16,NONE,1,3,0,RX Antenna,Receive antenna status
+44,MIN,TXAntenna,1,-,16,NONE,1,2,0,TX Antenna,Transmit antenna status
+45,MIN,C2CStatus,2,-,COMMAND_STATUS,NONE,3,5,0,Command Control, Command & Control Status
+46,MIN,Pad,56,-,0,NONE,0,0,0,NONE,NONE
diff --git a/spacecraft/FoxTelem_1.13i/CubeSatSim_rttelemetry.csv b/spacecraft/FoxTelem_1.13i/CubeSatSim_rttelemetry.csv
new file mode 100644
index 00000000..967514bc
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/CubeSatSim_rttelemetry.csv
@@ -0,0 +1,49 @@
+48,TYPE,FIELD,BITS,UNIT,CONVERSION,MODULE,MODULE_NUM,MODULE_LINE,LINE_TYPE,SHORT_NAME,DESCRIPTION
+0,RT,Sensor 2,12,integer,1,Experiments,6,8,3,Sensor 2,STEM Payload Extra Sensor 2
+1,RT,Sensor 3,12,integer,1,Experiments,6,9,3,Sensor 3,STEM Payload Extra Sensor 3
+2,RT,BATT_V,12,V,cubesatsim_voltage|FLOAT2,Battery,4,1,3,Battery Voltage,INA219 Battery Voltage
+3,RT,SatelliteXAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,+X Panel,7,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around X Axis
+4,RT,SatelliteYAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,+Y Panel,8,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Y Axis
+5,RT,SatelliteZAxisAcceleration,12,g,cubesatsim_acceleration|FLOAT2,+Z Panel,9,4,3,Acceleration,STEM Payload Board MPU6050 Acceleration around Z Axis
+6,RT,BATT_I,12,mA,cubesatsim_current,Battery,4,2,3,Battery Current,INA219 Battery Current
+7,RT,Temperature,12,C,cubesatsim_temperature,Experiments,6,2,3,BME280 Temp,STEM Payload Sensor BME280 Temperature
+8,RT,PANEL_PLUS_X_V,12,V,cubesatsim_voltage|FLOAT2,+X Panel,7,1,3,Voltage,INA219 +X Panel Voltage
+9,RT,PANEL_MINUS_X_V,12,V,cubesatsim_voltage|FLOAT2,-X Panel,10,1,3,Voltage,INA219 -X Panel Voltage
+10,RT,PANEL_PLUS_Y_V,12,V,cubesatsim_voltage|FLOAT2,+Y Panel,8,1,3,Voltage,INA219 +Y Panel Voltage
+11,RT,PANEL_MINUS_Y_V,12,V,cubesatsim_voltage|FLOAT2,-Y Panel,11,1,3,Voltage,INA219 -Y Panel Voltage
+12,RT,PANEL_PLUS_Z_V,12,V,cubesatsim_voltage|FLOAT2,+Z Panel,9,1,3,Voltage,INA219 +Z Panel Voltage
+13,RT,PANEL_MINUS_Z_V,12,V,cubesatsim_voltage|FLOAT2,-Z Panel,12,1,3,Voltage,INA219 -Z Panel Voltage
+14,RT,PANEL_PLUS_X_I,12,mA,cubesatsim_current,+X Panel,7,2,3,Current,INA219 +X Panel Current
+15,RT,PANEL_MINUS_X_I,12,mA,cubesatsim_current,-X Panel,10,2,3,Current,INA219 -X Panel Current
+16,RT,PANEL_PLUS_Y_I,12,mA,cubesatsim_current,+Y Panel,8,2,3,Current,INA219 +Y Panel Current
+17,RT,PANEL_MINUS_Y_I,12,mA,cubesatsim_current,-Y Panel,11,2,3,Current,INA219 -Y Panel Current
+18,RT,PANEL_PLUS_Z_I,12,mA,cubesatsim_current,+Z Panel,9,2,3,Current,INA219 +Z Panel Current
+19,RT,PANEL_MINUS_Z_I,12,mA,cubesatsim_current,-Z Panel,12,2,3,Current,INA219 -Z Panel Current
+20,RT,BATT2_V,12,V,cubesatsim_voltage|FLOAT2,Battery2,5,1,3,Battery2 Voltage,INA219 Battery2 Voltage
+21,RT,SPIN,12,rpm,cubesatsim_rpm,Computer Software,3,1,3,Spacecraft Spin,Calculated spin rate using solar cells
+22,RT,Pressure,12,hPa,cubesatsim_pressure,Experiments,6,3,3,BME280 Pressure,STEM Payload Sensor BME280 Pressure
+23,RT,Altitude,12,m,cubesatsim_altitude|INT,Experiments,6,4,3,BME280 Altitude,STEM Payload Sensor BME280 Altitude
+24,RT,Resets,12,-,12,NONE,3,2,3,Reset Count, Software Reset Count
+25,RT,RSSI,12,dBm,cubesatsim_rssi|INT,Radio,1,1,3,RSSI,Received Signal Strength Indication
+26,RT,IHUTemperature,12,C,cubesatsim_temperature,Computer Hardware,2,1,3,IHU Temp (Pi),Internal Temperature of Pi IHU
+27,RT,SatelliteXAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,+X Panel,7,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around X Axis
+28,RT,SatelliteYAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,+Y Panel,8,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around Y Axis
+29,RT,SatelliteZAxisAngularVelocity,12,dps,cubesatsim_rotation|INT,+Z Panel,9,3,3,Rotation,STEM Payload Board MPU6050 Angular Veolcity around Z Axis
+30,RT,Humidity,12,%,cubesatsim_temperature,Experiments,6,5,3,BME280 Humidity,STEM Payload Sensor BME280 Humidity
+31,RT,BATT2_I,12,mA,cubesatsim_current,Battery2,5,2,3,Battery2 Current,INA219 Battery2 Current
+32,RT,DiodeTemp,12,C,cubesatsim_rpm,Experiments,6,6,3,Diode Temp,STEM Payload Diode Temperature
+33,RT,Sensor 1,12,integer,1,Experiments,6,7,3,Sensor 1,STEM Payload Extra Sensor 1
+34,RT,STEMPayloadStatus,1,-,17,Experiments,6,1,0,STEM Payload Status,STEM Payload Board Status
+35,RT,SafeMode,1,-,STATUS_ON_OFF,Computer Software,3,2,0,Safe Mode, Safe Mode (Low Battery Voltage)
+36,RT,SimulatedTelemetry,1,-,STATUS_ON_OFF,Computer Software,3,4,0,Simulated Telemetry, Simulated Telemetry Indicator
+37,RT,PayloadStatus1,1,-,17,NONE,0,0,0,Exp 3,STEM Payload status 1 failure indicator
+38,RT,I2CBus0Failure,1,-,17,NONE,2,2,0,I2C Bus 0,I2C bus 0 failure indicator
+39,RT,I2CBus1Failure,1,-,17,Computer Hardware,2,2,0,I2C Bus 1,I2C bus 1 failure indicator
+40,RT,I2CBus3Failure,1,-,17,Computer Hardware,2,3,0,I2C Bus 3,I2C bus 3 failure indicator
+41,RT,CameraFailure,1,-,17,Computer Hardware,2,4,0,Camera,Camera failure indicator
+42,RT,GroundCommands,4,-,1,NONE,0,0,0,Ground Commands,Number of ground commands received
+43,RT,RXAntenna,1,-,16,Radio,1,3,0,RX Antenna,Receive antenna status
+44,RT,TXAntenna,1,-,16,Radio,1,2,0,TX Antenna,Transmit antenna status
+45,RT,C2CStatus,2,-,COMMAND_STATUS,Computer Software,3,5,0,Command Control, Command & Control Status
+46,RT,GroundCommands2,10,-,1,Computer Software,3,3,0,Ground Commands,Number of ground commands received
+47,RT,Pad,46,-,0,NONE,0,0,0,NONE,NONE
diff --git a/spacecraft/FoxTelem_1.13i/README.md b/spacecraft/FoxTelem_1.13i/README.md
new file mode 100644
index 00000000..765fba49
--- /dev/null
+++ b/spacecraft/FoxTelem_1.13i/README.md
@@ -0,0 +1,7 @@
+These files update the spacecraft files in FoxTelem version 1.13i or later and fix a bug in the payload altitude sensor display.
+
+You can download them as a zip file: [foxtelem_spacecraft_files.zip](https://github.com/user-attachments/files/23393444/foxtelem_spacecraft_files.zip)
+
+Extract (unzip foxtelem_spacecraft_files.zip) and copy into FoxTelem spacecraft folder, replacing existing files.
+
+Next time you run FoxTelem, the CubeSatSim-FSK and CubeSatSim-BPSK spacecraft will be automatically updated.
diff --git a/squelch_cc.py b/squelch_cc.py
index 9faa6ca8..a2ad899a 100644
--- a/squelch_cc.py
+++ b/squelch_cc.py
@@ -4,6 +4,16 @@ from time import sleep
from os import system
import sys
+def blink(times):
+ blink_time = 0.1
+ powerPin = 16
+ for i in range(times): # blink times
+ GPIO.output(powerPin, 0)
+ sleep(blink_time)
+ GPIO.output(powerPin, 1)
+ sleep(blink_time)
+ sleep(0.65)
+
def command_control_check():
# global command_control
@@ -71,81 +81,33 @@ def increment_mode():
print(mode)
if (mode == 'a'):
mode = 'f'
- GPIO.output(powerPin, 0) # blink two times
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(1)
+ blink(2)
elif (mode == 'f'):
mode = 'b'
- GPIO.output(powerPin, 0) # blink three times
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(1)
+ blink(3)
elif (mode == 'b'):
mode = 's'
- GPIO.output(powerPin, 0) # blink four times
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(1)
-
+ blink(4)
elif (mode == 's'):
mode = 'm'
- GPIO.output(powerPin, 0) # blink five times
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1);
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(0.1)
- GPIO.output(powerPin, 0)
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(1)
+ blink(5)
+ elif (mode == 'm'):
+ mode = 'e'
+ blink(6)
+ elif (mode == 'e'):
+ mode = 'j'
+ blink(7)
else:
mode = 'a'
- GPIO.output(powerPin, 0) # blink one time
- sleep(0.1)
- GPIO.output(powerPin, 1)
- sleep(1)
+ blink(1)
try:
print("/home/pi/CubeSatSim/config -" + mode)
- if (debug_mode == False):
+ if (debug_mode == False):
+ print("Changing mode now")
+ system("echo 'incrementing mode due to C2C!' | wall")
GPIO.setwarnings(False)
GPIO.output(txLed, 0)
GPIO.output(powerPin, 0)
@@ -153,7 +115,6 @@ def increment_mode():
system("sudo systemctl stop cubesatsim")
system("/home/pi/CubeSatSim/config -" + mode)
- print("Changing mode now")
# file = open("/home/pi/CubeSatSim/.mode", "w")
diff --git a/sstv/sstv_image_2_320_x_256.jpeg b/sstv/sstv_image_2_320_x_256.jpeg
new file mode 100644
index 00000000..588a1aa7
Binary files /dev/null and b/sstv/sstv_image_2_320_x_256.jpeg differ
diff --git a/stempayload/Payload_BME280_MPU6050_AIO/readme.MD b/stempayload/Payload_BME280_MPU6050_AIO/readme.MD
index ec01c104..1e23a74d 100644
--- a/stempayload/Payload_BME280_MPU6050_AIO/readme.MD
+++ b/stempayload/Payload_BME280_MPU6050_AIO/readme.MD
@@ -1,5 +1,7 @@
This code for the Raspberry Pi Pico W supports the built-in BME-280 and MPU-6050 sensors on the Main board and adds support for Adafruit.io
+Here is a ZIP file of these files: https://github.com/user-attachments/files/21951798/Payload_BME280_MPU6050_AIO.zip
+
To use this code, you will need to create a Free account at https://io.adafruit.com
You will need to configure your Adafruit.io account information and your WiFi credentials in the edit_this_config_and_rename.h file
diff --git a/telem.c b/telem.c
index 7afceef2..ce4f14c3 100644
--- a/telem.c
+++ b/telem.c
@@ -15,7 +15,7 @@ int main(int argc, char *argv[]) {
}
}
- printf("CubeSatSim v2.0 INA219 Voltage and Current Telemetry\n");
+ printf("CubeSatSim v2.2 INA219 Voltage and Current Telemetry\n");
map[MINUS_X] = MINUS_Y;
map[PLUS_Z] = MINUS_X;
map[MINUS_Y] = PLUS_Z;