diff --git a/src/VehicleSetup/FirmwareUpgrade.qml b/src/VehicleSetup/FirmwareUpgrade.qml index 4cf2f597f70e5dc5968fd7b9cc935a8234b2dac0..36d753a97e96d1355734ff236fb98460f39dc54e 100644 --- a/src/VehicleSetup/FirmwareUpgrade.qml +++ b/src/VehicleSetup/FirmwareUpgrade.qml @@ -139,7 +139,7 @@ QGCView { QGCViewDialog { anchors.fill: parent - property bool showFirmwareTypeSelection: apmFlightStack.checked || advancedMode.checked + property bool showFirmwareTypeSelection: advancedMode.checked property bool px4Flow: controller.boardType == "PX4 Flow" function accept() { diff --git a/src/VehicleSetup/FirmwareUpgradeController.cc b/src/VehicleSetup/FirmwareUpgradeController.cc index f25dc55852169355f8e8042844b3cdb11d39f33c..aaeb2842eb0631e25e1c9bbb21fa31313d284405 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.cc +++ b/src/VehicleSetup/FirmwareUpgradeController.cc @@ -30,6 +30,14 @@ #include "QGCFileDialog.h" #include "QGCMessageBox.h" + +struct FirmwareToUrlElement_t { + FirmwareUpgradeController::AutoPilotStackType_t stackType; + FirmwareUpgradeController::FirmwareType_t firmwareType; + FirmwareUpgradeController::FirmwareVehicleType_t vehicleType; + QString url; +}; + uint qHash(const FirmwareUpgradeController::FirmwareIdentifier& firmwareIDTrinity) { return ( firmwareIDTrinity.autopilotStackType | @@ -164,353 +172,146 @@ void FirmwareUpgradeController::_foundBootloader(int bootloaderVersion, int boar } } -/// @brief Called when the findBootloader process is unable to sync to the bootloader. Moves the state -/// machine to the appropriate error state. -void FirmwareUpgradeController::_bootloaderSyncFailed(void) -{ - _errorCancel("Unable to sync with bootloader."); -} -/// @brief Prompts the user to select a firmware file if needed and moves the state machine to the next state. -void FirmwareUpgradeController::_getFirmwareFile(FirmwareIdentifier firmwareIDTrinity) +/// @brief intializes the firmware hashes with proper urls. +/// This happens only once for a class instance first time when it is needed. +void FirmwareUpgradeController::_initFirmwareHash() { + // indirect check whether this function has been called before or not + // may have to be modified if _rgPX4FMUV2Firmware disappears + if (!_rgPX4FMUV2Firmware.isEmpty()) { + return; + } - static QHash rgPX4FMUV2Firmware; - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - StableFirmware, - DefaultVehicleFirmware), - "http://px4-travis.s3.amazonaws.com/Firmware/stable/px4fmu-v2_default.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - BetaFirmware, - DefaultVehicleFirmware), - "http://px4-travis.s3.amazonaws.com/Firmware/beta/px4fmu-v2_default.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - DeveloperFirmware, - DefaultVehicleFirmware), - "http://px4-travis.s3.amazonaws.com/Firmware/master/px4fmu-v2_default.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - QuadFirmware), - "http://firmware.diydrones.com/Copter/stable/PX4-quad/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - X8Firmware), - "http://firmware.diydrones.com/Copter/stable/PX4-octa-quad/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - HexaFirmware), - "http://firmware.diydrones.com/Copter/stable/PX4-hexa/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - OctoFirmware), - "http://firmware.diydrones.com/Copter/stable/PX4-octa/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - YFirmware), - "http://firmware.diydrones.com/Copter/stable/PX4-tri/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - Y6Firmware), - "http://firmware.diydrones.com/Copter/stable/PX4-y6/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - HeliFirmware), - "http://firmware.diydrones.com/Copter/stable/PX4-heli/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - PlaneFirmware), - "http://firmware.diydrones.com/Plane/stable/PX4/ArduPlane-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - RoverFirmware), - "http://firmware.diydrones.com/Rover/stable/PX4/APMrover2-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - QuadFirmware), - "http://firmware.diydrones.com/Copter/beta/PX4-quad/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - X8Firmware), - "http://firmware.diydrones.com/Copter/beta/PX4-octa-quad/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - HexaFirmware), - "http://firmware.diydrones.com/Copter/beta/PX4-hexa/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - OctoFirmware), - "http://firmware.diydrones.com/Copter/beta/PX4-octa/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - YFirmware), - "http://firmware.diydrones.com/Copter/beta/PX4-tri/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - Y6Firmware), - "http://firmware.diydrones.com/Copter/beta/PX4-y6/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - HeliFirmware), - "http://firmware.diydrones.com/Copter/beta/PX4-heli/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - PlaneFirmware), - "http://firmware.diydrones.com/Plane/beta/PX4/ArduPlane-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - RoverFirmware), - "http://firmware.diydrones.com/Rover/beta/PX4/APMrover2-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - QuadFirmware), - "http://firmware.diydrones.com/Copter/latest/PX4-quad/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - X8Firmware), - "http://firmware.diydrones.com/Copter/latest/PX4-octa-quad/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - HexaFirmware), - "http://firmware.diydrones.com/Copter/latest/PX4-hexa/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - OctoFirmware), - "http://firmware.diydrones.com/Copter/latest/PX4-octa/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - YFirmware), - "http://firmware.diydrones.com/Copter/latest/PX4-tri/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - Y6Firmware), - "http://firmware.diydrones.com/Copter/latest/PX4-y6/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - HeliFirmware), - "http://firmware.diydrones.com/Copter/latest/PX4-heli/ArduCopter-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - PlaneFirmware), - "http://firmware.diydrones.com/Plane/latest/PX4/ArduPlane-v2.px4"); - - rgPX4FMUV2Firmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - RoverFirmware), - "http://firmware.diydrones.com/Rover/latest/PX4/APMrover2-v2.px4"); - - //////////////////////////////////// PX4MU aerocore firmwares ////////////////////////////////////////////////// - static QHash rgAeroCoreFirmware; - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - StableFirmware, - DefaultVehicleFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/PX4/stable/aerocore_default.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - BetaFirmware, - DefaultVehicleFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/PX4/beta/aerocore_default.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - DeveloperFirmware, - DefaultVehicleFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/PX4/master/aerocore_default.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - QuadFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/APM/Copter/stable/PX4-quad/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - X8Firmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-octa-quad/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - HexaFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-hexa/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - OctoFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-octa/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - YFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-tri/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - Y6Firmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-y6/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - HeliFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-heli/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - PlaneFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Plane/stable/PX4/ArduPlane-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - StableFirmware, - RoverFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Rover/stable/PX4/APMrover2-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - QuadFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-quad/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - X8Firmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-octa-quad/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - HexaFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-hexa/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - OctoFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-octa/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - YFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-tri/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - Y6Firmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-y6/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - HeliFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-heli/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - PlaneFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Plane/beta/PX4/ArduPlane-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - BetaFirmware, - RoverFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Rover/beta/PX4/APMrover2-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - QuadFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-quad/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - X8Firmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-octa-quad/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - HexaFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-hexa/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - OctoFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-octa/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - YFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-tri/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - Y6Firmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-y6/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - HeliFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-heli/ArduCopter-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - PlaneFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Plane/latest/PX4/ArduPlane-v2.px4"); - - rgAeroCoreFirmware.insert(FirmwareIdentifier(AutoPilotStackAPM, - DeveloperFirmware, - RoverFirmware), - "http://gumstix-aerocore.s3.amazonaws.com/Rover/latest/PX4/APMrover2-v2.px4"); + //////////////////////////////////// PX4FMUV2 firmwares ////////////////////////////////////////////////// + FirmwareToUrlElement_t rgPX4FMV2FirmwareArray[] = { + { AutoPilotStackPX4, StableFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/stable/px4fmu-v2_default.px4"}, + { AutoPilotStackPX4, BetaFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/beta/px4fmu-v2_default.px4"}, + { AutoPilotStackPX4, DeveloperFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/master/px4fmu-v2_default.px4"}, + { AutoPilotStackAPM, StableFirmware, QuadFirmware, "http://firmware.diydrones.com/Copter/stable/PX4-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, X8Firmware, "http://firmware.diydrones.com/Copter/stable/PX4-octa-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, HexaFirmware, "http://firmware.diydrones.com/Copter/stable/PX4-hexa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, OctoFirmware, "http://firmware.diydrones.com/Copter/stable/PX4-octa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, YFirmware, "http://firmware.diydrones.com/Copter/stable/PX4-tri/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, Y6Firmware, "http://firmware.diydrones.com/Copter/stable/PX4-y6/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, HeliFirmware, "http://firmware.diydrones.com/Copter/stable/PX4-heli/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, PlaneFirmware, "http://firmware.diydrones.com/Plane/stable/PX4/ArduPlane-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, RoverFirmware, "http://firmware.diydrones.com/Rover/stable/PX4/APMrover2-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, QuadFirmware, "http://firmware.diydrones.com/Copter/beta/PX4-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, X8Firmware, "http://firmware.diydrones.com/Copter/beta/PX4-octa-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, HexaFirmware, "http://firmware.diydrones.com/Copter/beta/PX4-hexa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, OctoFirmware, "http://firmware.diydrones.com/Copter/beta/PX4-octa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, YFirmware, "http://firmware.diydrones.com/Copter/beta/PX4-tri/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, Y6Firmware, "http://firmware.diydrones.com/Copter/beta/PX4-y6/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, HeliFirmware, "http://firmware.diydrones.com/Copter/beta/PX4-heli/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, PlaneFirmware, "http://firmware.diydrones.com/Plane/beta/PX4/ArduPlane-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, RoverFirmware, "http://firmware.diydrones.com/Rover/beta/PX4/APMrover2-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, QuadFirmware, "http://firmware.diydrones.com/Copter/latest/PX4-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, X8Firmware, "http://firmware.diydrones.com/Copter/latest/PX4-octa-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, HexaFirmware, "http://firmware.diydrones.com/Copter/latest/PX4-hexa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, OctoFirmware, "http://firmware.diydrones.com/Copter/latest/PX4-octa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, YFirmware, "http://firmware.diydrones.com/Copter/latest/PX4-tri/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, Y6Firmware, "http://firmware.diydrones.com/Copter/latest/PX4-y6/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, HeliFirmware, "http://firmware.diydrones.com/Copter/latest/PX4-heli/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, PlaneFirmware, "http://firmware.diydrones.com/Plane/latest/PX4/ArduPlane-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, RoverFirmware, "http://firmware.diydrones.com/Rover/latest/PX4/APMrover2-v2.px4"} + }; + + //////////////////////////////////// PX4FMU aerocore firmwares ////////////////////////////////////////////////// + FirmwareToUrlElement_t rgAeroCoreFirmwareArray[] = { + { AutoPilotStackPX4, StableFirmware, DefaultVehicleFirmware, "http://gumstix-aerocore.s3.amazonaws.com/PX4/stable/aerocore_default.px4"}, + { AutoPilotStackPX4, BetaFirmware, DefaultVehicleFirmware, "http://gumstix-aerocore.s3.amazonaws.com/PX4/beta/aerocore_default.px4"}, + { AutoPilotStackPX4, DeveloperFirmware, DefaultVehicleFirmware, "http://gumstix-aerocore.s3.amazonaws.com/PX4/master/aerocore_default.px4"}, + { AutoPilotStackAPM, StableFirmware, QuadFirmware, "http://gumstix-aerocore.s3.amazonaws.com/APM/Copter/stable/PX4-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, X8Firmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-octa-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, HexaFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-hexa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, OctoFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-octa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, YFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-tri/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, Y6Firmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-y6/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, HeliFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/stable/PX4-heli/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, PlaneFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Plane/stable/PX4/ArduPlane-v2.px4"}, + { AutoPilotStackAPM, StableFirmware, RoverFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Rover/stable/PX4/APMrover2-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, QuadFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, X8Firmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-octa-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, HexaFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-hexa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, OctoFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-octa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, YFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-tri/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, Y6Firmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-y6/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, HeliFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/beta/PX4-heli/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, PlaneFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Plane/beta/PX4/ArduPlane-v2.px4"}, + { AutoPilotStackAPM, BetaFirmware, RoverFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Rover/beta/PX4/APMrover2-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, QuadFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, X8Firmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-octa-quad/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, HexaFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-hexa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, OctoFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-octa/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, YFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-tri/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, Y6Firmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-y6/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, HeliFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Copter/latest/PX4-heli/ArduCopter-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, PlaneFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Plane/latest/PX4/ArduPlane-v2.px4"}, + { AutoPilotStackAPM, DeveloperFirmware, RoverFirmware, "http://gumstix-aerocore.s3.amazonaws.com/Rover/latest/PX4/APMrover2-v2.px4"} + }; /////////////////////////////// FMUV1 firmwares /////////////////////////////////////////// + FirmwareToUrlElement_t rgPX4FMUV1FirmwareArray[] = { + { AutoPilotStackPX4, StableFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/latest/px4fmu-v1_default.px4"}, + { AutoPilotStackPX4, BetaFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/beta/px4fmu-v1_default.px4"}, + { AutoPilotStackPX4, DeveloperFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/master/px4fmu-v1_default.px4"}, + }; - static QHash rgPX4FMUV1Firmware; - rgPX4FMUV1Firmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - StableFirmware, - DefaultVehicleFirmware), - "http://px4-travis.s3.amazonaws.com/Firmware/latest/px4fmu-v1_default.px4"); + /////////////////////////////// px4flow firmwares /////////////////////////////////////// + FirmwareToUrlElement_t rgPX4FLowFirmwareArray[] = { + { PX4Flow, StableFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Flow/master/px4flow.px4" }, + }; + + /////////////////////////////// 3dr radio firmwares /////////////////////////////////////// + FirmwareToUrlElement_t rg3DRRadioFirmwareArray[] = { + { PX4Flow, StableFirmware, DefaultVehicleFirmware, "http://firmware.diydrones.com/SiK/latest/radio~hm_trp.ihx"} + }; + + // populate hashes now + int size = sizeof(rgPX4FMV2FirmwareArray)/sizeof(rgPX4FMV2FirmwareArray[0]); + for (int i = 0; i < size; i++) { + const FirmwareToUrlElement_t& element = rgPX4FMV2FirmwareArray[i]; + _rgPX4FMUV2Firmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); + } - rgPX4FMUV1Firmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - BetaFirmware, - DefaultVehicleFirmware), - "http://px4-travis.s3.amazonaws.com/Firmware/beta/px4fmu-v1_default.px4"); + size = sizeof(rgAeroCoreFirmwareArray)/sizeof(rgAeroCoreFirmwareArray[0]); + for (int i = 0; i < size; i++) { + const FirmwareToUrlElement_t& element = rgAeroCoreFirmwareArray[i]; + _rgAeroCoreFirmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); + } - rgPX4FMUV1Firmware.insert(FirmwareIdentifier(AutoPilotStackPX4, - DeveloperFirmware, - DefaultVehicleFirmware), - "http://px4-travis.s3.amazonaws.com/Firmware/master/px4fmu-v1_default.px4"); + size = sizeof(rgPX4FMUV1FirmwareArray)/sizeof(rgPX4FMUV1FirmwareArray[0]); + for (int i = 0; i < size; i++) { + const FirmwareToUrlElement_t& element = rgPX4FMUV1FirmwareArray[i]; + _rgPX4FMUV1Firmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); + } - /////////////////////////////// px4flow firmwares /////////////////////////////////////// + size = sizeof(rgPX4FLowFirmwareArray)/sizeof(rgPX4FLowFirmwareArray[0]); + for (int i = 0; i < size; i++) { + const FirmwareToUrlElement_t& element = rgPX4FLowFirmwareArray[i]; + _rgPX4FLowFirmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); + } - static QHash rgPX4FLowFirmware; - rgPX4FLowFirmware.insert(FirmwareIdentifier(PX4Flow, - StableFirmware, - DefaultVehicleFirmware), - "http://px4-travis.s3.amazonaws.com/Flow/master/px4flow.px4"); + size = sizeof(rg3DRRadioFirmwareArray)/sizeof(rg3DRRadioFirmwareArray[0]); + for (int i = 0; i < size; i++) { + const FirmwareToUrlElement_t& element = rg3DRRadioFirmwareArray[i]; + _rg3DRRadioFirmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); + } +} - /////////////////////////////// 3dr radio firmwares /////////////////////////////////////// +/// @brief Called when the findBootloader process is unable to sync to the bootloader. Moves the state +/// machine to the appropriate error state. +void FirmwareUpgradeController::_bootloaderSyncFailed(void) +{ + _errorCancel("Unable to sync with bootloader."); +} - static QHash rg3DRRadioFirmware; - rg3DRRadioFirmware.insert(FirmwareIdentifier(PX4Flow, - StableFirmware, - DefaultVehicleFirmware), - "http://firmware.diydrones.com/SiK/latest/radio~hm_trp.ihx"); +/// @brief Prompts the user to select a firmware file if needed and moves the state machine to the next state. +void FirmwareUpgradeController::_getFirmwareFile(FirmwareIdentifier firmwareIDTrinity) +{ + // make sure the firmware hashes are populated + _initFirmwareHash(); // Select the firmware set based on board type @@ -518,23 +319,23 @@ void FirmwareUpgradeController::_getFirmwareFile(FirmwareIdentifier firmwareIDTr switch (_bootloaderBoardID) { case Bootloader::boardIDPX4FMUV1: - prgFirmware = rgPX4FMUV1Firmware; + prgFirmware = _rgPX4FMUV1Firmware; break; case Bootloader::boardIDPX4Flow: - prgFirmware = rgPX4FLowFirmware; + prgFirmware = _rgPX4FLowFirmware; break; case Bootloader::boardIDPX4FMUV2: - prgFirmware = rgPX4FMUV2Firmware; + prgFirmware = _rgPX4FMUV2Firmware; break; case Bootloader::boardIDAeroCore: - prgFirmware = rgAeroCoreFirmware; + prgFirmware = _rgAeroCoreFirmware; break; case Bootloader::boardID3DRRadio: - prgFirmware = rg3DRRadioFirmware; + prgFirmware = _rg3DRRadioFirmware; break; default: diff --git a/src/VehicleSetup/FirmwareUpgradeController.h b/src/VehicleSetup/FirmwareUpgradeController.h index ea26f0a045c267b5533abbf7e829fa4c1e76c1e1..1c1f9f64270f45ce04d54de765ba0cd9a90d3f31 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.h +++ b/src/VehicleSetup/FirmwareUpgradeController.h @@ -174,6 +174,7 @@ private slots: private: void _getFirmwareFile(FirmwareIdentifier firmwareIDTrinity); + void _initFirmwareHash(); void _downloadFirmware(void); void _appendStatusLog(const QString& text, bool critical = false); void _errorCancel(const QString& msg); @@ -181,6 +182,13 @@ private: QString _portName; QString _portDescription; + // firmware hashes + QHash _rgPX4FMUV2Firmware; + QHash _rgAeroCoreFirmware; + QHash _rgPX4FMUV1Firmware; + QHash _rgPX4FLowFirmware; + QHash _rg3DRRadioFirmware; + /// Information which comes back from the bootloader bool _bootloaderFound; ///< true: we have received the foundBootloader signals uint32_t _bootloaderVersion; ///< Bootloader version