1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-30 15:52:12 +01:00

Merge branch 'rel-14.10' into next

This commit is contained in:
Fredrik Larsson 2014-10-21 22:54:33 +11:00
commit 2c986cf53f
15 changed files with 552 additions and 120 deletions

View File

@ -1,3 +1,144 @@
--- RELEASE-14.10 ---
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
* [OP-1545] - Added GUI to visualize the ESC calibration output level during calibration
* [OP-1548] - Change Fusion algorithm names to make clear their usage
* [OP-1552] - Changed text of menu for input setup wizard for clarity
** 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
* [OP-1547] - Wrong DSM port in SetupWizard
* [OP-1549] - Fix Map version retrieval url
--- 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.

View File

@ -75,7 +75,7 @@ int32_t configuration_check()
bool navCapableFusion;
switch (revoFusion) {
case REVOSETTINGS_FUSIONALGORITHM_COMPLEMENTARYMAGGPSOUTDOOR:
case REVOSETTINGS_FUSIONALGORITHM_INS13GPSOUTDOOR:
case REVOSETTINGS_FUSIONALGORITHM_GPSNAVIGATIONINS13:
navCapableFusion = true;
break;
default:

View File

@ -382,7 +382,7 @@ static void StateEstimationCb(void)
if (fs.Armed == FLIGHTSTATUS_ARMED_DISARMED || fusionAlgorithm == FILTER_INIT_FORCE) {
const filterPipeline *newFilterChain;
switch (revoSettings.FusionAlgorithm) {
case REVOSETTINGS_FUSIONALGORITHM_COMPLEMENTARY:
case REVOSETTINGS_FUSIONALGORITHM_BASICCOMPLEMENTARY:
newFilterChain = cfQueue;
break;
case REVOSETTINGS_FUSIONALGORITHM_COMPLEMENTARYMAG:
@ -394,7 +394,7 @@ static void StateEstimationCb(void)
case REVOSETTINGS_FUSIONALGORITHM_INS13INDOOR:
newFilterChain = ekf13iQueue;
break;
case REVOSETTINGS_FUSIONALGORITHM_INS13GPSOUTDOOR:
case REVOSETTINGS_FUSIONALGORITHM_GPSNAVIGATIONINS13:
newFilterChain = ekf13Queue;
break;
default:

View File

@ -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.<BR>
* If NULL, 0xff (all-one) will be sent.
* \param[in] receive_buffer pointer to buffer which should get the received values.<BR>
* 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.<BR>
* If NULL, 0xff (all-one) will be sent.
* \param[in] receive_buffer pointer to buffer which should get the received values.<BR>
* 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.<BR>
* If NULL, 0xff (all-one) will be sent.
* \param[in] receive_buffer pointer to buffer which should get the received values.<BR>
* 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)

View File

@ -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

View File

@ -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:

View File

@ -49,8 +49,8 @@ Core::IUAVGadget *ConfigGadgetFactory::createGadget(QWidget *parent)
Core::Command *cmd = am->registerAction(new QAction(this), "ConfigPlugin.ShowInputWizard",
QList<int>() << 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);

View File

@ -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()

View File

@ -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<UAVObjectManager>();
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();

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>600</width>
<height>500</height>
<height>507</height>
</rect>
</property>
<property name="windowTitle">
@ -64,6 +64,356 @@
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>ESC Output Level</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>9</number>
</property>
<property name="rightMargin">
<number>9</number>
</property>
<property name="bottomMargin">
<number>9</number>
</property>
<item>
<widget class="QPushButton" name="outputLow">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>22</height>
</size>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>34</red>
<green>34</green>
<blue>200</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>6</red>
<green>6</green>
<blue>150</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>34</red>
<green>34</green>
<blue>200</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>6</red>
<green>6</green>
<blue>150</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>34</red>
<green>34</green>
<blue>200</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>6</red>
<green>6</green>
<blue>150</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>34</red>
<green>34</green>
<blue>200</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>6</red>
<green>6</green>
<blue>150</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>34</red>
<green>34</green>
<blue>200</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>6</red>
<green>6</green>
<blue>150</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="LinearGradientPattern">
<gradient startx="0.507000000000000" starty="0.000000000000000" endx="0.507000000000000" endy="0.772000000000000" type="LinearGradient" spread="ReflectSpread" coordinatemode="ObjectBoundingMode">
<gradientstop position="0.208955000000000">
<color alpha="255">
<red>34</red>
<green>34</green>
<blue>200</blue>
</color>
</gradientstop>
<gradientstop position="0.786070000000000">
<color alpha="255">
<red>6</red>
<green>6</green>
<blue>150</blue>
</color>
</gradientstop>
</gradient>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>159</red>
<green>158</green>
<blue>158</blue>
</color>
</brush>
</colorrole>
<colorrole role="Button">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>100</red>
<green>150</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Text">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>159</red>
<green>158</green>
<blue>158</blue>
</color>
</brush>
</colorrole>
<colorrole role="ButtonText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>159</red>
<green>158</green>
<blue>158</blue>
</color>
</brush>
</colorrole>
<colorrole role="Base">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>255</red>
<green>255</green>
<blue>255</blue>
</color>
</brush>
</colorrole>
<colorrole role="Window">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>242</red>
<green>241</green>
<blue>240</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="styleSheet">
<string notr="true">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;
}</string>
</property>
<property name="text">
<string>Low/Off</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="outputLevel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>N/A</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="outputHigh">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>22</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">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;
}</string>
</property>
<property name="text">
<string>High</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="topMargin">

View File

@ -727,7 +727,7 @@ void VehicleConfigurationHelper::applyManualControlDefaults()
case VehicleConfigurationSource::INPUT_DSMX10:
case VehicleConfigurationSource::INPUT_DSMX11:
case VehicleConfigurationSource::INPUT_DSM2:
channelType = ManualControlSettings::CHANNELGROUPS_DSMMAINPORT;
channelType = ManualControlSettings::CHANNELGROUPS_DSMFLEXIPORT;
break;
default:
break;

View File

@ -319,7 +319,6 @@ public:
{
return parent()->isKnown();
}
};
class DataObjectTreeItem : public ObjectTreeItem {

View File

@ -252,6 +252,9 @@ void ConfigTaskWidget::onAutopilotDisconnect()
// dynamic widgets don't recieve the connected signal. This should be called instead.
void ConfigTaskWidget::forceConnectedState()
{
if (m_objectUtilManager) {
m_currentBoardId = m_objectUtilManager->getBoardModel();
}
m_isConnected = true;
setDirty(false);
}

View File

@ -1,4 +1,4 @@
#
#
# Project: OpenPilot
# NSIS configuration file for OpenPilot GCS
# The OpenPilot Team, http://www.openpilot.org, Copyright (C) 2010-2013.
@ -72,7 +72,7 @@
VIAddVersionKey "Comments" "${INSTALLER_NAME}. ${BUILD_DESCRIPTION}"
VIAddVersionKey "CompanyName" "The OpenPilot Team, http://www.openpilot.org"
VIAddVersionKey "LegalTrademarks" "${PRODUCT_NAME} is a trademark of The OpenPilot Team"
VIAddVersionKey "LegalCopyright" "© 2010-2013 The OpenPilot Team"
VIAddVersionKey "LegalCopyright" "© 2010-2013 The OpenPilot Team"
VIAddVersionKey "FileDescription" "${INSTALLER_NAME}"
;--------------------------------
@ -93,7 +93,7 @@
;--------------------------------
; Branding
BrandingText "© 2010-2013 The OpenPilot Team, http://www.openpilot.org"
BrandingText "© 2010-2013 The OpenPilot Team, http://www.openpilot.org"
!define MUI_ICON "${NSIS_DATA_TREE}\resources\openpilot.ico"
!define MUI_HEADERIMAGE
@ -301,7 +301,7 @@ Section ; create uninstall info
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "UninstallString" '"$INSTDIR\Uninstall.exe"'
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "DisplayIcon" '"$INSTDIR\bin\openpilotgcs.exe"'
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "Publisher" "OpenPilot Team"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "DisplayVersion" "Italian Stallion"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "DisplayVersion" "Mini Me"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "URLInfoAbout" "http://www.openpilot.org"
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "HelpLink" "http://wiki.openpilot.org"
WriteRegDWORD HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenPilot" "EstimatedSize" 100600

View File

@ -1,7 +1,10 @@
<xml>
<object name="RevoSettings" singleinstance="true" settings="true" category="State">
<description>Settings for the revo to control the algorithm and what is updated</description>
<field name="FusionAlgorithm" units="" type="enum" elements="1" options="None,Complementary,Complementary+Mag,Complementary+Mag+GPSOutdoor,INS13Indoor,INS13GPSOutdoor" defaultvalue="Complementary"/>
<field name="FusionAlgorithm" units="" type="enum" elements="1"
options="None,Basic (Complementary),Complementary+Mag,Complementary+Mag+GPSOutdoor,INS13Indoor,GPS Navigation (INS13)"
limits="%NE:None:Complementary+Mag:Complementary+Mag+GPSOutdoor:INS13Indoor;"
defaultvalue="Complementary"/>
<!-- Low pass filter configuration to calculate offset of barometric altitude sensor.
Defaults: updates at 5 Hz, tau = 300s settle time, exp(-(1/f)/tau) ~= 0.9993335555062