source: src/mlx/flight.py@ 86:285443d1c1e2

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

The IntegerEntry widget is used for the VRef as well on the landing page

File size: 4.0 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 gui.resetFlightStatus()
32
33 self.flareTimeFromFS = False
34 self.entranceExam = False
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 @property
53 def zfw(self):
54 """Get the Zero-Fuel Weight of the flight."""
55 return self._gui.zfw
56
57 @property
58 def cruiseAltitude(self):
59 """Get the cruise altitude of the flight."""
60 return self._gui.cruiseAltitude
61
62 @property
63 def v1(self):
64 """Get the V1 speed of the flight."""
65 return self._gui.v1
66
67 @property
68 def vr(self):
69 """Get the Vr speed of the flight."""
70 return self._gui.vr
71
72 @property
73 def v2(self):
74 """Get the V2 speed of the flight."""
75 return self._gui.v2
76
77 @property
78 def vref(self):
79 """Get the VRef speed of the flight."""
80 return self._gui.vref
81
82 def setStage(self, timestamp, stage):
83 """Set the flight stage.
84
85 Returns if the stage has really changed."""
86 if stage!=self._stage:
87 self._stage = stage
88 self._gui.setStage(stage)
89 self.logger.stage(timestamp, stage)
90 if stage==const.STAGE_END:
91 with self._endCondition:
92 self._endCondition.notify()
93 return True
94 else:
95 return False
96
97 def handleFault(self, faultID, timestamp, what, score):
98 """Handle the given fault.
99
100 faultID as a unique ID for the given kind of fault. If another fault of
101 this ID has been reported earlier, it will be reported again only if
102 the score is greater than last time. This ID can be, e.g. the checker
103 the report comes from."""
104 self.logger.fault(faultID, timestamp, what, score)
105 self._gui.setRating(self.logger.getRating())
106
107 def handleNoGo(self, faultID, timestamp, what, shortReason):
108 """Handle a No-Go fault."""
109 self.logger.noGo(faultID, timestamp, what)
110 self._gui.setNoGo(shortReason)
111
112 def flareStarted(self, flareStart, flareStartFS):
113 """Called when the flare time has started."""
114 self._flareStart = flareStart
115 self._flareStartFS = flareStartFS
116
117 def flareFinished(self, flareEnd, flareEndFS):
118 """Called when the flare time has ended.
119
120 Return a tuple of the following items:
121 - a boolean indicating if FS time is used
122 - the flare time
123 """
124 if self.flareTimeFromFS:
125 return (True, flareEndFS - self._flareStartFS)
126 else:
127 return (False, flareEnd - self._flareStart)
128
129 def wait(self):
130 """Wait for the flight to end."""
131 with self._endCondition:
132 while self._stage!=const.STAGE_END:
133 self._endCondition.wait(1)
134
135#---------------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.