generate_typedescriptions.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from generate_datatypes import *
  2. def main():
  3. parser = argparse.ArgumentParser()
  4. parser.add_argument('--only-needed', action='store_true', help='generate only types needed for compile')
  5. parser.add_argument('xml', help='path/to/Opc.Ua.Types.bsd')
  6. parser.add_argument('outfile', help='outfile w/o extension')
  7. args = parser.parse_args()
  8. outname = args.outfile.split("/")[-1]
  9. inname = args.xml.split("/")[-1]
  10. fh = open(args.outfile + "_generated.h",'w')
  11. def printh(string):
  12. print(string, end='\n', file=fh)
  13. types = parseTypeDefinitions(args.xml)
  14. printh('''/**
  15. * @file ''' + outname + '''_generated.h
  16. *
  17. * @brief Autogenerated data types
  18. *
  19. * Generated from ''' + inname + ''' with script ''' + sys.argv[0] + '''
  20. * on host ''' + platform.uname()[1] + ''' by user ''' + getpass.getuser() + ''' at ''' + time.strftime("%Y-%m-%d %I:%M:%S") + '''
  21. */
  22. #ifndef ''' + outname.upper() + '''_GENERATED_H_
  23. #define ''' + outname.upper() + '''_GENERATED_H_
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. #include "ua_types.h"
  28. /**
  29. * @ingroup types
  30. *
  31. * @defgroup ''' + outname + '''_generated Autogenerated ''' + outname + ''' Types
  32. *
  33. * @brief Data structures that are autogenerated from an XML-Schema.
  34. * @{
  35. */''')
  36. maxmem = 0
  37. for t in types.itervalues():
  38. printh("")
  39. if type(t) == StructuredType:
  40. if len(t.members) > maxmem:
  41. maxmem = len(t.members)
  42. if t.description != "":
  43. printh("/** @brief " + t.description + "*/")
  44. printh(t.string_c())
  45. print(len(types))
  46. print(maxmem)
  47. printh('''
  48. /// @} /* end of group */
  49. #ifdef __cplusplus
  50. } // extern "C"
  51. #endif
  52. #endif''')
  53. fh.close()
  54. if __name__ == "__main__":
  55. main()