Skip to content

Add flight computer compatablility to master branch #253

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 71 additions & 1 deletion Python/board.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -493,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":
Expand Down Expand Up @@ -546,6 +571,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
Expand Down Expand Up @@ -801,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)



Expand All @@ -812,7 +882,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"],
Expand Down
21 changes: 18 additions & 3 deletions Python/parsers/flightCompParse.py
Original file line number Diff line number Diff line change
@@ -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 Fri Jul 1 00:08:57 2022

import time
import struct

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 = {}
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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("<B", packet[0:1])[0]))/1)
Expand Down Expand Up @@ -172,3 +182,8 @@ def parse_packet(self, packet):
self.dict[self.items[48]] = float((float(struct.unpack("<h", packet[101:103])[0]))/10)
self.dict[self.items[49]] = float((float(struct.unpack("<h", packet[103:105])[0]))/10)
self.dict[self.items[50]] = float((float(struct.unpack("<h", packet[105:107])[0]))/10)
self.dict[self.items[51]] = float((float(struct.unpack("<I", packet[107:111])[0]))/10)
self.dict[self.items[52]] = float((float(struct.unpack("<i", packet[111:115])[0]))/10000)
self.dict[self.items[53]] = float((float(struct.unpack("<i", packet[115:119])[0]))/10000)
self.dict[self.items[54]] = float((float(struct.unpack("<I", packet[119:123])[0]))/1)
self.dict[self.items[55]] = int ((float(struct.unpack("<B", packet[123:124])[0]))/1)
8 changes: 6 additions & 2 deletions Python/s2Interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(), FlightComputer(), 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

Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion Python/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 1 addition & 1 deletion Python/solenoid.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,6 @@ def updateFromDataPacket(self, data_packet: dict):
channel_name = board_prefix + "vlv" + str(self.channel)
state = data_packet[channel_name + ".en"]
voltage = data_packet[channel_name + ".e"]
current = data_packet[channel_name + ".i"]
current = data_packet[channel_name + ".i"] if (channel_name + ".i") in data_packet else 0
self.setState(state, voltage, current)