diff --git a/Tools/Carbonix_scripts/devid-decode.py b/Tools/Carbonix_scripts/devid-decode.py new file mode 100644 index 0000000000..01d60aeae6 --- /dev/null +++ b/Tools/Carbonix_scripts/devid-decode.py @@ -0,0 +1,27 @@ +# Decode an ArduPilot device id + +import argparse + +parser = argparse.ArgumentParser(description='Decode a device id') +parser.add_argument('device_id', type=int, help='Device ID to decode') +args = parser.parse_args() + +bus_types = { + 0: 'UNKNOWN', + 1: 'I2C', + 2: 'SPI', + 3: 'UAVCAN', + 4: 'SITL', + 5: 'MSP', + 6: 'SERIAL', + 7: 'QSPI', +} + +device_id = args.device_id +bus_type = device_id & 0x7 +bus = (device_id >> 3) & 0x1f +address = (device_id >> 8) & 0xff +devtype = (device_id >> 16) & 0xff + +print(f"Device ID: {device_id}") +print(f"{bus_types[bus_type]}{bus}, address {address}, devtype {devtype}") diff --git a/Tools/Carbonix_scripts/devid-encode.py b/Tools/Carbonix_scripts/devid-encode.py new file mode 100644 index 0000000000..9fce879439 --- /dev/null +++ b/Tools/Carbonix_scripts/devid-encode.py @@ -0,0 +1,21 @@ +# Encode an ArduPilot device ID + +# prompt the user for the bus type +print("Bus types:") +print("0: UNKNOWN") +print("1: I2C") +print("2: SPI") +print("3: UAVCAN") +print("4: SITL") +print("5: MSP") +print("6: SERIAL") +print("7: QSPI") +bus_type = int(input("Enter the bus type (0-7): ")) + +# prompt the user for the bus number +bus = int(input("Enter the bus number (0-31): ")) +address = int(input("Enter the address (0-255): ")) +devtype = int(input("Enter the device type (0-255): ")) +device_id = bus_type | (bus << 3) | (address << 8) | (devtype << 16) + +print(f"Device ID: {device_id}") diff --git a/Tools/Carbonix_scripts/process_sitl_defaults.py b/Tools/Carbonix_scripts/process_sitl_defaults.py new file mode 100755 index 0000000000..f18eb90417 --- /dev/null +++ b/Tools/Carbonix_scripts/process_sitl_defaults.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# encoding: utf-8 + +''' +Build SITL default parameter files for use with SITL launcher +''' + +import os +import re +import fnmatch +import argparse + + +def main(): + parser = argparse.ArgumentParser(description='Build SITL default parameter files') + parser.add_argument('input_file', help='Input file to process') + parser.add_argument('output_file', help='Output file to write to') + args = parser.parse_args() + + defaults = process_defaults(args.input_file) + with open(args.output_file, "w") as f: + f.write("\n".join(defaults)) + + +def process_defaults(file, depth=0): + if depth > 10: + raise Exception("Too many levels of @include") + + param_list = [] + with open(file, "r") as f: + lines = f.read().splitlines() + for line in lines: + if line.startswith("@include"): + rel_path = line.split(maxsplit=1)[1] + path = os.path.join(os.path.dirname(file), rel_path) + param_list.extend( + process_defaults(path, depth + 1) + ) + continue + + if line.startswith("@delete"): + pattern = line.split(maxsplit=1)[1] + for i in range(len(param_list)): + param_name = re.split(r"[\s,]+", param_list[i])[0] + if fnmatch.fnmatch(param_name, pattern): + param_list[i] = "#deleted " + param_list[i] + line = "#" + line + + param_list.append(line) + + return param_list + + +if __name__ == "__main__": + main() diff --git a/wscript b/wscript index 61fffcb8be..67c6b8ff44 100644 --- a/wscript +++ b/wscript @@ -465,6 +465,26 @@ def configure(cfg): if cfg.options.board is None: cfg.options.board = 'sitl' + # Loop through all .parm files in libraries/AP_HAL_ChibiOS/hwdef/CarbonixCommon/sitl_params/ + param_folder = 'libraries/AP_HAL_ChibiOS/hwdef/CarbonixCommon/sitl_params/' + if cfg.options.board == 'sitl' and os.path.exists(param_folder): + for file in os.listdir(param_folder): + if not file.endswith('.parm'): + continue + + # make build/sitl directory if it doesn't exist + if not os.path.exists('build'): + os.makedirs('build') + if not os.path.exists('build/sitl'): + os.makedirs('build/sitl') + + in_file = os.path.join(param_folder, file) + out_file = os.path.join('build/sitl', file) + + # Call Tools/Carbonix_scripts/process_sitl_defaults.py $in_file $out_file + cfg.msg('Processing default parameters', file) + subprocess.run(['Tools/Carbonix_scripts/process_sitl_defaults.py', in_file, out_file]) + boards_names = boards.get_boards_names() if not cfg.options.board in boards_names: for b in boards_names: