diff --git a/src/VehicleSetup/Bootloader.h b/src/VehicleSetup/Bootloader.h index 37099de878ce0083cf2240e8f1a7a8d268412ff6..522f528b89195ef6cae3edee4347c8373c8b48f3 100644 --- a/src/VehicleSetup/Bootloader.h +++ b/src/VehicleSetup/Bootloader.h @@ -61,13 +61,15 @@ public: bool reboot(QextSerialPort* port); // Supported bootloader board ids - static const int boardIDPX4FMUV1 = 5; ///< PX4 V1 board - static const int boardIDPX4FMUV2 = 9; ///< PX4 V2 board - static const int boardIDPX4FMUV4 = 11; ///< PX4 V4 board - static const int boardIDPX4Flow = 6; ///< PX4 Flow board - static const int boardIDAeroCore = 98; ///< Gumstix AeroCore board - static const int boardID3DRRadio = 78; ///< 3DR Radio - static const int boardIDMINDPXFMUV2 = 88; ///< MindPX V2 board + static const int boardIDPX4FMUV1 = 5; ///< PX4 V1 board, as from USB PID + static const int boardIDPX4FMUV2 = 9; ///< PX4 V2 board, as from USB PID + static const int boardIDPX4FMUV4 = 11; ///< PX4 V4 board, as from USB PID + static const int boardIDPX4Flow = 6; ///< PX4 Flow board, as from USB PID + static const int boardIDAeroCore = 98; ///< Gumstix AeroCore board, as from USB PID + static const int boardID3DRRadio = 78; ///< 3DR Radio. This is an arbitrary value unrelated to the PID + static const int boardIDMINDPXFMUV2 = 88; ///< MindPX V2 board, as from USB PID + static const int boardIDTAPV1 = 64; ///< TAP V1 board, as from USB PID + static const int boardIDASCV1 = 65; ///< ASC V1 board, as from USB PID signals: /// @brief Signals progress indicator for long running bootloader utility routines diff --git a/src/VehicleSetup/FirmwareUpgrade.qml b/src/VehicleSetup/FirmwareUpgrade.qml index 335f4c640b41c71348a98dbeeaa438357010a198..a89c9e5ed60c51470e773f4cdda69b6d06232567 100644 --- a/src/VehicleSetup/FirmwareUpgrade.qml +++ b/src/VehicleSetup/FirmwareUpgrade.qml @@ -97,7 +97,7 @@ QGCView { } else { // We end up here when we detect a board plugged in after we've started upgrade statusTextArea.append(highlightPrefix + qsTr("Found device") + highlightSuffix + ": " + controller.boardType) - if (controller.boardType == "Pixhawk" || controller.boardType == "AeroCore" || controller.boardType == "PX4 Flow" || controller.boardType == "PX4 FMU V1" || controller.boardType == "MindPX") { + if (controller.boardType == "Pixhawk" || controller.boardType == "AeroCore" || controller.boardType == "PX4 Flow" || controller.boardType == "PX4 FMU V1" || controller.boardType == "MindPX" || controller.boardType == "TAP V1" || controller.boardType == "ASC V1") { showDialog(pixhawkFirmwareSelectDialogComponent, title, qgcView.showDialogDefaultWidth, StandardButton.Ok | StandardButton.Cancel) } } diff --git a/src/VehicleSetup/FirmwareUpgradeController.cc b/src/VehicleSetup/FirmwareUpgradeController.cc index c735cf61990d6f5400c11b0deed289277b0014ab..9143f12b43be6a6bfc79750f784b62a735f3a5c2 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.cc +++ b/src/VehicleSetup/FirmwareUpgradeController.cc @@ -139,6 +139,14 @@ void FirmwareUpgradeController::_foundBoard(bool firstAttempt, const QSerialPort _foundBoardTypeName = "MindPX"; _startFlashWhenBootloaderFound = false; break; + case QGCSerialPortInfo::BoardTypeTAPV1: + _foundBoardTypeName = "TAP V1"; + _startFlashWhenBootloaderFound = false; + break; + case QGCSerialPortInfo::BoardTypeASCV1: + _foundBoardTypeName = "ASC V1"; + _startFlashWhenBootloaderFound = false; + break; case QGCSerialPortInfo::BoardTypePX4Flow: _foundBoardTypeName = "PX4 Flow"; _startFlashWhenBootloaderFound = false; @@ -344,6 +352,18 @@ void FirmwareUpgradeController::_initFirmwareHash() { AutoPilotStackPX4, BetaFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/beta/mindpx-v2_default.px4"}, { AutoPilotStackPX4, DeveloperFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/master/mindpx-v2_default.px4"}, }; + //////////////////////////////////// TAPV1 firmwares ////////////////////////////////////////////////// + FirmwareToUrlElement_t rgTAPV1FirmwareArray[] = { + { AutoPilotStackPX4, StableFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/stable/tap-v1_default.px4"}, + { AutoPilotStackPX4, BetaFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/beta/tap-v1_default.px4"}, + { AutoPilotStackPX4, DeveloperFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/master/tap-v1_default.px4"}, + }; + //////////////////////////////////// ASCV1 firmwares ////////////////////////////////////////////////// + FirmwareToUrlElement_t rgASCV1FirmwareArray[] = { + { AutoPilotStackPX4, StableFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/stable/asc-v1_default.px4"}, + { AutoPilotStackPX4, BetaFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/beta/asc-v1_default.px4"}, + { AutoPilotStackPX4, DeveloperFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Firmware/master/asc-v1_default.px4"}, + }; /////////////////////////////// px4flow firmwares /////////////////////////////////////// FirmwareToUrlElement_t rgPX4FLowFirmwareArray[] = { { PX4Flow, StableFirmware, DefaultVehicleFirmware, "http://px4-travis.s3.amazonaws.com/Flow/master/px4flow.px4" }, @@ -385,6 +405,18 @@ void FirmwareUpgradeController::_initFirmwareHash() _rgMindPXFMUV2Firmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); } + size = sizeof(rgTAPV1FirmwareArray)/sizeof(rgTAPV1FirmwareArray[0]); + for (int i = 0; i < size; i++) { + const FirmwareToUrlElement_t& element = rgTAPV1FirmwareArray[i]; + _rgTAPV1Firmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); + } + + size = sizeof(rgASCV1FirmwareArray)/sizeof(rgASCV1FirmwareArray[0]); + for (int i = 0; i < size; i++) { + const FirmwareToUrlElement_t& element = rgASCV1FirmwareArray[i]; + _rgASCV1Firmware.insert(FirmwareIdentifier(element.stackType, element.firmwareType, element.vehicleType), element.url); + } + size = sizeof(rgPX4FLowFirmwareArray)/sizeof(rgPX4FLowFirmwareArray[0]); for (int i = 0; i < size; i++) { const FirmwareToUrlElement_t& element = rgPX4FLowFirmwareArray[i]; @@ -420,6 +452,10 @@ QHash* FirmwareUpgradeCo return &_rgAeroCoreFirmware; case Bootloader::boardIDMINDPXFMUV2: return &_rgMindPXFMUV2Firmware; + case Bootloader::boardIDTAPV1: + return &_rgTAPV1Firmware; + case Bootloader::boardIDASCV1: + return &_rgASCV1Firmware; case Bootloader::boardID3DRRadio: return &_rg3DRRadioFirmware; default: @@ -447,6 +483,12 @@ QHash* FirmwareUpgradeCo case QGCSerialPortInfo::BoardTypeMINDPXFMUV2: boardId = Bootloader::boardIDMINDPXFMUV2; break; + case QGCSerialPortInfo::BoardTypeTAPV1: + boardId = Bootloader::boardIDTAPV1; + break; + case QGCSerialPortInfo::BoardTypeASCV1: + boardId = Bootloader::boardIDASCV1; + break; case QGCSerialPortInfo::BoardTypePX4Flow: boardId = Bootloader::boardIDPX4Flow; break; diff --git a/src/VehicleSetup/FirmwareUpgradeController.h b/src/VehicleSetup/FirmwareUpgradeController.h index 54a61e7a8210f25500f7c417669babead06f4c09..ea344a3517089f02053cb68c183514999baf09bd 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.h +++ b/src/VehicleSetup/FirmwareUpgradeController.h @@ -194,6 +194,8 @@ private: QHash _rgAeroCoreFirmware; QHash _rgPX4FMUV1Firmware; QHash _rgMindPXFMUV2Firmware; + QHash _rgTAPV1Firmware; + QHash _rgASCV1Firmware; QHash _rgPX4FLowFirmware; QHash _rg3DRRadioFirmware; diff --git a/src/comm/LinkManager.cc b/src/comm/LinkManager.cc index 139cd53f6ac9897ba2508e9d1bb1f040ada9de4e..55c19e8d46e921e3e2ba237a3011845aa53b055a 100644 --- a/src/comm/LinkManager.cc +++ b/src/comm/LinkManager.cc @@ -335,7 +335,7 @@ void LinkManager::saveLinkConfigurationList() linkConfig->saveSettings(settings, root); } } else { - qWarning() << "Internal error"; + qWarning() << "Internal error for link configuration in LinkManager"; } } QString root(LinkConfiguration::settingsRoot()); @@ -542,6 +542,18 @@ void LinkManager::_updateAutoConnectLinks(void) pSerialConfig->setUsbDirect(true); } break; + case QGCSerialPortInfo::BoardTypeTAPV1: + if (_autoconnectPixhawk) { + pSerialConfig = new SerialConfiguration(QString("TAP on %1").arg(portInfo.portName().trimmed())); + pSerialConfig->setUsbDirect(true); + } + break; + case QGCSerialPortInfo::BoardTypeASCV1: + if (_autoconnectPixhawk) { + pSerialConfig = new SerialConfiguration(QString("ASC on %1").arg(portInfo.portName().trimmed())); + pSerialConfig->setUsbDirect(true); + } + break; case QGCSerialPortInfo::BoardTypePX4Flow: if (_autoconnectPX4Flow) { pSerialConfig = new SerialConfiguration(QString("PX4Flow on %1").arg(portInfo.portName().trimmed())); diff --git a/src/comm/QGCSerialPortInfo.cc b/src/comm/QGCSerialPortInfo.cc index 262c01989fd2a007f47d53b3c45f1bc0f32c3978..69fed13dc95d0d41e28480c02e80764178dc2b73 100644 --- a/src/comm/QGCSerialPortInfo.cc +++ b/src/comm/QGCSerialPortInfo.cc @@ -25,6 +25,8 @@ static const struct VIDPIDMapInfo_s { { QGCSerialPortInfo::px4VendorId, QGCSerialPortInfo::px4FlowProductId, QGCSerialPortInfo::BoardTypePX4Flow, "Found PX4 Flow" }, { QGCSerialPortInfo::px4VendorId, QGCSerialPortInfo::AeroCoreProductId, QGCSerialPortInfo::BoardTypeAeroCore, "Found AeroCore" }, { QGCSerialPortInfo::px4VendorId, QGCSerialPortInfo::MindPXFMUV2ProductId, QGCSerialPortInfo::BoardTypeMINDPXFMUV2,"Found MindPX FMU V2" }, + { QGCSerialPortInfo::px4VendorId, QGCSerialPortInfo::TAPV1ProductId, QGCSerialPortInfo::BoardTypeTAPV1, "Found TAP V1" }, + { QGCSerialPortInfo::px4VendorId, QGCSerialPortInfo::ASCV1ProductId, QGCSerialPortInfo::BoardTypeASCV1, "Found ASC V1" }, { QGCSerialPortInfo::threeDRRadioVendorId, QGCSerialPortInfo::threeDRRadioProductId, QGCSerialPortInfo::BoardTypeSikRadio, "Found SiK Radio" }, { QGCSerialPortInfo::siLabsRadioVendorId, QGCSerialPortInfo::siLabsRadioProductId, QGCSerialPortInfo::BoardTypeSikRadio, "Found SiK Radio" }, { QGCSerialPortInfo::ubloxRTKVendorId, QGCSerialPortInfo::ubloxRTKProductId, QGCSerialPortInfo::BoardTypeRTKGPS, "Found RTK GPS" }, @@ -81,6 +83,12 @@ QGCSerialPortInfo::BoardType_t QGCSerialPortInfo::boardType(void) const } else if (description() == "MindPX FMU v2.x" || description() == "MindPX BL FMU v2.x") { qCDebug(QGCSerialPortInfoLog) << "Found MindPX FMU V2 (by name matching fallback)"; boardType = BoardTypeMINDPXFMUV2; + } else if (description() == "PX4 TAP v1.x" || description() == "PX4 BL TAP v1.x") { + qCDebug(QGCSerialPortInfoLog) << "Found TAP V1 (by name matching fallback)"; + boardType = BoardTypeTAPV1; + } else if (description() == "PX4 ASC v1.x" || description() == "PX4 BL ASC v1.x") { + qCDebug(QGCSerialPortInfoLog) << "Found ASC V1 (by name matching fallback)"; + boardType = BoardTypeASCV1; } else if (description() == "FT231X USB UART") { qCDebug(QGCSerialPortInfoLog) << "Found possible Radio (by name matching fallback)"; boardType = BoardTypeSikRadio; @@ -114,7 +122,8 @@ bool QGCSerialPortInfo::boardTypePixhawk(void) const return boardType == BoardTypePX4FMUV1 || boardType == BoardTypePX4FMUV2 || boardType == BoardTypePX4FMUV4 || boardType == BoardTypeAeroCore - || boardType == BoardTypeMINDPXFMUV2; + || boardType == BoardTypeMINDPXFMUV2 || boardType == BoardTypeTAPV1 + || boardType == BoardTypeASCV1; } bool QGCSerialPortInfo::isBootloader(void) const diff --git a/src/comm/QGCSerialPortInfo.h b/src/comm/QGCSerialPortInfo.h index c10241e36eb8cbaaf1ccbeb6c3166d38e91bd279..10acec82c0a7113f50347fe85dcd7ec804fcf1f8 100644 --- a/src/comm/QGCSerialPortInfo.h +++ b/src/comm/QGCSerialPortInfo.h @@ -35,6 +35,8 @@ public: BoardTypeAeroCore, BoardTypeRTKGPS, BoardTypeMINDPXFMUV2, + BoardTypeTAPV1, + BoardTypeASCV1, BoardTypeUnknown } BoardType_t; @@ -52,6 +54,8 @@ public: static const int px4FlowProductId = 21; ///< Product ID for PX4 Flow board static const int MindPXFMUV2ProductId = 48; ///< Product ID for the MindPX V2 board + static const int TAPV1ProductId = 64; ///< Product ID for the TAP V1 board + static const int ASCV1ProductId = 65; ///< Product ID for the ASC V1 board static const int threeDRRadioVendorId = 1027; ///< Vendor ID for 3DR Radio static const int threeDRRadioProductId = 24597; ///< Product ID for 3DR Radio