From 2406f1a433530e7e19f0755574e641f7fca5d466 Mon Sep 17 00:00:00 2001 From: Matthew Ejakov Date: Fri, 6 May 2022 14:07:00 -0400 Subject: [PATCH 1/7] enabled flight computer parser --- Python/s2Interface.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Python/s2Interface.py b/Python/s2Interface.py index 82abf1c..5929eda 100644 --- a/Python/s2Interface.py +++ b/Python/s2Interface.py @@ -37,8 +37,8 @@ def __init__(self, ser=serial.Serial(port=None)): self.ser = ser self.ports_box = [] self.serial_name = "" - self.board_parser = [GSEController(), None, EngineController(), PressurizationController(), None, None] # Maps board to associated packet parser - self.calibration_parser = [GSEControllerCalibrations(), None, EngineControllerCalibrations(), PressurizationControllerCalibrations(), None, None] + self.board_parser = [GSEController(), FlightComputer(), EngineController(), None, None, None] # Maps board to associated packet parser + self.calibration_parser = [GSEControllerCalibrations(), None, EngineControllerCalibrations(), None, None, None] self.helper = _S2_InterfaceAutogen() self.last_raw_packet = None From 8373d464f3661ea6622483b352dfa50b686eb273 Mon Sep 17 00:00:00 2001 From: Matthew Ejakov Date: Mon, 27 Jun 2022 14:07:30 -0400 Subject: [PATCH 2/7] Changed packet size to receive data, need to regenerate FC telem files --- Python/parsers/flightCompParse.py | 2 +- Python/s2Interface.py | 4 ++++ Python/server.py | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Python/parsers/flightCompParse.py b/Python/parsers/flightCompParse.py index eb01df5..6185d6c 100644 --- a/Python/parsers/flightCompParse.py +++ b/Python/parsers/flightCompParse.py @@ -9,7 +9,7 @@ class FlightComputer: def __init__(self): - self.packet_byte_size = 107 + self.packet_byte_size = 124 self.num_items = 51 self.dict = {} diff --git a/Python/s2Interface.py b/Python/s2Interface.py index 5929eda..213d3a0 100644 --- a/Python/s2Interface.py +++ b/Python/s2Interface.py @@ -120,6 +120,7 @@ def parse_serial(self): packet = self.ser.read_until(b'\x00') self.last_raw_packet = packet return self.parse_packet(packet) + except Exception as e: #traceback.print_exc() pass @@ -132,9 +133,12 @@ def parse_packet(self, packet): packet_type = self.get_packet_type_from_packet(packet) board_addr = self.get_board_addr_from_packet(packet) #print(packet) + #print(packet_type) try: # Limit valid packet sizes to mitigate data corruption # Flash binary parser packet length is equal to packet_byte_size, telemetry packet length is packet_byte_size+1 + #print(self.board_parser[board_addr].packet_byte_size) + #print(len(packet)) if packet_type == 0 and ((len(packet) == self.board_parser[board_addr].packet_byte_size) or (len(packet) == self.board_parser[board_addr].packet_byte_size + 1)): #print("here") self.board_parser[board_addr].parse_packet(packet) diff --git a/Python/server.py b/Python/server.py index 682d484..239e865 100644 --- a/Python/server.py +++ b/Python/server.py @@ -823,7 +823,7 @@ def update(self): packet_addr, packet_type = self.interface.parse_serial() # returns origin address # packet_addr = -1 if packet_addr != -1 and packet_addr != -2: - # print("PARSER WORKED") + #print("PARSER WORKED") self.is_actively_receiving = True self.dataframe["error_msg"] = "'Norminal' - Jon Insprucker" From cc71a90e0dd4207ae1bfa8cea0370f508da639f0 Mon Sep 17 00:00:00 2001 From: Matthew Ejakov Date: Thu, 30 Jun 2022 15:03:25 -0400 Subject: [PATCH 3/7] Regenerated flight computer parser --- Python/parsers/flightCompParse.py | 20 ++++++++++++++++---- Python/s2Interface.py | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Python/parsers/flightCompParse.py b/Python/parsers/flightCompParse.py index 6185d6c..0a6d497 100644 --- a/Python/parsers/flightCompParse.py +++ b/Python/parsers/flightCompParse.py @@ -1,16 +1,16 @@ ### BEGIN AUTOGENERATED SECTION - MODIFICATIONS TO THIS CODE WILL BE OVERWRITTEN ### telemParse.py -### Autogenerated by firmware-libraries/SerialComms/python/telem_file_generator.py on Wed Mar 3 19:46:57 2021 +### Autogenerated by firmware-libraries/SerialComms/python/telem_file_generator.py on Thu Jun 30 14:42:37 2022 import time import struct -class FlightComputer: +class TelemParse: def __init__(self): - self.packet_byte_size = 124 - self.num_items = 51 + self.packet_byte_size = 123 + self.num_items = 55 self.dict = {} self.units = {} @@ -67,6 +67,10 @@ def __init__(self): self.items[48] = 'gyro.x.avg' self.items[49] = 'gyro.y.avg' self.items[50] = 'gyro.z.avg' + self.items[51] = 'gps.time' + self.items[52] = 'gps.lat' + self.items[53] = 'gps.long' + self.items[54] = 'gps.alt' self.units[self.items[0]] = "ul" self.units[self.items[1]] = "ul" @@ -119,6 +123,10 @@ def __init__(self): self.units[self.items[48]] = "deg/s" self.units[self.items[49]] = "deg/s" self.units[self.items[50]] = "deg/s" + self.units[self.items[51]] = "s" + self.units[self.items[52]] = "deg" + self.units[self.items[53]] = "deg" + self.units[self.items[54]] = "ft" def parse_packet(self, packet): self.dict[self.items[0]] = int((float(struct.unpack(" Date: Fri, 1 Jul 2022 00:47:15 -0400 Subject: [PATCH 4/7] add signal noise ratio to telem --- Python/parsers/flightCompParse.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Python/parsers/flightCompParse.py b/Python/parsers/flightCompParse.py index 0a6d497..1ef3aff 100644 --- a/Python/parsers/flightCompParse.py +++ b/Python/parsers/flightCompParse.py @@ -1,7 +1,7 @@ ### BEGIN AUTOGENERATED SECTION - MODIFICATIONS TO THIS CODE WILL BE OVERWRITTEN ### telemParse.py -### Autogenerated by firmware-libraries/SerialComms/python/telem_file_generator.py on Thu Jun 30 14:42:37 2022 +### Autogenerated by firmware-libraries/SerialComms/python/telem_file_generator.py on Fri Jul 1 00:08:57 2022 import time import struct @@ -9,8 +9,8 @@ class TelemParse: def __init__(self): - self.packet_byte_size = 123 - self.num_items = 55 + self.packet_byte_size = 124 + self.num_items = 56 self.dict = {} self.units = {} @@ -71,6 +71,7 @@ def __init__(self): self.items[52] = 'gps.lat' self.items[53] = 'gps.long' self.items[54] = 'gps.alt' + self.items[55] = 'snr' self.units[self.items[0]] = "ul" self.units[self.items[1]] = "ul" @@ -127,6 +128,7 @@ def __init__(self): self.units[self.items[52]] = "deg" self.units[self.items[53]] = "deg" self.units[self.items[54]] = "ft" + self.units[self.items[55]] = "dB" def parse_packet(self, packet): self.dict[self.items[0]] = int((float(struct.unpack(" Date: Tue, 12 Jul 2022 17:38:46 -0400 Subject: [PATCH 5/7] Increased gps accuracy --- Python/parsers/flightCompParse.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Python/parsers/flightCompParse.py b/Python/parsers/flightCompParse.py index 1ef3aff..743fe21 100644 --- a/Python/parsers/flightCompParse.py +++ b/Python/parsers/flightCompParse.py @@ -6,7 +6,7 @@ import time import struct -class TelemParse: +class FlightComputer: def __init__(self): self.packet_byte_size = 124 @@ -183,7 +183,7 @@ def parse_packet(self, packet): self.dict[self.items[49]] = float((float(struct.unpack(" Date: Thu, 10 Nov 2022 14:28:52 -0500 Subject: [PATCH 6/7] Fixed flight computer issues --- Python/board.py | 25 ++++++++++++++++++++++++- Python/parsers/flightCompParse.py | 21 ++++++++++++++++++--- Python/solenoid.py | 2 +- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/Python/board.py b/Python/board.py index f3f7e91..0391a27 100644 --- a/Python/board.py +++ b/Python/board.py @@ -108,6 +108,27 @@ def __init__(self, parent, name: str): "Abort": 6, "Post": 7, } + elif self.name == "Flight Computer": + self.stateMap = { + -1: "", + 0: "Manual", + 1: "Armed", + 2: "Ascent", + 3: "Drogue", + 4: "Main", + 5: "Touchdown", + 6: "Abort", + } + self.stateNum = { + "": -1, + "Manual": 0, + "Armed": 1, + "Ascent": 2, + "Drogue": 3, + "Main": 4, + "Touchdown": 5, + "Abort": 6, + } """ TODO fill this out when we figure out other boards' state mappings @@ -546,6 +567,8 @@ def setBoardState(self, state: int): pass elif self.name == "Engine Controller": pass + elif self.name == "Flight Computer": + pass else: print("Invalid board(" + self.name + ") somehow used in Board:setBoardState, it should never get to this point lol. State: " + str(state)) return @@ -812,7 +835,7 @@ def updateFromDataPacket(self, data_packet: dict): if self.name == "Flight Computer": self.update(data_packet[prefix + "e_batt"], 0, data_packet[prefix + "STATE"], False, data_packet[prefix + "timestamp"], data_packet[prefix + "adc_rate"], - data_packet[prefix + "telem_rate"]) # no flash state yet, no i_batt + data_packet[prefix + "telem_rate"], False) # no flash state yet, no i_batt elif self.name == "Black Box": self.update(0, 0, data_packet[prefix + "STATE"], False, data_packet[prefix + "timestamp"], data_packet[prefix + "adc_rate"], diff --git a/Python/parsers/flightCompParse.py b/Python/parsers/flightCompParse.py index eb01df5..743fe21 100644 --- a/Python/parsers/flightCompParse.py +++ b/Python/parsers/flightCompParse.py @@ -1,7 +1,7 @@ ### BEGIN AUTOGENERATED SECTION - MODIFICATIONS TO THIS CODE WILL BE OVERWRITTEN ### telemParse.py -### Autogenerated by firmware-libraries/SerialComms/python/telem_file_generator.py on Wed Mar 3 19:46:57 2021 +### Autogenerated by firmware-libraries/SerialComms/python/telem_file_generator.py on Fri Jul 1 00:08:57 2022 import time import struct @@ -9,8 +9,8 @@ class FlightComputer: def __init__(self): - self.packet_byte_size = 107 - self.num_items = 51 + self.packet_byte_size = 124 + self.num_items = 56 self.dict = {} self.units = {} @@ -67,6 +67,11 @@ def __init__(self): self.items[48] = 'gyro.x.avg' self.items[49] = 'gyro.y.avg' self.items[50] = 'gyro.z.avg' + self.items[51] = 'gps.time' + self.items[52] = 'gps.lat' + self.items[53] = 'gps.long' + self.items[54] = 'gps.alt' + self.items[55] = 'snr' self.units[self.items[0]] = "ul" self.units[self.items[1]] = "ul" @@ -119,6 +124,11 @@ def __init__(self): self.units[self.items[48]] = "deg/s" self.units[self.items[49]] = "deg/s" self.units[self.items[50]] = "deg/s" + self.units[self.items[51]] = "s" + self.units[self.items[52]] = "deg" + self.units[self.items[53]] = "deg" + self.units[self.items[54]] = "ft" + self.units[self.items[55]] = "dB" def parse_packet(self, packet): self.dict[self.items[0]] = int((float(struct.unpack(" Date: Thu, 10 Nov 2022 15:09:10 -0500 Subject: [PATCH 7/7] made buttons work with flight computer --- Python/board.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/Python/board.py b/Python/board.py index 0391a27..381bc2f 100644 --- a/Python/board.py +++ b/Python/board.py @@ -514,6 +514,10 @@ def sendBoardState(self, identifier: str): elif self.state == self.stateNum["Ignition"]: newState = self.stateNum["Hotfire"] # Anytime can call an abort to abort out + elif self.name == "Flight Computer": + if self.state == self.stateNum["Armed"]: + newState = self.stateNum["Ascent"] # this might need to be removed idk why we are switching to the next state client side + # Anytime can call an abort to abort out elif identifier == "Abort": newState = self.stateNum["Abort"] elif identifier == "Continue": @@ -824,6 +828,49 @@ def update(self, ebatt, ibatt, state, flash, LPT, adc_rate, telem_rate, state_re self.arm_button.setEnabled(False) self.fire_button.setEnabled(False) self.abort_button.setEnabled(False) + elif self.name == "Flight Computer": + if self.state == self.stateNum["Manual"]: + self.manual_button.setText("Manual") + self.manual_button.setEnabled(False) + self.arm_button.setEnabled(True) + self.fire_button.setEnabled(False) + self.abort_button.setEnabled(False) + + elif self.state == self.stateNum["Armed"]: + self.manual_button.setText("Disarm") + self.manual_button.setEnabled(True) + self.arm_button.setEnabled(False) + self.fire_button.setEnabled(True) + self.abort_button.setEnabled(False) + + elif self.state == self.stateNum["Ascent"]: + self.manual_button.setText("Disarm") + self.manual_button.setEnabled(False) + self.arm_button.setEnabled(False) + self.fire_button.setEnabled(False) + self.abort_button.setEnabled(True) + + elif self.state == self.stateNum["Drogue"]: + self.manual_button.setText("Disarm") + self.manual_button.setEnabled(False) + self.arm_button.setEnabled(False) + self.fire_button.setEnabled(False) + self.abort_button.setEnabled(True) + + elif self.state == self.stateNum["Touchdown"]: + self.manual_button.setText("Disarm") + self.manual_button.setEnabled(False) + self.arm_button.setEnabled(False) + self.fire_button.setEnabled(False) + self.abort_button.setEnabled(True) + + + elif self.state == self.stateNum["Abort"]: + self.manual_button.setText("Disarm") + self.manual_button.setEnabled(True) + self.arm_button.setEnabled(False) + self.fire_button.setEnabled(False) + self.abort_button.setEnabled(False)