def __init__(self, saveObject, transmitObject, packetObj):
		self.__transmit = transmitObject
		self.__getTTNCData = TTNCData(saveObject)
		self.__getAttitudeData =  AttitudeData(saveObject)
		self.__heartBeatObj = heart_beat()
		self.__tasks = [] # List will be populated with all background tasks
		# self.__safeMode = safeModeObject
		print("Initialized postBoomDeploy")
		self.__packet = packetObj
 def __init__(self, saveObject, transmitObject, packetObj):
     self.thresholdVoltage = 3.85  #Threshold voltage to deploy AeroBoom.
     self.darkVoltage = 0.9  #Average voltage from sunsors that, if below this, indicates GASPACS is in darkness
     self.lightMinimumMinutes = 1  #Minimum amount of time GASPACS must be on light side of orbit before deploying
     self.batteryStatusOk = False
     self.sunlightData = 0
     self.__getTTNCData = TTNCData(saveObject)
     self.__getAttitudeData = AttitudeData(saveObject)
     self.__tasks = []  #Will be populated with tasks
     self.__packetProcessing = packetObj
     self.__transmit = transmitObject
     self.__heartBeatObj = heart_beat()
Example #3
0
 def __init__(self, saveObject, transmitObject, cam, packetObj):
     self.__getTTNCData = TTNCData(saveObject)
     self.__getAttitudeData = AttitudeData(saveObject)
     self.__getDeployData = DeployData(saveObject)
     self.__tasks = [
     ]  # Empty list will be populated with all background tasks
     # self.__safeMode = safeModeObject
     self.__saveObject = saveObject
     self.__transmit = transmitObject
     self.__packetProcessing = packet(transmitObject, cam)
     self.__heartBeatObj = heart_beat()
     self.__cam = cam
     self.__packetProcessing = packetObj
 def __init__(self, saveObject, transmitObject, packetObj):
     self.deployVoltage = 3.85  #Threshold voltage to deploy
     self.maximumWaitTime = 22 * 60  #Maximum time to wait for deployment before going to SAFE
     self.timeWaited = 0  #Time already waited - zero
     self.__getTTNCData = getDriverData.TTNCData(saveObject)
     self.__getAttitudeData = getDriverData.AttitudeData(saveObject)
     self.__tasks = [
     ]  #List will be populated with background tasks to cancel them
     # self.__safeMode = safeModeObject
     self.__antennaDeployer = BackupAntennaDeployer()
     self.__antennaDoor = AntennaDoor()
     self.__transmit = transmitObject
     self.__packetProcessing = packetObj
     self.__heartBeatObj = heart_beat()
Example #5
0
async def executeFlightLogic(
):  # Open the file save object, start TXISR, camera obj, and start Boot Mode data collection

    baseFile = open("/home/pi/lastBase.txt")
    codeBase = int(baseFile.read())
    cameraObj = Camera()
    # Variable setup
    delay = 35 * 60  # 35 minute delay #TODO: set this delay to 35 min
    antennaVoltageCheckWait = 22 * 60 * 60  # 22 hour wait for the voltage to increase past the threshold. This is arbitrary for now
    boot = True
    saveObject = saveTofiles.save()
    # startTXISR(save)
    ttncData = getDriverData.TTNCData(saveObject)
    attitudeData = getDriverData.AttitudeData(saveObject)
    # safeModeObject = safe.safe(saveObject)
    transmitObject = Transmitting(codeBase, cameraObj)
    packet = packetProcessing(transmitObject, cameraObj)
    heartBeatObj = heart_beat()
    antennaDoorObj = antennaDoor()

    print(
        'Starting data collection')  #Setting up Background tasks for BOOT mode
    tasks = []
    tasks.append(asyncio.create_task(
        heartBeatObj.heartBeatRun()))  # starting heart beat
    tasks.append(
        asyncio.create_task(pythonInterrupt.interrupt(
            transmitObject, packet)))  # starting rx monitoring
    tasks.append(asyncio.create_task(
        ttncData.collectTTNCData(0)))  # Boot Mode is classified as 0
    tasks.append(asyncio.create_task(
        attitudeData.collectAttitudeData()))  # collecting attitude data

    # Initialize all mission mode objects
    # NOTE: the comms-tx is the only exception to this rule as it is to be handled differently than other mission modes
    # NOTE: Boot Mode is defined and executed in this document, instead of a separate mission mode
    # safeModeObject was deleted below in the init parameters after saveObject
    antennaDeploy = antennaMode(saveObject, transmitObject, packet)
    preBoomDeploy = preBoomMode(saveObject, transmitObject, packet)
    postBoomDeploy = postBoomMode(saveObject, transmitObject, packet)
    boomDeploy = boomMode(saveObject, transmitObject, cameraObj, packet)

    # Check the boot record if it doesn't exist recreate it
    if (readData() == (None, None, None)):
        print('Files are empty')
        bootCount, antennaDeployed, lastMode = 0, False, 0
    # otherwise save the last mission mode
    else:
        bootCount, antennaDeployed, lastMode = readData()
    bootCount += 1  # Increment boot count
    # save data
    recordData(bootCount, antennaDeployed, lastMode)

    if lastMode not in range(0, 7):  #Mission Mode invalid
        lastMode = 0
        antennaDeployed = False

    recordData(bootCount, antennaDeployed, lastMode)

    # This is the implementation of the BOOT mode logic.
    if not antennaDeployed:  # First, sleep for 35 minutes
        print('Antenna is undeployed, waiting 35 minutes')
        await asyncio.sleep(delay)  # Sleep for 35 minutes
        while (transmitObject.isRunning()):
            await asyncio.sleep(60)  #sleep if a transmission is running

    print("Moving on to check antenna door status")
    #deploy the antenna, if it fails we will do nothing
    eps = EPS()
    voltageCount = 0
    try:
        while True:
            try:
                BusVoltage = eps.getBusVoltage()
            except:
                #if we fail to check the bus voltage we will set it to the max value plus one
                BusVoltage = 5.1 + 1
            if antennaDeployed == True:
                break
            elif (not antennaDeployed) and (BusVoltage > 3.75):
                antennaDoorObj.deployAntennaMain(
                )  #wait for the antenna to deploy
                await asyncio.sleep(300)
                break
            elif ((antennaVoltageCheckWait / 10) < voltageCount):
                antennaDoorObj.deployAntennaMain(
                )  #wait for the antenna to deploy
                await asyncio.sleep(300)
                break
            else:
                voltageCount += 1
                await asyncio.sleep(10)
    except:
        print("____Failed to deploy the antenna_____")
    # status is set True if all 4 doors are deployed, else it is False
    try:
        status = antennaDoorObj.readDoorStatus()
    except:
        status = False
        print("Failed to check antenna door status")
    if antennaDeployed == True:
        pass
    elif status == True:
        antennaDeployed = True
    else:
        antennaDeployed = False

    recordData(bootCount, antennaDeployed, lastMode)

    try:  # Cancels attitude collection tasks
        for t in tasks:
            t.cancel()
        print('Successfully cancelled BOOT mode background tasks')
    except asyncio.exceptions.CancelledError:
        print("Exception thrown cancelling task - This is normal")

    if not antennaDeployed:
        await asyncio.gather(antennaDeploy.run())
        print('Running Antenna Deployment Mode')
        antennaDeployed = True
        print("Antenna Deployed = ", antennaDeployed)
        recordData(bootCount, antennaDeployed, lastMode)  # Save into files
    elif lastMode == 4:
        print('Running Post Boom Deploy')
        lastMode = 4
        recordData(bootCount, antennaDeployed, lastMode)  # Save into files
        await asyncio.gather(postBoomDeploy.run())
    else:
        print('Running preBoom Deploy')
        lastMode = 2
        recordData(bootCount, antennaDeployed, lastMode)  # Save into files
        await asyncio.gather(preBoomDeploy.run())
        lastMode = 3
        recordData(bootCount, antennaDeploy, lastMode)
        print("Finished running preBoomDeploy")

    while True:  # This loop executes the rest of the flight logic
        # pre boom deploy
        print("Entered the loop that chooses the next mission mode.")
        recordData(bootCount, antennaDeployed, lastMode)  # Save into files
        if ((antennaDeployed == True) and (lastMode != 3) and (lastMode != 4)):
            print('Running pre-Boom deploy')
            lastMode = 2
            recordData(bootCount, antennaDeployed, lastMode)
            await asyncio.gather(
                preBoomDeploy.run()
            )  # Execute pre-boom deploy, then move to post-boom deploy
            print("Finished preBoomDeploy")
            lastMode = 3
            recordData(bootCount, antennaDeployed, lastMode)
        elif ((antennaDeployed == True) and (lastMode == 3)):
            print('Running Boom Deploy')
            await asyncio.gather(
                boomDeploy.run()
            )  # Execute boom deployment, start post-boom deploy
            lastMode = 4
            recordData(bootCount, antennaDeployed, lastMode)
        else:  # Post-Boom Deploy
            print('Running post-Boom Deploy')
            recordData(bootCount, antennaDeployed, lastMode)  # Save into files
            await asyncio.gather(postBoomDeploy.run())
import sys
sys.path.append('../')
import asyncio
from flightLogic.missionModes.heartBeat import heart_beat
""" Tests if heartbeat is working """

heartBeatObj = heart_beat()
print("Starting receive.")
asyncio.run(heartBeatObj.heartBeatRun())