public Configuration(string arduinoPath) { // set path to the components this.arduinoPath = arduinoPath; buildPath = System.IO.Path.GetTempPath() + "IDE4Arduino/build/"; if (!Directory.Exists(buildPath)) { Directory.CreateDirectory(buildPath); } arduinoCoreLibPath = Path.Combine(arduinoPath, @"hardware\arduino\avr\libraries"); arduinoLibPath = Path.Combine(arduinoPath, @"libraries"); arduinoUserLibPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Arduino\libraries"); // Parse Platforms string[] vendors = Directory.GetDirectories(Path.Combine(arduinoPath, "hardware")); string userHardwareFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"Arduino\hardware"); string[] usrVendors = Directory.GetDirectories(userHardwareFolder); List <ArduinoPlatform> platforms = new List <ArduinoPlatform>(); arduinoBoards = new List <ArduinoBoard>(); vendors = vendors.Concat(usrVendors).ToArray(); foreach (string vendor in vendors) { string vendor_name = Path.GetFileName(vendor); if (vendor_name.Equals("tools")) { continue; } string[] archs = Directory.GetDirectories(vendor); foreach (string arch in archs) { string arch_name = Path.GetFileName(arch); try { ArduinoPlatform p = new ArduinoPlatform(arduinoPath, Path.Combine(arch, "platform.txt"), vendor_name, arch_name); if (p.cfg.Count < 1) { continue; } arduinoBoards.AddRange(ArduinoBoard.parseBoardFile(Path.Combine(arch, "boards.txt"), p)); } catch { } } } recreateLibraries(); }
public static ArduinoBoard[] parseBoardFile(string file, ArduinoPlatform p) { List <ArduinoBoard> boards = new List <ArduinoBoard>(); Dictionary <string, string> tcfg = ConfigParser.parseFile(file); // get list of boards List <string> bNames = tcfg.Where(kv => kv.Key.EndsWith("name")).Select(kv => kv.Key.Split('.')[0]).ToList(); bNames = bNames.Distinct().ToList(); foreach (string bName in bNames) { boards.Add(new ArduinoBoard(bName, tcfg, Path.GetDirectoryName(file), p)); } return(boards.ToArray()); }
public ArduinoBoard(string boardShort, Dictionary <string, string> data, string path, ArduinoPlatform p) { cfg = new Dictionary <string, string>(p.cfg); Dictionary <string, string> bcfg = data.Where(kv => kv.Key.StartsWith(boardShort)).ToDictionary(kv => kv.Key.Replace(boardShort + ".", ""), kv => kv.Value); bcfg.ToList().ForEach(x => cfg[x.Key] = x.Value); if (cfg.ContainsKey("build.usb_manufacturer")) { cfg["build.usb_manufacturer"] = "\"\\\"" + cfg["build.usb_manufacturer"].Replace("\"", "") + "\\\"\""; } if (cfg.ContainsKey("build.usb_product")) { cfg["build.usb_product"] = "\"\\\"" + cfg["build.usb_product"].Replace("\"", "") + "\\\"\""; } cfg = ConfigParser.parseDict(cfg, cfg); cfg = ConfigParser.parseDict(cfg, cfg); id = boardShort; name = cfg["name"]; this.path = path; corePath = Path.Combine(path, @"cores\" + cfg["build.core"]); //.Replace('\\','/'); variantPath = Path.Combine(path, @"variants\" + cfg["build.variant"]); //.Replace('\\', '/'); Dictionary <string, string> types = cfg.Where(kv => kv.Key.StartsWith("menu.cpu")).ToDictionary(x => x.Key.Remove(0, 9), x => x.Value); cpu_names = types.Keys.Select(key => key.Split('.')[0]).ToList().Distinct().ToArray(); }