public static MavLink Parse(string xmlFile) { using (var fs = new FileStream(xmlFile, FileMode.Open, FileAccess.Read)) { XmlSerializer s = new XmlSerializer(typeof(MavLink)); MavLink mavlink = (MavLink)s.Deserialize(fs); // unfortunately the <extensions/> sections in each <message> is not something the XmlSerializer can handle, // so we have to post-process the MavLink tree with this additional information. fs.Seek(0, SeekOrigin.Begin); XDocument doc = XDocument.Load(fs); foreach (XElement message in doc.Root.Element("messages").Elements("message")) { string id = (string)message.Attribute("id"); MavMessage msg = (from m in mavlink.messages where m.id == id select m).FirstOrDefault(); int count = 0; foreach (XElement child in message.Elements()) { string childName = child.Name.LocalName; if (childName == "field") { count++; } else if (childName == "extensions") { msg.ExtensionPos = count; break; } } } return(mavlink); } }
public void Generate(MavLink definitions, string outputDirectory) { this.definitions = definitions; using (header = new StreamWriter(Path.Combine(outputDirectory, "MavLinkMessages.hpp"))) { using (impl = new StreamWriter(Path.Combine(outputDirectory, "MavLinkMessages.cpp"))) { header.WriteLine("#ifndef MavLinkCom_MavLinkMessages_hpp"); header.WriteLine("#define MavLinkCom_MavLinkMessages_hpp"); header.WriteLine(""); header.WriteLine("#include <stdint.h>"); header.WriteLine("#include <string>"); header.WriteLine("#include \"MavLinkMessageBase.hpp\""); header.WriteLine(""); header.WriteLine("namespace mavlinkcom"); header.WriteLine("{"); header.WriteLine(""); impl.WriteLine("#include \"MavLinkMessages.hpp\""); impl.WriteLine("using namespace mavlinkcom;"); impl.WriteLine(""); GenerateEnums(); GenerateMessages(); GenerateCommands(); header.WriteLine("}"); header.WriteLine(""); header.WriteLine("#endif"); } } }
void Run() { //parse the XML MavLink mavlink = MavlinkParser.Parse(xmlInput); MavLinkGenerator gen = new MavLinkGenerator(); gen.Generate(mavlink, outputFolder); }
public static MavLink Parse(string xmlFile) { using (var fs = new FileStream(xmlFile, FileMode.Open, FileAccess.Read)) { XmlSerializer s = new XmlSerializer(typeof(MavLink)); MavLink mavlink = (MavLink)s.Deserialize(fs); return(mavlink); } }
public void GenerateMessages(MavLink definitions, string outputDirectory) { this.definitions = definitions; using (header = new StreamWriter(Path.Combine(outputDirectory, "MavLinkMessages.hpp"))) { using (impl = new StreamWriter(Path.Combine(outputDirectory, "MavLinkMessages.cpp"))) { header.WriteLine("// Copyright (c) Microsoft Corporation. All rights reserved."); header.WriteLine("// Licensed under the MIT License."); header.WriteLine("#ifndef MavLinkCom_MavLinkMessages_hpp"); header.WriteLine("#define MavLinkCom_MavLinkMessages_hpp"); header.WriteLine(""); header.WriteLine("#include <stdint.h>"); header.WriteLine("#include <string>"); header.WriteLine("#include \"MavLinkMessageBase.hpp\""); header.WriteLine(""); header.WriteLine("namespace mavlinkcom"); header.WriteLine("{"); header.WriteLine(""); impl.WriteLine("// Copyright (c) Microsoft Corporation. All rights reserved."); impl.WriteLine("// Licensed under the MIT License."); impl.WriteLine("#include \"MavLinkMessages.hpp\"");; impl.WriteLine("#include <sstream>"); impl.WriteLine("using namespace mavlinkcom;"); impl.WriteLine(""); GenerateEnums(); GenerateMessages(); GenerateCommands(); GenerateDecodeMethod(); header.WriteLine("}"); header.WriteLine(""); header.WriteLine("#endif"); } } }