Skip to content
This repository has been archived by the owner on Jul 6, 2022. It is now read-only.

Commit

Permalink
Merge pull request #26 from etrinh/partial_buscurrent_rail_parameterb…
Browse files Browse the repository at this point in the history
…locks

Consolidated PR 22+23 for merged master + Partial Programming
  • Loading branch information
thelsing authored Apr 16, 2021
2 parents 7dda7cf + e6d91c3 commit 62c488f
Show file tree
Hide file tree
Showing 5 changed files with 185 additions and 57 deletions.
28 changes: 28 additions & 0 deletions MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Margin="3" Text="{lex:Loc Name}" Grid.Column="1" Grid.Row="0"/>
Expand Down Expand Up @@ -89,8 +91,21 @@
<TextBox Margin="3" Text="{Binding MaxSecurityIndividualAddressEntries, UpdateSourceTrigger=PropertyChanged}" Grid.Column="2" Grid.Row="11" Width="200"/>
<TextBlock Margin="3" Text="{lex:Loc MaxSecurityGroupKeyTableEntries}" Grid.Column="1" Grid.Row="12"/>
<TextBox Margin="3" Text="{Binding MaxSecurityGroupKeyTableEntries, UpdateSourceTrigger=PropertyChanged}" Grid.Column="2" Grid.Row="12" Width="200"/>
<TextBlock Margin="3" Text="{lex:Loc IsRailMounted}" Grid.Column="1" Grid.Row="13"/>
<CheckBox Margin="3" Grid.Column="2" Grid.Row="13" IsChecked="{Binding IsRailMounted}" />
<TextBlock Margin="3" Text="{lex:Loc BusCurrent}" Grid.Column="1" Grid.Row="14"/>
<TextBox Margin="3" Grid.Column="2" Grid.Row="14" Text="{Binding BusCurrent}" />
</Grid>
</TabItem>
<TabItem Header="{lex:Loc ParameterBlock}">
<DataGrid ItemsSource="{Binding ParameterBlock }" AutoGenerateColumns="False"
CanUserDeleteRows="True" dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True">
<DataGrid.Columns>
<DataGridTextColumn Header="{lex:Loc Name}" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="{lex:Loc Text}" Binding="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>
</DataGrid>
</TabItem>
<TabItem Header="{lex:Loc ParameterTypes}">
<DataGrid ItemsSource="{Binding ParameterTypes }" AutoGenerateColumns="False"
CanUserDeleteRows="True" dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True">
Expand Down Expand Up @@ -150,6 +165,19 @@
<DataGrid ItemsSource="{Binding Parameters }" AutoGenerateColumns="False"
dd:DragDrop.IsDragSource="True" dd:DragDrop.IsDropTarget="True">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="{lex:Loc Block}" SelectedItemBinding="{Binding Block, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ParameterBlock, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ParameterBlock, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="{lex:Loc Name}" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<DataGridComboBoxColumn Header="{lex:Loc Type}" SelectedItemBinding="{Binding Type, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Name">
Expand Down
161 changes: 104 additions & 57 deletions MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ public class MainWindowViewModel : INotifyPropertyChanged
private ApplicationProgramRef_T _appProgRef;
private ApplicationProgramStatic_TCodeRelativeSegment _codeSegment;

private ComObjectParameterBlock_T _parameterBlock;

public MainWindowViewModel(IDialogService dialogService)
{
_dialogService = dialogService;
Expand Down Expand Up @@ -78,6 +76,14 @@ private void DownloadKnxMasterXml()
}
}

private void CreateDefaultParameterBlock()
{
var parameterBlock = new ComObjectParameterBlock_T();
parameterBlock.Name = "ParameterPage";
parameterBlock.Text = Ressources.CommonParameters;
ParameterBlock.Add(parameterBlock);
}

private void Open(object param)
{
try
Expand Down Expand Up @@ -120,12 +126,21 @@ private void Open(object param)
_appProgRef = _hardware2Program.ApplicationProgramRef.First();
_codeSegment = _applicationProgram.Static.Code.RelativeSegment.First();

var parameterList = _applicationProgram.Static.Parameters.Parameter;

foreach (var item in parameterList)
Parameters.Clear();
foreach (var item in _applicationProgram.Static.Parameters.Parameter)
{
item.AllTypes = ParameterTypes;
item.Type = ParameterTypes.First(t => t.Id == item.ParameterType);
item.AllBlocks = ParameterBlock;
item.Block = ParameterBlock.FirstOrDefault(t => t.ParameterRefRef.FirstOrDefault(o => _applicationProgram.Static.ParameterRefs.FirstOrDefault(p => o.RefId == p.Id)?.RefId == item.Id) != null);
if (item.Block == null)
{
if (ParameterBlock.Count == 0)
{
CreateDefaultParameterBlock();
}
item.Block = ParameterBlock.First();
}
Parameters.Add(item);
}

Expand Down Expand Up @@ -250,29 +265,46 @@ private void CreateLoadProcedures()
var ldProc1 = new LoadProcedures_TLoadProcedure();
ldProc1.MergeId = 2;


var ldCtrlCreate = new LdCtrlRelSegment_T();
ldCtrlCreate.LsmIdx = 4;
ldCtrlCreate.Mode = 0;
ldCtrlCreate.Mode = 1;
ldCtrlCreate.Fill = 0;
ldCtrlCreate.AppliesTo = LdCtrlProcType_T.Full;
ldCtrlCreate.Size = _codeSegment.Size;
ldProc1.LdCtrlRelSegment.Add(ldCtrlCreate);

var ldCtrlUpdate = new LdCtrlRelSegment_T();
ldCtrlUpdate.LsmIdx = 4;
ldCtrlUpdate.Mode = 0;
ldCtrlUpdate.Fill = 0;
ldCtrlUpdate.AppliesTo = LdCtrlProcType_T.Par;
ldCtrlUpdate.Size = _codeSegment.Size;
ldProc1.LdCtrlRelSegment.Add(ldCtrlUpdate);

var ldProc2 = new LoadProcedures_TLoadProcedure();
ldProc2.MergeId = 4;

var ldCtrlWrite = new LdCtrlWriteRelMem_T();
ldCtrlWrite.ObjIdx = 4;
ldCtrlWrite.Offset = 0;
ldCtrlWrite.Verify = true;
ldCtrlWrite.AppliesTo = LdCtrlProcType_T.FullCommaPar;
ldCtrlWrite.Size = _codeSegment.Size;
ldProc2.LdCtrlWriteRelMem.Add(ldCtrlWrite);

var ldProc3 = new LoadProcedures_TLoadProcedure();
ldProc3.MergeId = 7;

var ldCtrlImageProp = new LdCtrlLoadImageProp_T();
ldCtrlImageProp.ObjIdx = 4;
ldCtrlImageProp.PropId = 27;
ldProc3.LdCtrlLoadImageProp.Add(ldCtrlImageProp);

var appStatic = _applicationProgram.Static;
appStatic.LoadProcedures.Clear();
appStatic.LoadProcedures.Add(ldProc1);
appStatic.LoadProcedures.Add(ldProc2);
appStatic.LoadProcedures.Add(ldProc3);
}

private void HandleParameters()
Expand All @@ -295,36 +327,6 @@ private void HandleParameters()
_codeSegment.Size = size;
}


private void RegenerateLoadProcedure()
{
var ldProc1 = new LoadProcedures_TLoadProcedure();
ldProc1.MergeId = 2;

var ldCtrlCreate = new LdCtrlRelSegment_T();
ldCtrlCreate.LsmIdx = 4;
ldCtrlCreate.Mode = 0;
ldCtrlCreate.Fill = 0;
ldCtrlCreate.Size = 0;
ldProc1.LdCtrlRelSegment.Add(ldCtrlCreate);

var ldProc2 = new LoadProcedures_TLoadProcedure();
ldProc2.MergeId = 4;

var ldCtrlWrite = new LdCtrlWriteRelMem_T();
ldCtrlWrite.ObjIdx = 4;
ldCtrlWrite.Offset = 0;
ldCtrlWrite.Verify = true;
ldCtrlWrite.Size = 0;
ldProc2.LdCtrlWriteRelMem.Add(ldCtrlWrite);

var appStatic = _applicationProgram.Static;

appStatic.LoadProcedures.Clear();
appStatic.LoadProcedures.Add(ldProc1);
appStatic.LoadProcedures.Add(ldProc2);
}

private void RegenerateDynamic()
{
if (_applicationProgram.Dynamic == null)
Expand All @@ -334,26 +336,30 @@ private void RegenerateDynamic()

var appStatic = _applicationProgram.Static;
appDynamic.Choose?.Clear();
appDynamic.ChannelIndependentBlock?.Clear();
appDynamic.Channel?.Clear();

var commonChannel = new ChannelIndependentBlock_T();
_parameterBlock = new ComObjectParameterBlock_T();
_parameterBlock.Name = "ParameterPage";
_parameterBlock.Text = Ressources.CommonParameters;

foreach (var paramRef in appStatic.ParameterRefs)
if (ParameterBlock.Count == 0)
{
_parameterBlock.ParameterRefRef.Add(new ParameterRefRef_T() { ParameterRef = paramRef });
CreateDefaultParameterBlock();
}

foreach (var comObjRef in appStatic.ComObjectRefs)
int i = 1;
foreach (var parameterBlock in ParameterBlock)
{
_parameterBlock.ComObjectRefRef.Add(new ComObjectRefRef_T() { ComObjectRef = comObjRef });
}
parameterBlock.ParameterRefRef.Clear();
foreach (var paramRef in appStatic.ParameterRefs)
{
if ((i == 1 && paramRef.Parameter.Block == null) || paramRef.Parameter.Block == parameterBlock)
parameterBlock.ParameterRefRef.Add(new ParameterRefRef_T() { ParameterRef = paramRef });
}

commonChannel.ParameterBlock.Add(_parameterBlock);
appDynamic.ChannelIndependentBlock.Add(commonChannel);
parameterBlock.ComObjectRefRef.Clear();
if (i == 1) // Not supported yet, ComObjs are affected to the first ParameterBlock
foreach (var comObjRef in appStatic.ComObjectRefs)
{
parameterBlock.ComObjectRefRef.Add(new ComObjectRefRef_T() { ComObjectRef = comObjRef });
}
++i;
}
}

private bool AskSaveCancel()
Expand Down Expand Up @@ -381,7 +387,6 @@ private void ClearData()
_hardware2Program = null;
_appProgRef = null;
_codeSegment = null;
_parameterBlock = null;
Parameters.Clear();
RaiseChanged();
}
Expand Down Expand Up @@ -471,6 +476,9 @@ private void CreateNew(object param)
_codeSegment.Size = 0;

appStatic.Parameters = new ApplicationProgramStatic_TParameters();
_applicationProgram.Dynamic = new ApplicationProgramDynamic_T();
_applicationProgram.Dynamic.ChannelIndependentBlock.Add(new ChannelIndependentBlock_T());
CreateDefaultParameterBlock();
appStatic.AddressTable = new ApplicationProgramStatic_TAddressTable();
appStatic.AddressTable.MaxEntries = ushort.MaxValue;

Expand All @@ -484,6 +492,7 @@ private void CreateNew(object param)
_hardware.HasIndividualAddress = true;
_hardware.HasApplicationProgram = true;
_hardware.IsIPEnabled = true;
_hardware.BusCurrent = 10;

_product.IsRailMounted = false;
_product.DefaultLanguage = lang;
Expand Down Expand Up @@ -577,12 +586,16 @@ private void CorrectIds()
comObjRef.RefId = comObjRef.ComObject.Id;
}

_parameterBlock.Id = string.Format("{0}_PB-1", _applicationProgram.Id);
foreach (var item in _parameterBlock.ParameterRefRef)
item.RefId = item.ParameterRef.Id;
i = 1;
foreach (var parameterBlock in _applicationProgram.Dynamic.ChannelIndependentBlock.First().ParameterBlock)
{
parameterBlock.Id = string.Format("{0}_PB-{1}", _applicationProgram.Id, i++);
foreach (var item in parameterBlock.ParameterRefRef)
item.RefId = item.ParameterRef.Id;

foreach (var item in _parameterBlock.ComObjectRefRef)
item.RefId = item.ComObjectRef.Id;
foreach (var item in parameterBlock.ComObjectRefRef)
item.RefId = item.ComObjectRef.Id;
}
}

private void Export(object param)
Expand Down Expand Up @@ -715,6 +728,7 @@ private void RaiseChanged()
RaisePropertyChanged(nameof(ApplicationName));
RaisePropertyChanged(nameof(ApplicationNumber));
RaisePropertyChanged(nameof(ApplicationVersion));
RaisePropertyChanged(nameof(ParameterBlock));
RaisePropertyChanged(nameof(ParameterTypes));
RaisePropertyChanged(nameof(Parameters));
RaisePropertyChanged(nameof(ComObjects));
Expand All @@ -723,6 +737,8 @@ private void RaiseChanged()
RaisePropertyChanged(nameof(IsSecureEnabled));
RaisePropertyChanged(nameof(MaxSecurityIndividualAddressEntries));
RaisePropertyChanged(nameof(MaxSecurityGroupKeyTableEntries));
RaisePropertyChanged(nameof(IsRailMounted));
RaisePropertyChanged(nameof(BusCurrent));
}

#region Properties
Expand Down Expand Up @@ -912,6 +928,37 @@ public ushort MaxSecurityGroupKeyTableEntries
}
}

public ObservableCollection<ComObjectParameterBlock_T> ParameterBlock
{
get => _applicationProgram?.Dynamic?.ChannelIndependentBlock?.First()?.ParameterBlock;
}

public bool? IsRailMounted
{
get
{
return _product?.IsRailMounted;
}
set
{
_product.IsRailMounted = value ?? false;
RaisePropertyChanged(nameof(IsRailMounted));
}
}

public float? BusCurrent
{
get
{
return _hardware?.BusCurrent;
}
set
{
_hardware.BusCurrent = value ?? 10;
RaisePropertyChanged(nameof(BusCurrent));
}
}

public ObservableCollection<ParameterType_T> ParameterTypes
{
get => _applicationProgram?.Static?.ParameterTypes;
Expand Down
6 changes: 6 additions & 0 deletions Model/Parameter_t.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ namespace CreateKnxProd.Model
{
public partial class ApplicationProgramStatic_TParametersParameter : INotifyPropertyChanged
{
[XmlIgnore]
public ComObjectParameterBlock_T Block { get; set; }

[XmlIgnore]
public ObservableCollection<ComObjectParameterBlock_T> AllBlocks { get; set; }

[XmlIgnore]
public ParameterType_T Type { get; set; }

Expand Down
Loading

0 comments on commit 62c488f

Please sign in to comment.