source: src/mlx/flight.py@ 30:b8f08115af4c

Last change on this file since 30:b8f08115af4c was 30:b8f08115af4c, checked in by István Váradi <ivaradi@…>, 12 years ago

Fault messages are routed through the Flight object

File size: 3.2 KB
Line 
1# Module related to the high-level tracking of the flight
2
3#---------------------------------------------------------------------------------------
4
5import const
6
7import threading
8
9#---------------------------------------------------------------------------------------
10
11class Options(object):
12 """Various configuration options."""
13 def __init__(self):
14 """Construct the object with default values."""
15 self.fs2Crew = False
16 self.compensation = None
17
18#---------------------------------------------------------------------------------------
19
20class Flight(object):
21 """The object with the global flight state.
22
23 It is also the hub for the other main objects participating in the handling of
24 the flight."""
25 def __init__(self, logger, gui):
26 """Construct the flight."""
27 self._stage = None
28 self.logger = logger
29 self._gui = gui
30
31 self.cruiseAltitude = None
32 self.flareTimeFromFS = False
33 self.entranceExam = False
34 self.zfw = 50000
35
36 self.options = Options()
37
38 self.aircraftType = None
39 self.aircraft = None
40 self.simulator = None
41
42 self._endCondition = threading.Condition()
43
44 self._flareStart = None
45 self._flareStartFS = None
46
47 @property
48 def stage(self):
49 """Get the flight stage."""
50 return self._stage
51
52 def setStage(self, timestamp, stage):
53 """Set the flight stage.
54
55 Returns if the stage has really changed."""
56 if stage!=self._stage:
57 self._stage = stage
58 self.logger.stage(timestamp, stage)
59 if stage==const.STAGE_END:
60 with self._endCondition:
61 self._endCondition.notify()
62 return True
63 else:
64 return False
65
66 def handleFault(self, faultID, timestamp, what, score):
67 """Handle the given fault.
68
69 faultID as a unique ID for the given kind of fault. If another fault of
70 this ID has been reported earlier, it will be reported again only if
71 the score is greater than last time. This ID can be, e.g. the checker
72 the report comes from."""
73 self.logger.fault(faultID, timestamp, what, score)
74
75 def handleNoGo(self, faultID, timestamp, what, shortReason):
76 """Handle a No-Go fault."""
77 self.logger.noGo(faultID, timestamp, what)
78
79 def flareStarted(self, flareStart, flareStartFS):
80 """Called when the flare time has started."""
81 self._flareStart = flareStart
82 self._flareStartFS = flareStartFS
83
84 def flareFinished(self, flareEnd, flareEndFS):
85 """Called when the flare time has ended.
86
87 Return a tuple of the following items:
88 - a boolean indicating if FS time is used
89 - the flare time
90 """
91 if self.flareTimeFromFS:
92 return (True, flareEndFS - self._flareStartFS)
93 else:
94 return (False, flareEnd - self._flareStart)
95
96 def wait(self):
97 """Wait for the flight to end."""
98 with self._endCondition:
99 while self._stage!=const.STAGE_END:
100 self._endCondition.wait(1)
101
102#---------------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.