diff --git a/README.md b/README.md index 35ba320..3c578c9 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Until now, this program supports the satellites below: * FloripaSat-1 (launched in December 2019) * FloripaSat-2 (to be launched on 2022) +* Aldebaran-1 (to be launched on TBC) ## Dependencies diff --git a/setup.py b/setup.py index 695e65d..aed3486 100644 --- a/setup.py +++ b/setup.py @@ -79,6 +79,7 @@ ('share/spacelab_decoder/', ['spacelab_decoder/data/img/spacelab-logo-full-400x200.png']), ('share/spacelab_decoder/', ['spacelab_decoder/data/satellites/floripasat-1.json']), ('share/spacelab_decoder/', ['spacelab_decoder/data/satellites/floripasat-2.json']), + ('share/spacelab_decoder/', ['spacelab_decoder/data/satellites/aldebaran-1.json']), ], cmdclass = {'build_sphinx': BuildDoc}, ) diff --git a/spacelab_decoder/data/satellites/aldebaran-1.json b/spacelab_decoder/data/satellites/aldebaran-1.json new file mode 100644 index 0000000..8597f53 --- /dev/null +++ b/spacelab_decoder/data/satellites/aldebaran-1.json @@ -0,0 +1,417 @@ +{ + "name": "Aldebaran-1", + "links": [ + { + "name": "Beacon", + "types": [ + { + "name": "OBDH", + "fields": [ + { + "name": "ID", + "initial_pos": 0, + "final_pos": 0, + "value": 0, + "conversion": "None", + "unit": "" + }, + { + "name": "Callsign", + "initial_pos": 1, + "final_pos": 7, + "value": 0, + "conversion": "None", + "unit": "" + }, + { + "name": "Battery Cell 1 Voltage", + "initial_pos": 8, + "final_pos": 9, + "value": 0, + "conversion": "(((pkt[8] << 8) | pkt[9])/32.0)*4.883e-3", + "unit": "V" + }, + { + "name": "Battery Cell 2 Voltage", + "initial_pos": 10, + "final_pos": 11, + "value": 0, + "conversion": "(((pkt[10] << 8) | pkt[11])/32.0)*4.883e-3", + "unit": "V" + }, + { + "name": "Battery Cell 1 Temperature", + "initial_pos": 12, + "final_pos": 14, + "value": 0, + "conversion": "((pkt[12] << 16) | (pkt[13] << 8) | pkt[14])*0.125/32.0", + "unit": "oC" + }, + { + "name": "Battery Cell 2 Temperature", + "initial_pos": 15, + "final_pos": 17, + "value": 0, + "conversion": "((pkt[15] << 16) | (pkt[16] << 8) | pkt[17])*0.125/32.0", + "unit": "oC" + }, + { + "name": "Battery Charge", + "initial_pos": 18, + "final_pos": 19, + "value": 0, + "conversion": "((pkt[18] << 8) | pkt[19])*(6.25*1e-4)", + "unit": "Ah" + }, + { + "name": "Solar Panel 1 Current", + "initial_pos": 20, + "final_pos": 21, + "value": 0, + "conversion": "((pkt[20] << 8) | pkt[21])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 2 Current", + "initial_pos": 22, + "final_pos": 23, + "value": 0, + "conversion": "((pkt[22] << 8) | pkt[23])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 3 Current", + "initial_pos": 24, + "final_pos": 25, + "value": 0, + "conversion": "((pkt[24] << 8) | pkt[25])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 4 Current", + "initial_pos": 26, + "final_pos": 27, + "value": 0, + "conversion": "((pkt[26] << 8) | pkt[27])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 5 Current", + "initial_pos": 28, + "final_pos": 29, + "value": 0, + "conversion": "((pkt[28] << 8) | pkt[29])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 6 Current", + "initial_pos": 30, + "final_pos": 31, + "value": 0, + "conversion": "((pkt[30] << 8) | pkt[31])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel Array 1 Voltage", + "initial_pos": 32, + "final_pos": 33, + "value": 0, + "conversion": "((pkt[32] << 8) | pkt[33])*(2.5/4095)*(100e3 + 93.1e3)/100e3", + "unit": "V" + }, + { + "name": "Solar Panel Array 2 Voltage", + "initial_pos": 34, + "final_pos": 35, + "value": 0, + "conversion": "((pkt[34] << 8) | pkt[35])*(2.5/4095)*(100e3 + 93.1e3)/100e3", + "unit": "V" + }, + { + "name": "Solar Panel Array 3 Voltage", + "initial_pos": 36, + "final_pos": 37, + "value": 0, + "conversion": "((pkt[36] << 8) | pkt[37])*(2.5/4095)*(100e3 + 93.1e3)/100e3", + "unit": "V" + }, + { + "name": "Energy Level", + "initial_pos": 38, + "final_pos": 38, + "value": 0, + "conversion": "int(pkt[38])", + "unit": "" + }, + { + "name": "IMU Status", + "initial_pos": 39, + "final_pos": 39, + "value": 0, + "conversion": "bool((pkt[39] >> 4) & 1)", + "unit": "" + }, + { + "name": "uSD Status", + "initial_pos": 39, + "final_pos": 39, + "value": 0, + "conversion": "bool((pkt[39] >> 3) & 1)", + "unit": "" + }, + { + "name": "RUSH Status", + "initial_pos": 39, + "final_pos": 39, + "value": 0, + "conversion": "bool((pkt[39] >> 1) & 1)", + "unit": "" + }, + { + "name": "EPS Status", + "initial_pos": 39, + "final_pos": 39, + "value": 0, + "conversion": "bool((pkt[39] >> 0) & 1)", + "unit": "" + }, + { + "name": "Antenna Status", + "initial_pos": 39, + "final_pos": 39, + "value": 0, + "conversion": "bool((pkt[39] >> 5) & 1)", + "unit": "" + }, + { + "name": "IMU Accelerometer X", + "initial_pos": 40, + "final_pos": 41, + "value": 0, + "conversion": "int((pkt[40] << 8) | pkt[41])*16.0/32768.0", + "unit": "" + }, + { + "name": "IMU Accelerometer Y", + "initial_pos": 42, + "final_pos": 43, + "value": 0, + "conversion": "int((pkt[42] << 8) | pkt[43])*16.0/32768.0", + "unit": "" + }, + { + "name": "IMU Accelerometer Z", + "initial_pos": 44, + "final_pos": 45, + "value": 0, + "conversion": "int((pkt[44] << 8) | pkt[45])*16.0/32768.0", + "unit": "" + }, + { + "name": "IMU Gyroscope X", + "initial_pos": 46, + "final_pos": 47, + "value": 0, + "conversion": "int((pkt[46] << 8) | pkt[47])*250.0/32768.0", + "unit": "" + }, + { + "name": "IMU Gyroscope Y", + "initial_pos": 48, + "final_pos": 49, + "value": 0, + "conversion": "int((pkt[48] << 8) | pkt[49])*250.0/32768.0", + "unit": "" + }, + { + "name": "IMU Gyroscope Z", + "initial_pos": 50, + "final_pos": 51, + "value": 0, + "conversion": "int((pkt[50] << 8) | pkt[51])*250.0/32768.0", + "unit": "" + }, + { + "name": "System Time", + "initial_pos": 52, + "final_pos": 55, + "value": 0, + "conversion": "str(int(((pkt[53] << 16) | (pkt[54] << 8) | pkt[55])/60)) + \":\" + str(((pkt[53] << 16) | (pkt[54] << 8) | pkt[55])%60) + \":\" + str(pkt[52])", + "unit": "" + }, + { + "name": "OBDH Resets", + "initial_pos": 56, + "final_pos": 57, + "value": 0, + "conversion": "pkt[57] + pkt[56]*256", + "unit": "" + } + ] + }, + { + "name": "EPS", + "fields": [ + { + "name": "ID", + "initial_pos": 0, + "final_pos": 0, + "value": 1, + "conversion": "None", + "unit": "" + }, + { + "name": "Callsign", + "initial_pos": 1, + "final_pos": 7, + "value": 0, + "conversion": "None", + "unit": "" + }, + { + "name": "Battery Cell 1 Voltage", + "initial_pos": 8, + "final_pos": 9, + "value": 0, + "conversion": "(((pkt[8] << 8) | pkt[9])/32.0)*4.883e-3", + "unit": "V" + }, + { + "name": "Battery Cell 2 Voltage", + "initial_pos": 10, + "final_pos": 11, + "value": 0, + "conversion": "(((pkt[10] << 8) | pkt[11])/32.0)*4.883e-3", + "unit": "V" + }, + { + "name": "Battery Monitor Temperature", + "initial_pos": 12, + "final_pos": 13, + "value": 0, + "conversion": "((pkt[12] << 8) | pkt[13]) * 0.125 / 32.0", + "unit": "" + }, + { + "name": "Battery Current", + "initial_pos": 14, + "final_pos": 15, + "value": 0, + "conversion": "int((pkt[14] << 8) | pkt[15]) * (1.5625e-6 / 0.01)", + "unit": "A" + }, + { + "name": "EPS Temperature", + "initial_pos": 16, + "final_pos": 17, + "value": 0, + "conversion": "(((pkt[16] << 8) | pkt[17]) * (2.5 / 4095.0) - 0.680) * 70.0 / 0.170", + "unit": "oC" + }, + { + "name": "Battery Charge", + "initial_pos": 18, + "final_pos": 19, + "value": 0, + "conversion": "((pkt[18] << 8) | pkt[19])*(6.25*1e-4)", + "unit": "Ah" + }, + { + "name": "Solar Panel 1 Current", + "initial_pos": 20, + "final_pos": 21, + "value": 0, + "conversion": "((pkt[20] << 8) | pkt[21])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 2 Current", + "initial_pos": 22, + "final_pos": 23, + "value": 0, + "conversion": "((pkt[22] << 8) | pkt[23])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 3 Current", + "initial_pos": 24, + "final_pos": 25, + "value": 0, + "conversion": "((pkt[24] << 8) | pkt[25])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 4 Current", + "initial_pos": 26, + "final_pos": 27, + "value": 0, + "conversion": "((pkt[26] << 8) | pkt[27])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 5 Current", + "initial_pos": 28, + "final_pos": 29, + "value": 0, + "conversion": "((pkt[28] << 8) | pkt[29])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel 6 Current", + "initial_pos": 30, + "final_pos": 31, + "value": 0, + "conversion": "((pkt[30] << 8) | pkt[31])*(2.5/4095)*(1/(0.05*0.025*3300))", + "unit": "A" + }, + { + "name": "Solar Panel Array 1 Voltage", + "initial_pos": 32, + "final_pos": 33, + "value": 0, + "conversion": "((pkt[32] << 8) | pkt[33])*(2.5/4095)*(100e3 + 93.1e3)/100e3", + "unit": "V" + }, + { + "name": "Solar Panel Array 2 Voltage", + "initial_pos": 34, + "final_pos": 35, + "value": 0, + "conversion": "((pkt[34] << 8) | pkt[35])*(2.5/4095)*(100e3 + 93.1e3)/100e3", + "unit": "V" + }, + { + "name": "Solar Panel Array 3 Voltage", + "initial_pos": 36, + "final_pos": 37, + "value": 0, + "conversion": "((pkt[36] << 8) | pkt[37])*(2.5/4095)*(100e3 + 93.1e3)/100e3", + "unit": "V" + } + ] + }, + { + "name": "TTC", + "fields": [ + { + "name": "ID", + "initial_pos": 0, + "final_pos": 0, + "value": 2, + "conversion": "None", + "unit": "" + }, + { + "name": "Callsign", + "initial_pos": 1, + "final_pos": 7, + "value": 0, + "conversion": "None", + "unit": "" + } + ] + } + ] + } + ] +} diff --git a/spacelab_decoder/spacelabdecoder.py b/spacelab_decoder/spacelabdecoder.py index 8d116a1..33f13b6 100644 --- a/spacelab_decoder/spacelabdecoder.py +++ b/spacelab_decoder/spacelabdecoder.py @@ -67,6 +67,8 @@ _SAT_JSON_FLORIPASAT_1_SYSTEM = '/usr/share/spacelab_decoder/floripasat-1.json' _SAT_JSON_FLORIPASAT_2_LOCAL = os.path.abspath(os.path.dirname(__file__)) + '/data/satellites/floripasat-2.json' _SAT_JSON_FLORIPASAT_2_SYSTEM = '/usr/share/spacelab_decoder/floripasat-2.json' +_SAT_JSON_ALDEBARAN_1_LOCAL = os.path.abspath(os.path.dirname(__file__)) + '/data/satellites/aldebaran-1.json' +_SAT_JSON_ALDEBARAN_1_SYSTEM = '/usr/share/spacelab_decoder/aldebaran-1.json' _DEFAULT_CALLSIGN = 'PP5UF' _DEFAULT_LOCATION = 'Florianópolis' @@ -168,6 +170,7 @@ def _build_widgets(self): self.liststore_satellite = self.builder.get_object("liststore_satellite") self.liststore_satellite.append(["FloripaSat-1"]) self.liststore_satellite.append(["FloripaSat-2"]) + self.liststore_satellite.append(["Aldebaran-1"]) self.combobox_satellite = self.builder.get_object("combobox_satellite") cell = Gtk.CellRendererText() self.combobox_satellite.pack_start(cell, True) @@ -508,6 +511,11 @@ def _decode_packet(self, pkt): sat_json = _SAT_JSON_FLORIPASAT_2_LOCAL else: sat_json = _SAT_JSON_FLORIPASAT_2_SYSTEM + elif self.combobox_satellite.get_active() == 2: + if os.path.isfile(_SAT_JSON_ALDEBARAN_1_LOCAL): + sat_json = _SAT_JSON_ALDEBARAN_1_LOCAL + else: + sat_json = _SAT_JSON_ALDEBARAN_1_SYSTEM p = Packet(sat_json, pkt) pkt_txt = pkt_txt + str(p) pkt_txt = pkt_txt + "========================================================\n" diff --git a/spacelab_decoder/version.py b/spacelab_decoder/version.py index 0efcf88..5ba746c 100644 --- a/spacelab_decoder/version.py +++ b/spacelab_decoder/version.py @@ -24,7 +24,7 @@ __copyright__ = "Copyright The SpaceLab-Decoder Contributors" __credits__ = ["Gabriel Mariano Marcelino - PU5GMA"] __license__ = "GPLv3" -__version__ = "0.3.15" +__version__ = "0.3.16" __maintainer__ = "Gabriel Mariano Marcelino - PU5GMA" __email__ = "gabriel.mm8@gmail.com" __status__ = "Development"