@ -363,48 +363,44 @@ void FirmwareUpgradeController::_initFirmwareHash()
@@ -363,48 +363,44 @@ void FirmwareUpgradeController::_initFirmwareHash()
// PX4 Firmwares
for ( const FirmwareType_t & firmwareType : px4MapFirmwareTypeToDir . keys ( ) ) {
QString dir = px4MapFirmwareTypeToDir [ firmwareType ] ;
_rgFMUV5Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v5 " ) ) ;
_rgFMUV4PROFirmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v4pro " ) ) ;
_rgFMUV4Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v4 " ) ) ;
_rgFMUV3Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v3 " ) ) ;
_rgPX4FMUV2Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v2 " ) ) ;
_rgFMUV5Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v5 " ) ) ;
_rgFMUV4PROFirmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v4pro " ) ) ;
_rgFMUV4Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v4 " ) ) ;
_rgFMUV3Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v3 " ) ) ;
_rgPX4FMUV2Firmware . insert ( FirmwareIdentifier ( AutoPilotStackPX4 , firmwareType , DefaultVehicleFirmware ) , px4Url . arg ( dir ) . arg ( " v2 " ) ) ;
}
# if !defined(NO_ARDUPILOT_DIALECT)
// ArduPilot Firmwares
// ArduPilot non-ChibiOS Firmwares for direct board id to fmu mapping s
for ( const FirmwareType_t & firmwareType : apmMapFirmwareTypeToDir . keys ( ) ) {
QString firmwareTypeDir = apmMapFirmwareTypeToDir [ firmwareType ] ;
for ( const FirmwareVehicleType_t & vehicleType : apmMapVehicleTypeToDir . keys ( ) ) {
QString vehicleTypeDir = apmMapVehicleTypeToDir [ vehicleType ] ;
QString px4Dir = apmMapVehicleTypeToPX4Dir [ vehicleType ] ;
QString filename = apmMapVehicleTypeToFilename [ vehicleType ] ;
_rgFMUV5Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( px4Dir ) . arg ( filename ) . arg ( " 5 " ) ) ;
_rgFMUV4Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( px4Dir ) . arg ( filename ) . arg ( " 4 " ) ) ;
_rgFMUV3Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( px4Dir ) . arg ( filename ) . arg ( " 3 " ) ) ;
_rgFMUV5Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( px4Dir ) . arg ( filename ) . arg ( " 5 " ) ) ;
_rgFMUV4Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( px4Dir ) . arg ( filename ) . arg ( " 4 " ) ) ;
_rgFMUV3Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( px4Dir ) . arg ( filename ) . arg ( " 3 " ) ) ;
_rgPX4FMUV2Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( px4Dir ) . arg ( filename ) . arg ( " 2 " ) ) ;
}
}
# endif
# if !defined(NO_ARDUPILOT_DIALECT)
// ArduPilot ChibiOS Firmwares when board id is is a known type. These are added directly into the various board type hashes.
// ArduPilot ChibiOS Firmwares for direct board id to fmu mappings. Used when bootloader is not new ArduPilot bootloader.
for ( const FirmwareType_t & firmwareType : apmMapFirmwareTypeToDir . keys ( ) ) {
QString firmwareTypeDir = apmMapFirmwareTypeToDir [ firmwareType ] ;
for ( const FirmwareVehicleType_t & vehicleType : apmChibiOSMapVehicleTypeToDir . keys ( ) ) {
QString vehicleTypeDir = apmChibiOSMapVehicleTypeToDir [ vehicleType ] ;
QString fmuDir = apmChibiOSMapVehicleTypeToFmuDir [ vehicleType ] ;
QString filename = apmChibiOSMapVehicleTypeToFilename [ vehicleType ] ;
_rgFMUV5Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 5 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
_rgFMUV4Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 4 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
_rgFMUV3Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 3 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
_rgPX4FMUV2Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 2 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
_rgFMUV5Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 5 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
_rgFMUV4Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 4 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
_rgFMUV3Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 3 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
_rgPX4FMUV2Firmware . insert ( FirmwareIdentifier ( AutoPilotStackAPM , firmwareType , vehicleType ) , apmChibiOSUrl . arg ( vehicleTypeDir ) . arg ( firmwareTypeDir ) . arg ( " 2 " ) . arg ( fmuDir ) . arg ( filename ) ) ;
}
}
# endif
# if !defined(NO_ARDUPILOT_DIALECT)
// ArduPilot ChibiOS Firmwares when board id is an unknown type but follows ArduPilot port info naming conventions.
// This is only used if the board using the ArduPilot port naming scheme.
// This is only used if the board is using the new ArduPilot bootloader port naming scheme.
for ( const FirmwareType_t & firmwareType : apmMapFirmwareTypeToDir . keys ( ) ) {
QString firmwareTypeDir = apmMapFirmwareTypeToDir [ firmwareType ] ;
for ( const FirmwareVehicleType_t & vehicleType : apmChibiOSMapVehicleTypeToDir . keys ( ) ) {
@ -487,85 +483,75 @@ void FirmwareUpgradeController::_bootloaderSyncFailed(void)
@@ -487,85 +483,75 @@ void FirmwareUpgradeController::_bootloaderSyncFailed(void)
QHash < FirmwareUpgradeController : : FirmwareIdentifier , QString > * FirmwareUpgradeController : : _firmwareHashForBoardId ( int boardId )
{
QHash < FirmwareUpgradeController : : FirmwareIdentifier , QString > * rgFirmware ;
_rgFirmwareDynamic . clear ( ) ;
switch ( boardId ) {
case Bootloader : : boardIDPX4Flow :
rgFirmware = & _rgPX4FLowFirmware ;
_rgFirmwareDynamic = _rgPX4FLowFirmware ;
break ;
case Bootloader : : boardIDPX4FMUV2 :
rgFirmware = & _rgPX4FMUV2Firmware ;
_rgFirmwareDynamic = _rgPX4FMUV2Firmware ;
break ;
case Bootloader : : boardIDPX4FMUV3 :
rgFirmware = & _rgFMUV3Firmware ;
_rgFirmwareDynamic = _rgFMUV3Firmware ;
break ;
case Bootloader : : boardIDPX4FMUV4 :
rgFirmware = & _rgFMUV4Firmware ;
_rgFirmwareDynamic = _rgFMUV4Firmware ;
break ;
case Bootloader : : boardIDPX4FMUV4PRO :
rgFirmware = & _rgFMUV4PROFirmware ;
_rgFirmwareDynamic = _rgFMUV4PROFirmware ;
break ;
case Bootloader : : boardIDPX4FMUV5 :
rgFirmware = & _rgFMUV5Firmware ;
_rgFirmwareDynamic = _rgFMUV5Firmware ;
break ;
case Bootloader : : boardIDAeroCore :
rgFirmware = & _rgAeroCoreFirmware ;
_rgFirmwareDynamic = _rgAeroCoreFirmware ;
break ;
case Bootloader : : boardIDAUAVX2_1 :
rgFirmware = & _rgAUAVX2_1Firmware ;
_rgFirmwareDynamic = _rgAUAVX2_1Firmware ;
break ;
case Bootloader : : boardIDMINDPXFMUV2 :
rgFirmware = & _rgMindPXFMUV2Firmware ;
_rgFirmwareDynamic = _rgMindPXFMUV2Firmware ;
break ;
case Bootloader : : boardIDTAPV1 :
rgFirmware = & _rgTAPV1Firmware ;
_rgFirmwareDynamic = _rgTAPV1Firmware ;
break ;
case Bootloader : : boardIDASCV1 :
rgFirmware = & _rgASCV1Firmware ;
_rgFirmwareDynamic = _rgASCV1Firmware ;
break ;
case Bootloader : : boardIDCrazyflie2 :
rgFirmware = & _rgCrazyflie2Firmware ;
_rgFirmwareDynamic = _rgCrazyflie2Firmware ;
break ;
case Bootloader : : boardIDOmnibusF4SD :
rgFirmware = & _rgOmnibusF4SDFirmware ;
_rgFirmwareDynamic = _rgOmnibusF4SDFirmware ;
break ;
case Bootloader : : boardIDNXPHliteV3 :
rgFirmware = & _rgNXPHliteV3Firmware ;
_rgFirmwareDynamic = _rgNXPHliteV3Firmware ;
break ;
case Bootloader : : boardID3DRRadio :
rgFirmware = & _rg3DRRadioFirmware ;
_rgFirmwareDynamic = _rg3DRRadioFirmware ;
break ;
default :
rgFirmware = Q_NULLPTR ;
// Unknown board id
break ;
}
if ( rgFirmware ) {
_rgFirmwareDynamic = * rgFirmware ;
} else {
_rgFirmwareDynamic . clear ( ) ;
}
// Check for ArduPilot ChibiOS bootloader
QStringList rgManufacturers = { QStringLiteral ( " ArduPilot " ) , QStringLiteral ( " Hex/ProfiCNC " ) , QStringLiteral ( " Holybro " ) } ;
QString apmDescriptionSuffix ( " -BL " ) ;
if ( rgManufacturers . contains ( _foundBoardInfo . manufacturer ( ) ) & & _foundBoardInfo . description ( ) . endsWith ( apmDescriptionSuffix ) ) {
// Board ios using a ChibiOS bootloader. Prefer naming scheme from that over board ids for ArduPilot entries.
// Special case handling for ArduPilot named ChibiOS board
if ( _foundBoardInfo . manufacturer ( ) = = QStringLiteral ( " ArduPilot " ) | | _foundBoardInfo . manufacturer ( ) = = QStringLiteral ( " Hex/ProfiCNC " ) ) {
// Remove the ChibiOS by board id entries from the list
for ( const FirmwareIdentifier & firmwareId : _rgFirmwareDynamic . keys ( ) ) {
switch ( firmwareId . firmwareVehicleType ) {
case CopterChibiOSFirmware :
case HeliChibiOSFirmware :
case PlaneChibiOSFirmware :
case RoverChibiOSFirmware :
case SubChibiOSFirmware :
_rgAPMChibiosReplaceNamedBoardFirmware . remove ( firmwareId ) ;
break ;
default :
break ;
}
// First remove the ChibiOS by board id entries from the list
for ( const FirmwareIdentifier & firmwareId : _rgAPMChibiosReplaceNamedBoardFirmware . keys ( ) ) {
_rgFirmwareDynamic . remove ( firmwareId ) ;
}
// A dd the ChibiOS by board description entries to the list
// Now add the ChibiOS by board description entries to the list
for ( const FirmwareIdentifier & firmwareId : _rgAPMChibiosReplaceNamedBoardFirmware . keys ( ) ) {
QString namedUrl = _rgAPMChibiosReplaceNamedBoardFirmware [ firmwareId ] ;
_rgFirmwareDynamic . insert ( firmwareId , namedUrl . replace ( _apmBoardDescriptionReplaceText , _foundBoardInfo . description ( ) . left ( _foundBoardInfo . description ( ) . length ( ) - 3 ) ) ) ;
_rgFirmwareDynamic . insert ( firmwareId , namedUrl . replace ( _apmBoardDescriptionReplaceText , _foundBoardInfo . description ( ) . left ( _foundBoardInfo . description ( ) . length ( ) - apmDescriptionSuffix . length ( ) ) ) ) ;
}
}
@ -577,21 +563,16 @@ void FirmwareUpgradeController::_getFirmwareFile(FirmwareIdentifier firmwareId)
@@ -577,21 +563,16 @@ void FirmwareUpgradeController::_getFirmwareFile(FirmwareIdentifier firmwareId)
{
QHash < FirmwareIdentifier , QString > * prgFirmware = _firmwareHashForBoardId ( static_cast < int > ( _bootloaderBoardID ) ) ;
if ( ! prgFirmware & & firmwareId . firmwareType ! = CustomFirmware ) {
_errorCancel ( tr ( " Attempting to flash an unknown board type, you must select 'Custom firmware file' " ) ) ;
return ;
}
if ( firmwareId . firmwareType = = CustomFirmware ) {
_firmwareFilename = QGCQFileDialog : : getOpenFileName ( nullptr , // Parent to main window
tr ( " Select Firmware File " ) , // Dialog Caption
QStandardPaths : : writableLocation ( QStandardPaths : : DocumentsLocation ) , // Initial directory
tr ( " Firmware Files (*.px4 *.bin *.ihx) " ) ) ; // File filter
tr ( " Firmware Files (*.px4 *.apj *.bin *.ihx) " ) ) ; // File filter
} else {
if ( prgFirmware - > contains ( firmwareId ) ) {
_firmwareFilename = prgFirmware - > value ( firmwareId ) ;
} else {
_errorCancel ( tr ( " Unable to find specified firmware download location " ) ) ;
_errorCancel ( tr ( " Unable to find specified firmware for board type " ) ) ;
return ;
}
}