source: src/mlx/flight.py@ 85:42b688827d63

Last change on this file since 85:42b688827d63 was 84:40b2d74e74f4, checked in by István Váradi <ivaradi@…>, 13 years ago

Created an integer entry widget and made use of it for entering the cargo weight and the takeoff speeds.

File size: 3.9 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 def setStage(self, timestamp, stage):
78 """Set the flight stage.
79
80 Returns if the stage has really changed."""
81 if stage!=self._stage:
82 self._stage = stage
83 self._gui.setStage(stage)
84 self.logger.stage(timestamp, stage)
85 if stage==const.STAGE_END:
86 with self._endCondition:
87 self._endCondition.notify()
88 return True
89 else:
90 return False
91
92 def handleFault(self, faultID, timestamp, what, score):
93 """Handle the given fault.
94
95 faultID as a unique ID for the given kind of fault. If another fault of
96 this ID has been reported earlier, it will be reported again only if
97 the score is greater than last time. This ID can be, e.g. the checker
98 the report comes from."""
99 self.logger.fault(faultID, timestamp, what, score)
100 self._gui.setRating(self.logger.getRating())
101
102 def handleNoGo(self, faultID, timestamp, what, shortReason):
103 """Handle a No-Go fault."""
104 self.logger.noGo(faultID, timestamp, what)
105 self._gui.setNoGo(shortReason)
106
107 def flareStarted(self, flareStart, flareStartFS):
108 """Called when the flare time has started."""
109 self._flareStart = flareStart
110 self._flareStartFS = flareStartFS
111
112 def flareFinished(self, flareEnd, flareEndFS):
113 """Called when the flare time has ended.
114
115 Return a tuple of the following items:
116 - a boolean indicating if FS time is used
117 - the flare time
118 """
119 if self.flareTimeFromFS:
120 return (True, flareEndFS - self._flareStartFS)
121 else:
122 return (False, flareEnd - self._flareStart)
123
124 def wait(self):
125 """Wait for the flight to end."""
126 with self._endCondition:
127 while self._stage!=const.STAGE_END:
128 self._endCondition.wait(1)
129
130#---------------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.