--- a/FirmwareUpdateDialog.py Fri Aug 24 14:29:40 2018 +0200
+++ b/FirmwareUpdateDialog.py Tue Sep 04 10:39:37 2018 +0200
@@ -29,91 +29,64 @@
This class is the dialog for firmware update parameters selection
- def _init_ctrls(self, parent):
- wx.Dialog.__init__(self, parent=parent, size=wx.Size(600, 250), title=_('Firmware Update'))
+ def __init__(self, parent): + wx.Dialog.__init__(self, parent=parent, title=_('Firmware Update')) # Widgets for the update image file selection
- self.StaticTextFirmwareUpdateImageFile = wx.StaticText(label=_('Update image file:'), parent=self)
self.TextCtrltFirmwareUpdateImageFile = wx.TextCtrl(self)
- self.TextCtrltFirmwareUpdateImageFile.SetMinSize((440, -1))
self.ButtonFirmwareUpdateImageFile = wx.Button(label=_('Add image file'), parent=self)
self.Bind(wx.EVT_BUTTON, self.OnButtonFirmwareUpdateImageFile, id=self.ButtonFirmwareUpdateImageFile.GetId())
- # Widgets for the update type
- self.StaticTextFirmwareUpdateType = wx.StaticText(label=_('Update type:'), parent=self)
- self.RadioButtonFirmwareUpdateTypeLinuxKernel = wx.RadioButton(self, -1,
- _('Linux kernel'), (10, 10), style=wx.RB_GROUP)
- self.RadioButtonFirmwareUpdateTypeLinuxDTB = wx.RadioButton(self, -1,
- _('Linux DTB'), (10, 30))
- self.RadioButtonFirmwareUpdateTypeRootFs = wx.RadioButton(self, -1,
- _('Root file system'), (10, 50))
# Widgets for the chunks size
- self.StaticTextFirmwareUpdateChunksSize = wx.StaticText(label=_('Chunks size in KiB:'), parent=self)
- self.SpinCtrlFirmwareUpdateChunksSize = wx.SpinCtrl(parent=self , size = (60, -1))
+ self.SpinCtrlFirmwareUpdateChunksSize = wx.SpinCtrl(parent=self) self.SpinCtrlFirmwareUpdateChunksSize.SetRange(1, 1024)
self.SpinCtrlFirmwareUpdateChunksSize.SetValue(256)
- # Widgets for the reboot option
- self.CheckBoxFirmwareUpdateReboot = wx.CheckBox(label=_('Reboot after update'), parent=self)
self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL)
- self.MainSizer = wx.FlexGridSizer(cols=1, rows=2)
- self.SizerFirmwareUpdateImageFile = wx.FlexGridSizer(cols=2, rows=2, hgap=10, vgap=10)
- self.SizerFirmwareUpdateTypeChunks = wx.FlexGridSizer(cols=2, rows=4, hgap=10, vgap=10)
- self.MainSizer.Add(self.SizerFirmwareUpdateImageFile, flag=wx.EXPAND)
- self.MainSizer.Add(self.SizerFirmwareUpdateTypeChunks, flag=wx.EXPAND)
+ self.SizerFirmwareUpdateImageFile = wx.FlexGridSizer(cols=2, rows=1) + self.SizerFirmwareUpdateImageFile.AddGrowableCol(0) + self.SizerFirmwareUpdateImageFile.AddGrowableRow(0) - # Make the main sizer rows and columns growable
- self.MainSizer.AddGrowableCol(0)
- self.MainSizer.AddGrowableRow(0)
- self.MainSizer.AddGrowableRow(1)
+ self.SizerFirmwareUpdateImageFile.Add(self.TextCtrltFirmwareUpdateImageFile, + flag=wx.LEFT|wx.EXPAND) + self.SizerFirmwareUpdateImageFile.Add(self.ButtonFirmwareUpdateImageFile, + flag=wx.RIGHT|wx.ALIGN_RIGHT) + self.SizerFirmwareUpdateImageFileBoxSizer = wx.StaticBoxSizer(wx.StaticBox(self, label=_('Update image file:')), wx.VERTICAL) + self.SizerFirmwareUpdateImageFileBoxSizer.AddSizer(self.SizerFirmwareUpdateImageFile, flag=wx.EXPAND) - # Populate Update image file sizer
- self.SizerFirmwareUpdateImageFile.Add(self.StaticTextFirmwareUpdateImageFile, border=20,
- self.SizerFirmwareUpdateImageFile.Add((0,0))
- self.SizerFirmwareUpdateImageFile.Add(self.TextCtrltFirmwareUpdateImageFile, border=20,
- self.SizerFirmwareUpdateImageFile.Add(self.ButtonFirmwareUpdateImageFile, border=20,
- flag=wx.RIGHT|wx.ALIGN_RIGHT)
+ self.RadioBoxFirmwareUpdateTypeChunks = wx.RadioBox( + self, -1, _('Update type:'), wx.DefaultPosition, wx.DefaultSize, + [_('Linux kernel'), _('Linux DTB'), _('Root file system')], + self.RadioBoxFirmwareUpdateTypeChunks.SetSelection(2) - # Populate Sizer for update type and chunks size
- self.SizerFirmwareUpdateTypeChunks.Add(self.StaticTextFirmwareUpdateType, border=20,
- self.SizerFirmwareUpdateTypeChunks.Add(self.StaticTextFirmwareUpdateChunksSize, border=20,
- self.SizerFirmwareUpdateTypeChunks.Add(self.RadioButtonFirmwareUpdateTypeLinuxKernel, border=20,
- self.SizerFirmwareUpdateTypeChunks.Add(self.SpinCtrlFirmwareUpdateChunksSize, border=20,
- self.SizerFirmwareUpdateTypeChunks.Add(self.RadioButtonFirmwareUpdateTypeLinuxDTB, border=20,
- self.SizerFirmwareUpdateTypeChunks.Add(self.CheckBoxFirmwareUpdateReboot,border=20,
- self.SizerFirmwareUpdateTypeChunks.Add(self.RadioButtonFirmwareUpdateTypeRootFs, border=20,
- self.SizerFirmwareUpdateTypeChunks.Add(self.ButtonSizer, border=20, flag=wx.ALIGN_RIGHT|wx.RIGHT)
+ self.SizerFirmwareUpdateSizeChunks = wx.StaticBoxSizer(wx.StaticBox(self, label=_('Chunks size in KiB:')), wx.VERTICAL) + self.SizerFirmwareUpdateSizeChunks.Add(self.SpinCtrlFirmwareUpdateChunksSize, - # Make the rows and columns growable
- self.SizerFirmwareUpdateImageFile.AddGrowableCol(0)
- self.SizerFirmwareUpdateImageFile.AddGrowableCol(1)
- self.SizerFirmwareUpdateImageFile.AddGrowableRow(0)
- self.SizerFirmwareUpdateImageFile.AddGrowableRow(1)
- self.SizerFirmwareUpdateTypeChunks.AddGrowableCol(0)
- self.SizerFirmwareUpdateTypeChunks.AddGrowableCol(1)
+ self.SizerFirmwareUpdateChunks = wx.FlexGridSizer(cols=2, rows=1) + self.SizerFirmwareUpdateChunks.AddGrowableCol(0) + self.SizerFirmwareUpdateChunks.AddGrowableCol(1) + self.SizerFirmwareUpdateChunks.Add(self.RadioBoxFirmwareUpdateTypeChunks, flag=wx.EXPAND|wx.RIGHT, border=20) + self.SizerFirmwareUpdateChunks.Add(self.SizerFirmwareUpdateSizeChunks, flag=wx.EXPAND) + self.MainSizer = wx.FlexGridSizer(cols=1, rows=3) + self.MainSizer.AddGrowableCol(0) + self.MainSizer.AddGrowableRow(1) + self.MainSizer.AddSizer(self.SizerFirmwareUpdateImageFileBoxSizer, flag=wx.EXPAND|wx.LEFT|wx.TOP|wx.RIGHT, border=20) + self.MainSizer.AddSizer(self.SizerFirmwareUpdateChunks, flag=wx.EXPAND|wx.LEFT|wx.TOP|wx.RIGHT, border=20) + self.MainSizer.AddSizer(self.ButtonSizer, flag=wx.ALIGN_RIGHT|wx.ALL, border=20) + self.MainSizer.SetSizeHints(self) self.SetSizer(self.MainSizer)
- def __init__(self, parent):
- self._init_ctrls(parent)
def OnButtonFirmwareUpdateImageFile(self, event):
dlg = wx.FileDialog(self, _("Choose a firmware image file"), expanduser("~"), "", "*", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
@@ -125,17 +98,11 @@
return self.TextCtrltFirmwareUpdateImageFile.GetValue()
def GetFirmwareUpdateType(self):
- if self.RadioButtonFirmwareUpdateTypeLinuxKernel.GetValue() == True:
- elif self.RadioButtonFirmwareUpdateTypeLinuxDTB.GetValue() == True:
- elif self.RadioButtonFirmwareUpdateTypeRootFs.GetValue() == True:
+ res = self.RadioBoxFirmwareUpdateTypeChunks.GetSelection() + if res == wx.NOT_FOUND: return self.SpinCtrlFirmwareUpdateChunksSize.GetValue()*1024
- return self.CheckBoxFirmwareUpdateReboot.GetValue()
--- a/HostFirmwareUpdater.py Fri Aug 24 14:29:40 2018 +0200
+++ b/HostFirmwareUpdater.py Tue Sep 04 10:39:37 2018 +0200
@@ -39,12 +39,11 @@
class HostFirmwareUpdater(object):
# Create a new HostFirmwareUpdater
- def __init__(self, controller, firmwareImagePath, updateType, chunksSize, reboot, dialog):
+ def __init__(self, controller, firmwareImagePath, updateType, chunksSize, dialog): self.firmwareImagePath = firmwareImagePath
self.updateType = updateType
self.chunksSize = chunksSize
self.controller = controller
self.controller.logger.write(_("HostFirmwareUpdater init.\n"))
@@ -71,10 +70,7 @@
raise Exception(textError)
# The update script is now running: Feeding the update script with firmware image data
- # Here, the update is successful, reboot?
def _CreateFirmwareImageFileSizeFile(self):
# Note Pyro exceptions are already caught by catcher_func and PyroCatcher in PyroProxyProxy
status, textError = self.controller._connector.CreateFirmwareImageFileSizeFile(self.firmwareImageFileSize)
@@ -139,7 +135,7 @@
raise Exception(textError)
self.dialog.Update(100,_("Firmware update successful."))
- self.controller.logger.write(_("Firmware update log: \n\n") + textError + "\nFirmware update successful.")
+ self.controller.logger.write(_("Firmware update log: \n\n") + textError + "\nFirmware update successful.\n") - def _RebootTarget(self):
+ def RebootTarget(self): self.controller._connector.RebootTarget()
--- a/LPCProjectController.py Fri Aug 24 14:29:40 2018 +0200
+++ b/LPCProjectController.py Tue Sep 04 10:39:37 2018 +0200
@@ -171,7 +171,6 @@
imageFilePath = dialog.GetFirmwareImageFile()
updateType = dialog.GetFirmwareUpdateType()
chunksSize = dialog.GetChunksSize()
- reboot = dialog.GetReboot()
if answer == wx.ID_CANCEL:
@@ -207,8 +206,6 @@
self.logger.write(_("Chunks size : %d KiB\n") % chunksSize)
- self.logger.write(_("Reboot after update : %s\n") % ("Yes" if reboot else "No"))
# Last confirmation before firmware update
answer = wx.MessageBox(_('Are you sure to launch the firmware update for the selected PLC?'),
_('Firmware Update'), wx.YES_NO | wx.CENTRE | wx.NO_DEFAULT,
@@ -241,22 +238,28 @@
# Lauch the firmaware update on the remote PLC
- updater = HostFirmwareUpdater(self, imageFilePath, updateType, chunksSize, reboot, dlg)
+ updater = HostFirmwareUpdater(self, imageFilePath, updateType, chunksSize, dlg) self.logger.write_error(str(e) + "\n")
self.logger.write_error(_("Firmware update failed!\n"))
+ if not dlg.WasCancelled(): + dlg.Update(100, _("Firmware update failed!\n(%s)"%str(e))) self.firmwareUpadateIsRunning = False
+ answer = wx.MessageBox(_('Firmware update requires reboot to complete. Reboot PLC now?'), + _('Firmware Update'), wx.YES_NO | wx.CENTRE | wx.NO_DEFAULT, + self.logger.write(_("Rebooting PLC.\n")) - if not dlg.WasCanceled():
- dlg.Update(0, _("Firmware update failed!\n(%s)"%str(e)))
- self.firmwareUpadateIsRunning = False