Example #1
0
        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);
            }
        }
Example #2
0
        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");
                }
            }
        }
Example #3
0
        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);
     }
 }
Example #5
0
        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");
                }
            }
        }