public static List <string> GenerateSingleAction(string inPath, string outPath, string rosPackageName = "", bool verbose = false) { // If no ROS package name is provided, extract from path if (rosPackageName.Equals("")) { string[] hierarchy = inPath.Split(new char[] { '/', '\\' }); rosPackageName = hierarchy[hierarchy.Length - 3]; } outPath = Path.Combine(outPath, MsgAutoGenUtilities.ResolvePackageName(rosPackageName)); string inFileName = Path.GetFileNameWithoutExtension(inPath); if (verbose) { Console.WriteLine("Parsing: " + inPath); Console.WriteLine("Output Location: " + outPath); } MessageTokenizer tokenizer = new MessageTokenizer(inPath, new HashSet <string>(MsgAutoGenUtilities.builtInTypesMapping.Keys)); List <List <MessageToken> > listsOfTokens = tokenizer.Tokenize(); if (listsOfTokens.Count != 3) { throw new MessageParserException("Unexpected number of sections. Action should have 3 sections."); } List <string> warnings = new List <string>(); ActionWrapper actionWrapper = new ActionWrapper(inPath, rosPackageName, outPath); for (int i = 0; i < listsOfTokens.Count; i++) { List <MessageToken> tokens = listsOfTokens[i]; // Action is made up of goal, result, feedback string className = inFileName + types[i]; // Parse and generate goal, result, feedback messages MessageParser parser = new MessageParser(tokens, outPath, rosPackageName, "action", MsgAutoGenUtilities.builtInTypesMapping, MsgAutoGenUtilities.builtInTypesDefaultInitialValues, MsgAutoGenUtilities.numericTypeDeserializationFunctions, MsgAutoGenUtilities.numericTypeByteSize, className); parser.Parse(); warnings.AddRange(parser.GetWarnings()); // Generate action section wrapper messages actionWrapper.WrapActionSections(types[i]); } // Generate action wrapper actionWrapper.WrapAction(); return(warnings); }
public static List <string> GenerateSingleMessage(string inPath, string outPath, string rosPackageName = "", bool verbose = false) { // If no ROS package name is provided, extract from path if (rosPackageName.Equals("")) { string[] hierarchy = inPath.Split(new char[] { '/', '\\' }); rosPackageName = hierarchy[hierarchy.Length - 3]; } outPath = Path.Combine(outPath, MsgAutoGenUtilities.ResolvePackageName(rosPackageName)); string inFileName = Path.GetFileNameWithoutExtension(inPath); if (!(rosPackageName.Equals("std_msgs") && (inFileName.Equals("Time") || inFileName.Equals("Duration")))) { if (verbose) { Console.WriteLine("Parsing: " + inPath); Console.WriteLine("Output Location: " + outPath); } MessageTokenizer tokenizer = new MessageTokenizer(inPath, new HashSet <string>(MsgAutoGenUtilities.builtInTypesMapping.Keys)); List <List <MessageToken> > listOfTokens = tokenizer.Tokenize(); if (listOfTokens.Count != 1) { throw new MessageParserException("Unexpected number of sections. Simple message should have 1 section."); } MessageParser parser = new MessageParser(listOfTokens[0], outPath, rosPackageName, "msg", MsgAutoGenUtilities.builtInTypesMapping, MsgAutoGenUtilities.builtInTypesDefaultInitialValues, MsgAutoGenUtilities.numericTypeDeserializationFunctions, MsgAutoGenUtilities.numericTypeByteSize); parser.Parse(); return(parser.GetWarnings()); } else { if (verbose) { Console.WriteLine(inFileName + " will not be generated"); } return(new List <string>()); } }