public static DeviceInfo From(XElement node) { var xName = node.Attribute("name"); var xFlash = node.Element("flash"); var xEeprom = node.Element("eeprom"); var xRam = node.Attribute("ram"); var xSignature = node.Attribute("signature"); var xLockBits = node.Element("lockBits"); var xFuseBits = node.Element("fuseBits"); var xStkCode = node.Attribute("stkCode"); var res = new DeviceInfo { Name = xName != null ? xName.Value : "unknown", _flash = xFlash != null?DeviceFlashParameters.From(xFlash) : new DeviceFlashParameters(), _eeprom = xEeprom != null?DeviceEepromParameters.From(xEeprom) : new DeviceEepromParameters(), RamSize = xRam != null?int.Parse(xRam.Value) : 0, Signature = xSignature != null?AvrSignature.Parse(xSignature.Value) : new AvrSignature(), _lockBits = xLockBits != null?DeviceBits.Parse(xLockBits) : new DeviceBits(), _fuseBits = xFuseBits != null?DeviceBits.Parse(xFuseBits) : new DeviceBits(), StkCode = xStkCode != null?ParseStkCode(xStkCode.Value) : StkDeviceCode.None, }; var xMasks = node.Element("masks"); if (xMasks != null) { foreach (var xMask in xMasks.Elements()) { var mask = MemoryMask.From(xMask); res.Masks.Add(mask); } } return(res); }
public static MemoryMask From(XElement node) { var xWordSize = node.Attribute("wordSize"); var xMemoryType = node.Attribute("memoryType"); var xStart = node.Attribute("start"); var xEnd = node.Attribute("end"); var xMask = node.Attribute("mask"); var memType = AvrMemoryType.Flash; if (xMemoryType != null) { Enum.TryParse(xMemoryType.Value, true, out memType); } var start = 0; if (xStart != null) { DeviceInfoUtils.TryParseInt(xStart.Value, out start); } int?end = null; if (xEnd != null) { int endVal; if (DeviceInfoUtils.TryParseInt(xEnd.Value, out endVal)) { end = endVal; } } var wordSize = 1; if (xWordSize != null) { DeviceInfoUtils.TryParseInt(xWordSize.Value, out wordSize); } var mask = 0xffffffff; if (xMask != null) { DeviceInfoUtils.TryParseUInt(xMask.Value, out mask); } var res = new MemoryMask { MemoryType = memType, AddressStart = start, AddressEnd = end, WordSize = wordSize, Mask = mask }; return(res); }