$search
00001 # Software License Agreement (BSD License) 00002 # 00003 # Copyright (c) 2008, Willow Garage, Inc. 00004 # All rights reserved. 00005 # 00006 # Redistribution and use in source and binary forms, with or without 00007 # modification, are permitted provided that the following conditions 00008 # are met: 00009 # 00010 # * Redistributions of source code must retain the above copyright 00011 # notice, this list of conditions and the following disclaimer. 00012 # * Redistributions in binary form must reproduce the above 00013 # copyright notice, this list of conditions and the following 00014 # disclaimer in the documentation and/or other materials provided 00015 # with the distribution. 00016 # * Neither the name of the Willow Garage nor the names of its 00017 # contributors may be used to endorse or promote products derived 00018 # from this software without specific prior written permission. 00019 # 00020 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00021 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00022 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00023 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00024 # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00025 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00026 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00027 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00028 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00029 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00030 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00031 # POSSIBILITY OF SUCH DAMAGE. 00032 00033 # modifications to power_state_control.py to work with p2os_dashboard 00034 # Copyright (C) 2010 David Feil-Seifer [dfseifer@usc.edu], Edward T. Kaszubski [kaszubsk@usc.edu] 00035 # 00036 # This program is free software; you can redistribute it and/or modify 00037 # it under the terms of the GNU General Public License as published by 00038 # the Free Software Foundation; either version 2 of the License, or 00039 # (at your option) any later version. 00040 # 00041 # This program is distributed in the hope that it will be useful, 00042 # but WITHOUT ANY WARRANTY; without even the implied warranty of 00043 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00044 # GNU General Public License for more details. 00045 # 00046 # You should have received a copy of the GNU General Public License 00047 # along with this program; if not, write to the Free Software 00048 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 00049 # MA 02110-1301, USA. 00050 00051 import roslib 00052 roslib.load_manifest('p2os_dashboard') 00053 00054 import wx 00055 00056 #from pr2_msgs.msg import PowerState, PowerBoardState 00057 #from pr2_power_board.srv import PowerBoardCommand, PowerBoardCommandRequest 00058 00059 from os import path 00060 00061 class PowerStateControl(wx.Window): 00062 def __init__(self, parent, id, icons_path): 00063 wx.Window.__init__(self, parent, id, wx.DefaultPosition, wx.Size(60, 32)) 00064 00065 self._pct = 0 00066 self._vlt = 0 00067 00068 self._left_bitmap = wx.Bitmap(path.join(icons_path, "battery-minus.png"), wx.BITMAP_TYPE_PNG) 00069 self._right_bitmap = wx.Bitmap(path.join(icons_path, "battery-plus.png"), wx.BITMAP_TYPE_PNG) 00070 self._plug_bitmap = wx.Bitmap(path.join(icons_path, "battery-charging.png"), wx.BITMAP_TYPE_PNG) 00071 self._background_bitmap = wx.Bitmap(path.join(icons_path, "battery-background.png"), wx.BITMAP_TYPE_PNG) 00072 self._green = wx.Bitmap(path.join(icons_path, "battery-green-bar.png"), wx.BITMAP_TYPE_PNG) 00073 self._yellow = wx.Bitmap(path.join(icons_path, "battery-yellow-bar.png"), wx.BITMAP_TYPE_PNG) 00074 self._red = wx.Bitmap(path.join(icons_path, "battery-red-bar.png"), wx.BITMAP_TYPE_PNG) 00075 00076 self.SetSize(wx.Size(self._left_bitmap.GetWidth() + self._right_bitmap.GetWidth() + self._background_bitmap.GetWidth(), 32)) 00077 00078 self._start_x = self._left_bitmap.GetWidth() 00079 self._end_x = self.GetSize().x - self._right_bitmap.GetWidth() 00080 self._width = self._end_x - self._start_x 00081 00082 self._plugged_in = False 00083 00084 self.Bind(wx.EVT_PAINT, self.on_paint) 00085 00086 def on_paint(self, evt): 00087 dc = wx.BufferedPaintDC(self) 00088 00089 dc.SetBackground(wx.Brush(self.GetBackgroundColour())) 00090 dc.Clear() 00091 00092 w = self.GetSize().GetWidth() 00093 h = self._left_bitmap.GetHeight() 00094 00095 color_bitmap = None 00096 if (self._pct > 0.5): 00097 color_bitmap = self._green 00098 elif (self._pct > 0.3): 00099 color_bitmap = self._yellow 00100 else: 00101 color_bitmap = self._red 00102 00103 dc.DrawBitmap(self._background_bitmap, self._start_x, 0, True) 00104 00105 color_image = color_bitmap.ConvertToImage() 00106 scaled_color_image = color_image.Rescale(round(self._width * self._pct), color_bitmap.GetHeight()) 00107 color_bitmap = wx.BitmapFromImage(scaled_color_image) 00108 dc.DrawBitmap(color_bitmap, self._start_x, 0, True) 00109 dc.DrawBitmap(self._left_bitmap, 0, 0, True) 00110 dc.DrawBitmap(self._right_bitmap, self._end_x, 0, True) 00111 00112 def set_power_state(self, msg): 00113 last_pct = self._pct 00114 last_vlt = self._vlt 00115 last_plugged_in = self._plugged_in 00116 00117 self._pct = (msg.voltage - 11.3) / 2.2 #msg.relative_capacity / 100.0 00118 if self._pct > 1.0: 00119 self._pct = 1.0 00120 00121 if self._pct < 0.0: 00122 self._pct = 0.0 00123 self._vlt = msg.voltage 00124 00125 self.Refresh() 00126 00127 def updateToolTip(self): 00128 self.SetToolTip(wx.ToolTip("Battery: %.2f%% (%.2f v)"%(self._pct * 100.0, self._vlt))) 00129 self.Refresh() 00130 00131 00132 def set_stale(self): 00133 self._plugged_in = 0 00134 self._pct = 0 00135 self._vlt = 0 00136 self.SetToolTip(wx.ToolTip("Battery: Stale")) 00137 00138 self.Refresh()