public Inf3Controls(IData data) { InitializeComponent(); this.data = data as InfData; InitControls(); }
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); }
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); }
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); } } }
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); }
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); }
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(""); }
public T SerializeFileInto <T>(string path, out InfData outputData) where T : new() { var content = File.ReadAllText(path); return(SerializeInto <T>(content, out outputData)); }