Exemple #1
0
        public Inf3Controls(IData data)
        {
            InitializeComponent();

            this.data = data as InfData;
            InitControls();
        }
Exemple #2
0
        public InfData Parse(string data)
        {
            var infData = new InfData();
            var parser  = new ContentParser();

            parser.CategoryDiscovered += (sender, category) => infData.Categories.Add(category);
            parser.Parse(data);
            return(infData);
        }
Exemple #3
0
        public static byte[] BuildInf4Firmware(InfData data)
        {
            var buffer = new byte[defaultInf4Data.Length];

            Array.Copy(defaultInf4Data, buffer, defaultInf4Data.Length - 1);    // Don't need last byte
            // TODO

            buffer[2] = (byte)data.PhaseCurrent;
            buffer[3] = (byte)data.BatteryCurrent;
            buffer[4] = (byte)data.MinVoltage;
            buffer[5] = (byte)data.MinVoltageTolerance;
            //buffer[6] = 96;
            buffer[7]  = (byte)(data.ThreePosMode - 1);
            buffer[8]  = (byte)data.Speed1Percentage;
            buffer[9]  = (byte)data.Speed2Percentage;
            buffer[10] = (byte)data.Speed3Percentage;
            //buffer[11] = 0;
            //buffer[12] = 0;
            buffer[13] = data.OnePedalMode ? (byte)0 : (byte)1;
            //buffer[14] = 0;
            buffer[15] = (byte)data.RegenStrength;
            buffer[16] = (byte)data.ReverseSpeed;
            buffer[17] = (byte)data.RegenMaxVoltage;
            //buffer[18] = 0;
            buffer[19] = data.ThrottleProtection ? (byte)1 : (byte)0;
            //buffer[20] = 0;
            buffer[21] = (byte)data.PASPulsesToSkip;
            buffer[22] = 1;
            buffer[23] = (byte)data.Speed4Percentage;
            buffer[24] = data.Desc.FirmwareType;
            //buffer[25] = 0;
            buffer[26] = (byte)data.PASMaxSpeed;
            //buffer[27] = 0;
            //buffer[28] = 0;
            //buffer[29] = 0;
            //buffer[30] = 0;
            buffer[31] = (byte)((data.SoftStartEnabled ? 1 << 5 : 0) +
                                (data.RegenEnabled ? 1 << 6 : 0) +
                                (data.HallsAngle ? 1 << 7 : 0));
            //buffer[32] = 0;
            //buffer[33] = 0;
            //buffer[34] = 0;
            //buffer[35] = 0;
            //buffer[36] = 0;
            buffer[37] = (byte)data.Speed1CurrentPercentage;
            buffer[38] = (byte)data.Speed2CurrentPercentage;
            buffer[39] = (byte)data.Speed3CurrentPercentage;
            buffer[40] = (byte)data.Speed4CurrentPercentage;
            //buffer[41] = 0;
            buffer[42] = (byte)data.SoftStartTime;
            buffer[43] = (byte)data.SlowSpeed;
            buffer[44] = (byte)data.RecoverSpeed;
            //buffer[45] = 0;

            buffer[buffer.Length - 1] = buffer.Aggregate((a, b) => (byte)(a ^ b));
            return(buffer);
        }
Exemple #4
0
 private void DerefereneDynamicKeys <T>(T o, InfData infData, Dictionary <Key, PropertyInfo> dict) where T : new()
 {
     foreach (var item in dict)
     {
         string value = GetPrimitiveValueForKey(infData, item.Key);
         if (value != null)
         {
             item.Value.SetValue(o, value);
         }
     }
 }
Exemple #5
0
        public static byte[] BuildInf3Firmware(InfData data)
        {
            var buffer = new byte[defaultInf3Data.Length];

            Array.Copy(defaultInf3Data, buffer, defaultInf3Data.Length - 1);    // Don't need last byte

            buffer[2] = (byte)data.PhaseCurrent;
            buffer[3] = (byte)data.BatteryCurrent;
            buffer[4] = (byte)data.MinVoltage;
            buffer[5] = (byte)data.MinVoltageTolerance;

            buffer[7]  = (byte)(data.ThreePosMode - 1);
            buffer[8]  = (byte)data.Speed1Percentage;
            buffer[9]  = (byte)data.Speed2Percentage;
            buffer[10] = (byte)data.Speed3Percentage;

            buffer[13] = data.OnePedalMode ? (byte)0 : (byte)1;

            if (!data.RegenEnabled)   //"EBSLevel",
            {
                buffer[15] = 0;
            }
            else if (data.RegenStrength == 1)
            {
                buffer[15] = 4;
            }
            else if (data.RegenStrength == 2)
            {
                buffer[15] = 8;
            }
            else
            {
                buffer[15] = 255;
            }

            buffer[16] = (byte)data.ReverseSpeed;
            buffer[17] = (byte)data.RegenMaxVoltage;

            buffer[19] = data.ThrottleProtection ? (byte)1 : (byte)0;

            buffer[21] = (byte)data.PASPulsesToSkip;
            buffer[22] = 1; //"DefaultSpeed",
            buffer[23] = (byte)data.Speed4Percentage;
            buffer[24] = data.HallsAngle ? (byte)0 : (byte)1;

            buffer[25] = (byte)data.PASMaxSpeed;
            buffer[27] = data.Desc.TypeByte;

            buffer[buffer.Length - 1] = buffer.Aggregate((a, b) => (byte)(a ^ b));
            return(buffer);
        }
Exemple #6
0
        public T SerializeInto <T>(string data, out InfData outputData) where T : new()
        {
            var o       = new T();
            var t       = o.GetType();
            var infData = new InfData();
            var parser  = new ContentParser();

            var dict = new Dictionary <Key, PropertyInfo>();

            parser.CategoryDiscovered += (sender, category) =>
            {
                infData.Categories.Add(category);
                foreach (var property in t.GetProperties())
                {
                    if (Attribute.IsDefined(property, typeof(InfKeyValue)))
                    {
                        var attribute = (InfKeyValue)Attribute.GetCustomAttribute(property, typeof(InfKeyValue));
                        if (category.IsNamed(attribute.CategoryId))
                        {
                            var key = category[attribute.KeyId];
                            if (key != null)
                            {
                                property.SetValue(o, key.PrimitiveValue);

                                //save dynamic values for further dereferencing
                                if (attribute.DeferenceDynamicValueKeys && key.KeyValues.Any() &&
                                    key.KeyValues.Any(x => x.IsDynamic))
                                {
                                    // save for later des.
                                    dict.Add(key, property);
                                }
                            }
                        }
                    }
                }
            };
            parser.Parse(data);
            outputData = infData;

            //dereference keys - if some left after category dereferencing
            if (dict.Any())
            {
                DerefereneDynamicKeys(o, infData, dict);
            }

            return(o);
        }
Exemple #7
0
 private string GetPrimitiveValueForKey(InfData data, Key key)
 {
     if (key.KeyValues.Any())
     {
         var first = key.KeyValues.First();
         //dynamic
         if (first.IsDynamic)
         {
             return(data.FindKeyById(first.DynamicKeyId)            //find dynamic key
                    .First(x => x.KeyValues.All(v => !v.IsDynamic)) // that has not a dynamic value
                    .KeyValues.First().Value);                      //return the first text value
         }
         //static
         return(key.PrimitiveValue);
     }
     return("");
 }
Exemple #8
0
        public T SerializeFileInto <T>(string path, out InfData outputData) where T : new()
        {
            var content = File.ReadAllText(path);

            return(SerializeInto <T>(content, out outputData));
        }