using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
private static string GetVersionFromString(string fileVerString)
if (string.IsNullOrEmpty(fileVerString)) return "";
fileVerString = fileVerString.ToLower().Replace("_v.", "_v");
int verIndex = fileVerString.LastIndexOf("_v");
if (verIndex == -1) return fileVerString;
return fileVerString.Substring(verIndex + 1);
public static bool GetFirmwareUpdate(string currentFwVersion, out string newFwFilename, out string newFwBytes)
currentFwVersion = currentFwVersion ?? "";
newFwFilename = "nano_kernel_v1.1.0.7.bin";
if (newFwFilename == null)
string cleanedFilename = newFwFilename;
if (Regex.IsMatch(cleanedFilename, @"^.+\.[a-zA-Z]{2,4}$"))
cleanedFilename = Path.GetFileNameWithoutExtension(cleanedFilename);
string newVer = GetVersionFromString(cleanedFilename);
string currentVer = GetVersionFromString(currentFwVersion);
if (!string.Equals(currentVer, newVer, StringComparison.OrdinalIgnoreCase))
Console.WriteLine($"Failed to load '{newFwFilename}' from disk: {ex.Message}");
return (newFwBytes?.Length > 0);
public static void Main()
string currentfw = "nano_kernel_v1.1.0.7";
if(GetFirmwareUpdate(currentfw, out newfw, out newfwbytes))
Console.WriteLine("needs update...");
Console.WriteLine(newfw + " new");
Console.WriteLine(currentfw + " current");