diff --git a/CHANGELOG.md b/CHANGELOG.md index 37440e77..764fc32b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ Please add a note of your changes below this heading if you make a Pull Request. * ASCII protocol commands with multiline responses (`i`, `h`) now return the expected response (in v0.5.2 the response was corrupted) * odrivetool no longer shows the message `` when closing +### Changed +* Removed `odrivetool generate-code`. This feature was broken in 0.5.2. Use [`interface_generator.py`](https://github.com/odriverobotics/ODrive/blob/master/tools/fibre-tools/interface_generator.py) instead (see Tupfile.lua for examples). + # Releases ## [0.5.2] - 2021-05-21 diff --git a/tools/odrive/code_generator.py b/tools/odrive/code_generator.py deleted file mode 100644 index c14d6bcb..00000000 --- a/tools/odrive/code_generator.py +++ /dev/null @@ -1,69 +0,0 @@ - -import jinja2 -import os -import json - -def get_flat_endpoint_list(json, prefix, id_offset): - flat_list = [] - for item in json: - item = item.copy() - if 'id' in item: - item['id'] -= id_offset - if 'type' in item: - if item['type'] in {'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64'}: - item['type'] += '_t' - is_property = True - elif item['type'] in {'bool', 'float'}: - is_property = True - elif item['type'] in {'function'}: - if len(item.get('arguments', [])) == 0 and len(item.get('inputs', [])) == 0 and len(item.get('outputs', [])) == 0: - item['type'] = 'void' - is_property = True - else: - is_property = False - else: - is_property = False - if is_property: - item['name'] = prefix + item['name'] - flat_list.append(item) - if 'members' in item: - flat_list = flat_list + get_flat_endpoint_list(item['members'], prefix + item['name'] + '.', id_offset) - return flat_list - -def generate_code(odrv, template_file, output_file): - json_data = odrv._json_data - json_crc = odrv._json_crc - - axis0_json = [item for item in json_data if item['name'].startswith("axis0")][0] - axis1_json = [item for item in json_data if item['name'].startswith("axis1")][0] - json_data = [item for item in json_data if not item['name'].startswith("axis")] - endpoints = get_flat_endpoint_list(json_data, '', 0) - per_axis_offset = axis1_json['members'][0]['id'] - axis0_json['members'][0]['id'] - axis_endpoints = get_flat_endpoint_list(axis0_json['members'], 'axis.', 0) - axis_endpoints_copy = get_flat_endpoint_list(axis1_json['members'], 'axis.', per_axis_offset) - if axis_endpoints != axis_endpoints_copy: - raise Exception("axis0 and axis1 don't look exactly equal") - - env = jinja2.Environment( - #loader = jinja2.FileSystemLoader("/Data/Projects/") - #trim_blocks=True, - #lstrip_blocks=True - ) - - # Expose helper functions to jinja template code - #env.filters["delimit"] = camel_case_to_words - - #import ipdb; ipdb.set_trace() - - # Load and render template - template = env.from_string(template_file.read()) - output = template.render( - json_crc=json_crc, - endpoints=endpoints, - per_axis_offset=per_axis_offset, - axis_endpoints=axis_endpoints, - output_name=os.path.basename(output_file.name) - ) - - # Output - output_file.write(output) diff --git a/tools/odrivetool b/tools/odrivetool index 3c131160..de54b461 100755 --- a/tools/odrivetool +++ b/tools/odrivetool @@ -72,13 +72,6 @@ dfu_parser.add_argument('file', nargs='?', help="Path to the file that contains the configuration data. " "If no path is provided, the configuration is loaded from {}.".format(tempfile.gettempdir())) -code_generator_parser = subparsers.add_parser('generate-code', help="Process a jinja2 template, passing the ODrive's JSON data as data input") -code_generator_parser.add_argument("-t", "--template", type=argparse.FileType('r'), - help="the code template") -code_generator_parser.add_argument("-o", "--output", type=argparse.FileType('w'), default='-', - help="path of the generated output") -code_generator_parser.set_defaults(template = os.path.join(script_path, 'odrive_header_template.h.in')) - subparsers.add_parser('liveplotter', help="For plotting of odrive parameters (i.e. position) in real time") subparsers.add_parser('drv-status', help="Show status of the on-board DRV8301 chips (for debugging only)") subparsers.add_parser('rate-test', help="Estimate the average transmission bandwidth over USB") @@ -187,11 +180,6 @@ try: from odrive.version import setup_udev_rules setup_udev_rules(logger) - elif args.command == 'generate-code': - from odrive.code_generator import generate_code - my_odrive = odrive.find_any(path=args.path, serial_number=args.serial_number) - generate_code(my_odrive, args.template, args.output) - elif args.command == 'backup-config': from odrive.configuration import backup_config print("Waiting for ODrive...")