From af6af67b69609a919191666a6efe3f24dad2d3fa Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sat, 18 Oct 2014 21:20:55 +0200 Subject: [PATCH 01/14] Update WHATSNEW for release --- WHATSNEW.txt | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/WHATSNEW.txt b/WHATSNEW.txt index ce0845421..b0028bec7 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,3 +1,138 @@ +--- RELEASE-14.10-RC1 --- +This release mainly focuses on flight performance, especially aimed at mini multirotors and adds support for the OpenPilot Platinum GPS (V9). +This version supports the CopterControl, CC3D, Atom and the Revolution Flight controllers as well as the OPLink Modems. + +Some key addition in this release: +- A brand new Acro+ flight mode, a Rate mode "on steroids"; +- Support for latest OpenPilot Platinum GPS (V9) and its integrated magnetometer; +- Throttle PID Scaling: automatically scale PIDs based on throttle; +- On board Expo support; +- Several additions to the Setup Wizard such as Fixed wing support, GPS selection, TriCopter servo speed selection and ESC calibration; +- First implementation of Cloud config; +- Redesigned PFD artwork and addition of multifunctional slide out panels; +- Support for additional Flexi-IO serial port for Revolution; +- External (ws281x compatible) status LED support; +- Several OPLink reliability improvements; +- Considerable flight performance improvements + +The full list of features, improvements and bugfixes in this release is accessible here: + +http://progress.openpilot.org/issues/?filter=11860 + +NOTE: If you were using OPLink at power levels lower than 100mW, please redo a range test after upgrading to 14.10. + +** Improvement + * [OP-838] - Adding servo update rate to vehicle setup wizard for tricopters. + * [OP-1088] - Redesign the OPLink GUI in the GCS + * [OP-1134] - Custom vehicle should show settings from last mixer preset + * [OP-1156] - Unify path followers into a single module with submodules + * [OP-1317] - Improvement of IMU wind estimation + * [OP-1319] - Fix minor spelling mistakes in fw code + * [OP-1324] - Fix build when python isn't python2 + * [OP-1338] - copydata.pro uses specific icu so version when it doesn't need to? + * [OP-1370] - Add optional UBX GPS self configuration + * [OP-1379] - Create a notification module that allows for some Naza like led signalling and more + * [OP-1395] - Several enhancements/fixes to flight side log + * [OP-1397] - Add Responsiveness to TxPID + * [OP-1404] - Add support for UBlox PVT sentence + * [OP-1405] - Add support for 25qXXX series of flash memories + * [OP-1406] - Add support for an aux magnetometer + * [OP-1423] - Populate TxPID Min/Max fields with the current values from the Stabilization page + * [OP-1429] - Optimize GPSSatellites UAVO + * [OP-1438] - Change VSI to Arc on the PFD + * [OP-1440] - Timing on WS2812 to support all models + * [OP-1447] - Make it easier to adjust the slider on the Output Calibration Setup Wizard page + * [OP-1451] - Change udev rules from using plugdev group to uaccess/udev-acl + * [OP-1452] - Usability fixes to ComUsbBridge + * [OP-1453] - Check if new version of OP Software suite is available, notify if so + * [OP-1457] - Hide feed forward tab when in config plugin for Fixed wings + * [OP-1458] - Remove delays and other quirks from TX Wizard + * [OP-1462] - Find better default EKF settings + * [OP-1465] - update stm32flash to support new targets + * [OP-1472] - Make connection diagram button more visible + * [OP-1474] - Scaling back PIDs at high / full throttle with Multis. + * [OP-1482] - TPS graph needs labels, also scale should not be -100% to +100%, suggest 50% as max + * [OP-1489] - Hide ILimit stuff + * [OP-1491] - Create H Quad type in artwork and add to wizard + * [OP-1493] - Make the discoveryf4bare target more usable from GCS + * [OP-1504] - Add a SystemSetting field to be used to name the vehicle. + * [OP-1507] - Optimize GPS module cpu utilization + * [OP-1508] - SBus Connection Diagram - Vehicle Setup Wizard + * [OP-1512] - Add ESC calibration to wizard + * [OP-1515] - Gyro Fifo handling for CC3D + * [OP-1516] - Create Acro+ + * [OP-1520] - Remove "Attitude" as a selection for Yaw (safety Issue) + * [OP-1521] - Responsiveness scale + * [OP-1524] - Render chars/strings in the Uavobrowser + * [OP-1528] - Enable Telemetry on Flexi-IO (receiver) port on Revo platform + * [OP-1534] - Add expo and acro insanity factor to TxPID + * [OP-1535] - MPU handling optimization + * [OP-1538] - UAVO Browser - embedded descriptions + +** New Feature + * [OP-1222] - Add support for Fixed Wing configuration in Vehicle Setup Wizard + * [OP-1275] - Create a PiOS F0 target + * [OP-1403] - Add generic I2C/SPI HMC5x83 mag driver + * [OP-1434] - Support for GPSV9 + * [OP-1476] - Serial bootloader and support tools for F0 + * [OP-1477] - V9 firmware + + +** Task + * [OP-1093] - Investigate Font issues on non-Windows platforms + * [OP-1337] - French translations updates (14.10) + * [OP-1398] - Qt 5.3.1 upgrade + * [OP-1468] - Change default PIDs for Atom + * [OP-1544] - Change defaults for GPSSettings.UbxAutoConfig to "Configure" + +** Sub task + * [OP-790] - Add labels to Custom Mode Vehicle type channels + * [OP-1399] - Qt 5.3.1 upgrade (Windows) + * [OP-1400] - Qt 5.3.1 upgrade (Linux) + * [OP-1401] - Qt 5.3.1 upgrade (Mac) + * [OP-1435] - Add Up Time, Arm Status and flight mode to PFD + * [OP-1439] - Add minor vignette / gradient to PFD + * [OP-1525] - GUI for Acro+ + +** Bug + * [OP-868] - Text in Barographs is beyond image in Horizontal, Too tight spacing in Vertical + * [OP-922] - compiling firmware with DEBUG=YES fails in multiple places + * [OP-1077] - GCS corrupts flight log files (*.opl) + * [OP-1140] - Weak Leveling code appears to be wrong + * [OP-1186] - Clean up GCS configuration UI... + * [OP-1349] - GCS Neutral Spinboxes in Input and Output are incorrectly affected by and affect Min and Max + * [OP-1362] - Translation : 'make ts' errors + * [OP-1422] - Vehicle Setup Wizard (Tricopter) and Vehicle Mixer Settings Frame type dropdown (Tricopter) do not give the same Pitch mixer settings + * [OP-1425] - A small typo + * [OP-1433] - Change the order of the TxPID PID Options + * [OP-1445] - GCS bugs down in RC Input and Manual Calibration + * [OP-1455] - No output from "Test outputs" until sliders are moved + * [OP-1459] - Workaround white-box bug in GCS on OSX + * [OP-1460] - ICU libraries need to be copied, like they used to be. + * [OP-1461] - copyqt logic flawed on linux + * [OP-1463] - New copyqt logic might break if user has alternate OPENPILOT_TOOLS_DIR defined + * [OP-1473] - Incorrect Handling of EOF bytes for Futaba R7008SB + * [OP-1478] - Qt Creator build fails on windows + * [OP-1481] - UAVTalk transacted sends limit the number of waypoints that can sent over a slow link + * [OP-1483] - Switching from ReturnToBase into PathFollower mode doesn't work reliably + * [OP-1484] - Yaw rate Ki slider on basic stabilization page out of range + * [OP-1485] - board target revoproto is broken + * [OP-1488] - Typo in uavobject.java.template + * [OP-1494] - First exit from Stabilization page brings up warning, although no changes made + * [OP-1499] - UBXAutoConfig not Auto Configuring + * [OP-1506] - Wrong display in altitude / speed + refactoring PFD + * [OP-1510] - Don't force operating at 100mW + * [OP-1513] - Filter every temperature measurement used for temperature calibration + * [OP-1517] - Setup Wizard - sets SBus and GPS to main port + * [OP-1522] - Improve Robustness of OPLink radio + * [OP-1526] - Reverse all motors not working? + * [OP-1532] - OPLINKMINI and Revo do not communicate correctly + * [OP-1536] - The Revo ComBridge outputs garbage at the end of transmissions + * [OP-1537] - OPLink unreliable at high data rates + * [OP-1539] - AcroInsanityFactor limit parsing error + * [OP-1540] - Fix GPS v9 reported sha1sum + * [OP-1542] - Welcome Screen does not show latest available Update + --- RELEASE-14.06.01 --- This is the first maintenance release for 14.06. This mainly fixes a bug causing flips when switching to Weaklevel flight mode. From 05d1f95dfd9e64b682ae18ba87b4d2af0e1fc5db Mon Sep 17 00:00:00 2001 From: m_thread Date: Sun, 19 Oct 2014 15:53:41 +0200 Subject: [PATCH 02/14] Fixed Google Satellite version strings. Credits to Craig Nuttall who found the issue. --- .../libs/opmapcontrol/src/core/providerstrings.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/providerstrings.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/providerstrings.cpp index a4c913b9e..50d16bbc9 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/providerstrings.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/providerstrings.cpp @@ -37,15 +37,11 @@ const QString ProviderStrings::levelsForSigPacSpainMap[] = { "0", "1", ProviderStrings::ProviderStrings() { -// VersionGoogleMap = "m@132"; -// VersionGoogleSatellite = "71"; -// VersionGoogleLabels = "h@132"; -// VersionGoogleTerrain = "t@125,r@132"; // Google version strings - VersionGoogleMap = "m@132"; - VersionGoogleSatellite = "71"; - VersionGoogleLabels = "h@132"; - VersionGoogleTerrain = "t@125,r@132"; + VersionGoogleMap = "h@249000000"; + VersionGoogleSatellite = "145"; + VersionGoogleLabels = "h@221000000"; + VersionGoogleTerrain = "t@132,r@249000000"; SecGoogleWord = "Galileo"; // Google (China) version strings From 9d9772177a7d6c9fd85a01d58f527844303802b3 Mon Sep 17 00:00:00 2001 From: a*morale Date: Sun, 19 Oct 2014 19:56:54 +0200 Subject: [PATCH 03/14] OP-1549 - Fix Map version retrieval url. switch to http tiles as they works again and are way faster --- .../src/libs/opmapcontrol/src/core/urlfactory.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp index 6025eecc1..e033d58dc 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp @@ -109,7 +109,7 @@ void UrlFactory::TryCorrectGoogleVersions() qDebug() << "Correct GoogleVersion"; #endif // DEBUG_URLFACTORY // setIsCorrectGoogleVersions(true); - QString url = "https://maps.google.com"; + QString url = "https://maps.google.com/maps?output=classic"; qheader.setUrl(QUrl(url)); qheader.setRawHeader("User-Agent", UserAgent); @@ -186,18 +186,18 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleSatellite: { - QString server = "khms"; + QString server = "khm"; QString request = "kh"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleLabels: @@ -209,7 +209,7 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleTerrain: @@ -220,7 +220,7 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleMapChina: From 7127629031884581e968b48168881dd275353191 Mon Sep 17 00:00:00 2001 From: a*morale Date: Sun, 19 Oct 2014 19:56:54 +0200 Subject: [PATCH 04/14] OP-1549 - Fix Map version retrieval url. switch to http tiles as they works again and are way faster --- .../src/libs/opmapcontrol/src/core/urlfactory.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp index 6025eecc1..e033d58dc 100644 --- a/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp +++ b/ground/openpilotgcs/src/libs/opmapcontrol/src/core/urlfactory.cpp @@ -109,7 +109,7 @@ void UrlFactory::TryCorrectGoogleVersions() qDebug() << "Correct GoogleVersion"; #endif // DEBUG_URLFACTORY // setIsCorrectGoogleVersions(true); - QString url = "https://maps.google.com"; + QString url = "https://maps.google.com/maps?output=classic"; qheader.setUrl(QUrl(url)); qheader.setRawHeader("User-Agent", UserAgent); @@ -186,18 +186,18 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleMap).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleSatellite: { - QString server = "khms"; + QString server = "khm"; QString request = "kh"; QString sec1 = ""; // after &x=... QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleSatellite).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleLabels: @@ -209,7 +209,7 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/lyrs=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleLabels).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleTerrain: @@ -220,7 +220,7 @@ QString UrlFactory::MakeImageUrl(const MapType::Types &type, const Point &pos, c QString sec2 = ""; // after &zoom=... GetSecGoogleWords(pos, sec1, sec2); TryCorrectGoogleVersions(); - return QString("https://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); + return QString("http://%1%2.google.com/%3/v=%4&hl=%5&x=%6%7&y=%8&z=%9&s=%10").arg(server).arg(GetServerNum(pos, 4)).arg(request).arg(VersionGoogleTerrain).arg(language).arg(pos.X()).arg(sec1).arg(pos.Y()).arg(zoom).arg(sec2); } break; case MapType::GoogleMapChina: From 36c04236e4abed53500091b54a3aee9f1d3f34bc Mon Sep 17 00:00:00 2001 From: m_thread Date: Mon, 20 Oct 2014 13:58:54 +0200 Subject: [PATCH 05/14] OP-1552 Changed text of menu for input setup wizard. --- .../openpilotgcs/src/plugins/config/configgadgetfactory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configgadgetfactory.cpp b/ground/openpilotgcs/src/plugins/config/configgadgetfactory.cpp index a9add1da0..cea8f10b4 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadgetfactory.cpp +++ b/ground/openpilotgcs/src/plugins/config/configgadgetfactory.cpp @@ -49,8 +49,8 @@ Core::IUAVGadget *ConfigGadgetFactory::createGadget(QWidget *parent) Core::Command *cmd = am->registerAction(new QAction(this), "ConfigPlugin.ShowInputWizard", QList() << Core::Constants::C_GLOBAL_ID); - cmd->setDefaultKeySequence(QKeySequence("Ctrl+R")); - cmd->action()->setText(tr("Radio Setup Wizard")); + cmd->setDefaultKeySequence(QKeySequence("Ctrl+T")); + cmd->action()->setText(tr("Transmitter Setup Wizard")); Core::ModeManager::instance()->addAction(cmd, 1); From decbcb3ee768bd550de35c89c919e46d6529ba73 Mon Sep 17 00:00:00 2001 From: m_thread Date: Mon, 20 Oct 2014 14:01:52 +0200 Subject: [PATCH 06/14] OP-1545 Added GUI to visualize the ESC calibration utput level during calibration. --- .../setupwizard/pages/esccalibrationpage.cpp | 12 + .../setupwizard/pages/esccalibrationpage.ui | 352 +++++++++++++++++- 2 files changed, 363 insertions(+), 1 deletion(-) diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.cpp index 270a3ddef..6a5752ca1 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.cpp @@ -40,6 +40,12 @@ EscCalibrationPage::EscCalibrationPage(SetupWizard *wizard, QWidget *parent) : ui(new Ui::EscCalibrationPage), m_isCalibrating(false) { ui->setupUi(this); + + ui->outputHigh->setEnabled(false); + ui->outputLow->setEnabled(true); + ui->outputLevel->setEnabled(true); + ui->outputLevel->setText(QString(tr("%1 µs")).arg(LOW_PWM_OUTPUT_PULSE_LENGTH_MICROSECONDS)); + connect(ui->startStopButton, SIGNAL(clicked()), this, SLOT(startStopButtonClicked())); connect(ui->securityCheckBox1, SIGNAL(toggled(bool)), this, SLOT(securityCheckBoxesToggled())); @@ -82,6 +88,9 @@ void EscCalibrationPage::startStopButtonClicked() m_isCalibrating = true; ui->startStopButton->setEnabled(false); enableButtons(false); + ui->outputHigh->setEnabled(true); + ui->outputLow->setEnabled(false); + ui->outputLevel->setText(QString(tr("%1 µs")).arg(HIGH_PWM_OUTPUT_PULSE_LENGTH_MICROSECONDS)); ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *uavoManager = pm->getObject(); Q_ASSERT(uavoManager); @@ -107,6 +116,9 @@ void EscCalibrationPage::startStopButtonClicked() output->stopChannelOutput(); delete output; } + ui->outputHigh->setEnabled(false); + ui->outputLow->setEnabled(true); + ui->outputLevel->setText(QString(tr("%1 µs")).arg(LOW_PWM_OUTPUT_PULSE_LENGTH_MICROSECONDS)); m_outputs.clear(); m_isCalibrating = false; resetAllSecurityCheckboxes(); diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.ui b/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.ui index c22be3413..8e62e6ce8 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.ui +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/esccalibrationpage.ui @@ -7,7 +7,7 @@ 0 0 600 - 500 + 507 @@ -64,6 +64,356 @@ + + + + ESC Output Level + + + + 9 + + + 9 + + + 9 + + + + + false + + + + 100 + 22 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 34 + 34 + 200 + + + + + 6 + 6 + 150 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 34 + 34 + 200 + + + + + 6 + 6 + 150 + + + + + + + + + + + 34 + 34 + 200 + + + + + 6 + 6 + 150 + + + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 34 + 34 + 200 + + + + + 6 + 6 + 150 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 34 + 34 + 200 + + + + + 6 + 6 + 150 + + + + + + + + + + + 34 + 34 + 200 + + + + + 6 + 6 + 150 + + + + + + + + + + + 159 + 158 + 158 + + + + + + + 100 + 150 + 255 + + + + + + + 159 + 158 + 158 + + + + + + + 159 + 158 + 158 + + + + + + + 255 + 255 + 255 + + + + + + + 242 + 241 + 240 + + + + + + + + QPushButton:enabled { + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(34, 34, 200, 255), stop:0.78607 rgba(6, 6, 150, 255)); + color: rgb(255, 255, 255); + border-radius: 5; +} + + + Low/Off + + + true + + + + + + + + 0 + 0 + + + + QFrame::Sunken + + + 1 + + + Qt::Horizontal + + + + + + + false + + + N/A + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + + + false + + + + 100 + 22 + + + + QPushButton:enabled { + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(200, 14, 14, 255), stop:0.78607 rgba(160, 6, 6, 255)); + color: rgb(255, 255, 255); + border-radius: 5; +} + + + High + + + true + + + + + + From d1a229a9cbbebafe329d67e9da3aab80a37cbdaf Mon Sep 17 00:00:00 2001 From: a*morale Date: Mon, 20 Oct 2014 21:46:14 +0200 Subject: [PATCH 07/14] OP-1553 OPLink does not work as non coordinator Revert "OP-1535 - SPI:Use pio for small blocks" This reverts commit 823a1afad2352c03fc37457c0e13eaf7ca0dcf6e. --- flight/pios/stm32f10x/pios_spi.c | 108 +++++-------------------------- 1 file changed, 17 insertions(+), 91 deletions(-) diff --git a/flight/pios/stm32f10x/pios_spi.c b/flight/pios/stm32f10x/pios_spi.c index 01b7722aa..21db6bd5e 100644 --- a/flight/pios/stm32f10x/pios_spi.c +++ b/flight/pios/stm32f10x/pios_spi.c @@ -44,7 +44,6 @@ static bool PIOS_SPI_validate(__attribute__((unused)) struct pios_spi_dev *com_d /* Should check device magic here */ return true; } -#define SPI_MAX_BLOCK_PIO 128 #if defined(PIOS_INCLUDE_FREERTOS) static struct pios_spi_dev *PIOS_SPI_alloc(void) @@ -433,7 +432,23 @@ int32_t PIOS_SPI_TransferByte(uint32_t spi_id, uint8_t b) return rx_byte; } -static int32_t SPI_DMA_TransferBlock(uint32_t spi_id, const uint8_t *send_buffer, uint8_t *receive_buffer, uint16_t len, void *callback) +/** + * Transfers a block of bytes via DMA. + * \param[in] spi SPI number (0 or 1) + * \param[in] send_buffer pointer to buffer which should be sent.
+ * If NULL, 0xff (all-one) will be sent. + * \param[in] receive_buffer pointer to buffer which should get the received values.
+ * If NULL, received bytes will be discarded. + * \param[in] len number of bytes which should be transfered + * \param[in] callback pointer to callback function which will be executed + * from DMA channel interrupt once the transfer is finished. + * If NULL, no callback function will be used, and PIOS_SPI_TransferBlock() will + * block until the transfer is finished. + * \return >= 0 if no error during transfer + * \return -1 if disabled SPI port selected + * \return -3 if function has been called during an ongoing DMA transfer + */ +int32_t PIOS_SPI_TransferBlock(uint32_t spi_id, const uint8_t *send_buffer, uint8_t *receive_buffer, uint16_t len, void *callback) { struct pios_spi_dev *spi_dev = (struct pios_spi_dev *)spi_id; @@ -565,95 +580,6 @@ static int32_t SPI_DMA_TransferBlock(uint32_t spi_id, const uint8_t *send_buffer return 0; } -/** - * Transfers a block of bytes via PIO. - * - * \param[in] spi_id SPI device handle - * \param[in] send_buffer pointer to buffer which should be sent.
- * If NULL, 0xff (all-one) will be sent. - * \param[in] receive_buffer pointer to buffer which should get the received values.
- * If NULL, received bytes will be discarded. - * \param[in] len number of bytes which should be transfered - * \return >= 0 if no error during transfer - * \return -1 if disabled SPI port selected - * \return -3 if function has been called during an ongoing DMA transfer - */ -static int32_t SPI_PIO_TransferBlock(uint32_t spi_id, const uint8_t *send_buffer, uint8_t *receive_buffer, uint16_t len) -{ - struct pios_spi_dev *spi_dev = (struct pios_spi_dev *)spi_id; - uint8_t b; - - bool valid = PIOS_SPI_validate(spi_dev); - - PIOS_Assert(valid) - - /* Exit if ongoing transfer */ - if (DMA_GetCurrDataCounter(spi_dev->cfg->dma.rx.channel)) { - return -3; - } - - /* Make sure the RXNE flag is cleared by reading the DR register */ - b = spi_dev->cfg->regs->DR; - - while (len--) { - /* get the byte to send */ - b = send_buffer ? *(send_buffer++) : 0xff; - - /* Start the transfer */ - spi_dev->cfg->regs->DR = b; - - /* Wait until there is a byte to read */ - while (!(spi_dev->cfg->regs->SR & SPI_I2S_FLAG_RXNE)) { - ; - } - - /* Read the rx'd byte */ - b = spi_dev->cfg->regs->DR; - - /* save the received byte */ - if (receive_buffer) { - *(receive_buffer++) = b; - } - - /* Wait until the TXE goes high */ - while (!(spi_dev->cfg->regs->SR & SPI_I2S_FLAG_TXE)) { - ; - } - } - - /* Wait for SPI transfer to have fully completed */ - while (spi_dev->cfg->regs->SR & SPI_I2S_FLAG_BSY) { - ; - } - - return 0; -} - - -/** - * Transfers a block of bytes via PIO or DMA. - * \param[in] spi_id SPI device handle - * \param[in] send_buffer pointer to buffer which should be sent.
- * If NULL, 0xff (all-one) will be sent. - * \param[in] receive_buffer pointer to buffer which should get the received values.
- * If NULL, received bytes will be discarded. - * \param[in] len number of bytes which should be transfered - * \param[in] callback pointer to callback function which will be executed - * from DMA channel interrupt once the transfer is finished. - * If NULL, no callback function will be used, and PIOS_SPI_TransferBlock() will - * block until the transfer is finished. - * \return >= 0 if no error during transfer - * \return -1 if disabled SPI port selected - * \return -3 if function has been called during an ongoing DMA transfer - */ -int32_t PIOS_SPI_TransferBlock(uint32_t spi_id, const uint8_t *send_buffer, uint8_t *receive_buffer, uint16_t len, void *callback) -{ - if (callback || len > SPI_MAX_BLOCK_PIO) { - return SPI_DMA_TransferBlock(spi_id, send_buffer, receive_buffer, len, callback); - } - return SPI_PIO_TransferBlock(spi_id, send_buffer, receive_buffer, len); -} - /** * Check if a transfer is in progress * \param[in] spi SPI number (0 or 1) From 561fb364a52d75983cb8160bd021dcc1d4ad7bff Mon Sep 17 00:00:00 2001 From: a*morale Date: Tue, 21 Oct 2014 00:12:09 +0200 Subject: [PATCH 08/14] OP-1548 - Adding limits to FusionAlgorithm --- ground/openpilotgcs/src/plugins/config/configrevowidget.cpp | 6 ++++-- shared/uavobjectdefinition/revosettings.xml | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/configrevowidget.cpp b/ground/openpilotgcs/src/plugins/config/configrevowidget.cpp index c512e3cde..d4d1ea933 100644 --- a/ground/openpilotgcs/src/plugins/config/configrevowidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configrevowidget.cpp @@ -186,7 +186,7 @@ ConfigRevoWidget::ConfigRevoWidget(QWidget *parent) : // home location connect(m_ui->hlClearButton, SIGNAL(clicked()), this, SLOT(clearHomeLocation())); - addWidgetBinding("RevoSettings", "FusionAlgorithm", m_ui->FusionAlgorithm); + addWidgetBinding("RevoSettings", "FusionAlgorithm", m_ui->FusionAlgorithm, 0, 1, true); addWidgetBinding("AttitudeSettings", "BoardRotation", m_ui->rollRotation, AttitudeSettings::BOARDROTATION_ROLL); addWidgetBinding("AttitudeSettings", "BoardRotation", m_ui->pitchRotation, AttitudeSettings::BOARDROTATION_PITCH); @@ -194,10 +194,12 @@ ConfigRevoWidget::ConfigRevoWidget(QWidget *parent) : addWidgetBinding("AttitudeSettings", "AccelTau", m_ui->accelTau); populateWidgets(); - refreshWidgetsValues(); enableAllCalibrations(); + updateEnableControls(); + forceConnectedState(); + refreshWidgetsValues(); } ConfigRevoWidget::~ConfigRevoWidget() diff --git a/shared/uavobjectdefinition/revosettings.xml b/shared/uavobjectdefinition/revosettings.xml index d2c8b9d4f..a13cadce3 100644 --- a/shared/uavobjectdefinition/revosettings.xml +++ b/shared/uavobjectdefinition/revosettings.xml @@ -1,7 +1,10 @@ Settings for the revo to control the algorithm and what is updated - +