From 3635a9498e74bb248dbaf1bc302065b05e47faa7 Mon Sep 17 00:00:00 2001 From: Thomas Kunze Date: Wed, 28 Mar 2018 23:27:50 +0200 Subject: [PATCH] add editing for parameters --- CreateKnxProd.csproj | 5 +- Extensions/Extensions.cs | 20 +++ MainWindow.xaml | 26 ++- MainWindowViewModel.cs | 153 +++++++++++------- Model/ParameterRefRef_t.cs | 16 ++ ...{CatalogSection_t.cs => ParameterRef_t.cs} | 5 +- Model/Parameter_t.cs | 20 +++ 7 files changed, 181 insertions(+), 64 deletions(-) create mode 100644 Extensions/Extensions.cs create mode 100644 Model/ParameterRefRef_t.cs rename Model/{CatalogSection_t.cs => ParameterRef_t.cs} (53%) create mode 100644 Model/Parameter_t.cs diff --git a/CreateKnxProd.csproj b/CreateKnxProd.csproj index af9fd91..4379b4c 100644 --- a/CreateKnxProd.csproj +++ b/CreateKnxProd.csproj @@ -58,14 +58,17 @@ Designer - + + + + MSBuild:Compile diff --git a/Extensions/Extensions.cs b/Extensions/Extensions.cs new file mode 100644 index 0000000..16b2780 --- /dev/null +++ b/Extensions/Extensions.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CreateKnxProd.Extensions +{ + //split up if it gets crowded here + static class Extensions + { + public static void ForEach(this IEnumerable enumeration, Action action) + { + foreach (T item in enumeration) + { + action(item); + } + } + } +} diff --git a/MainWindow.xaml b/MainWindow.xaml index 2e47fcc..da2becc 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -116,10 +116,32 @@ - + + + + + + + + + + + + + + + - + + diff --git a/MainWindowViewModel.cs b/MainWindowViewModel.cs index aba1607..1477663 100644 --- a/MainWindowViewModel.cs +++ b/MainWindowViewModel.cs @@ -1,4 +1,5 @@ -using CreateKnxProd.Model; +using CreateKnxProd.Extensions; +using CreateKnxProd.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -42,7 +43,7 @@ public class MainWindowViewModel : INotifyPropertyChanged private ApplicationProgram_t _applicationProgram; private Hardware2Program_t _hardware2Program; private ApplicationProgramRef_t _appProgRef; - private ApplicationProgramStatic_tCodeRelativeSegment _codeSement; + private ApplicationProgramStatic_tCodeRelativeSegment _codeSegment; private ComObjectParameterBlock_t _parameterBlock; @@ -88,8 +89,16 @@ private void Open(object param) _hardware2Program = _hardware.Hardware2Programs.First(); _applicationProgram = _manufacturerData.ApplicationPrograms.First(); _appProgRef = _hardware2Program.ApplicationProgramRef.First(); - _codeSement = _applicationProgram.Static.Code.RelativeSegment.First(); - + _codeSegment = _applicationProgram.Static.Code.RelativeSegment.First(); + + var parameterList = _applicationProgram.Static.Parameters.OfType(); + + foreach (var item in parameterList) + { + item.AllTypes = ParameterTypes; + item.Type = ParameterTypes.First(t => t.Id == item.ParameterType); + Parameters.Add(item); + } RaiseChanged(); } @@ -131,6 +140,7 @@ private void Save(object param) SaveAs(param); SetEmptyListsNull(); + HandleParameters(); RegenerateDynamic(); CorrectIds(); @@ -151,6 +161,25 @@ private void Save(object param) } } + private void HandleParameters() + { + var appStatic = _applicationProgram.Static; + appStatic.Parameters.Clear(); + appStatic.ParameterRefs.Clear(); + + uint offset = 0; + + foreach (var item in Parameters) + { + appStatic.Parameters.Add(item); + item.Item = new Parameter_tMemory() { Offset = offset, BitOffset = 0 }; + offset += item.Type.SizeInByte; + + appStatic.ParameterRefs.Add(new ParameterRef_t() { Parameter = item }); + } + + } + private void SetEmptyListsNull() { var appStatic = _applicationProgram.Static; @@ -226,6 +255,7 @@ private void RegenerateLoadProcedure() private void RegenerateDynamic() { var appDynamic = _applicationProgram.Dynamic; + var appStatic = _applicationProgram.Static; appDynamic.Clear(); var commonChannel = new ApplicationProgramDynamic_tChannelIndependentBlock(); @@ -233,6 +263,11 @@ private void RegenerateDynamic() _parameterBlock.Name = "ParameterPage"; _parameterBlock.Text = "Allgemeine Parameter"; + foreach(var paramRef in appStatic.ParameterRefs) + { + _parameterBlock.Items.Add(new ParameterRefRef_t() { ParameterRef = paramRef }); + } + commonChannel.Items.Add(_parameterBlock); appDynamic.Add(commonChannel); } @@ -261,8 +296,9 @@ private void ClearData() _applicationProgram = null; _hardware2Program = null; _appProgRef = null; - _codeSement = null; + _codeSegment = null; _parameterBlock = null; + Parameters.Clear(); RaiseChanged(); } @@ -339,19 +375,19 @@ private void CreateNew(object param) var code = new ApplicationProgramStatic_tCode(); appStatic.Code = code; - _codeSement = new ApplicationProgramStatic_tCodeRelativeSegment(); - code.RelativeSegment.Add(_codeSement); - _codeSement.Name = "Parameters"; - _codeSement.Offset = 0; - _codeSement.LoadStateMachine = 4; - _codeSement.Size = 0; + _codeSegment = new ApplicationProgramStatic_tCodeRelativeSegment(); + code.RelativeSegment.Add(_codeSegment); + _codeSegment.Name = "Parameters"; + _codeSegment.Offset = 0; + _codeSegment.LoadStateMachine = 4; + _codeSegment.Size = 0; appStatic.AddressTable = new ApplicationProgramStatic_tAddressTable(); appStatic.AddressTable.MaxEntries = 0; appStatic.AssociationTable = new ApplicationProgramStatic_tAssociationTable(); appStatic.AssociationTable.MaxEntries = 0; - + appStatic.ComObjectTable = new ApplicationProgramStatic_tComObjectTable(); appStatic.Options = new ApplicationProgramStatic_tOptions(); HardwareSerial = "0"; @@ -361,7 +397,7 @@ private void CreateNew(object param) _hardware.IsIPEnabled = true; _product.IsRailMounted = false; - _product.DefaultLanguage = "de_DE"; + _product.DefaultLanguage = lang; OrderNumber = "0"; _hardware2Program.MediumTypes.Add("MT-5"); @@ -376,53 +412,12 @@ private void CreateNew(object param) _catalogItem.Hardware2ProgramRefId = _hardware2Program.Id; _catalogItem.DefaultLanguage = lang; - RaisePropertyChanged(nameof(ParameterTypes)); - - - - var par = new ParameterType_t(); - par.Name = "ParameterTypeText1"; - var typeText = new ParameterType_tTypeText(); - typeText.SizeInBit = 128; - par.Item = typeText; - _applicationProgram.Static.ParameterTypes.Add(par); - - par = new ParameterType_t(); - par.Name = "ParameterTypeNumber1"; - var typeNumber = new ParameterType_tTypeNumber(); - typeNumber.SizeInBit = 8; - typeNumber.Type = ParameterType_tTypeNumberType.unsignedInt; - typeNumber.minInclusive = 0; - typeNumber.maxInclusive = 100; - par.Item = typeNumber; - _applicationProgram.Static.ParameterTypes.Add(par); - - par = new ParameterType_t(); - par.Name = "ParameterTypeFloat1"; - var typeFloat = new ParameterType_tTypeFloat(); - typeFloat.Encoding = ParameterType_tTypeFloatEncoding.IEEE754Single; - typeFloat.minInclusive = 0; - typeFloat.maxInclusive = 100; - par.Item = typeFloat; - _applicationProgram.Static.ParameterTypes.Add(par); - - par = new ParameterType_t(); - par.Name = "ParameterTypeRestriction1"; - var typeEnum = new ParameterType_tTypeRestriction(); - typeEnum.SizeInBit = 8; - typeEnum.Base = ParameterType_tTypeRestrictionBase.Value; - typeEnum.Enumeration.Add(new ParameterType_tTypeRestrictionEnumeration() { Value = 0, Text = "Null" }); - typeEnum.Enumeration.Add(new ParameterType_tTypeRestrictionEnumeration() { Value = 1, Text = "Eins" }); - typeEnum.Enumeration.Add(new ParameterType_tTypeRestrictionEnumeration() { Value = 2, Text = "Zwei" }); - par.Item = typeEnum; - _applicationProgram.Static.ParameterTypes.Add(par); - - CorrectIds(); RaiseChanged(); } catch (Exception ex) { _dialogService.ShowMessage(ex.ToString()); + ClearData(); } } @@ -432,10 +427,9 @@ private void CorrectIds() _applicationProgram.Id = string.Format("{0}_A-{1:0000}-{2:00}-0000", _manufacturerData.RefId, _applicationProgram.ApplicationNumber, _applicationProgram.ApplicationVersion); _appProgRef.RefId = _applicationProgram.Id; - _codeSement.Id = string.Format("{0}_RS-{1:00}-{2:00000}", _applicationProgram.Id, _codeSement.LoadStateMachine, - _codeSement.Offset); - _parameterBlock.Id = string.Format("{0}_PB-1", _applicationProgram.Id); - + _codeSegment.Id = string.Format("{0}_RS-{1:00}-{2:00000}", _applicationProgram.Id, _codeSegment.LoadStateMachine, + _codeSegment.Offset); + _hardware.Id = string.Format("{0}_H-{1}-{2}", _manufacturerData.RefId, _hardware.SerialNumber, _hardware.VersionNumber); _product.Id = string.Format("{0}_P-{1}", _hardware.Id, _product.OrderNumber); @@ -448,7 +442,9 @@ private void CorrectIds() _catalogItem.ProductRefId = _product.Id; _catalogItem.Hardware2ProgramRefId = _hardware2Program.Id; - foreach (var paraType in _applicationProgram.Static.ParameterTypes) + var appStatic = _applicationProgram.Static; + + foreach (var paraType in appStatic.ParameterTypes) { paraType.Id = string.Format("{0}_PT-{1}", _applicationProgram.Id, paraType.Name); @@ -459,6 +455,34 @@ private void CorrectIds() foreach (var paraEnum in paraTypeRestriction.Enumeration) paraEnum.Id = string.Format("{0}_EN-{1}", paraType.Id, paraEnum.Value); } + + var parameters = appStatic.Parameters; + for (int i = 0; i < parameters.Count(); i++) + { + var parameter = parameters[i] as Parameter_t; + if (parameter == null) + continue; + + parameter.Id = string.Format("{0}_P-{1}", _applicationProgram.Id, i+1); + var memory = parameter.Item as Parameter_tMemory; + if(memory != null) + { + memory.CodeSegment = _codeSegment.Id; + } + } + + var parameterRefs = appStatic.ParameterRefs; + for (int i = 0; i < parameterRefs.Count(); i++) + { + var parameterRef = parameterRefs[i]; + + parameterRef.Id = string.Format("{0}_R-{1}", parameterRef.Parameter.Id, i + 1); + parameterRef.RefId = parameterRef.Parameter.Id; + } + + _parameterBlock.Id = string.Format("{0}_PB-1", _applicationProgram.Id); + foreach (var item in _parameterBlock.Items.OfType()) + item.RefId = item.ParameterRef.Id; } private void Export(object param) @@ -522,6 +546,8 @@ private void RaiseChanged() RaisePropertyChanged(nameof(ApplicationNumber)); RaisePropertyChanged(nameof(ApplicationVersion)); RaisePropertyChanged(nameof(ParameterTypes)); + RaisePropertyChanged(nameof(Parameters)); + RaisePropertyChanged(nameof(ComObjects)); } #region Properties @@ -637,6 +663,13 @@ public ObservableCollection ParameterTypes get => _applicationProgram?.Static?.ParameterTypes; } + public ObservableCollection Parameters { get; private set; } = new ObservableCollection(); + + public ObservableCollection ComObjects + { + get => _applicationProgram?.Static?.ComObjectTable?.ComObject; + } + #endregion #region Reflection diff --git a/Model/ParameterRefRef_t.cs b/Model/ParameterRefRef_t.cs new file mode 100644 index 0000000..236f19e --- /dev/null +++ b/Model/ParameterRefRef_t.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CreateKnxProd.Model +{ + public partial class ParameterRefRef_t : INotifyPropertyChanged + { + [XmlIgnore] + public ParameterRef_t ParameterRef { get; set; } + } +} diff --git a/Model/CatalogSection_t.cs b/Model/ParameterRef_t.cs similarity index 53% rename from Model/CatalogSection_t.cs rename to Model/ParameterRef_t.cs index cd9acc4..947f1fc 100644 --- a/Model/CatalogSection_t.cs +++ b/Model/ParameterRef_t.cs @@ -4,10 +4,13 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Xml.Serialization; namespace CreateKnxProd.Model { - public partial class CatalogSection_t : object, System.ComponentModel.INotifyPropertyChanged + public partial class ParameterRef_t : INotifyPropertyChanged { + [XmlIgnore] + public Parameter_t Parameter { get; set; } } } diff --git a/Model/Parameter_t.cs b/Model/Parameter_t.cs new file mode 100644 index 0000000..391590d --- /dev/null +++ b/Model/Parameter_t.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Serialization; + +namespace CreateKnxProd.Model +{ + public partial class Parameter_t : INotifyPropertyChanged + { + [XmlIgnore] + public ParameterType_t Type { get; set; } + + [XmlIgnore] + public ObservableCollection AllTypes { get; set; } + } +}