diff --git a/.github/workflows/check_board_conflicts.yaml b/.github/workflows/check_board_conflicts.yaml new file mode 100644 index 0000000000..edc1441b60 --- /dev/null +++ b/.github/workflows/check_board_conflicts.yaml @@ -0,0 +1,23 @@ +name: Check for Board Assignment Conflicts + +on: + push: + branches: + - 'main' + - 'master' + pull_request: + branches: + - '*' +jobs: + check: + name: Check for Conflicts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Run Test + run: | + ./Tools/check_board_types_conflicts.txt + diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index f4e204ac53..7e8a26e77c 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -3,10 +3,11 @@ name: Build and Deploy on: push: branches: - - 'master' + - 'main' + - 'master' pull_request: branches: - - '*' + - '*' jobs: diff --git a/Tools/check_board_types_conflicts.txt b/Tools/check_board_types_conflicts.txt new file mode 100755 index 0000000000..d88f2644e0 --- /dev/null +++ b/Tools/check_board_types_conflicts.txt @@ -0,0 +1,42 @@ +#!/bin/bash + +# Ensure we are running Bash 3 or newer +if ((BASH_VERSINFO[0] < 3)); then + echo "Error: This script requires Bash 3 or newer. Current version: $BASH_VERSION" + exit 1 +fi + +# Enable strict mode for better error handling +set -euo pipefail + +# Get the project root directory (assuming the script is in ./Tools) +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +FILE_PATH="$PROJECT_ROOT/board_types.txt" + +# Check if the file exists +if [ ! -f "$FILE_PATH" ]; then + echo "Error: File 'board_types.txt' not found in project root: $PROJECT_ROOT" + exit 1 +fi + +# Process the file to detect conflicts using awk, while ignoring "# same" lines +awk ' +{ + # If the third column starts with "# same", ignore the line + if ($3 == "#") { + if ($4 == "same") { + next + } + } + + # Check for conflicts on the second column + if ($2 in value_map && value_map[$2] != $1) { + print "Conflict detected: Value \"" $2 "\" is associated with both \"" value_map[$2] "\" and \"" $1 "\"" + } + + # Store the mapping + value_map[$2] = $1 +} +' "$FILE_PATH" + diff --git a/board_types.txt b/board_types.txt index 284c002c97..8145c061fe 100644 --- a/board_types.txt +++ b/board_types.txt @@ -1,12 +1,16 @@ # this file lists all board types for boards that use the bootloader # protocol implemented in this bootloader. +# NOTE: This file is now protected with a CI action that checks for conflicts. +# you can run the tool locally ./Tools/check_board_types_conflicts.txt +# MAINTAINERS ONLY: we allow conflicts for very special conditions, in those cases +# you need to add a comment with "# same" followed by the conflict target so the test passes TARGET_HW_PX4_FMU_V1 5 -TARGET_HW_PX4_FMU_V2 9 +TARGET_HW_PX4_FMU_V2 9 # same as TARGET_HW_CUBE_F4 TARGET_HW_PX4_FMU_V3 9 # same as FMU_V2 TARGET_HW_PX4_FMU_V4 11 -TARGET_HW_PX4_FMU_V4_PRO 13 -TARGET_HW_UVIFY_CORE 20 +TARGET_HW_PX4_FMU_V4_PRO 13 # same as TARGET_HW_PX4_PIO_V3 +TARGET_HW_UVIFY_CORE 20 # same as AP_HW_F4BY (conflict with AP) TARGET_HW_PX4_FMU_V5 50 TARGET_HW_PX4_FMU_V5X 51 TARGET_HW_PX4_FMU_V6 52 @@ -19,7 +23,7 @@ TARGET_HW_PX4_FLOW_V1 6 TARGET_HW_PX4_DISCOVERY_V1 99 TARGET_HW_PX4_PIO_V1 10 TARGET_HW_PX4_PIO_V2 10 # same as PIO_V1 -TARGET_HW_PX4_PIO_V3 13 +TARGET_HW_PX4_PIO_V3 13 # same as TARGET_HW_PX4_FMU_V4_PRO TARGET_HW_PX4_AEROCORE_V1 98 TARGET_HW_TAP_V1 64 TARGET_HW_CRAZYFLIE 12 @@ -28,8 +32,8 @@ TARGET_HW_OMNIBUSF4SD 42 TARGET_HW_AUAV_X2V1 33 TARGET_HW_AEROFC_V1 65 TARGET_TAP_V2 66 -TARGET_HW_CUBE_F4 9 -TARGET_HW_AV_V1 29 +TARGET_HW_CUBE_F4 9 # same as TARGET_HW_PX4_FMU_V2 +TARGET_HW_AV_V1 29 # same as TARGET_HW_AV_X_V1 TARGET_HW_KAKUTEF7 123 TARGET_HW_SMARTAP_AIRLINK 55 TARGET_HW_SMARTAP_PRO 32 @@ -39,7 +43,7 @@ TARGET_HW_MODALAI_VOXL2_IO 41777 TARGET_HW_HOLYBRO_PIX32_V5 78 TARGET_HW_HOLYBRO_CAN_GPS 79 TARGET_HW_FMUK66_V3 28 -TARGET_HW_AV_X_V1 29 +TARGET_HW_AV_X_V1 29 # same as TARGET_HW_AV_V1 TARGET_HW_FMUK66_E 30 TARGET_HW_FMURT1062-V1 31 TARGET_HW_ARK_CAN_FLOW 80 @@ -108,7 +112,9 @@ AP_HW_MATEKF765_WING 143 AP_HW_JDMINIF405 144 AP_HW_KAKUTEF7_MINI 145 AP_HW_H757I_EVAL 146 -AP_HW_F4BY 20 # value due to previous release by vendor +AP_HW_F4BY 20 # same as TARGET_HW_UVIFY_CORE value due to previous release by vendor +AP_HW_MAZZYSTARDRONE 188 + AP_HW_VRBRAIN_V51 1151 AP_HW_VRBRAIN_V52 1152 AP_HW_VRBRAIN_V54 1154 @@ -117,7 +123,7 @@ AP_HW_VRUBRAIN_V51 1351 AP_HW_F103_PERIPH 1000 AP_HW_CUAV_GPS 1001 AP_HW_OMNIBUSF4 1002 -AP_HW_CUBEBLACK+ 1003 +AP_HW_CUBEBLACKPLUS 1003 AP_HW_F303_PERIPH 1004 AP_HW_ZUBAXGNSS 1005 AP_HW_NIGHTCRAWLER 1006 @@ -148,7 +154,7 @@ AP_HW_KAKUTEF4_MINI 1030 AP_HW_H31_PIXC4_PI 1031 AP_HW_H31_PIXC4_JETSON 1032 AP_HW_CUBEORANGE_JOEY 1033 -AP_HW_SIERRAF9PGPS_PERIPH 1034 +AP_HW_SierraF9P 1034 AP_HW_HolybroGPS 1035 AP_HW_QioTekZealotH743 1036 AP_HW_HEREPRO 1037 @@ -157,7 +163,7 @@ AP_HW_ARGOSDYNE_DP1000 1039 AP_HW_Nucleo491 1040 AP_HW_mRoM10095 1041 AP_HW_FlywooF745Nano 1042 -AP_HW_HEREID 1043 +AP_HW_HERE3PLUS 1043 AP_HW_BirdCANdy 1044 AP_HW_SKYSTARSF405DJI 1045 AP_HW_HITEC_AIRSPEED 1046 @@ -167,8 +173,8 @@ AP_HW_ICSI_Kestrel 1049 AP_HW_SierraL431 1050 AP_HW_NucleoL476 1051 AP_HW_SierraF405 1052 -AP_HW_KakuteH7v2 1053 -AP_HW_KakuteH7mini 1054 # Deprecated, now 1058. +AP_HW_CarbonixL496 1053 +AP_HW_MatekF405_TE 1054 AP_HW_SierraF412 1055 AP_HW_BEASTH7v2 1056 AP_HW_BEASTF7v2 1057 @@ -183,8 +189,8 @@ AP_HW_QioTekAdeptF407 1065 AP_HW_QioTekAdeptF427 1066 AP_HW_FlyingMoonF407 1067 AP_HW_FlyingMoonF427 1068 -AP_HW_CUBERED 1069 -AP_HW_CUBERED_IO 1070 +AP_HW_CUBERED_PRIMARY 1069 +AP_HW_CUBERED_SECONDARY 1070 AP_HW_GreenSight_UltraBlue 1071 AP_HW_GreenSight_microBlue 1072 AP_HW_MAMBAH743_V4 1073 @@ -193,7 +199,7 @@ AP_HW_SKYSTARSH7HD 1075 AP_HW_PixSurveyA1 1076 AP_HW_AEROFOX_AIRSPEED 1077 AP_HW_ATOMRCF405 1078 -AP_HW_CUBEPILOT_CANMOD 1079 +AP_HW_CUBENODE 1079 AP_HW_AEROFOX_PMU 1080 AP_HW_JHEMCUGF16F405 1081 AP_HW_SPEEDYBEEF4V3 1082 @@ -203,18 +209,267 @@ AP_HW_C_RTK2_HP 1085 AP_HW_JUMPER_XIAKE800 1086 AP_HW_Sierra_F1 1087 AP_HW_HolybroCompass 1088 +AP_HW_FOXEERH743_V1 1089 +AP_HW_PixFlamingoL4R5_V1 1090 + +AP_HW_Sierra-TrueNavPro 1091 +AP_HW_Sierra-TrueNav 1092 +AP_HW_Sierra-TrueNorth 1093 +AP_HW_Sierra-TrueSpeed 1094 +AP_HW_Sierra-PrecisionPoint 1095 +AP_HW_PixPilot-V3 1096 +AP_HW_PixSurveyA2 1097 +AP_HW_mRoCANPWM 1098 +AP_HW_FlywooF405S_AIO 1099 +AP_HW_mRoCANPower 1100 +AP_HW_mRoControlOne 1101 + +AP_HW_rFCU 1102 +AP_HW_rGNSS 1103 +AP_HW_AEROFOX_AIRSPEED_DLVR 1104 +AP_HW_KakuteH7-Wing 1105 +AP_HW_SpeedyBeeF405WING 1106 +AP_HW_PixSurveyA-IND 1107 +AP_HW_SPRACINGH7RF 1108 +AP_HW_AEROFOX_GNSS_F9P 1109 AP_HW_JFB110 1110 +AP_HW_SDMODELH7V1 1111 +AP_HW_FlyingMoonH743 1112 +AP_HW_YJUAV_A6 1113 +AP_HW_YJUAV_A6Nano 1114 +AP_HW_ACNS_CM4PILOT 1115 +AP_HW_ACNS_F405AIO 1116 +AP_HW_BLITZF7AIO 1117 +AP_HW_RADIX2HD 1118 +AP_HW_HEEWING_F405 1119 +AP_HW_PodmanH7 1120 +AP_HW_mRo-M10053 1121 +AP_HW_mRo-M10044 1122 +AP_HW_SIYI_N7 1123 +AP_HW_mRoCZOEM_revG 1124 +AP_HW_BETAFPV_F405 1125 +AP_HW_QioTekAdeptH743 1126 +AP_HW_YJUAV_A6SE 1127 +AP_HW_QioTekAdept_6C 1128 + +AP_HW_PixFlamingoL4R5_V2 1129 +AP_HW_PixFlamingoF427_V1 1130 +AP_HW_PixFlamingoF767_V1 1131 +AP_HW_PixFlamingoH743I 1132 +AP_HW_PixFlamingoH743V 1133 + +AP_HW_AR-F407SmartBat 1134 +AP_HW_SPEEDYBEEF4MINI 1135 +AP_HW_SPEEDYBEEF4V4 1136 +AP_HW_FlywooF405Pro 1137 +AP_HW_TMOTORH7 1138 +AP_HW_MICOAIR405 1139 +AP_HW_PixPilot-C3 1140 +AP_HW_YJUAV_A6SE_H743 1141 +AP_HW_FSO_POWER_STACK 1142 +AP_HW_ATOMRCF405NAVI_DLX 1143 +AP_HW_YJUAV_A6Ultra 1144 +AP_HW_TULIP_BATTMON 1145 +AP_HW_AnyleafH7 1146 +AP_HW_mRoKitCANrevC 1147 +AP_HW_BotBloxSwitch 1148 +AP_HW_MatekH7A3 1149 +AP_HW_MicoAir405v2 1150 +AP_HW_ORAQF405PRO 1155 +AP_HW_CBU_StampH743 1156 +AP_HW_FOXEERF405_V2 1157 +AP_HW_CSKY405 1158 +AP_HW_NxtPX4v2 1159 +AP_HW_PixPilot-V6PRO 1160 +AP_HW_MicoAir405Mini 1161 +AP_HW_BlitzH7Pro 1162 +AP_HW_BlitzF7Mini 1163 +AP_HW_BlitzF7 1164 +AP_HW_3DR-ASAUAV 1165 +AP_HW_MicoAir743 1166 +AP_HW_BlitzH7Wing 1168 +AP_HW_SDMODELH7V2 1167 +AP_HW_JHEMCUF405WING 1169 +AP_HW_MatekG474 1170 +AP_HW_PhenixH7_lite 1171 +AP_HW_PhenixH7_Pro 1172 +AP_HW_2RAWH743 1173 +AP_HW_X-MAV-AP-H743V2 1174 +AP_HW_BETAFPV_F4_2-3S_20A 1175 +AP_HW_MicoAir743-AIO 1176 +AP_HW_CrazyF405 1177 +AP_HW_MicoAir743v2 1179 +AP_HW_FlywooF405HD_AIOv2 1180 +AP_HW_FlywooH743Pro 1181 +AP_HW_CBU_StampH743_LC 1182 +AP_HW_NarinH7 1183 +AP_HW_BrahmaF4 1184 +AP_HW_X-MAV-AP-F405Mini 1185 + +AP_HW_JFB200 1200 + +AP_HW_ESP32_PERIPH 1205 +AP_HW_ESP32S3_PERIPH 1206 + +AP_HW_CSKY-PMU 1212 + +AP_HW_MUPilot 1222 + +AP_HW_CBUnmanned-CM405-FC 1301 + +AP_HW_KHA_ETH 1315 + +AP_HW_FlysparkF4 1361 AP_HW_CUBEORANGE_PERIPH 1400 AP_HW_CUBEBLACK_PERIPH 1401 AP_HW_PIXRACER_PERIPH 1402 AP_HW_SWBOOMBOARD_PERIPH 1403 +AP_HW_VIMDRONES_FLOW 1404 +AP_HW_VIMDRONES_MOSAIC_X5 1405 +AP_HW_VIMDRONES_MOSAIC_H 1406 +AP_HW_VIMDRONES_PERIPH 1407 + +AP_HW_PIXHAWK6X_PERIPH 1408 +AP_HW_CUBERED_PERIPH 1409 +AP_HW_RadiolinkPIX6 1410 + +AP_HW_JHEMCU-H743HD 1411 + +AP_HW_LongbowF405 1422 + +AP_HW_MountainEagleH743 1444 + +AP_HW_StellarF4 1500 +AP_HW_GEPRCF745BTHD 1501 +AP_HW_GEPRC_TAKER_H743 1502 +AP_HW_StellarH7V2 1503 +AP_HW_StellarF4V2 1504 + +AP_HW_HGLRCF405V4 1524 + +AP_HW_F4BY_F427 1530 + +AP_HW_MFT-SEMA100 2000 + +AP_HW_SULILGH7-P1-P2 2005 + +AP_HW_AET-H743-Basic 2024 + +AP_HW_SakuraRC-H743 2714 + +# IDs 4000-4009 reserved for Karshak Drones +AP_HW_KRSHKF7_MINI 4000 + +# IDs 4200-4220 reserved for HAKRC +AP_HW_HAKRC_F405 4200 +AP_HW_HAKRC_F405Wing 4201 + +# IDs 4500-4509 reserved for Lumenier +AP_HW_LUMENIER_LUX_F765_NDAA 4500 + +# IDs 5000-5099 reserved for Carbonix +# IDs 5100-5199 reserved for SYPAQ Systems +# IDs 5200-5209 reserved for Airvolute +AP_HW_AIRVOLUTE_DCS2 5200 + +# IDs 5210-5219 reserved for Aocoda-RC +AP_HW_AOCODA-RC-H743DUAL 5210 +AP_HW_AOCODA-RC-F405V3 5211 + +# IDs 5220-5239 reserved for UAV-DEV GmbH +AP_HW_UAV-DEV-HAT-H7 5220 +AP_HW_UAV-DEV-NucPilot-H7 5221 +AP_HW_UAV-DEV-M10S-L4 5222 +AP_HW_UAV-DEV-F9P-G4 5223 +AP_HW_UAV-DEV-UM982-G4 5224 +AP_HW_UAV-DEV-M20D-G4 5225 +AP_HW_UAV-DEV-Sensorboard-G4 5226 +AP_HW_UAV-DEV-PWM-G4 5227 +AP_HW_UAV-DEV-AUAV-H7 5228 +AP_HW_UAV-DEV-FC-H7 5229 + +# IDs 5240-5249 reserved for TM IT-Systemhaus +AP_HW_TM-SYS-BeastFC 5240 +AP_HW_TM-SYS-Sensornode 5241 +AP_HW_TM-SYS-OpenHDFPV 5242 +AP_HW_TM-SYS-VisualNAV 5243 +AP_HW_TM-SYS-Airspeed 5244 + +# IDs 5250-5269 reserved for Team Black Sheep +AP_HW_TBS_LUCID_H7 5250 +AP_HW_TBS_LUCID_PRO 5251 +AP_HW_TBS_L431_PERIPH 5252 + +# IDs 5270-5279 reserved for SpeedyBee +AP_HW_SpeedyBeeF405WINGV2 5270 +AP_HW_SpeedyBeeF405AIO 5271 + +#IDs 5301-5399 reserved for Sierra Aerospace +AP_HW_Sierra-TrueNavPro-G4 5301 +AP_HW_Sierra-TrueNavIC 5302 +AP_HW_Sierra-TrueNorth-G4 5303 +AP_HW_Sierra-TrueSpeed-G4 5304 +AP_HW_Sierra-PrecisionPoint-G4 5305 +AP_HW_Sierra-AeroNex 5306 +AP_HW_Sierra-TrueFlow 5307 +AP_HW_Sierra-TrueNavIC-Pro 5308 +AP_HW_Sierra-F1-Pro 5309 + +#IDs 5401-5499 reserved for holybro +AP_HW_Holybro-PMU-F4 5401 +AP_HW_Holybro-UM982-G4 5402 +AP_HW_Holybro-UM960-H7 5403 +AP_HW_Holybro-PERIPH-H7 5404 +AP_HW_Holybro-DroneCAN-Airspeed 5405 +AP_HW_Holybro-KakuteF4-Wing 5406 + +#IDs 5501-5599 reserved for MATEKSYS +AP_HW_MATEKH743SE 5501 + #IDs 5600-5699 reserved for ZeroOne AP_HW_ZeroOne_X6 5600 AP_HW_ZeroOne_PMU 5601 AP_HW_ZeroOne_GNSS 5602 +#IDs 5700-5710 reserved for DroneBuild +AP_HW_DroneBuild_G1 5700 +AP_HW_DroneBuild_G2 5701 + +#IDs 5800-5809 reserved for Droneer +AP_HW_DroneerF405 5800 + +# IDs 6000-6099 reserved for SpektreWorks +AP_HW_sw-spar-f407 6000 +AP_HW_sw-boom-f407 6001 +AP_HW_sw-nav-f405 6002 + +# IDs 6100-6109 reserved for MFE +AP_HW_MFE_PDB_CAN 6100 +AP_HW_MFE_POS3_CAN 6101 +AP_HW_MFE_RTK_CAN 6102 +AP_HW_MFE_AirSpeed_CAN 6103 + +# IDs 6600-6699 reserved for Eagle Eye Drones + +# IDs 6900-6909 reserved for Easy Aerial + +# IDs 7000-7099 reserved for CUAV +AP_HW_CUAV-7-NANO 7000 + +# IDs 7100-7109 reserved for V-UAV +AP_HW_VUAV-V7pro 7100 + +# IDs 7110-7119 reserved for AEROFOX +AP_HW_AEROFOX_H7 7110 + +# please fill gaps in the above ranges rather than adding past ID #7199 + + # OpenDroneID enabled boards. Use 10000 + the base board ID AP_HW_CubeOrange_ODID 10140 AP_HW_Pixhawk6_ODID 10053 + +# do not allocate board IDs above 10,000 for non-ODID boards. +# do not allocate board IDs above 19,999 in this file.