00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 import roslib
00034 roslib.load_manifest('elektron_dashboard')
00035
00036 import wx
00037
00038 from os import path
00039
00040 def non_zero(value):
00041 if value < 0.00001 and value > -0.00001:
00042 return 0.00001
00043 return value
00044
00045
00046 class CpuFrame(wx.Window):
00047 def __init__(self, parent, id):
00048 wx.Window.__init__(self, parent, id, wx.DefaultPosition, wx.Size(82, 32))
00049
00050 self._cur_freq = 0.0
00051 self._max_freq = 0.0
00052 self._usage = 0.0
00053
00054 self._buf_size = 40
00055
00056
00057 self._buffer = [0.0] * self._buf_size
00058 self._cnt = 0
00059
00060 self.Bind(wx.EVT_PAINT, self.on_paint)
00061
00062 def on_paint(self, evt):
00063 dc = wx.BufferedPaintDC(self)
00064
00065 dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
00066 dc.Clear()
00067
00068 w = self.GetSize().GetWidth()
00069
00070 br_black = wx.Brush(wx.Colour(0, 0, 0, 255))
00071 br_white = wx.Brush(wx.Colour(255, 255, 255, 255))
00072
00073 pen_black = wx.Pen(wx.Colour(0, 0, 0, 255))
00074 pen_white = wx.Pen(wx.Colour(255, 255, 255, 255))
00075
00076 dc.SetBrush(br_black)
00077
00078 dc.DrawRectangle(0, 0, w, 32)
00079
00080 dc.SetBrush(br_white)
00081 dc.SetPen(pen_white)
00082
00083 w_step = (w - 2) / self._buf_size
00084 for i in range(self._buf_size):
00085 id = (self._cnt + i) % self._buf_size
00086 us = int(self._buffer[id])
00087 r = 0
00088 g = 0
00089 if (us <= 50):
00090 g = 255
00091 r = int(us*5.1)
00092 else:
00093 r = 255
00094 g = 255 - int((us-50)*5.1)
00095 dc.SetPen(wx.Pen(wx.Colour(r, g, 0, 255)))
00096 dc.SetBrush(wx.Brush(wx.Colour(r, g, 0, 255)))
00097 dc.DrawRectangle(1 + i*w_step, 31, w_step, -us * 0.3)
00098
00099 fnt = dc.GetFont()
00100 fnt.SetFamily(wx.FONTFAMILY_MODERN)
00101 fnt.SetFaceName("FreeMono")
00102 fnt.SetWeight(wx.FONTWEIGHT_BOLD)
00103 fnt.SetPointSize(7)
00104
00105 dc.SetFont(fnt)
00106 dc.SetTextForeground(wx.Colour(0, 0, 0, 255))
00107 dc.DrawText('%3.0f%% %4.0fMHz' % (self._usage, self._cur_freq), 2, 2)
00108 dc.SetTextForeground(wx.Colour(255, 255, 255, 255))
00109 dc.DrawText('%3.0f%% %4.0fMHz' % (self._usage, self._cur_freq), 1, 1)
00110
00111
00112 def set_state(self, msg):
00113 self._usage = float(msg['usage'])
00114 self._cur_freq = float(msg["cur_freq"])
00115 self._max_freq = float(msg["max_freq"])
00116
00117 self._buffer[self._cnt] = self._usage
00118 self._cnt = (self._cnt + 1) % self._buf_size
00119
00120 self.Refresh()
00121
00122 def set_stale(self):
00123 self._cur_freq = 0.0
00124 self._max_freq = 0.0
00125 self._usage = 0.0
00126 self.Refresh()