384 lines
15 KiB
C#
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";
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|