private void HandleChanged(object sender, EventArgs e) { CpDeviceReprogrammable device = sender as CpDeviceReprogrammable; CpDeviceUpdate removedDevice = null; CpDeviceUpdate addedDevice = null; Firmware firmware = CheckForSoftwareUpdate(device); lock (iLock) { foreach (CpDeviceUpdate d in iDeviceUpdateList) { if (d.MacAddress == device.MacAddress) { if ((firmware == null || d.Status == CpDeviceReprogrammable.EStatus.eOff) && !d.Updating) { UserLog.WriteLine(DateTime.Now + ": CpDeviceUpdateList: DeviceUpdateable- MacAddress{" + device.MacAddress + "}"); removedDevice = d; iDeviceUpdateList.Remove(removedDevice); break; } else { return; } } } if (removedDevice == null && firmware != null && device.Status != CpDeviceReprogrammable.EStatus.eOff) { UserLog.WriteLine(DateTime.Now + ": CpDeviceUpdateList: DeviceUpdateable+ MacAddress{" + device.MacAddress + "}"); addedDevice = new CpDeviceUpdate(device, firmware, iCache, iAdapterAddress, iUpdateListener); iDeviceUpdateList.Add(addedDevice); } } if (removedDevice != null) { if (iRemoved != null) { iRemoved(this, removedDevice); } removedDevice.Dispose(); } if (addedDevice != null) { if (iAdded != null) { iAdded(this, addedDevice); } } }
private void VersionInfoAvailable(object sender, EventArgs e) { List <CpDeviceUpdate> removeDeviceList; lock (iLock) { if (iDisposed) { return; } iVersionInfoAvailable = false; removeDeviceList = new List <CpDeviceUpdate>(iDeviceUpdateList); iDeviceUpdateList.Clear(); } foreach (CpDeviceUpdate d in removeDeviceList) { if (iRemoved != null) { iRemoved(this, d); } d.Dispose(); } List <CpDeviceUpdate> addDeviceList = new List <CpDeviceUpdate>(); lock (iLock) { iVersionInfoAvailable = true; foreach (CpDeviceReprogrammable d in iPendingList) { Firmware firmware = CheckForSoftwareUpdate(d); if (firmware != null) { CpDeviceUpdate device = new CpDeviceUpdate(d, firmware, iCache, iAdapterAddress, iUpdateListener); iDeviceUpdateList.Add(device); addDeviceList.Add(device); } } } foreach (CpDeviceUpdate d in addDeviceList) { if (iAdded != null) { iAdded(this, d); } } }
private Firmware CheckForSoftwareUpdate(CpDeviceReprogrammable aDevice) { Firmware firmware = iVersionReader.GetFirmware(aDevice.Model, aDevice.PcbNumberList); if (firmware != null) { if (aDevice.IsFallback || firmware.CompareTo(aDevice.SoftwareVersion) > 0 || aDevice.SoftwareVersion.CompareTo(firmware.Version) > 0) { return(firmware); } } return(null); }
public CpDeviceUpdate(CpDeviceReprogrammable aDevice, Firmware aFirmware, IFirmwareManager aFirmwareManager, IPAddress aAdapterAddress, IUpdateListener aUpdateListener) { iLock = new object(); iDisposed = false; iAdapterAddress = aAdapterAddress; iDevice = aDevice; iDevice.Changed += HandleChanged; iDevice.ProgressChanged += HandleProgressChanged; iDevice.MessageChanged += HandleMessageChanged; iUpdateListener = aUpdateListener; iUglyname = string.Format("linn-{0}", aDevice.MacAddress.Replace(":", "").Substring(6, 6)); iFirmware = aFirmware; iFirmwareManager = aFirmwareManager; }
//private void Added(CpDeviceReprogramList aList, CpDeviceReprogrammable aDevice) private void Added(object sender, CpDeviceReprogramListRepeater.CpDeviceReprogrammableEventArgs e) { CpDeviceReprogrammable aDevice = e.Device; CpDeviceUpdate device = null; lock (iLock) { if (iDisposed) { return; } if (iVersionInfoAvailable) { Firmware firmware = CheckForSoftwareUpdate(aDevice); if (firmware != null) { UserLog.WriteLine(DateTime.Now + ": CpDeviceUpdateList: DeviceUpdateable+ MacAddress{" + aDevice.MacAddress + "}"); device = new CpDeviceUpdate(aDevice, firmware, iCache, iAdapterAddress, iUpdateListener); iDeviceUpdateList.Add(device); } } iPendingList.Add(aDevice); aDevice.Changed += HandleChanged; } if (device != null) { if (iAdded != null) { iAdded(this, device); } } }
private bool IsCached(Firmware aFirmware) { return(File.Exists(Path.Combine(iCachePath, Path.GetFileName(aFirmware.Uri.AbsolutePath)))); }
public string XmlFilename(Firmware aFirmware, FirmwareRetriever.DDownloadProgress aProgress) { iEventCacheClear.WaitOne(); bool cached = false; bool found = false; FirmwareRetriever retriever = null; lock (iLock) { if (IsCached(aFirmware)) { cached = true; aProgress(100); } if (!cached) { foreach (FirmwareRetriever r in iRetrieverList) { if (r.Uri == aFirmware.Uri) { retriever = r; found = true; break; } } if (!found) { retriever = new FirmwareRetriever(aFirmware.Uri, iCachePath); iRetrieverList.Add(retriever); } } } if (!cached) { if (found) { retriever.WaitOne(aProgress); } else { bool downloaded = retriever.Download(aProgress); lock (iLock) { if (iRetrieverList.Remove(retriever)) { retriever.Dispose(); } } if (!downloaded) { return(null); } } } lock (iLock) { string filename = FlashSupport.GetRomFilename(iCachePathTemp, Path.Combine(iCachePath, Path.GetFileName(aFirmware.Uri.AbsolutePath)), aFirmware.Variant); if (string.IsNullOrEmpty(filename)) { File.Delete(Path.Combine(iCachePath, Path.GetFileName(aFirmware.Uri.AbsolutePath))); } return(filename); } }