26
26
DOWNLOAD_URL = "https://downloads.arduino.cc/arduino-fwuploader"
27
27
28
28
29
- # create a different dictionary for new boards
30
- def create_boards_dictionary (new ):
31
- boards = {
32
- "arduino:samd:mkr1000" : {"fqbn" : "arduino:samd:mkr1000" , "firmware" : []},
33
- "arduino:samd:mkrwifi1010" : {
34
- "fqbn" : "arduino:samd:mkrwifi1010" ,
35
- "firmware" : [],
36
- },
37
- "arduino:samd:nano_33_iot" : {
38
- "fqbn" : "arduino:samd:nano_33_iot" ,
39
- "firmware" : [],
40
- },
41
- "arduino:samd:mkrvidor4000" : {
42
- "fqbn" : "arduino:samd:mkrvidor4000" ,
43
- "firmware" : [],
44
- },
45
- "arduino:megaavr:uno2018" : {"fqbn" : "arduino:megaavr:uno2018" , "firmware" : []},
46
- "arduino:mbed_nano:nanorp2040connect" : {
47
- "fqbn" : "arduino:mbed_nano:nanorp2040connect" ,
48
- "firmware" : [],
49
- },
50
- }
51
- if new :
52
- boards = {
53
- "arduino:renesas_uno:unor4wifi" : {
54
- "fqbn" : "arduino:renesas_uno:unor4wifi" ,
55
- "firmware" : [],
56
- # "uploader_plugin" and "additional_tools" need to be hard coded because
57
- # there is no way to retrieve them dinamically
58
- "uploader_plugin" :
"arduino:[email protected] " ,
59
- "additional_tools" : [
"arduino:[email protected] " ,
"arduino:[email protected] " ],
60
- },
61
- }
62
- return boards
63
-
64
-
65
29
# handle firmware name
66
30
def get_firmware_file (module , simple_fqbn , version ):
67
31
firmware_full_path = Path (__file__ ).parent .parent / "firmwares" / module / version
@@ -258,50 +222,42 @@ def create_upload_data(fqbn, installed_cores): # noqa: C901
258
222
return upload_data
259
223
260
224
261
- def generate_boards_json (input_data , arduino_cli_path , new_boards ):
262
- # List of old boards that need precompiled sketch data and uploader information obtained through platform.txt.
263
- old_boards = [
264
- "arduino:samd:mkr1000" ,
265
- "arduino:samd:mkrwifi1010" ,
266
- "arduino:samd:nano_33_iot" ,
267
- "arduino:samd:mkrvidor4000" ,
268
- "arduino:megaavr:uno2018" ,
269
- "arduino:mbed_nano:nanorp2040connect" ,
270
- ]
271
-
272
- boards = create_boards_dictionary (new_boards )
225
+ def generate_boards_json (input_data , arduino_cli_path ):
226
+ boards = {
227
+ "arduino:samd:mkr1000" : {"fqbn" : "arduino:samd:mkr1000" , "firmware" : []},
228
+ "arduino:samd:mkrvidor4000" : {
229
+ "fqbn" : "arduino:samd:mkrvidor4000" ,
230
+ "firmware" : [],
231
+ },
232
+ }
273
233
274
234
# Gets the installed cores
275
235
res = arduino_cli (cli_path = arduino_cli_path , args = ["core" , "list" , "--format" , "json" ])
276
236
installed_cores = {c ["id" ]: c for c in json .loads (res )}
277
237
278
238
# Verify all necessary cores are installed
279
239
# TODO: Should we check that the latest version is installed too?
280
- for fqbn in old_boards :
240
+ for fqbn , data in input_data . items () :
281
241
core_id = ":" .join (fqbn .split (":" )[:2 ])
282
242
if core_id not in installed_cores :
283
243
print (f"Board { fqbn } is not installed, install its core { core_id } " )
284
244
sys .exit (1 )
285
245
286
- for fqbn , data in input_data .items ():
287
246
simple_fqbn = fqbn .replace (":" , "." )
288
247
289
- if fqbn in old_boards :
290
- boards [fqbn ]["loader_sketch" ] = create_precomp_sketch_data (simple_fqbn , "loader" )
291
- boards [fqbn ]["version_sketch" ] = create_precomp_sketch_data (simple_fqbn , "getversion" )
292
- boards [fqbn ].update (create_upload_data (fqbn , installed_cores ))
293
- # Gets the old_board name
294
- res = arduino_cli (
295
- cli_path = arduino_cli_path ,
296
- args = ["board" , "search" , fqbn , "--format" , "json" ],
297
- )
298
- for board in json .loads (res ):
299
- if board ["fqbn" ] == fqbn :
300
- boards [fqbn ]["name" ] = board ["name" ]
301
- break
302
-
303
- else :
304
- boards [fqbn ]["name" ] = data ["name" ]
248
+ # List of old boards that need precompiled sketch data and uploader information obtained through platform.txt.
249
+ boards [fqbn ]["loader_sketch" ] = create_precomp_sketch_data (simple_fqbn , "loader" )
250
+ boards [fqbn ]["version_sketch" ] = create_precomp_sketch_data (simple_fqbn , "getversion" )
251
+ boards [fqbn ].update (create_upload_data (fqbn , installed_cores ))
252
+ # Gets the old_board name
253
+ res = arduino_cli (
254
+ cli_path = arduino_cli_path ,
255
+ args = ["board" , "search" , fqbn , "--format" , "json" ],
256
+ )
257
+ for board in json .loads (res ):
258
+ if board ["fqbn" ] == fqbn :
259
+ boards [fqbn ]["name" ] = board ["name" ]
260
+ break
305
261
306
262
for firmware_version in data ["versions" ]:
307
263
module = data ["moduleName" ]
@@ -316,6 +272,32 @@ def generate_boards_json(input_data, arduino_cli_path, new_boards):
316
272
return boards_json
317
273
318
274
275
+ def generate_new_boards_json (input_data ):
276
+ # init the boards dict
277
+ boards = {}
278
+ for fqbn , data in input_data .items ():
279
+ simple_fqbn = fqbn .replace (":" , "." )
280
+
281
+ # populate the boards dict
282
+ boards [fqbn ] = {}
283
+ boards [fqbn ]["fqbn" ] = fqbn
284
+ module = data ["moduleName" ]
285
+ boards [fqbn ]["firmware" ] = []
286
+ for firmware_version in data ["versions" ]:
287
+ firmware_file = get_firmware_file (module , simple_fqbn , firmware_version )
288
+ boards [fqbn ]["firmware" ].append (create_firmware_data (firmware_file , module , firmware_version ))
289
+ boards [fqbn ]["uploader_plugin" ] = data ["uploader_plugin" ]
290
+ boards [fqbn ]["additional_tools" ] = data ["additional_tools" ]
291
+ boards [fqbn ]["module" ] = module
292
+ boards [fqbn ]["name" ] = data ["name" ]
293
+
294
+ boards_json = []
295
+ for _ , b in boards .items ():
296
+ boards_json .append (b )
297
+
298
+ return boards_json
299
+
300
+
319
301
if __name__ == "__main__" :
320
302
parser = argparse .ArgumentParser (prog = "generator.py" )
321
303
parser .add_argument (
@@ -345,7 +327,10 @@ def generate_boards_json(input_data, arduino_cli_path, new_boards):
345
327
with open (input_file , "r" ) as f :
346
328
boards = json .load (f )
347
329
348
- boards_json = generate_boards_json (boards , args .arduino_cli , args .new )
330
+ if args .new :
331
+ boards_json = generate_new_boards_json (boards )
332
+ else :
333
+ boards_json = generate_boards_json (boards , args .arduino_cli )
349
334
350
335
Path ("boards" ).mkdir (exist_ok = True )
351
336
0 commit comments