lpcmanager

Smarteh 485: slave address of RX buffer must match the address of sent TX buffer in order to be accepted. If reception is not successful data is not copied to beremiz buffer (memcpy()).
# -*- coding: utf-8 -*-
#This file is part of Beremiz, a Integrated Development Environment for
#programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
#
#Copyright (C) 2015 : Yvan ROCH
#
#See COPYING file for copyrights details.
#
#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU General Public
#License as published by the Free Software Foundation; either
#version 2.1 of the License, or (at your option) any later version.
#
#This library is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#General Public License for more details.
#
#You should have received a copy of the GNU General Public
#License along with this library; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
import wx
from os.path import expanduser
class FirmwareUpdateDialog(wx.Dialog):
"""
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'))
# 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.SetRange(1, 1024)
self.SpinCtrlFirmwareUpdateChunksSize.SetValue(256)
# Widgets for the reboot option
self.CheckBoxFirmwareUpdateReboot = wx.CheckBox(label=_('Reboot after update'), parent=self)
# Widgets for validation
self.ButtonSizer = self.CreateButtonSizer(wx.OK|wx.CANCEL)
# Sizers
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)
# Populate Main sizer
self.MainSizer.Add(self.SizerFirmwareUpdateImageFile, flag=wx.EXPAND)
self.MainSizer.Add(self.SizerFirmwareUpdateTypeChunks, flag=wx.EXPAND)
# Make the main sizer rows and columns growable
self.MainSizer.AddGrowableCol(0)
self.MainSizer.AddGrowableRow(0)
self.MainSizer.AddGrowableRow(1)
# Populate Update image file sizer
self.SizerFirmwareUpdateImageFile.Add(self.StaticTextFirmwareUpdateImageFile, border=20,
flag=wx.TOP|wx.LEFT)
self.SizerFirmwareUpdateImageFile.Add((0,0))
self.SizerFirmwareUpdateImageFile.Add(self.TextCtrltFirmwareUpdateImageFile, border=20,
flag=wx.LEFT)
self.SizerFirmwareUpdateImageFile.Add(self.ButtonFirmwareUpdateImageFile, border=20,
flag=wx.RIGHT|wx.ALIGN_RIGHT)
# Populate Sizer for update type and chunks size
self.SizerFirmwareUpdateTypeChunks.Add(self.StaticTextFirmwareUpdateType, border=20,
flag=wx.TOP|wx.LEFT)
self.SizerFirmwareUpdateTypeChunks.Add(self.StaticTextFirmwareUpdateChunksSize, border=20,
flag=wx.TOP|wx.LEFT)
self.SizerFirmwareUpdateTypeChunks.Add(self.RadioButtonFirmwareUpdateTypeLinuxKernel, border=20,
flag=wx.LEFT)
self.SizerFirmwareUpdateTypeChunks.Add(self.SpinCtrlFirmwareUpdateChunksSize, border=20,
flag=wx.LEFT)
self.SizerFirmwareUpdateTypeChunks.Add(self.RadioButtonFirmwareUpdateTypeLinuxDTB, border=20,
flag=wx.LEFT)
self.SizerFirmwareUpdateTypeChunks.Add(self.CheckBoxFirmwareUpdateReboot,border=20,
flag=wx.LEFT)
self.SizerFirmwareUpdateTypeChunks.Add(self.RadioButtonFirmwareUpdateTypeRootFs, border=20,
flag=wx.LEFT)
self.SizerFirmwareUpdateTypeChunks.Add(self.ButtonSizer, border=20, flag=wx.ALIGN_RIGHT|wx.RIGHT)
# 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)
# Set the main sizer
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:
path = dlg.GetPath()
self.TextCtrltFirmwareUpdateImageFile.SetValue(path)
dlg.Destroy()
def GetFirmwareImageFile(self):
return self.TextCtrltFirmwareUpdateImageFile.GetValue()
def GetFirmwareUpdateType(self):
if self.RadioButtonFirmwareUpdateTypeLinuxKernel.GetValue() == True:
return 1
elif self.RadioButtonFirmwareUpdateTypeLinuxDTB.GetValue() == True:
return 2
elif self.RadioButtonFirmwareUpdateTypeRootFs.GetValue() == True:
return 3
else:
return 0
def GetChunksSize(self):
return self.SpinCtrlFirmwareUpdateChunksSize.GetValue()*1024
def GetReboot(self):
return self.CheckBoxFirmwareUpdateReboot.GetValue()