ardupilot/libraries/AP_DDS/gen_config_h.py
Ryan Friedman 0905ffa438 AP_DDS: Add initial DDS Client support
* Use clang to verify no unused files
* Add a topic table to prepare for code generating interfaces
* Generated IDL's to to a generated directory in build
* Use black to format python files
* Populate a ROS time maessage with Linux epoch time for ROS time
* Add workarounds for PoseStamped and TwistStamped with manual mods to IDL

Signed-off-by: Ryan Friedman <ryanfriedman5410+github@gmail.com>
Co-authored-by: Rhys Mainwaring <rhys.mainwaring@me.com>
Co-authored-by: Arsh Pratap <arshpratapofficial@gmail.com>
Co-authored-by: Andrew Tridgell <andrew@tridgell.net>
Co-authored-by: Russ Webber <russ@rw.id.au>
Co-authored-by: Peter Barker <pb-gh@barker.dropbear.id.au>
2023-03-22 09:22:36 +11:00

82 lines
2.4 KiB
Python
Executable File

#!/usr/bin/env python
'''
process a *.h.in file to produce a *.h file
'''
# TODO move to AP_DDS_Client/tools
import re
import sys
config = {
'PROJECT_VERSION_MAJOR': 1,
'PROJECT_VERSION_MINOR': 0,
'PROJECT_VERSION_PATCH': 0,
'PROJECT_VERSION': 2,
'UCLIENT_MAX_OUTPUT_BEST_EFFORT_STREAMS': 4,
'UCLIENT_MAX_OUTPUT_RELIABLE_STREAMS': 4,
'UCLIENT_MAX_INPUT_BEST_EFFORT_STREAMS': 4,
'UCLIENT_MAX_INPUT_RELIABLE_STREAMS': 2,
'UCLIENT_MAX_SESSION_CONNECTION_ATTEMPTS': 2,
'UCLIENT_MIN_SESSION_CONNECTION_INTERVAL': 1000,
'UCLIENT_MIN_HEARTBEAT_TIME_INTERVAL': 200,
'UCLIENT_UDP_TRANSPORT_MTU': 300,
'UCLIENT_TCP_TRANSPORT_MTU': 350,
'UCLIENT_SERIAL_TRANSPORT_MTU': 250,
'UCLIENT_CUSTOM_TRANSPORT_MTU': 400,
'CONFIG_MACHINE_ENDIANNESS': 1, # little endian
'UCLIENT_SHARED_MEMORY_MAX_ENTITIES': 0,
'UCLIENT_SHARED_MEMORY_STATIC_MEM_SIZE': 0,
'UCLIENT_HARD_LIVELINESS_CHECK_TIMEOUT': 1000,
}
defines = {
"UCLIENT_PROFILE_UDP": 0,
"UCLIENT_PROFILE_TCP": 0,
"UCLIENT_PROFILE_CAN": 0,
"UCLIENT_PROFILE_SERIAL": 1,
"UCLIENT_PROFILE_CUSTOM_TRANSPORT": 0,
"UCLIENT_PROFILE_DISCOVERY": 0,
"UCLIENT_PLATFORM_POSIX": 1,
"UCLIENT_PLATFORM_POSIX_NOPOLL": 0,
"UCLIENT_PLATFORM_WINDOWS": 0,
"UCLIENT_PLATFORM_FREERTOS_PLUS_TCP": 0,
"UCLIENT_PLATFORM_ZEPHYR": 0,
"UCLIENT_EXTERNAL_TCP": 0,
"UCLIENT_EXTERNAL_UDP": 0,
"UCLIENT_EXTERNAL_SERIAL": 0,
"UCLIENT_PROFILE_MULTITHREAD": 0,
"UCLIENT_PROFILE_SHARED_MEMORY": 0,
"UCLIENT_PROFILE_STREAM_FRAMING": 0,
"UCLIENT_PLATFORM_RTEMS_BSD_NET": 0,
"UCLIENT_TWEAK_XRCE_WRITE_LIMIT": 0,
"UCLIENT_HARD_LIVELINESS_CHECK": 0,
}
h_in = sys.argv[1]
h = sys.argv[2]
print("Processing %s to %s" % (h_in, h))
txt = open(h_in, 'r').read()
for c in sorted(config.keys(), key=len, reverse=True):
txt = txt.replace("@%s@" % c, str(config[c]))
for c in sorted(defines.keys(), key=len, reverse=True):
if defines[c] != 0:
txt = txt.replace("#cmakedefine %s" % c, "#define %s %u" % (c, defines[c]))
else:
txt = txt.replace("#cmakedefine %s" % c, "// #define %s %u" % (c, defines[c]))
matches = re.findall(r'@(\w+)@', txt)
if len(matches) > 0:
print("Missing config elements: ", matches)
sys.exit(1)
matches = re.findall(r'#cmakedefine\s+\w+', txt)
if len(matches) > 0:
print("Missing #cmakedefine elements: ", matches)
sys.exit(1)
open(h, 'w').write(txt)