Skip to content

Commit 6dff116

Browse files
authored
Merge pull request lvgl#349 from liamHowatt/fix/lvgl-api-refactor
feat(gen): accept a JSON from the LVGL JSON generator
2 parents 918326f + d5fb6ca commit 6dff116

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

gen/gen_mpy.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,12 @@ def eprint(*args, **kwargs):
4747
argParser.add_argument('-I', '--include', dest='include', help='Preprocesor include path', metavar='<Include Path>', action='append')
4848
argParser.add_argument('-D', '--define', dest='define', help='Define preprocessor macro', metavar='<Macro Name>', action='append')
4949
argParser.add_argument('-E', '--external-preprocessing', dest='ep', help='Prevent preprocessing. Assume input file is already preprocessed', metavar='<Preprocessed File>', action='store')
50+
argParser.add_argument('-J', '--lvgl-json', dest='json', help='Provde a JSON from the LVGL JSON generator for missing information', metavar='<JSON file>', action='store')
5051
argParser.add_argument('-M', '--module_name', dest='module_name', help='Module name', metavar='<Module name string>', action='store')
5152
argParser.add_argument('-MP', '--module_prefix', dest='module_prefix', help='Module prefix that starts every function name', metavar='<Prefix string>', action='store')
5253
argParser.add_argument('-MD', '--metadata', dest='metadata', help='Optional file to emit metadata (introspection)', metavar='<MetaData File Name>', action='store')
5354
argParser.add_argument('input', nargs='+')
54-
argParser.set_defaults(include=[], define=[], ep=None, input=[])
55+
argParser.set_defaults(include=[], define=[], ep=None, json=None, input=[])
5556
args = argParser.parse_args()
5657

5758
module_name = args.module_name
@@ -210,7 +211,7 @@ def function_prototype(func):
210211
create_obj_pattern = re.compile('^{prefix}_(.+)_create$'.format(prefix=module_prefix))
211212
lv_method_pattern = re.compile('^{prefix}_[^_]+_(.+)'.format(prefix=module_prefix), re.IGNORECASE)
212213
lv_base_obj_pattern = re.compile('^(struct _){{0,1}}{prefix}_{base_name}_t( [*]){{0,1}}'.format(prefix=module_prefix, base_name = base_obj_name))
213-
lv_str_enum_pattern = re.compile('^_{prefix}_STR_(.+)'.format(prefix=module_prefix.upper()))
214+
lv_str_enum_pattern = re.compile('^_?{prefix}_STR_(.+)'.format(prefix=module_prefix.upper()))
214215
lv_callback_type_pattern = re.compile('({prefix}_){{0,1}}(.+)_cb(_t){{0,1}}'.format(prefix=module_prefix))
215216
lv_global_callback_pattern = re.compile('.*g_cb_t')
216217
lv_func_returns_array = re.compile('.*_array$')
@@ -294,6 +295,14 @@ def is_struct(type):
294295
gen = c_generator.CGenerator()
295296
ast = parser.parse(s, filename='<none>')
296297

298+
if args.json is not None:
299+
with open(args.json, "r") as f:
300+
lvgl_json = json.load(f)
301+
if not lvgl_json:
302+
# if the json is an empty dictionary
303+
lvgl_json = None
304+
else:
305+
lvgl_json = None
297306

298307
# *************** Fix ***********************************
299308
# this is a fix for structures not getting populated properly from
@@ -1860,6 +1869,10 @@ def get_user_data(func, func_name = None, containing_struct = None, containing_s
18601869
user_data = 'user_data'
18611870
user_data_found = user_data in [decl.name for decl in flatten_struct_decls]
18621871
# print('/* --> callback: user_data=%s user_data_found=%s containing_struct=%s */' % (user_data, user_data_found, containing_struct))
1872+
if not user_data_found and lvgl_json is not None:
1873+
containing_struct_j = next((struct for struct in lvgl_json["structures"] if struct["name"] == struct_arg_type_name), None)
1874+
if containing_struct_j is not None:
1875+
user_data_found = any(user_data == field["name"] for field in containing_struct_j["fields"])
18631876
return (user_data if user_data_found else None), *get_user_data_accessors(containing_struct, containing_struct_name)
18641877

18651878
#

0 commit comments

Comments
 (0)