Subversion Repositories Projects

Rev

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