Skip to content

Commit

Permalink
expo: Tidy up the expo.py tool and usage
Browse files Browse the repository at this point in the history
Tidy up this tool a little:

- define which arguments are needed
- split the enum values out into a header file
- warn if no enum values are found
- display the dtc error if something goes wrong
- avoid a Python traceback on error

Signed-off-by: Simon Glass <[email protected]>
  • Loading branch information
sjg20 authored and trini committed Aug 25, 2023
1 parent 8d0f890 commit d5737b3
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 46 deletions.
37 changes: 21 additions & 16 deletions doc/develop/expo.rst
Original file line number Diff line number Diff line change
Expand Up @@ -367,22 +367,27 @@ strings are provided inline in the nodes where they are used.

::

#define ID_PROMPT 1
#define ID_SCENE1 2
#define ID_SCENE1_TITLE 3

#define ID_CPU_SPEED 4
#define ID_CPU_SPEED_TITLE 5
#define ID_CPU_SPEED_1 6
#define ID_CPU_SPEED_2 7
#define ID_CPU_SPEED_3 8

#define ID_POWER_LOSS 9
#define ID_AC_OFF 10
#define ID_AC_ON 11
#define ID_AC_MEMORY 12

#define ID_DYNAMIC_START 13
/* this comment is parsed by the expo.py tool to insert the values below

enum {
ZERO,
ID_PROMPT,
ID_SCENE1,
ID_SCENE1_TITLE,

ID_CPU_SPEED,
ID_CPU_SPEED_TITLE,
ID_CPU_SPEED_1,
ID_CPU_SPEED_2,
ID_CPU_SPEED_3,

ID_POWER_LOSS,
ID_AC_OFF,
ID_AC_ON,
ID_AC_MEMORY,

ID_DYNAMIC_START,
*/

&cedit {
dynamic-start = <ID_DYNAMIC_START>;
Expand Down
25 changes: 25 additions & 0 deletions test/boot/files/expo_ids.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Sample expo screen layout (ID numbers)
*/

enum {
ZERO,
ID_PROMPT,

ID_SCENE1,
ID_SCENE1_TITLE,

ID_CPU_SPEED,
ID_CPU_SPEED_TITLE,
ID_CPU_SPEED_1,
ID_CPU_SPEED_2,
ID_CPU_SPEED_3,

ID_POWER_LOSS,
ID_AC_OFF,
ID_AC_ON,
ID_AC_MEMORY,

ID_DYNAMIC_START,
};
23 changes: 1 addition & 22 deletions test/boot/files/expo_layout.dts
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,7 @@

/dts-v1/;

/*
enum {
ZERO,
ID_PROMPT,

ID_SCENE1,
ID_SCENE1_TITLE,

ID_CPU_SPEED,
ID_CPU_SPEED_TITLE,
ID_CPU_SPEED_1,
ID_CPU_SPEED_2,
ID_CPU_SPEED_3,

ID_POWER_LOSS,
ID_AC_OFF,
ID_AC_ON,
ID_AC_MEMORY,

ID_DYNAMIC_START,
};
*/
/* see expo_ids.h for the IDs */

/ {
dynamic-start = <ID_DYNAMIC_START>;
Expand Down
4 changes: 3 additions & 1 deletion test/py/tests/test_ut.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,10 +285,12 @@ def setup_bootflow_image(cons):
def setup_cedit_file(cons):
infname = os.path.join(cons.config.source_dir,
'test/boot/files/expo_layout.dts')
inhname = os.path.join(cons.config.source_dir,
'test/boot/files/expo_ids.h')
expo_tool = os.path.join(cons.config.source_dir, 'tools/expo.py')
outfname = 'cedit.dtb'
u_boot_utils.run_and_log(
cons, f'{expo_tool} -e {infname} -l {infname} -o {outfname}')
cons, f'{expo_tool} -e {inhname} -l {infname} -o {outfname}')


@pytest.mark.buildconfigspec('ut_dm')
Expand Down
22 changes: 15 additions & 7 deletions tools/expo.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,10 @@ def calc_ids(fname):

def run_expo(args):
"""Run the expo program"""
ids = calc_ids(args.enum_fname)
fname = args.enum_fname or args.layout
ids = calc_ids(fname)
if not ids:
print(f"Warning: No enum ID values found in file '{fname}'")

indata = tools.read_file(args.layout)

Expand All @@ -88,10 +91,10 @@ def run_expo(args):

with open('/tmp/asc', 'wb') as outf:
outf.write(data)
proc = subprocess.run('dtc', input=data, capture_output=True, check=True)
proc = subprocess.run('dtc', input=data, capture_output=True)
edtb = proc.stdout
if proc.stderr:
print(proc.stderr)
print(f"Devicetree compiler error:\n{proc.stderr.decode('utf-8')}")
return 1
tools.write_file(args.outfile, edtb)
return 0
Expand All @@ -109,11 +112,13 @@ def parse_args(argv):
args is a list of string arguments
"""
parser = argparse.ArgumentParser()
parser.add_argument('-D', '--debug', action='store_true',
help='Enable full debug traceback')
parser.add_argument('-e', '--enum-fname', type=str,
help='C file containing enum declaration for expo items')
parser.add_argument('-l', '--layout', type=str,
help='Devicetree file source .dts for expo layout')
parser.add_argument('-o', '--outfile', type=str,
help='.dts or C file containing enum declaration for expo items')
parser.add_argument('-l', '--layout', type=str, required=True,
help='Devicetree file source .dts for expo layout (and perhaps enums)')
parser.add_argument('-o', '--outfile', type=str, required=True,
help='Filename to write expo layout dtb')

return parser.parse_args(argv)
Expand All @@ -122,6 +127,9 @@ def start_expo():
"""Start the expo program"""
args = parse_args(sys.argv[1:])

if not args.debug:
sys.tracebacklimit = 0

ret_code = run_expo(args)
sys.exit(ret_code)

Expand Down

0 comments on commit d5737b3

Please sign in to comment.