/********************************************/

        /*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_);
        }
Esempio n. 3
0
        //***********/
        //* 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());
        }