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
+
29
65
# handle firmware name
30
66
def get_firmware_file (module , simple_fqbn , version ):
31
67
firmware_full_path = Path (__file__ ).parent .parent / "firmwares" / module / version
@@ -222,35 +258,26 @@ def create_upload_data(fqbn, installed_cores): # noqa: C901
222
258
return upload_data
223
259
224
260
225
- def generate_boards_json (input_data , arduino_cli_path ):
226
- boards = {
227
- "arduino:samd:mkr1000" : {"fqbn" : "arduino:samd:mkr1000" , "firmware" : []},
228
- "arduino:samd:mkrwifi1010" : {
229
- "fqbn" : "arduino:samd:mkrwifi1010" ,
230
- "firmware" : [],
231
- },
232
- "arduino:samd:nano_33_iot" : {
233
- "fqbn" : "arduino:samd:nano_33_iot" ,
234
- "firmware" : [],
235
- },
236
- "arduino:samd:mkrvidor4000" : {
237
- "fqbn" : "arduino:samd:mkrvidor4000" ,
238
- "firmware" : [],
239
- },
240
- "arduino:megaavr:uno2018" : {"fqbn" : "arduino:megaavr:uno2018" , "firmware" : []},
241
- "arduino:mbed_nano:nanorp2040connect" : {
242
- "fqbn" : "arduino:mbed_nano:nanorp2040connect" ,
243
- "firmware" : [],
244
- },
245
- }
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 )
246
273
247
274
# Gets the installed cores
248
275
res = arduino_cli (cli_path = arduino_cli_path , args = ["core" , "list" , "--format" , "json" ])
249
276
installed_cores = {c ["id" ]: c for c in json .loads (res )}
250
277
251
278
# Verify all necessary cores are installed
252
279
# TODO: Should we check that the latest version is installed too?
253
- for fqbn in boards . keys () :
280
+ for fqbn in old_boards :
254
281
core_id = ":" .join (fqbn .split (":" )[:2 ])
255
282
if core_id not in installed_cores :
256
283
print (f"Board { fqbn } is not installed, install its core { core_id } " )
@@ -259,8 +286,9 @@ def generate_boards_json(input_data, arduino_cli_path):
259
286
for fqbn , data in input_data .items ():
260
287
simple_fqbn = fqbn .replace (":" , "." )
261
288
262
- boards [fqbn ]["loader_sketch" ] = create_precomp_sketch_data (simple_fqbn , "loader" )
263
- boards [fqbn ]["version_sketch" ] = create_precomp_sketch_data (simple_fqbn , "getversion" )
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" )
264
292
265
293
for firmware_version in data ["versions" ]:
266
294
module = data ["moduleName" ]
@@ -278,7 +306,8 @@ def generate_boards_json(input_data, arduino_cli_path):
278
306
boards [fqbn ]["name" ] = board ["name" ]
279
307
break
280
308
281
- boards [fqbn ].update (create_upload_data (fqbn , installed_cores ))
309
+ if fqbn in old_boards :
310
+ boards [fqbn ].update (create_upload_data (fqbn , installed_cores ))
282
311
283
312
boards_json = []
284
313
for _ , b in boards .items ():
@@ -296,18 +325,31 @@ def generate_boards_json(input_data, arduino_cli_path):
296
325
help = "Path to arduino-cli executable" ,
297
326
required = True ,
298
327
)
328
+ parser .add_argument (
329
+ "--new" ,
330
+ action = argparse .BooleanOptionalAction ,
331
+ default = True ,
332
+ help = "Generate the index for old boards" ,
333
+ )
299
334
args = parser .parse_args (sys .argv [1 :])
300
335
336
+ if args .new :
337
+ input_file = "new_boards.json"
338
+ output_file = "plugin_firmware_index.json"
339
+ else :
340
+ input_file = "boards.json"
341
+ output_file = "module_firmware_index.json"
342
+
301
343
# raw_boards.json has been generated using --get_available_for FirmwareUploader (version 0.1.8) flag.
302
344
# It has been edited a bit to better handle parsing.
303
- with open ("boards.json" , "r" ) as f :
345
+ with open (input_file , "r" ) as f :
304
346
boards = json .load (f )
305
347
306
- boards_json = generate_boards_json (boards , args .arduino_cli )
348
+ boards_json = generate_boards_json (boards , args .arduino_cli , args . new )
307
349
308
- Path ("boards" ).mkdir ()
350
+ Path ("boards" ).mkdir (exist_ok = True )
309
351
310
- with open ("boards/module_firmware_index.json" , "w" ) as f :
352
+ with open ("boards/" + output_file , "w" ) as f :
311
353
json .dump (boards_json , f , indent = 2 )
312
354
313
355
# board_index.json must be formatted like so:
0 commit comments