@@ -52,6 +52,12 @@ validate_board() {
52
52
validate_debug_level_menu " $board_name " " $boards_file "
53
53
echo " "
54
54
55
+ # Rule 6: Check for duplicate lines
56
+ echo " Rule 6: Duplicate Lines Validation"
57
+ echo " =================================="
58
+ validate_no_duplicates " $board_name " " $boards_file "
59
+ echo " "
60
+
55
61
# Add more validation rules here as needed
56
62
echo " =========================================="
57
63
print_success " ALL VALIDATION RULES PASSED for board '$board_name '"
@@ -112,6 +118,7 @@ validate_required_properties() {
112
118
echo " ✓ Required properties validation completed"
113
119
}
114
120
121
+
115
122
# Rule 3: Check for valid partition schemes for available flash sizes
116
123
validate_partition_schemes () {
117
124
local board_name=" $1 "
@@ -352,16 +359,29 @@ validate_vid_pid_consistency() {
352
359
local board_name=" $1 "
353
360
local boards_file=" $2 "
354
361
355
- # Get all VID and PID entries for this board
362
+ # Get all VID and PID entries for this board (including upload_port entries)
356
363
local vid_entries
357
364
local pid_entries
358
365
359
366
vid_entries=$( grep " ^$board_name \.vid\." " $boards_file " | sort)
360
367
pid_entries=$( grep " ^$board_name \.pid\." " $boards_file " | sort)
361
368
369
+ # Also get upload_port VID and PID entries
370
+ local upload_port_vid_entries
371
+ local upload_port_pid_entries
372
+
373
+ upload_port_vid_entries=$( grep " ^$board_name \.upload_port\..*\.vid=" " $boards_file " | sort)
374
+ upload_port_pid_entries=$( grep " ^$board_name \.upload_port\..*\.pid=" " $boards_file " | sort)
375
+
362
376
# Check for duplicate VID entries with same index but different values
377
+ local all_vid_entries=" $vid_entries "
378
+ if [ -n " $upload_port_vid_entries " ]; then
379
+ all_vid_entries=" $all_vid_entries
380
+ $upload_port_vid_entries "
381
+ fi
382
+
363
383
local vid_duplicates
364
- vid_duplicates=$( echo " $vid_entries " | cut -d' =' -f1 | sort | uniq -d)
384
+ vid_duplicates=$( echo " $all_vid_entries " | cut -d' =' -f1 | sort | uniq -d)
365
385
366
386
if [ -n " $vid_duplicates " ]; then
367
387
print_error " Found duplicate VID entries with different values for board '$board_name ':"
@@ -370,8 +390,14 @@ validate_vid_pid_consistency() {
370
390
fi
371
391
372
392
# Check for duplicate PID entries with same index but different values
393
+ local all_pid_entries=" $pid_entries "
394
+ if [ -n " $upload_port_pid_entries " ]; then
395
+ all_pid_entries=" $all_pid_entries
396
+ $upload_port_pid_entries "
397
+ fi
398
+
373
399
local pid_duplicates
374
- pid_duplicates=$( echo " $pid_entries " | cut -d' =' -f1 | sort | uniq -d)
400
+ pid_duplicates=$( echo " $all_pid_entries " | cut -d' =' -f1 | sort | uniq -d)
375
401
376
402
if [ -n " $pid_duplicates " ]; then
377
403
print_error " Found duplicate PID entries with different values for board '$board_name ':"
@@ -383,8 +409,26 @@ validate_vid_pid_consistency() {
383
409
local vid_indices
384
410
local pid_indices
385
411
386
- vid_indices=$( echo " $vid_entries " | cut -d' =' -f1 | sed " s/^$board_name \.vid\.//" | sort -n)
387
- pid_indices=$( echo " $pid_entries " | cut -d' =' -f1 | sed " s/^$board_name \.pid\.//" | sort -n)
412
+ # Get indices from regular vid/pid entries
413
+ local regular_vid_indices=$( echo " $vid_entries " | cut -d' =' -f1 | sed " s/^$board_name \.vid\.//" | sort -n)
414
+ local regular_pid_indices=$( echo " $pid_entries " | cut -d' =' -f1 | sed " s/^$board_name \.pid\.//" | sort -n)
415
+
416
+ # Get indices from upload_port entries
417
+ local upload_vid_indices=$( echo " $upload_port_vid_entries " | cut -d' =' -f1 | sed " s/^$board_name \.upload_port\.//" | sed " s/\.vid$//" | sort -n)
418
+ local upload_pid_indices=$( echo " $upload_port_pid_entries " | cut -d' =' -f1 | sed " s/^$board_name \.upload_port\.//" | sed " s/\.pid$//" | sort -n)
419
+
420
+ # Combine indices
421
+ vid_indices=" $regular_vid_indices "
422
+ if [ -n " $upload_vid_indices " ]; then
423
+ vid_indices=" $vid_indices
424
+ $upload_vid_indices "
425
+ fi
426
+
427
+ pid_indices=" $regular_pid_indices "
428
+ if [ -n " $upload_pid_indices " ]; then
429
+ pid_indices=" $pid_indices
430
+ $upload_pid_indices "
431
+ fi
388
432
389
433
# Check if VID and PID indices match
390
434
if [ " $vid_indices " != " $pid_indices " ]; then
@@ -394,6 +438,48 @@ validate_vid_pid_consistency() {
394
438
exit 1
395
439
fi
396
440
441
+ # Check that no VID/PID combination matches esp32_family (0x303a/0x1001)
442
+ local esp32_family_vid=" 0x303a"
443
+ local esp32_family_pid=" 0x1001"
444
+
445
+ # Check regular vid/pid entries
446
+ if [ -n " $vid_entries " ] && [ -n " $pid_entries " ]; then
447
+ while IFS= read -r vid_line; do
448
+ if [ -n " $vid_line " ]; then
449
+ local vid_index=$( echo " $vid_line " | cut -d' =' -f1 | sed " s/^$board_name \.vid\.//" )
450
+ local vid_value=$( echo " $vid_line " | cut -d' =' -f2)
451
+
452
+ # Find corresponding PID
453
+ local pid_value
454
+ pid_value=$( grep " ^$board_name \.pid\.$vid_index =" " $boards_file " | cut -d' =' -f2)
455
+
456
+ if [ " $vid_value " = " $esp32_family_vid " ] && [ " $pid_value " = " $esp32_family_pid " ]; then
457
+ print_error " Board '$board_name ' VID/PID combination ($vid_value /$pid_value ) matches esp32_family VID/PID (0x303a/0x1001) - this is not allowed"
458
+ exit 1
459
+ fi
460
+ fi
461
+ done <<< " $vid_entries"
462
+ fi
463
+
464
+ # Check upload_port vid/pid entries
465
+ if [ -n " $upload_port_vid_entries " ] && [ -n " $upload_port_pid_entries " ]; then
466
+ while IFS= read -r vid_line; do
467
+ if [ -n " $vid_line " ]; then
468
+ local vid_index=$( echo " $vid_line " | cut -d' =' -f1 | sed " s/^$board_name \.upload_port\.//" | sed " s/\.vid$//" )
469
+ local vid_value=$( echo " $vid_line " | cut -d' =' -f2)
470
+
471
+ # Find corresponding PID
472
+ local pid_value
473
+ pid_value=$( grep " ^$board_name \.upload_port\.$vid_index \.pid=" " $boards_file " | cut -d' =' -f2)
474
+
475
+ if [ " $vid_value " = " $esp32_family_vid " ] && [ " $pid_value " = " $esp32_family_pid " ]; then
476
+ print_error " Board '$board_name ' upload_port VID/PID combination ($vid_value /$pid_value ) matches esp32_family VID/PID (0x303a/0x1001) - this is not allowed"
477
+ exit 1
478
+ fi
479
+ fi
480
+ done <<< " $upload_port_vid_entries"
481
+ fi
482
+
397
483
echo " ✓ VID and PID consistency check passed"
398
484
}
399
485
@@ -445,6 +531,46 @@ validate_debug_level_menu() {
445
531
echo " ✓ DebugLevel menu validation completed"
446
532
}
447
533
534
+ # Rule 6: Check for duplicate lines
535
+ validate_no_duplicates () {
536
+ local board_name=" $1 "
537
+ local boards_file=" $2 "
538
+
539
+ # Get all lines for this board
540
+ local board_lines
541
+ board_lines=$( grep " ^$board_name \." " $boards_file " )
542
+
543
+ # Extract just the property names (before =)
544
+ local property_names
545
+ property_names=$( echo " $board_lines " | cut -d' =' -f1)
546
+
547
+ # Find duplicates
548
+ local duplicate_lines
549
+ duplicate_lines=$( echo " $property_names " | sort | uniq -d)
550
+
551
+ if [ -n " $duplicate_lines " ]; then
552
+ print_error " Found duplicate lines for board '$board_name ':"
553
+ echo " Duplicate line keys:"
554
+ echo " $duplicate_lines "
555
+
556
+ echo " Duplicate content details:"
557
+ while IFS= read -r line_key; do
558
+ if [ -n " $line_key " ]; then
559
+ echo " Key: $line_key "
560
+ echo " Content with line numbers:"
561
+ local key_only=$( echo " $line_key " | cut -d' =' -f1)
562
+ grep -n " ^$key_only =" " $boards_file " | while IFS=' :' read -r line_num full_line; do
563
+ echo " Line $line_num : $full_line "
564
+ done
565
+ echo " "
566
+ fi
567
+ done <<< " $duplicate_lines"
568
+ exit 1
569
+ fi
570
+
571
+ echo " ✓ No duplicate lines found"
572
+ }
573
+
448
574
# Main execution
449
575
main () {
450
576
if [ $# -ne 1 ]; then
0 commit comments