/********************************************/ /*private static void Test() * { * debugprints = true; * int ret = 0; * * // test read * print("Reading config..."); * Config.VisualConfig hpc0 = new Config.VisualConfig(); * ret = LoadConfigFromEEPROM(ref hpc0); * if (ret == 0) PrintConfig(hpc0); * * // test write * Config.VisualConfig hpc = new Config.VisualConfig(); * hpc.center.Value = 0f; * hpc.pitch.Value = 6.96969696f; * hpc.DPI.Value = 1.23456789f; * hpc.viewCone.Value = 12.3456789f; * hpc.verticalAngle.Value = 123.456789f; * hpc.numViews.Value = 1234.56789f; * hpc.screenH.Value = 500.69f; * hpc.configVersion = 0.1f; * print("Writing config..."); * PrintConfig(hpc); * ret = WriteConfigToEEPROM(hpc); * * // test read * Config.VisualConfig hpc2 = new Config.VisualConfig(); * print("Rereading config..."); * ret = LoadConfigFromEEPROM(ref hpc2); * if (ret == 0) PrintConfig(hpc2); * }*/ public static void PrintConfig(Config.VisualConfig h) { String s = ""; FieldInfo[] fields = h.GetType().GetFields(); foreach (FieldInfo field in fields) { if (field != null) { object val = field.GetValue(h); if (val is float) { s += String.Format("{0:G}f ", (float)val); } else if (val is Config.ConfigValue) { Config.ConfigValue val_ = (Config.ConfigValue)val; if (val_.isInt) { s += String.Format("{0:D}i ", (Int16)val_); } else { s += String.Format("{0:G}f ", (float)val_); } } } } print(s); }
private static int BytesInHPC(Config.VisualConfig hpc) { int bytes_in_hpc_ = 0; int intlen = sizeof(Int16); int floatlen = sizeof(float); FieldInfo[] fields = hpc.GetType().GetFields(); foreach (FieldInfo field in fields) { if (field != null) { object val = field.GetValue(hpc); if (val is float) { bytes_in_hpc_ += floatlen; } else if (val is Config.ConfigValue) { Config.ConfigValue val_ = (Config.ConfigValue)val; if (val_.isInt) { bytes_in_hpc_ += intlen; } else { bytes_in_hpc_ += floatlen; } } } } return(bytes_in_hpc_); }
//***********/ //* methods */ //***********/ public static ConfigValue[] EnumerateConfigFields(VisualConfig visualConfig) { System.Reflection.FieldInfo[] configFields = typeof(Config.VisualConfig).GetFields(); List <ConfigValue> configValues = new List <ConfigValue>(); for (int i = 0; i < configFields.Length; i++) { if (configFields[i].FieldType == typeof(Config.ConfigValue)) { Config.ConfigValue val = (Config.ConfigValue)configFields[i].GetValue(visualConfig); configValues.Add(val); } } return(configValues.ToArray()); }
private static Config.VisualConfig DeserializeHoloPlayConfig(byte[] byte_in) { Config.VisualConfig hpc = new Config.VisualConfig(); if (byte_in.Length != BytesInHPC(hpc)) { printerr("HoloPlayConfig length mismatch! Aborting..."); return(null); } int intlen = sizeof(Int16); int floatlen = sizeof(float); int ind = 0; FieldInfo[] fields = hpc.GetType().GetFields(); foreach (FieldInfo field in fields) { if (field != null) { object val = field.GetValue(hpc); if (val is float) { field.SetValue(hpc, BitConverter.ToSingle(byte_in, ind)); ind += floatlen; } else if (val is Config.ConfigValue) { Config.ConfigValue val_ = (Config.ConfigValue)val; if (val_.isInt) { val_.Value = BitConverter.ToInt16(byte_in, ind); ind += intlen; } else { val_.Value = BitConverter.ToSingle(byte_in, ind); ind += floatlen; } } } } return(hpc); }
private static byte[] SerializeHoloPlayConfig(Config.VisualConfig hpc) { List <byte> byte_out = new List <byte>(); FieldInfo[] fields = hpc.GetType().GetFields(); foreach (FieldInfo field in fields) { if (field != null) { object val = field.GetValue(hpc); if (val is float) { byte[] bytes = BitConverter.GetBytes((float)val); foreach (byte b in bytes) { byte_out.Add(b); } } else if (val is Config.ConfigValue) { Config.ConfigValue val_ = (Config.ConfigValue)val; byte[] bytes; if (val_.isInt) { bytes = BitConverter.GetBytes((Int16)val_); } else { bytes = BitConverter.GetBytes((float)val_); } foreach (byte b in bytes) { byte_out.Add(b); } } } } return(byte_out.ToArray()); }