Rev 619 | Rev 626 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 619 | Rev 623 | ||
---|---|---|---|
Line 10... | Line 10... | ||
10 | 10 | ||
11 | import wx |
11 | import wx |
12 | import wx.lib |
12 | import wx.lib |
13 | import wx.lib.plot |
13 | import wx.lib.plot |
- | 14 | import wx.lib.newevent |
|
Line 14... | Line 15... | ||
14 | import wx.lib.newevent |
15 | import wx.lib.agw.speedmeter as speedmeter |
Line 15... | Line 16... | ||
15 | 16 | ||
16 | import mkProto |
17 | import mkProto |
- | 18 | ||
Line 17... | Line 19... | ||
17 | 19 | ||
18 | 20 | ||
19 | 21 | CHANNEL_NAMES = ["GyroYaw", "GyroRoll", "GyroNick", "Pressure", "Batt", "AccTop", "AccRoll", "AccNick"] |
|
20 | CHANNEL_NAMES = ["GyroYaw", "GyroRoll", "GyroNick", "Pressure", "Batt", "AccTop", "AccRoll", "AccNick"] |
22 | FS = 11111 |
Line 51... | Line 53... | ||
51 | # begin wxGlade: MeasureDialog.__init__ |
53 | # begin wxGlade: MeasureDialog.__init__ |
52 | kwds["style"] = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.THICK_FRAME |
54 | kwds["style"] = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.THICK_FRAME |
53 | wx.Dialog.__init__(self, *args, **kwds) |
55 | wx.Dialog.__init__(self, *args, **kwds) |
54 | self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL) |
56 | self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL) |
55 | self.button = wx.Button(self, -1, "STOP") |
57 | self.button = wx.Button(self, -1, "STOP") |
56 | - | ||
- | 58 | self.voltageCtrl = speedmeter.SpeedMeter(self, extrastyle=speedmeter.SM_DRAW_HAND | speedmeter.SM_DRAW_PARTIAL_SECTORS | speedmeter.SM_DRAW_MIDDLE_ICON ) |
|
- | 59 | self.speedCtrl = speedmeter.SpeedMeter(self, extrastyle=speedmeter.SM_DRAW_HAND | speedmeter.SM_DRAW_PARTIAL_SECTORS | speedmeter.SM_DRAW_MIDDLE_TEXT | speedmeter.SM_DRAW_SECONDARY_TICKS) |
|
57 | self.__set_properties() |
60 | self.__set_properties() |
58 | self.__do_layout() |
61 | self.__do_layout() |
Line 59... | Line 62... | ||
59 | 62 | ||
60 | self.Bind(wx.EVT_BUTTON, self.onButton, self.button) |
63 | self.Bind(wx.EVT_BUTTON, self.onButton, self.button) |
Line -... | Line 64... | ||
- | 64 | # end wxGlade |
|
- | 65 | ||
- | 66 | YELLOW = wx.Colour(255, 240, 0) |
|
- | 67 | BG = wx.Colour(0x80, 0x80, 0x80) |
|
- | 68 | # Configure Voltage Ctrl |
|
- | 69 | #self.voltageCtrl.SetAngleRange(-3.14/3, 3.14/3) |
|
- | 70 | self.voltageCtrl.SetAngleRange(0,pi) |
|
- | 71 | intervals = range(0, 5) |
|
- | 72 | self.voltageCtrl.SetIntervals(intervals) |
|
- | 73 | colours = [wx.RED, wx.GREEN, wx.GREEN, YELLOW] |
|
- | 74 | self.voltageCtrl.SetIntervalColours(colours) |
|
- | 75 | ticks = ["", "", "", "", ""] |
|
- | 76 | self.voltageCtrl.SetTicks(ticks) |
|
- | 77 | self.voltageCtrl.SetTicksColour(wx.WHITE) |
|
- | 78 | self.voltageCtrl.SetHandColour(YELLOW) |
|
- | 79 | ||
- | 80 | icon = wx.Icon("fuel.ico", wx.BITMAP_TYPE_ICO) |
|
- | 81 | icon.SetWidth(24) |
|
- | 82 | icon.SetHeight(24) |
|
- | 83 | ||
- | 84 | self.voltageCtrl.SetMiddleIcon(icon) |
|
- | 85 | self.voltageCtrl.SetSpeedBackground(BG) |
|
- | 86 | self.voltageCtrl.SetArcColour(wx.WHITE) |
|
- | 87 | self.voltageCtrl.SetSpeedValue(2) |
|
- | 88 | ||
- | 89 | ||
- | 90 | # Configure Speed Ctr; |
|
- | 91 | #self.speedCtrl.SetAngleRange(-pi/6, 7*pi/6) |
|
- | 92 | self.speedCtrl.SetAngleRange(0,pi) |
|
- | 93 | intervals = range(0, 261, 20) |
|
- | 94 | self.speedCtrl.SetIntervals(intervals) |
|
- | 95 | ||
- | 96 | colours = [BG]*(len(intervals)-1) |
|
- | 97 | for i in range(5,10): |
|
- | 98 | colours[i] = wx.GREEN |
|
- | 99 | self.speedCtrl.SetIntervalColours(colours) |
|
- | 100 | ticks = [str(interval) for interval in intervals] |
|
- | 101 | self.speedCtrl.SetTicks(ticks) |
|
- | 102 | self.speedCtrl.SetTicksColour(wx.WHITE) |
|
- | 103 | self.speedCtrl.SetNumberOfSecondaryTicks(1) |
|
- | 104 | self.speedCtrl.SetTicksFont(wx.Font(7, wx.SWISS, wx.NORMAL, wx.NORMAL)) |
|
- | 105 | self.speedCtrl.SetMiddleText("Speed") |
|
- | 106 | self.speedCtrl.SetMiddleTextColour(wx.WHITE) |
|
- | 107 | self.speedCtrl.SetMiddleTextFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD)) |
|
- | 108 | self.speedCtrl.SetHandColour(YELLOW) |
|
- | 109 | self.speedCtrl.SetSpeedBackground(BG) |
|
- | 110 | self.speedCtrl.SetArcColour(wx.WHITE) |
|
- | 111 | self.speedCtrl.SetSpeedValue(0) |
|
61 | # end wxGlade |
112 | |
62 | 113 | ||
63 | self.running = True |
114 | self.running = True |
64 | self.Bind(EVT_MEAS_STATUS_UPDATE, self.OnUpdate) |
115 | self.Bind(EVT_MEAS_STATUS_UPDATE, self.OnUpdate) |
65 | self.Bind(EVT_MEAS_DATA, self.OnData) |
116 | self.Bind(EVT_MEAS_DATA, self.OnData) |
66 | # The first argument that is passed to the constructor is the parent |
117 | # The first argument that is passed to the constructor is the parent |
- | 118 | self.app = args[0].app |
|
- | 119 | self.error = False |
|
Line 67... | Line 120... | ||
67 | self.app = args[0].app |
120 | self.firstVoltage = True |
68 | self.error = False |
121 | |
69 | 122 | ||
70 | def __set_properties(self): |
123 | def __set_properties(self): |
- | 124 | # begin wxGlade: MeasureDialog.__set_properties |
|
- | 125 | self.SetTitle("Measuring Status") |
|
71 | # begin wxGlade: MeasureDialog.__set_properties |
126 | self.text_ctrl_1.SetMinSize((400,300)) |
Line 72... | Line 127... | ||
72 | self.SetTitle("Measuring Status") |
127 | self.voltageCtrl.SetMinSize((50,-1)) |
73 | self.text_ctrl_1.SetMinSize((400,300)) |
128 | self.speedCtrl.SetMinSize((50,-1)) |
74 | # end wxGlade |
129 | # end wxGlade |
- | 130 | ||
75 | 131 | def __do_layout(self): |
|
76 | def __do_layout(self): |
132 | # begin wxGlade: MeasureDialog.__do_layout |
77 | # begin wxGlade: MeasureDialog.__do_layout |
133 | sizer_1 = wx.BoxSizer(wx.HORIZONTAL) |
78 | sizer_1 = wx.BoxSizer(wx.HORIZONTAL) |
134 | sizer_4 = wx.BoxSizer(wx.VERTICAL) |
79 | sizer_2 = wx.BoxSizer(wx.VERTICAL) |
135 | sizer_2 = wx.BoxSizer(wx.VERTICAL) |
80 | sizer_1.Add((20, 20), 0, 0, 0) |
136 | sizer_1.Add((20, 20), 0, 0, 0) |
81 | sizer_2.Add((20, 20), 0, 0, 0) |
137 | sizer_2.Add((20, 20), 0, 0, 0) |
82 | sizer_2.Add(self.text_ctrl_1, 1, wx.EXPAND, 0) |
138 | sizer_2.Add(self.text_ctrl_1, 1, wx.EXPAND, 0) |
83 | sizer_2.Add((20, 20), 0, 0, 0) |
139 | sizer_2.Add((20, 20), 0, 0, 0) |
- | 140 | sizer_2.Add(self.button, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) |
|
- | 141 | sizer_2.Add((20, 20), 0, 0, 0) |
|
- | 142 | sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) |
|
- | 143 | sizer_1.Add((20, 20), 0, 0, 0) |
|
84 | sizer_2.Add(self.button, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) |
144 | sizer_4.Add(self.voltageCtrl, 1, wx.EXPAND, 0) |
85 | sizer_2.Add((20, 20), 0, 0, 0) |
145 | sizer_4.Add(self.speedCtrl, 1, wx.EXPAND, 0) |
86 | sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) |
146 | sizer_1.Add(sizer_4, 1, wx.EXPAND, 0) |
87 | sizer_1.Add((20, 20), 0, 0, 0) |
147 | sizer_1.Add((20, 20), 0, 0, 0) |
Line 88... | Line 148... | ||
88 | self.SetSizer(sizer_1) |
148 | self.SetSizer(sizer_1) |
89 | sizer_1.Fit(self) |
149 | sizer_1.Fit(self) |
90 | self.Layout() |
150 | self.Layout() |
91 | # end wxGlade |
151 | # end wxGlade |
92 | 152 | ||
93 | def OnData(self, evt): |
153 | def OnData(self, evt): |
94 | print "Received Data" |
154 | print "Received Data" |
95 | self.app.AddTest2(evt.vibTest) |
155 | self.app.AddTest2(evt.vibTest) |
96 | 156 | ||
Line 104... | Line 164... | ||
104 | self.text_ctrl_1.WriteText("%s\n"%evt.msg) |
164 | self.text_ctrl_1.WriteText("%s\n"%evt.msg) |
105 | if (not self.running): |
165 | if (not self.running): |
106 | if (not self.error): |
166 | if (not self.error): |
107 | self.text_ctrl_1.SetBackgroundColour("Green") |
167 | self.text_ctrl_1.SetBackgroundColour("Green") |
108 | self.text_ctrl_1.write(" ") # so that the background is redrawn |
168 | self.text_ctrl_1.write(" ") # so that the background is redrawn |
109 | self.button.SetLabel("Close") |
169 | self.button.SetLabel("Close") |
- | 170 | ||
- | 171 | if evt.speed != None: |
|
- | 172 | self.speedCtrl.SetSpeedValue(evt.speed) |
|
- | 173 | ||
- | 174 | if evt.voltage != None: |
|
- | 175 | vmin,vmax,v = evt.voltage |
|
- | 176 | if self.firstVoltage: |
|
- | 177 | ticks = ["", "%.1f V"%vmin, "", "%.1f V"%vmax, ""] |
|
- | 178 | self.voltageCtrl.SetTicks(ticks) |
|
- | 179 | self.firstVoltage = False |
|
- | 180 | i = (v-vmin)/(vmax-vmin) # 0..1 |
|
- | 181 | i *= 2 |
|
- | 182 | i = i+1 |
|
- | 183 | i = min(max(i,0),5) |
|
- | 184 | self.voltageCtrl.SetSpeedValue(i) |
|
- | 185 | ||
Line 110... | Line 186... | ||
110 | 186 | ||
111 | 187 | ||
112 | def onButton(self, event): # wxGlade: MeasureDialog.<event_handler> |
188 | def onButton(self, event): # wxGlade: MeasureDialog.<event_handler> |
Line 572... | Line 648... | ||
572 | 648 | ||
573 | def _testCancel(self): |
649 | def _testCancel(self): |
574 | if self.cancel: |
650 | if self.cancel: |
Line 575... | Line 651... | ||
575 | raise Exception("Operation cancelled") |
651 | raise Exception("Operation cancelled") |
576 | 652 | ||
577 | def _sendEvent(self, msg, error=False): |
653 | def _sendEvent(self, msg=None, error=False, parVoltage=None, speed=None): |
Line 578... | Line 654... | ||
578 | evt = MeasStatusUpdateEvent(running=self.running, msg=msg, error=error) |
654 | evt = MeasStatusUpdateEvent(running=self.running, msg=msg, error=error, voltage=parVoltage, speed=speed) |
579 | wx.PostEvent(self.evtConsumer, evt) |
655 | wx.PostEvent(self.evtConsumer, evt) |
580 | 656 | ||
Line 602... | Line 678... | ||
602 | 678 | ||
603 | msg = self.mk.getDebugMsg() |
679 | msg = self.mk.getDebugMsg() |
604 | voltage = msg.getVoltage() |
680 | voltage = msg.getVoltage() |
605 | if (voltage == 0): |
681 | if (voltage == 0): |
- | 682 | minVoltage = 0 |
|
606 | minVoltage = 0 |
683 | maxVoltage = 1 |
607 | else: |
684 | else: |
608 | if (voltage > 4.2*3): |
685 | if (voltage > 4.2*3): |
609 | minVoltage = 4*3.5 |
686 | nbCells = 4 |
- | 687 | else: |
|
610 | else: |
688 | nbCells = 3 |
611 | minVoltage = 3*3.5 |
- | |
- | 689 | minVoltage = nbCells*3.5 |
|
612 | 690 | maxVoltage = nbCells*3.9 |
|
613 | self._sendEvent("Voltage: %2.1fV" % voltage) |
691 | self._sendEvent("Voltage: %2.1fV" % voltage) |
- | 692 | self._sendEvent("Min/Max Voltage: %2.1fV-%2.1fV" % (minVoltage, maxVoltage), parVoltage=(minVoltage, maxVoltage, voltage)) |
|
Line 614... | Line 693... | ||
614 | self._sendEvent("Minimum Voltage: %2.1fV" % minVoltage) |
693 | |
615 | 694 | ||
Line 616... | Line 695... | ||
616 | self._sendEvent("Starting motor(s) (speed=%d)... " % self.param.motorStartupSpeed) |
695 | self._sendEvent("Starting motor(s) (speed=%d)... " % self.param.motorStartupSpeed, speed=self.param.motorStartupSpeed) |
617 | self._setMotorSpeed(self.param.motorStartupSpeed, self.param.motorStartupSettlingTime) |
696 | self._setMotorSpeed(self.param.motorStartupSpeed, self.param.motorStartupSettlingTime) |
618 | 697 | ||
Line 619... | Line 698... | ||
619 | for speed in self.param.speeds: |
698 | for speed in self.param.speeds: |
620 | self._sendEvent("Changing motor speed to %d... " % speed) |
699 | self._sendEvent("Changing motor speed to %d... " % speed, speed=speed) |
621 | self._setMotorSpeed(speed, 1) |
700 | self._setMotorSpeed(speed, 1) |
622 | 701 | ||
Line 623... | Line 702... | ||
623 | for channel in self.param.channels: |
702 | for channel in self.param.channels: |
624 | self._setMotorSpeed(speed, .1) |
703 | self._setMotorSpeed(speed, .1) |
Line 625... | Line 704... | ||
625 | msg = self.mk.getDebugMsg() |
704 | msg = self.mk.getDebugMsg() |
626 | voltage = msg.getVoltage() |
705 | voltage = msg.getVoltage() |
627 | 706 |