mirror of
https://github.com/odriverobotics/ODrive.git
synced 2026-08-18 01:18:52 +08:00
remove odrivetool generate-code
This commit is contained in:
@@ -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 `<Task pending coro=... running at ...>` 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
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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...")
|
||||
|
||||
Reference in New Issue
Block a user