laatzen/Common/Tools/Tools.JsonToXlsHelper/Program.cs
2023-09-01 09:43:49 +02:00

384 lines
15 KiB
C#

using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers;
using Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterProperties;
namespace Tools.JsonToXlsHelper
{
public class registerGruppe
{
public string Name { get; set; }
public int Adresse { get; set; }
public List<RegisterS> Register = new List<RegisterS>();
}
public class RegisterS
{
public string name { get; set; }
public int Adresse { get; set; }
public string type { get; set; }
public Privilege privilege { get; set; }
public int first { get; set; }
public int last { get; set; }
public string Description { get; internal set; }
public Int64? Vdefault { get; internal set; }
public Int64? Vminimum { get; internal set; }
public Int64? Vmaximum { get; internal set; }
}
class Program
{
static void Main(string[] args)
{
{
var configfile = Path.Combine("C:\\GenesisLog\\", "configuration.json");
if (!File.Exists(configfile))
{
throw new ApplicationException($"Configuration file {configfile} not found ");
}
var tr = new StreamReader(configfile);
var text = tr.ReadToEnd();
dynamic stuff = JObject.Parse(text);
var s = stuff.First;
var a = ((JObject)(stuff)).Children();
var allReg = new List<registerGruppe>();
foreach (var item in a)
{
var grpname = item.Path;
var grpID = ((JValue)item.First.First.First);
var registers = item.First.Children()["registers"];
var AddRegGrp = new registerGruppe();
AddRegGrp.Name = grpname;
var t = 0;
int.TryParse(grpID.Value.ToString(), out t);
AddRegGrp.Adresse = t;
AddRegGrp.Register = new List<RegisterS>();
foreach (var itemregist in registers.Children())
{
var registerName = ((JProperty)itemregist).Name;
var registerAdresse = ((JValue)itemregist.First.First.Values().First()).Value;
var registerAdd = new RegisterS();
registerAdd.name = registerName;
int.TryParse(registerAdresse.ToString(), out t);
registerAdd.Adresse = t;
registerAdd.privilege = new Privilege();
var registerdetails = itemregist.First.Last.First.First;
foreach (var registerdetailsitem in registerdetails.Children())
{
var detailName = ((JProperty)registerdetailsitem).Name.ToLower();
var detailValue = ((JProperty)registerdetailsitem).Value;
switch (detailName)
{
case "values":
foreach (JProperty detailValues in detailValue.Children())
{
Int64 ta = 0;
Int64.TryParse(detailValues.Value.ToString(), out ta);
switch (detailValues.Name)
{
case "default":
registerAdd.Vdefault = ta;
break;
case "maximum":
registerAdd.Vmaximum = ta;
break;
case "minimum":
registerAdd.Vminimum = ta;
break;
default:
break;
}
}
break;
case "version":
var first = (int?)((JProperty)detailValue.First).Value;
registerAdd.first = first.HasValue ? first.Value : 0;
var last = (int?)((JProperty)detailValue.Last).Value;
registerAdd.last = last.HasValue ? last.Value : 0;
break;
case "description":
registerAdd.Description = detailValue.ToString();
break;
case "type":
registerAdd.type = detailValue.ToString();
break;
case "privilege":
foreach (var privilegeitem in detailValue.Children())
{
var accessValue = Access.NS;
switch (((JProperty)privilegeitem).Value.ToString().ToUpper())
{
case "RO":
accessValue = Access.RO;
break;
case "RW":
accessValue = Access.RW;
break;
case "WO":
accessValue = Access.WO;
break;
case "NA":
accessValue = Access.NA;
break;
}
switch (((JProperty)privilegeitem).Name)
{
case "lvl1":
registerAdd.privilege.Lvl1 = accessValue;
break;
case "lvl2":
registerAdd.privilege.Lvl2 = accessValue;
break;
case "lvl3":
registerAdd.privilege.Lvl3 = accessValue;
break;
case "lvl4":
registerAdd.privilege.Lvl4 = accessValue;
break;
case "lvl5":
registerAdd.privilege.Lvl5 = accessValue;
break;
case "lvl6":
registerAdd.privilege.Lvl6 = accessValue;
break;
case "lvl7":
registerAdd.privilege.Lvl7 = accessValue;
break;
case "lvl8":
registerAdd.privilege.Lvl8 = accessValue;
break;
}
}
break;
default:
break;
}
}
AddRegGrp.Register.Add(registerAdd);
}
allReg.Add(AddRegGrp);
}
StringBuilder sbCode = new StringBuilder();
foreach (var item in allReg)
{
sbCode.AppendLine($"public static class {item.Name}");//System
sbCode.AppendLine("{");
sbCode.AppendLine($"private const Byte RegisterAdress = 0x{item.Adresse.ToString("X2")}; ");
foreach (var reg in item.Register)
{
sbCode.Append($"public static readonly RegisterDefinition ");
sbCode.Append($" {reg.name} ");
sbCode.Append(" = new RegisterDefinition");
sbCode.Append(" { ");
//default min max
sbCode.Append($" DataType = typeof({getStatusText(reg.type)}), ");
sbCode.Append($" Adress = new Byte[] {{ RegisterAdress,0x{reg.Adresse.ToString("X2")} }} ,");
sbCode.Append($" Default = {reg.Vdefault},");
sbCode.Append($" Maximum = {reg.Vmaximum},");
sbCode.Append($" Minimum = {reg.Vminimum},");
sbCode.Append($"detail = new Detail(){{");
sbCode.Append($" description = \"{reg.Description}\" ,");
sbCode.Append($" version = new Version({reg.first},{reg.last}) ,");
sbCode.Append($" privilege = new RegisterPrivilege {{ Lvl1 = Access.{getLVLText(reg.privilege.Lvl1)},Lvl2 = Access.{getLVLText(reg.privilege.Lvl2)}, Lvl3 = Access.{getLVLText(reg.privilege.Lvl3)}, Lvl4 = Access.{getLVLText(reg.privilege.Lvl4)}, Lvl5 = Access.{getLVLText(reg.privilege.Lvl5)}, Lvl6 = Access.{getLVLText(reg.privilege.Lvl6)}, Lvl7 = Access.{getLVLText(reg.privilege.Lvl7)}, Lvl8 = Access.{getLVLText(reg.privilege.Lvl8)} }}");
sbCode.Append($"}}");
sbCode.AppendLine("};");//
}
sbCode.AppendLine("};");//
}
var textsb = sbCode.ToString();
Console.Write(textsb);
StringBuilder sbCsv = new StringBuilder();
char sep = ';';
sbCsv.Append("Gruppe").Append(sep);
sbCsv.Append("Name").Append(sep);
sbCsv.Append("Adresse").Append(sep);
sbCsv.Append("Type").Append(sep);
sbCsv.Append("Beschreibung").Append(sep);
sbCsv.Append("Default").Append(sep);
sbCsv.Append("Min").Append(sep);
sbCsv.Append("Max").Append(sep);
sbCsv.Append("Ab Version").Append(sep);
sbCsv.Append("Bis Version").Append(sep);
sbCsv.Append("lvl1").Append(sep);
sbCsv.Append("lvl2").Append(sep);
sbCsv.Append("lvl3").Append(sep);
sbCsv.Append("lvl4").Append(sep);
sbCsv.Append("lvl5").Append(sep);
sbCsv.Append("lvl6").Append(sep);
sbCsv.Append("lvl7").Append(sep);
sbCsv.Append("lvl8").Append(sep);
sbCsv.AppendLine();
foreach (var item in allReg)
{
foreach (var reg in item.Register)
{
sbCsv.Append(item.Name).Append(sep);
sbCsv.Append(reg.name).Append(sep);
sbCsv.Append($"0x{ item.Adresse.ToString("X2") } , 0x{ reg.Adresse.ToString("X2")}").Append(sep);
sbCsv.Append(getStatusText(reg.type)).Append(sep);
sbCsv.Append(reg.Description).Append(sep);
sbCsv.Append(reg.Vdefault.HasValue ? reg.Vdefault.Value.ToString() : "-" ).Append(sep);
sbCsv.Append(reg.Vminimum.HasValue ? reg.Vminimum.Value.ToString() : "-").Append(sep);
sbCsv.Append(reg.Vmaximum.HasValue ? reg.Vmaximum.Value.ToString() : "-").Append(sep);
sbCsv.Append(reg.first).Append(sep);
sbCsv.Append(reg.last).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl1)).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl2)).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl3)).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl4)).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl5)).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl6)).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl7)).Append(sep);
sbCsv.Append(getLVLText(reg.privilege.Lvl8)).Append(sep);
sbCsv.AppendLine();
}
}
textsb = sbCsv.ToString();
Console.Write(textsb);
}
}
static string getStatusText(string fileText)
{
switch (fileText.ToLower())
{
case "uint64_t":
return "UInt64";
case "uint32_t":
return "UInt32";
case "uint16_t":
return "UInt16";
case "uint8_t":
return "byte";
case "int64_t":
return "Int64";
case "int32_t":
return "Int32";
case "int16_t":
return "Int16";
case "int8_t":
return "sbyte";
case "uint96_t":
return "string";
case "rpc":
return "Rpc";
case "string":
return "string";
case "bool_t":
return "bool";
case "time_t":
return "TimeT";
case "status_t":
return "StatusT";
case "enum8":
return "Enum8";
}
return "implement!" + fileText;
}
static string getLVLText(Access a)
{
switch (a)
{
case Access.NA:
return "Na";
case Access.RO:
return "Ro";
case Access.WO:
return "Wo";
case Access.RW:
return "Rw";
default:
return "NotSet";
}
}
}
}