diff --git a/WHATSNEW.txt b/WHATSNEW.txt index fb184e8b4..5bfddcace 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,3 +1,9 @@ +--- RELEASE-14.01-RC3 --- Cruising Ratt --- +this issue includes the following fixes to previous RC2: +OP-1088 OP-1141 OP-1166 OP-1187 OP-1191 OP-1195 OP-1211 OP-1218 + +Full list of bug fixed in this release is accessible here +http://progress.openpilot.org/issues/?filter=11361 --- RELEASE-14.01-RC2 --- Cruising Ratt --- This is the RC2 for the first 2014 software release. diff --git a/flight/modules/RadioComBridge/RadioComBridge.c b/flight/modules/RadioComBridge/RadioComBridge.c index 22341a771..7c1416e81 100644 --- a/flight/modules/RadioComBridge/RadioComBridge.c +++ b/flight/modules/RadioComBridge/RadioComBridge.c @@ -415,7 +415,11 @@ static void radioRxTask(__attribute__((unused)) void *parameters) // Send the data straight to the telemetry port. // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - PIOS_COM_SendBufferNonBlocking(PIOS_COM_TELEMETRY, serial_data, bytes_to_process); + int32_t ret = -2; + uint8_t count = 5; + while (count-- > 0 && ret < -1) { + ret = PIOS_COM_SendBufferNonBlocking(PIOS_COM_TELEMETRY, serial_data, bytes_to_process); + } } } } else { @@ -511,7 +515,11 @@ static void serialRxTask(__attribute__((unused)) void *parameters) // Send the data over the radio link. // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - PIOS_COM_SendBufferNonBlocking(PIOS_COM_RADIO, data->serialRxBuf, bytes_to_process); + int32_t ret = -2; + uint8_t count = 5; + while (count-- > 0 && ret < -1) { + PIOS_COM_SendBufferNonBlocking(PIOS_COM_RADIO, data->serialRxBuf, bytes_to_process); + } } } else { vTaskDelay(5); @@ -541,7 +549,11 @@ static int32_t UAVTalkSendHandler(uint8_t *buf, int32_t length) if (outputPort) { // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + ret = -2; + uint8_t count = 5; + while (count-- > 0 && ret < -1) { + ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + } } else { ret = -1; } @@ -567,7 +579,12 @@ static int32_t RadioSendHandler(uint8_t *buf, int32_t length) if (outputPort && PIOS_COM_Available(outputPort)) { // FIXME following call can fail (with -2 error code) if buffer is full // it is the caller responsibility to retry in such cases... - return PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + int32_t ret = -2; + uint8_t count = 5; + while (count-- > 0 && ret < -1) { + ret = PIOS_COM_SendBufferNonBlocking(outputPort, buf, length); + } + return ret; } else { return -1; } diff --git a/flight/pios/common/pios_com.c b/flight/pios/common/pios_com.c index a90d88e19..e5adc5b7c 100644 --- a/flight/pios/common/pios_com.c +++ b/flight/pios/common/pios_com.c @@ -51,6 +51,7 @@ struct pios_com_dev { #if defined(PIOS_INCLUDE_FREERTOS) xSemaphoreHandle tx_sem; xSemaphoreHandle rx_sem; + xSemaphoreHandle sendbuffer_sem; #endif bool has_rx; @@ -155,6 +156,9 @@ int32_t PIOS_COM_Init(uint32_t *com_id, const struct pios_com_driver *driver, ui #endif /* PIOS_INCLUDE_FREERTOS */ (com_dev->driver->bind_tx_cb)(lower_id, PIOS_COM_TxOutCallback, (uint32_t)com_dev); } +#if defined(PIOS_INCLUDE_FREERTOS) + com_dev->sendbuffer_sem = xSemaphoreCreateMutex(); +#endif /* PIOS_INCLUDE_FREERTOS */ *com_id = (uint32_t)com_dev; return 0; @@ -267,27 +271,11 @@ int32_t PIOS_COM_ChangeBaud(uint32_t com_id, uint32_t baud) return 0; } -/** - * Sends a package over given port - * \param[in] port COM port - * \param[in] buffer character buffer - * \param[in] len buffer length - * \return -1 if port not available - * \return -2 if non-blocking mode activated: buffer is full - * caller should retry until buffer is free again - * \return number of bytes transmitted on success - */ -int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, uint16_t len) + +static int32_t PIOS_COM_SendBufferNonBlockingInternal(struct pios_com_dev *com_dev, const uint8_t *buffer, uint16_t len) { - struct pios_com_dev *com_dev = (struct pios_com_dev *)com_id; - - if (!PIOS_COM_validate(com_dev)) { - /* Undefined COM port for this board (see pios_board.c) */ - return -1; - } - + PIOS_Assert(com_dev); PIOS_Assert(com_dev->has_tx); - if (com_dev->driver->available && !com_dev->driver->available(com_dev->lower_id)) { /* * Underlying device is down/unconnected. @@ -314,10 +302,42 @@ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, u fifoBuf_getUsed(&com_dev->tx)); } } - return bytes_into_fifo; } +/** + * Sends a package over given port + * \param[in] port COM port + * \param[in] buffer character buffer + * \param[in] len buffer length + * \return -1 if port not available + * \return -2 if non-blocking mode activated: buffer is full + * caller should retry until buffer is free again + * \return -3 another thread is already sending, caller should + * retry until com is available again + * \return number of bytes transmitted on success + */ +int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, uint16_t len) +{ + struct pios_com_dev *com_dev = (struct pios_com_dev *)com_id; + + if (!PIOS_COM_validate(com_dev)) { + /* Undefined COM port for this board (see pios_board.c) */ + return -1; + } +#if defined(PIOS_INCLUDE_FREERTOS) + if (xSemaphoreTake(com_dev->sendbuffer_sem, 0) != pdTRUE) { + return -3; + } +#endif /* PIOS_INCLUDE_FREERTOS */ + int32_t ret = PIOS_COM_SendBufferNonBlockingInternal(com_dev, buffer, len); +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ + return ret; +} + + /** * Sends a package over given port * (blocking function) @@ -325,6 +345,7 @@ int32_t PIOS_COM_SendBufferNonBlocking(uint32_t com_id, const uint8_t *buffer, u * \param[in] buffer character buffer * \param[in] len buffer length * \return -1 if port not available + * \return -2 if mutex can't be taken; * \return number of bytes transmitted on success */ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len) @@ -335,9 +356,12 @@ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len /* Undefined COM port for this board (see pios_board.c) */ return -1; } - PIOS_Assert(com_dev->has_tx); - +#if defined(PIOS_INCLUDE_FREERTOS) + if (xSemaphoreTake(com_dev->sendbuffer_sem, 0) != pdTRUE) { + return -2; + } +#endif /* PIOS_INCLUDE_FREERTOS */ uint32_t max_frag_len = fifoBuf_getSize(&com_dev->tx); uint32_t bytes_to_send = len; while (bytes_to_send) { @@ -348,13 +372,16 @@ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len } else { frag_size = bytes_to_send; } - int32_t rc = PIOS_COM_SendBufferNonBlocking(com_id, buffer, frag_size); + int32_t rc = PIOS_COM_SendBufferNonBlockingInternal(com_dev, buffer, frag_size); if (rc >= 0) { bytes_to_send -= rc; buffer += rc; } else { switch (rc) { case -1: +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ /* Device is invalid, this will never work */ return -1; @@ -367,17 +394,23 @@ int32_t PIOS_COM_SendBuffer(uint32_t com_id, const uint8_t *buffer, uint16_t len } #if defined(PIOS_INCLUDE_FREERTOS) if (xSemaphoreTake(com_dev->tx_sem, 5000) != pdTRUE) { + xSemaphoreGive(com_dev->sendbuffer_sem); return -3; } #endif continue; default: /* Unhandled return code */ +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ return rc; } } } - +#if defined(PIOS_INCLUDE_FREERTOS) + xSemaphoreGive(com_dev->sendbuffer_sem); +#endif /* PIOS_INCLUDE_FREERTOS */ return len; } diff --git a/flight/pios/common/pios_ms5611.c b/flight/pios/common/pios_ms5611.c index db8d16f1b..3268289b4 100644 --- a/flight/pios/common/pios_ms5611.c +++ b/flight/pios/common/pios_ms5611.c @@ -32,6 +32,7 @@ #ifdef PIOS_INCLUDE_MS5611 +#define POW2(x) (1 << x) // TODO: Clean this up. Getting around old constant. #define PIOS_MS5611_OVERSAMPLING oversampling @@ -166,7 +167,6 @@ uint32_t PIOS_MS5611_GetDelayUs() /** * Read the ADC conversion value (once ADC conversion has completed) - * \param[in] PresOrTemp BMP085_PRES_ADDR or BMP085_TEMP_ADDR * \return 0 if successfully read the ADC, -1 if failed */ int32_t PIOS_MS5611_ReadADC(void) @@ -190,9 +190,12 @@ int32_t PIOS_MS5611_ReadADC(void) } RawTemperature = (Data[0] << 16) | (Data[1] << 8) | Data[2]; - - deltaTemp = ((int32_t)RawTemperature) - (CalibData.C[4] << 8); - Temperature = 2000l + ((deltaTemp * CalibData.C[5]) >> 23); + // Difference between actual and reference temperature + // dT = D2 - TREF = D2 - C5 * 2^8 + deltaTemp = ((int32_t)RawTemperature) - (CalibData.C[4] * POW2(8)); + // Actual temperature (-40…85°C with 0.01°C resolution) + // TEMP = 20°C + dT * TEMPSENS = 2000 + dT * C6 / 2^23 + Temperature = 2000l + ((deltaTemp * CalibData.C[5]) / POW2(23)); } else { int64_t Offset; int64_t Sens; @@ -206,14 +209,22 @@ int32_t PIOS_MS5611_ReadADC(void) } // check if temperature is less than 20°C if (Temperature < 2000) { - Offset2 = 5 * (Temperature - 2000) >> 1; - Sens2 = Offset2 >> 1; + // Apply compensation + // T2 = dT^2 / 2^31 + // OFF2 = 5 ⋅ (TEMP – 2000)^2/2 + // SENS2 = 5 ⋅ (TEMP – 2000)^2/2^2 + + int64_t tcorr = (Temperature - 2000) * (Temperature - 2000); + Offset2 = (5 * tcorr) / 2; + Sens2 = (5 * tcorr) / 4; compensation_t2 = (deltaTemp * deltaTemp) >> 31; // Apply the "Very low temperature compensation" when temp is less than -15°C if (Temperature < -1500) { - int64_t tcorr = (Temperature + 1500) * (Temperature + 1500); - Offset2 += 7 * tcorr; - Sens2 += (11 * tcorr) >> 1; + // OFF2 = OFF2 + 7 ⋅ (TEMP + 1500)^2 + // SENS2 = SENS2 + 11 ⋅ (TEMP + 1500)^2 / 2 + int64_t tcorr2 = (Temperature + 1500) * (Temperature + 1500); + Offset2 += 7 * tcorr2; + Sens2 += (11 * tcorr2) / 2; } } else { compensation_t2 = 0; @@ -221,10 +232,15 @@ int32_t PIOS_MS5611_ReadADC(void) Sens2 = 0; } RawPressure = ((Data[0] << 16) | (Data[1] << 8) | Data[2]); - Offset = (((int64_t)CalibData.C[1]) << 16) + ((((int64_t)CalibData.C[3]) * deltaTemp) >> 7) - Offset2; - Sens = ((int64_t)CalibData.C[0]) << 15; - Sens = Sens + ((((int64_t)CalibData.C[2]) * deltaTemp) >> 8) - Sens2; - Pressure = (((((int64_t)RawPressure) * Sens) >> 21) - Offset) >> 15; + // Offset at actual temperature + // OFF = OFFT1 + TCO * dT = C2 * 2^16 + (C4 * dT) / 2^7 + Offset = ((int64_t)CalibData.C[1]) * POW2(16) + (((int64_t)CalibData.C[3]) * deltaTemp) / POW2(7) - Offset2; + // Sensitivity at actual temperature + // SENS = SENST1 + TCS * dT = C1 * 2^15 + (C3 * dT) / 2^8 + Sens = ((int64_t)CalibData.C[0]) * POW2(15) + (((int64_t)CalibData.C[2]) * deltaTemp) / POW2(8) - Sens2; + // Temperature compensated pressure (10…1200mbar with 0.01mbar resolution) + // P = D1 * SENS - OFF = (D1 * SENS / 2^21 - OFF) / 2^15 + Pressure = (((((int64_t)RawPressure) * Sens) / POW2(21)) - Offset) / POW2(15); } return 0; } diff --git a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss index 64ac641ab..863ad4f2f 100644 --- a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss +++ b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_linux.qss @@ -1,19 +1,5 @@ /* Linux styles */ -QGroupBox { - border: 1px solid gray; - border-radius: 5px; - margin-top: 1ex; - font-size: 11px; - font-weight: bold; -} - -QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - padding: 0 3px; -} - -MixerCurveWidget { - font-size: 12px; -} +QToolTip { + color: black; + } diff --git a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss index 55fa1b6c1..6a22ce96a 100644 --- a/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss +++ b/ground/openpilotgcs/share/openpilotgcs/stylesheets/default_macos.qss @@ -1,22 +1,2 @@ /* MacOS styles */ -QGroupBox { - border: 1px solid gray; - border-radius: 5px; - margin-top: 1ex; - font-size: 11px; - font-weight: bold; -} - -QGroupBox::title { - subcontrol-origin: margin; - subcontrol-position: top left; - padding: 0 3px; -} - -QTabWidget::pane { - margin: 1px, 1px, 1px, 1px; - border: 2px solid rgb(196, 196, 196); - border-radius: 5px; - padding: 0px; -} diff --git a/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts b/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts index 50d6a417e..90fe5dbca 100644 --- a/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts +++ b/ground/openpilotgcs/share/openpilotgcs/translations/openpilotgcs_fr.ts @@ -123,7 +123,7 @@ Core::Internal::MainWindow - + &File &Fichier @@ -148,12 +148,12 @@ &Aide - + OpenPilot GCS - + Ctrl+Shift+S Ctrl+Maj+S @@ -4123,9 +4123,8 @@ Le SNR du satellite est affiché au-dessus (en dBHz) Formulaire - Select aircraft type here - Sélectionner ici le type d'appareil + Sélectionner ici le type d'appareil @@ -4148,10 +4147,9 @@ Le SNR du satellite est affiché au-dessus (en dBHz) Paramètres de Mixage - Vehicle type: véhicule / appareil ? - Type de Véhicule : + Type de Véhicule : @@ -4261,7 +4259,6 @@ p, li { white-space: pre-wrap; } Enregistrer - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -4274,6 +4271,35 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</span></p></td></tr></table></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> +<tr> +<td style="border: none;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:14pt; font-weight:600; color:#ff0000;">LA MISE EN PLACE DE FEED FORWARD EXIGE DE LA PRUDENCE</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Attention : L'activation du réglage Feed Forward lancera tous les moteurs à mi-gaz, vous avez été averti !</span></p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Dans un premier temps retirez vos hélices, puis pour affiner assurez-vous que le châssis est maintenu bien en place. Portez des lunettes et protégez-vous le visage et le corps.</span></p></td></tr></table></body></html> + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> +<tr> +<td style="border: none;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:14pt; font-weight:600; color:#ff0000;">SETTING UP FEED FORWARD REQUIRES CAUTION</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</span></p></td></tr></table></body></html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> @@ -6808,6 +6834,16 @@ Applique et Enregistre tous les paramètres sur la SD Save Enregistrer + + + Output Channel Configuration + Configuration Canaux de Sortie + + + + Live Testing + Test en Temps Réel + outputChannelForm @@ -6882,15 +6918,19 @@ Applique et Enregistre tous les paramètres sur la SD Mode de sortie - Rev - Inv + Inv Maximum PWM value, beware of not overdriving your servo. Valeur maximum PWM, attention de respecter les limites de votre servo. + + + Reversed + Inversé + RevoSensorsWidget @@ -7015,7 +7055,6 @@ en utilisant le bouton spécifique de calibration en haut de l'écran. #1 : Calibration magnétomètre - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -7034,7 +7073,7 @@ p, li { white-space: pre-wrap; } <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">#3: Accelerometer bias calibration:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">This step will ensure that accelerometer bias is accurate. Place your airframe as horizontally as possible (use a spirit level if necessary), then press Start below and do not move your airframe at all until the end of the calibration.</span></p></td></tr></table></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> @@ -7216,6 +7255,45 @@ Une valeur de 0.00 désactive le filtre. Pas toucher ! + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> +<tr> +<td style="border: none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt; font-weight:600;">Help</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Step #1 and #2 are really necessary. Step #3 will help you achieve the best possible results.</span></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">#1: Multi-Point calibration:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">This calibration will compute the scale for all sensors on the INS. Press &quot;Start&quot; to begin calibration, and follow the instructions which will be displayed here. Note that your HomeLocation must be set first, including the local magnetic field vector (Be) and acceleration due to gravity (g_e).</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">#2: Sensor noise calibration:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">This calibration will compute sensor variance under standard conditions. You can leave your engines running at low to mid throttle to take their vibration into account before pressing &quot;Start&quot;.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">#3: Accelerometer bias calibration:</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">This step will ensure that accelerometer bias is accurate. Place your airframe as horizontally as possible (use a spirit level if necessary), then press Start below and do not move your airframe at all until the end of the calibration.</span></p></td></tr></table></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> +<tr> +<td style="border: none;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt; font-weight:600;">Help</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Les étapes #1 et #2 sont réellement nécessaires. L'étape #3 vous aidera à atteindre les meilleurs résultats possibles.</span></p> +<p align="center" style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">#1: Calibration Multipoints :</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Cette calibration va calculer l'amplitude de tous les capteurs de la carte. Appuyez sur &quot;Démarrer&quot; pour commencer l'étalonnage puis suivez les instructions qui sont affichées ici. Veuillez noter que votre position Home doit être définie en premier, ainsi que le vecteur de champ magnétique (Be) et l'accélération due à la gravité (g_e).</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">#2: Calibration du bruit des capteurs :</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Cette calibration calcule les variations des capteurs dans des conditions normales. Vous pouvez laisser les moteurs tourner au mini ou à mi-gaz pour tenir compte de leurs vibrations avant d'appuyer sur &quot;Démarrer&quot;.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">#3: Calibration de l'ajustement des Accéléromètres :</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Cette étape fera en sorte que l'ajustement des accéléromètres soit parfait. Veuillez placer l'appareil le plus horizontalement possible (utilisez un niveau à bulle si nécessaire), puis appuyez sur Démarrer ci-dessus et ne bougez pas du tout votre appareil jusqu'à la fin de l'étalonnage.</span></p></td></tr></table></body></html> + StabilizationWidget @@ -8246,6 +8324,31 @@ Useful if you have accidentally changed some settings. Pas toucher ! + + + Use Basic Configuration + Utiliser Configuration Basique + + + + Use Advanced Configuration + Utiliser Configuration Avancée + + + + <html><head/><body><p>How fast the vehicle should climb or descent to compensate a certain altitude difference. higher values could result in more accurate altitude hold but also more violent control actions, lower values are safer and ensure smoother flight. The default value should be fine for the majority of crafts.</p></body></html> + <html><head/><body><p>Détermine la vitesse à laquelle doit monter ou descendre le véhicule pour compenser une certaine différence d'altitude. Des valeurs plus élevées pourraient entraîner un maintien d'altitude plus précis mais aussi des réactions plus violentes, des valeurs inférieures sont plus sûres et donnent un vol plus doux. La valeur par défaut devrait être bonne pour la plupart des appareils.</p></body></html> + + + + <html><head/><body><p>How much the vehicle should throttle up or down to compensate or achieve a certain vertical speed. Higher values lead to more aggressive throttle changes and could lead to oscillations. This is the most likely candidate to change depending on the crafts engine thrust. Heavy craft with weak engines might require higher values.</p></body></html> + <html><head/><body><p>Détermine de combien le véhicule augmente ou diminue les gaz pour compenser ou atteindre une certaine vitesse verticale. Des valeurs plus élevées entraînent des variations de gaz plus agressives qui peuvent produire des oscillations. C'est le paramètre à changer en fonction de la poussée moteur de l'appareil. Des appareils chargés avec des moteurs faibles peuvent demander des valeurs plus élevées.</p></body></html> + + + + <html><head/><body><p>How fast the vehicle should adjust its neutral throttle estimation. Altitude assumes that when engaged the throttle is in the range required to hover. If the throttle is a lot higher or lower, it needs to adjust this &quot;throttle trim&quot; Higher values make it do this adjustment faster, but this could lead to ugly oscillations. Leave at default unless you know what you are doing.</p></body></html> + <html><head/><body><p>Détermine la vitesse à laquelle le véhicule doit ajuster son estimation de gaz au neutre. Le Maintien d'Altitude suppose que lorsque il est activé, il est la plage nécessaire pour se maintenir en l'air. Si les gaz est beaucoup plus élevé ou plus bas, il faut ajuster ce "trim". Des valeurs plus élevées peuvent lui permettre de faire cet ajustement plus rapidement mais cela pourrait conduire à des oscillations. A laisser par défaut, à moins de savoir ce que vous faites.</p></body></html> + TxPIDWidget @@ -8469,7 +8572,7 @@ uniquement lorsque le système est armé, sans désactiver le module. PID Bank - Banque PID + Banque PID @@ -8678,27 +8781,27 @@ uniquement lorsque le système est armé, sans désactiver le module. Armed state - + Disarmed - + Arming - + Armed - Armé + Channels - Canaux + Canaux @@ -10114,7 +10217,7 @@ automatiquement lorsque vous arrêtez une carte en fonctionnement. <html><head/><body><p>Reboot the board and clear its settings memory.</p><p> Useful if the board cannot boot properly.</p><p> Blue led starts blinking quick for 20-30 seconds than the board will start normally</p><p><br/></p><p>If telemetry is not running, select the link using the dropdown</p><p>menu on the right.</p><p>PLEASE NOTE: Supported with bootloader versions 4.0 and earlier</p></body></html> - <html><head/><body> + <html><head/><body> <p>Redémarre la carte et efface ses paramètres en mémoire.</p> <p>Utile si la carte n'arrive pas à booter correctement.</p> <p>La led Bleue clignote rapidement pendant 20-30 secondes lorsque la carte démarre normalement</p> @@ -10263,14 +10366,20 @@ p, li { white-space: pre-wrap; } + The tab you are leaving has unsaved changes,if you proceed they will be lost. +Do you still want to proceed? + L'onglet que vous quittez contient des modifications non sauvegardées, si vous continuez elles seront perdues. +Voulez-vous toujours continuer ? + + The tab you are leaving has unsaved changes,if you proceed they will be lost.Do you still want to proceed? - L'onglet que vous quittez contient des modifications non sauvegardées, si vous continuez elles seront perdues. Voulez-vous toujours continuer ? + L'onglet que vous quittez contient des modifications non sauvegardées, si vous continuez elles seront perdues. Voulez-vous toujours continuer ? ConfigInputWidget - + Arming Settings are now set to 'Always Disarmed' for your safety. Contexte : Onglet "Paramètres d'Armement" @@ -10497,7 +10606,7 @@ Bougez le manche %1. USB : OPLinkMini - + Connections: Connexions : @@ -10507,8 +10616,8 @@ Bougez le manche %1. Déconnecter - - + + Connect Connecter @@ -12345,9 +12454,8 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! Rx Défaillants - Remote Modems - Modems Distants + Modems Distants @@ -12365,9 +12473,8 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! Associer - Coord ID - ID Coord + ID Coord @@ -12445,9 +12552,8 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! Si coché, les données sont uniquement transmises du coordinateur vers le modem Rx. - One-Way Link - Liaison Unidirectionnelle + Liaison Unidirectionnelle @@ -12494,6 +12600,31 @@ Méfiez-vous de ne pas vous verrouiller l'accès ! PPM + + + OPLink configuration + + + + + One-Way + + + + + Remote modems + + + + + Coordinator ID + + + + + <html><head/><body><p>This is the coordinator id we currently are bound to.</p><p>To manually bind to a specific coordinator, just type</p><p>or paste its device id in this box and save.</p><p>The device must be rebooted for the binding to take place.</p></body></html> + + OsgEarthview @@ -13370,10 +13501,36 @@ p, li { white-space: pre-wrap; } ConfigPipXtremeWidget - + + + + + Unbind + + + + + + + + Bind + Associer + + + Unknown Inconnu + + + Information + + + + + To apply the changes when binding/unbinding the board must be rebooted or power cycled. + + ConfigStabilizationWidget @@ -13450,22 +13607,22 @@ p, li { white-space: pre-wrap; } Form - Formulaire + Formulaire Channel neutral - Neutre canal + Neutre canal Neutral - Neutre + Neutre Response time - Temps de réponse (RT) + Temps de réponse (RT) @@ -13475,52 +13632,52 @@ p, li { white-space: pre-wrap; } Channel values are inverted - Les valeurs du canal sont inversées + Les valeurs du canal sont inversées Reversed - Inversé + Inversé Channel function - Fonction canal + Fonction canal Function - Fonction + Fonction Channel type - Type canal + Type canal Type - Type + Type Channel number - Numéro canal + Numéro canal Number - Nombre + Numéro Channel min - Valeur mini canal + Valeur mini canal Min - Mini + Mini @@ -13531,12 +13688,12 @@ p, li { white-space: pre-wrap; } Channel max - Valeur maxi canal + Valeur maxi canal Max - Maxi + Maxi @@ -13548,7 +13705,7 @@ Warning: this is an expert mode feature, mostly used for aerial video camera control (airframe yaw and camera gimbal accessory channels). Too high values for main controls can cause undesirable effects and even lead to crash. Use with caution. - Filtrage optionnel du temps de réponse d'entrée. + Filtrage optionnel du temps de réponse d'entrée. Plage : 0-999ms; 0 désactive le filtre (défaut). @@ -13560,7 +13717,35 @@ et même conduire au crash. A utiliser avec prudence. Chan %1 - Canal %1 + Canal %1 + + + + ConfigVehicleTypeWidget + + + Multirotor + Multirotor + + + + Fixed Wing + Aile + + + + Helicopter + Hélicoptère + + + + Ground + Voiture + + + + Custom + Personnalisé diff --git a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro index 9e07bfca3..6338ebf5d 100644 --- a/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro +++ b/ground/openpilotgcs/share/openpilotgcs/translations/translations.pro @@ -71,22 +71,20 @@ qmfiles.CONFIG += no_check_exist INSTALLS += qmfiles #========= begin block copying qt_*.qm files ========== -win32 { - defineReplace(QtQmExists) { - for(lang,$$1) { - qm_file = $$[QT_INSTALL_TRANSLATIONS]/qt_$${lang}.qm - exists($$qm_file) : result += $$qm_file - } - return($$result) +defineReplace(QtQmExists) { + for(lang,$$1) { + qm_file = $$[QT_INSTALL_TRANSLATIONS]/qt_$${lang}.qm + exists($$qm_file) : result += $$qm_file } - QT_TRANSLATIONS = $$QtQmExists(LANGUAGES) - - copyQT_QMs.input = QT_TRANSLATIONS - copyQT_QMs.output = $$GCS_DATA_PATH/translations/${QMAKE_FILE_BASE}.qm - isEmpty(vcproj):copyQT_QMs.variable_out = PRE_TARGETDEPS - copyQT_QMs.commands = $(COPY_FILE) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT} - copyQT_QMs.name = Copy ${QMAKE_FILE_IN} - copyQT_QMs.CONFIG += no_link - QMAKE_EXTRA_COMPILERS += copyQT_QMs + return($$result) } +QT_TRANSLATIONS = $$QtQmExists(LANGUAGES) + +copyQT_QMs.input = QT_TRANSLATIONS +copyQT_QMs.output = $$GCS_DATA_PATH/translations/${QMAKE_FILE_BASE}.qm +isEmpty(vcproj):copyQT_QMs.variable_out = PRE_TARGETDEPS +copyQT_QMs.commands = $(COPY_FILE) ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT} +copyQT_QMs.name = Copy ${QMAKE_FILE_IN} +copyQT_QMs.CONFIG += no_link +QMAKE_EXTRA_COMPILERS += copyQT_QMs #========= end block copying qt_*.qm files ============ diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index da2f1898c..100a9f50a 100644 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -14,521 +14,695 @@ Form - - 12 + + 0 - - - - 0 - 0 - - - - - - - - 9 - - - - - - 0 - 0 - - - - - 75 - true - - - - Vehicle type: - - - - - - - - 0 - 0 - - - - - 50 - false - - - - Select aircraft type here - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 2 - 20 - - - - - - + - - - 0 + + + Qt::LeftToRight - - - true - - - Mixer Settings - - - - 9 - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 232 - 232 - 232 - - - - - - - 232 - 232 - 232 - - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - + + true + + + #vehicleTypeFrame{ + color: rgb(180, 180, 180); + margin-top: -1px; +} + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + 0 + + + true - - - - 0 - 0 - 832 - 461 - + + Mixer Settings + + + + 9 - - - 0 - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - QFrame::NoFrame - - - -1 + + 9 + + + 9 + + + 9 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 232 + 232 + 232 + + + + + + + 232 + 232 + 232 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + + + 0 + 0 + 820 + 478 + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + QFrame::NoFrame + + + -1 + + + + - - - + + + - - - - - - true - - - Feed Forward - - - - 0 - - - 0 - - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 255 - 255 - 255 - - - - - - - 232 - 232 - 232 - - - - - - - - - 232 - 232 - 232 - - - - - - - 232 - 232 - 232 - - - - - - - - QFrame::NoFrame - - - QFrame::Plain - - + + true - - - - 0 - 0 - 223 - 269 - + + Feed Forward + + + + 0 - - - 12 - - - - - Feed Forward Configuration + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 232 + 232 + 232 + + + + + + + 232 + 232 + 232 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + + + 0 + 0 + 271 + 307 + - - + + 12 - - - - - - Decel Time Constant - - - - - - - true - - - Qt::StrongFocus - - - When tuning: Slowly raise decel time from zero to just + + 12 + + + 12 + + + 12 + + + + + Feed Forward Configuration + + + + 12 + + + 12 + + + 12 + + + 12 + + + + + + + Decel Time Constant + + + + + + + true + + + Qt::StrongFocus + + + When tuning: Slowly raise decel time from zero to just under the level where the motor starts to undershoot its target speed when decelerating. Do it after accel time is setup. - - - 3 - - - 100.000000000000000 - - - 0.010000000000000 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Accel Time Constant - - - - - - - true - - - Qt::StrongFocus - - - In miliseconds. + + + 3 + + + 100.000000000000000 + + + 0.010000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Accel Time Constant + + + + + + + true + + + Qt::StrongFocus + + + In miliseconds. When tuning: Slowly raise accel time from zero to just under the level where the motor starts to overshoot its target speed. - - - 3 - - - 100.000000000000000 - - - 0.010000000000000 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - 16777215 - 16 - - - - 1000 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - true - - - - 0 - 32 - - - - Qt::StrongFocus - - - Overall level of feed forward (in percentage). - - - 100 - - - 1 - - - Qt::Horizontal - - - QSlider::NoTicks - - - - - - - - 0 - 32 - - - - Qt::StrongFocus - - - Limits how much the engines can accelerate or decelerate. + + + 3 + + + 100.000000000000000 + + + 0.010000000000000 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + 16777215 + 16 + + + + 1000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + true + + + + 0 + 32 + + + + Qt::StrongFocus + + + Overall level of feed forward (in percentage). + + + 100 + + + 1 + + + Qt::Horizontal + + + QSlider::NoTicks + + + + + + + + 0 + 32 + + + + Qt::StrongFocus + + + Limits how much the engines can accelerate or decelerate. In 'units per second', a sound default is 1000. - - - 500 - - - 2000 - - - 1000 - - - Qt::Horizontal - - - false - - - false - + + + 500 + + + 2000 + + + 1000 + + + Qt::Horizontal + + + false + + + false + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16 + + + + MaxAccel + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 30 + 0 + + + + 000 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + FeedForward + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + - - + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + Qt::StrongFocus + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> + + + + + + + + + + Qt::StrongFocus + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> + + + + + + + + + + Qt::StrongFocus + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> + + + Enable FF tuning + + + + + + + Qt::Horizontal + + + + 267 + 20 + + + + + + + + + - + 0 0 @@ -536,202 +710,53 @@ In 'units per second', a sound default is 1000. 0 - 0 + 40 - - - 16777215 - 16 - - - - MaxAccel - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 30 - 0 - - - - 000 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - FeedForward - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - 0 - - - - - Qt::Horizontal - - - - 267 - 20 - - - - - - - - Qt::StrongFocus - - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> - - - - - - - - - - Qt::StrongFocus - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> - - - - - - - - - - Qt::StrongFocus - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">Beware! Check </span><span style=" font-family:'Sans'; font-size:10pt; font-weight:600;">all three</span><span style=" font-family:'Sans'; font-size:10pt;"> checkboxes to test Feed Forward.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans'; font-size:10pt;">It will run only if your airframe armed.</span></p></body></html> - - - Enable FF tuning - - - - - - - Qt::Horizontal - - - - 267 - 20 - - - - - - - - - - - - 0 - 0 - - - - - 0 - 40 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> <tr> <td style="border: none;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:14pt; font-weight:600; color:#ff0000;">SETTING UP FEED FORWARD REQUIRES CAUTION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</span></p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</span></p></td></tr></table></body></html> - + + + + - - - + + + - - - + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 9 + + + + @@ -809,6 +834,14 @@ p, li { white-space: pre-wrap; } + + + QTabBar + QWidget +
qtabbar.h
+ 1 +
+
diff --git a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui index 5b78247b4..c2b90e525 100644 --- a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui @@ -42,7 +42,16 @@ Camera Stabilization - + + 0 + + + 0 + + + 0 + + 0 @@ -64,15 +73,24 @@ 0 0 - 762 - 658 + 750 + 729 12 - + + 12 + + + 12 + + + 12 + + 12 @@ -1358,6 +1376,37 @@ The same value is used for all axes. + + + + + 0 + 50 + + + + + 16777215 + 16777215 + + + + Messages + + + + + + false + + + + + + + + + @@ -1379,37 +1428,6 @@ The same value is used for all axes. - - - - - 0 - 50 - - - - - 16777215 - 16777215 - - - - Messages - - - - - - false - - - - - - - - - diff --git a/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui b/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui index 1f01e9625..a5d9d9a83 100644 --- a/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui +++ b/ground/openpilotgcs/src/plugins/config/cc_hw_settings.ui @@ -14,9 +14,6 @@ Form - - 12 - @@ -27,7 +24,16 @@ HW settings - + + 0 + + + 0 + + + 0 + + 0 @@ -110,12 +116,21 @@ 0 0 - 616 - 513 + 624 + 516 - + + 12 + + + 12 + + + 12 + + 12 @@ -627,7 +642,6 @@ Beware of not locking yourself out! - diff --git a/ground/openpilotgcs/src/plugins/config/ccattitude.ui b/ground/openpilotgcs/src/plugins/config/ccattitude.ui index f515dfaa0..4a8bc7535 100644 --- a/ground/openpilotgcs/src/plugins/config/ccattitude.ui +++ b/ground/openpilotgcs/src/plugins/config/ccattitude.ui @@ -14,9 +14,6 @@ Form - - 12 - @@ -27,7 +24,16 @@ Attitude - + + 0 + + + 0 + + + 0 + + 0 @@ -110,12 +116,21 @@ 0 0 - 750 - 483 + 758 + 486 - + + 12 + + + 12 + + + 12 + + 12 diff --git a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp index 6e932e870..4ae81eb08 100644 --- a/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configgadgetwidget.cpp @@ -250,7 +250,7 @@ void ConfigGadgetWidget::tabAboutToChange(int i, bool *proceed) } if (wid->isDirty()) { int ans = QMessageBox::warning(this, tr("Unsaved changes"), tr("The tab you are leaving has unsaved changes," - "if you proceed they will be lost." + "if you proceed they will be lost.\n" "Do you still want to proceed?"), QMessageBox::Yes, QMessageBox::No); if (ans == QMessageBox::No) { *proceed = false; diff --git a/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp b/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp index 526355308..ecd7ec93f 100644 --- a/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configinputwidget.cpp @@ -83,12 +83,13 @@ ConfigInputWidget::ConfigInputWidget(QWidget *parent) : InputChannelForm *inpForm = new InputChannelForm(this, index == 0); ui->channelSettings->layout()->addWidget(inpForm); // Add the row to the UI inpForm->setName(name); - addWidgetBinding("ManualControlSettings", "ChannelGroups", inpForm->ui->channelGroup, index); - addWidgetBinding("ManualControlSettings", "ChannelNumber", inpForm->ui->channelNumber, index); - // The order of the following three binding calls is important. Since the values will be populated + // The order of the following binding calls is important. Since the values will be populated // in reverse order of the binding order otherwise the 'Reversed' logic will floor the neutral value - // to the max value ( which is smaller than the neutral value when reversed ) + // to the max value ( which is smaller than the neutral value when reversed ) and the channel number + // will not be set correctly. + addWidgetBinding("ManualControlSettings", "ChannelNumber", inpForm->ui->channelNumber, index); + addWidgetBinding("ManualControlSettings", "ChannelGroups", inpForm->ui->channelGroup, index); addWidgetBinding("ManualControlSettings", "ChannelNeutral", inpForm->ui->channelNeutral, index); addWidgetBinding("ManualControlSettings", "ChannelNeutral", inpForm->ui->neutralValue, index); addWidgetBinding("ManualControlSettings", "ChannelMin", inpForm->ui->channelMin, index); diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp index 494cce35b..6595b6366 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.cpp @@ -30,6 +30,7 @@ #include #include #include +#include ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget(parent) { @@ -40,19 +41,14 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager *objManager = pm->getObject(); oplinkStatusObj = dynamic_cast(objManager->getObject("OPLinkStatus")); - if (oplinkStatusObj != NULL) { - connect(oplinkStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateStatus(UAVObject *))); - } else { - qDebug() << "Error: Object is unknown (OPLinkStatus)."; - } + Q_ASSERT(oplinkStatusObj); + connect(oplinkStatusObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateStatus(UAVObject *))); // Connect to the OPLinkSettings object updates oplinkSettingsObj = dynamic_cast(objManager->getObject("OPLinkSettings")); - if (oplinkSettingsObj != NULL) { - connect(oplinkSettingsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateSettings(UAVObject *))); - } else { - qDebug() << "Error: Object is unknown (OPLinkSettings)."; - } + Q_ASSERT(oplinkSettingsObj); + connect(oplinkSettingsObj, SIGNAL(objectUpdated(UAVObject *)), this, SLOT(updateSettings(UAVObject *))); + Core::Internal::GeneralSettings *settings = pm->getObject(); if (!settings->useExpertMode()) { m_oplink->Apply->setVisible(false); @@ -62,7 +58,6 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget addWidgetBinding("OPLinkSettings", "MainPort", m_oplink->MainPort); addWidgetBinding("OPLinkSettings", "FlexiPort", m_oplink->FlexiPort); addWidgetBinding("OPLinkSettings", "VCPPort", m_oplink->VCPPort); - addWidgetBinding("OPLinkSettings", "ComSpeed", m_oplink->ComSpeed); addWidgetBinding("OPLinkSettings", "MaxRFPower", m_oplink->MaxRFTxPower); addWidgetBinding("OPLinkSettings", "MinChannel", m_oplink->MinimumChannel); addWidgetBinding("OPLinkSettings", "MaxChannel", m_oplink->MaximumChannel); @@ -72,6 +67,7 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget addWidgetBinding("OPLinkSettings", "OneWay", m_oplink->OneWayLink); addWidgetBinding("OPLinkSettings", "PPMOnly", m_oplink->PPMOnly); addWidgetBinding("OPLinkSettings", "PPM", m_oplink->PPM); + addWidgetBinding("OPLinkSettings", "ComSpeed", m_oplink->ComSpeed); addWidgetBinding("OPLinkStatus", "DeviceID", m_oplink->DeviceID); addWidgetBinding("OPLinkStatus", "RxGood", m_oplink->Good); @@ -94,27 +90,19 @@ ConfigPipXtremeWidget::ConfigPipXtremeWidget(QWidget *parent) : ConfigTaskWidget addWidgetBinding("OPLinkStatus", "TXRate", m_oplink->TXRate); // Connect the bind buttons - connect(m_oplink->Bind1, SIGNAL(clicked()), this, SLOT(bind1())); - connect(m_oplink->Bind2, SIGNAL(clicked()), this, SLOT(bind2())); - connect(m_oplink->Bind3, SIGNAL(clicked()), this, SLOT(bind3())); - connect(m_oplink->Bind4, SIGNAL(clicked()), this, SLOT(bind3())); + connect(m_oplink->Bind1, SIGNAL(clicked()), this, SLOT(bind())); + connect(m_oplink->Bind2, SIGNAL(clicked()), this, SLOT(bind())); + connect(m_oplink->Bind3, SIGNAL(clicked()), this, SLOT(bind())); + connect(m_oplink->Bind4, SIGNAL(clicked()), this, SLOT(bind())); // Connect the selection changed signals. - connect(m_oplink->PPMOnly, SIGNAL(toggled(bool)), this, SLOT(ppmOnlyToggled(bool))); - connect(m_oplink->ComSpeed, SIGNAL(currentIndexChanged(int)), this, SLOT(comSpeedChanged(int))); - - ppmOnlyToggled(m_oplink->PPMOnly->isChecked()); - - // Add scroll bar when necessary - QScrollArea *scroll = new QScrollArea; - scroll->setWidget(m_oplink->frame_3); - scroll->setWidgetResizable(true); - m_oplink->verticalLayout_3->addWidget(scroll); + connect(m_oplink->PPMOnly, SIGNAL(toggled(bool)), this, SLOT(ppmOnlyChanged())); // Request and update of the setting object. settingsUpdated = false; autoLoadWidgets(); disableMouseWheelEvents(); + updateEnableControls(); } ConfigPipXtremeWidget::~ConfigPipXtremeWidget() @@ -130,101 +118,102 @@ void ConfigPipXtremeWidget::updateStatus(UAVObject *object) oplinkSettingsObj->requestUpdate(); } + // Update the link state + UAVObjectField *linkField = object->getField("LinkState"); + m_oplink->LinkState->setText(linkField->getValue().toString()); + bool linkConnected = (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_CONNECTED)); + bool modemEnabled = linkConnected || (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_DISCONNECTED)) || + (linkField->getValue() == linkField->getOptions().at(OPLinkStatus::LINKSTATE_ENABLED)); + + UAVObjectField *pairRssiField = object->getField("PairSignalStrengths"); + + bool bound; + bool ok; + quint32 boundPairId = m_oplink->CoordID->text().toUInt(&ok, 16); + // Update the detected devices. UAVObjectField *pairIdField = object->getField("PairIDs"); - if (pairIdField) { - quint32 pairid1 = pairIdField->getValue(0).toUInt(); - m_oplink->PairID1->setText(QString::number(pairid1, 16).toUpper()); - m_oplink->PairID1->setEnabled(false); - m_oplink->Bind1->setEnabled(pairid1); - quint32 pairid2 = pairIdField->getValue(1).toUInt(); - m_oplink->PairID2->setText(QString::number(pairIdField->getValue(1).toUInt(), 16).toUpper()); - m_oplink->PairID2->setEnabled(false); - m_oplink->Bind2->setEnabled(pairid2); - quint32 pairid3 = pairIdField->getValue(2).toUInt(); - m_oplink->PairID3->setText(QString::number(pairIdField->getValue(2).toUInt(), 16).toUpper()); - m_oplink->PairID3->setEnabled(false); - m_oplink->Bind3->setEnabled(pairid3); - quint32 pairid4 = pairIdField->getValue(3).toUInt(); - m_oplink->PairID4->setText(QString::number(pairIdField->getValue(3).toUInt(), 16).toUpper()); - m_oplink->PairID4->setEnabled(false); - m_oplink->Bind4->setEnabled(pairid4); - } else { - qDebug() << "ConfigPipXtremeWidget: Count not read PairID field."; - } - UAVObjectField *pairRssiField = object->getField("PairSignalStrengths"); - if (pairRssiField) { - m_oplink->PairSignalStrengthBar1->setValue(pairRssiField->getValue(0).toInt()); - m_oplink->PairSignalStrengthBar2->setValue(pairRssiField->getValue(1).toInt()); - m_oplink->PairSignalStrengthBar3->setValue(pairRssiField->getValue(2).toInt()); - m_oplink->PairSignalStrengthBar4->setValue(pairRssiField->getValue(3).toInt()); - m_oplink->PairSignalStrengthLabel1->setText(QString("%1dB").arg(pairRssiField->getValue(0).toInt())); - m_oplink->PairSignalStrengthLabel2->setText(QString("%1dB").arg(pairRssiField->getValue(1).toInt())); - m_oplink->PairSignalStrengthLabel3->setText(QString("%1dB").arg(pairRssiField->getValue(2).toInt())); - m_oplink->PairSignalStrengthLabel4->setText(QString("%1dB").arg(pairRssiField->getValue(3).toInt())); - } else { - qDebug() << "ConfigPipXtremeWidget: Count not read PairID field."; - } + quint32 pairid = pairIdField->getValue(0).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID1->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID1->setEnabled(false); + m_oplink->Bind1->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind1->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar1->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(0).toInt()); + m_oplink->PairSignalStrengthLabel1->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar1->value())); + + pairid = pairIdField->getValue(1).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID2->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID2->setEnabled(false); + m_oplink->Bind2->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind2->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar2->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(1).toInt()); + m_oplink->PairSignalStrengthLabel2->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar2->value())); + + pairid = pairIdField->getValue(2).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID3->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID3->setEnabled(false); + m_oplink->Bind3->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind3->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar3->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(2).toInt()); + m_oplink->PairSignalStrengthLabel3->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar3->value())); + + pairid = pairIdField->getValue(3).toUInt(); + bound = (pairid == boundPairId); + m_oplink->PairID4->setText(QString::number(pairid, 16).toUpper()); + m_oplink->PairID4->setEnabled(false); + m_oplink->Bind4->setText(bound ? tr("Unbind") : tr("Bind")); + m_oplink->Bind4->setEnabled(pairid && modemEnabled); + m_oplink->PairSignalStrengthBar4->setValue(((bound && !linkConnected) || !modemEnabled) ? -127 : pairRssiField->getValue(3).toInt()); + m_oplink->PairSignalStrengthLabel4->setText(QString("%1dB").arg(m_oplink->PairSignalStrengthBar4->value())); // Update the Description field // TODO use UAVObjectUtilManager::descriptionToStructure() UAVObjectField *descField = object->getField("Description"); - if (descField) { - if (descField->getValue(0) != QChar(255)) { - /* - * This looks like a binary with a description at the end: - * 4 bytes: header: "OpFw". - * 4 bytes: GIT commit tag (short version of SHA1). - * 4 bytes: Unix timestamp of compile time. - * 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files. - * 26 bytes: commit tag if it is there, otherwise branch name. '-dirty' may be added if needed. Zero-padded. - * 20 bytes: SHA1 sum of the firmware. - * 20 bytes: SHA1 sum of the uavo definitions. - * 20 bytes: free for now. - */ - char buf[OPLinkStatus::DESCRIPTION_NUMELEM]; - for (unsigned int i = 0; i < 26; ++i) { - buf[i] = descField->getValue(i + 14).toChar().toLatin1(); - } - buf[26] = '\0'; - QString descstr(buf); - quint32 gitDate = descField->getValue(11).toChar().toLatin1() & 0xFF; - for (int i = 1; i < 4; i++) { - gitDate = gitDate << 8; - gitDate += descField->getValue(11 - i).toChar().toLatin1() & 0xFF; - } - QString date = QDateTime::fromTime_t(gitDate).toUTC().toString("yyyy-MM-dd HH:mm"); - m_oplink->FirmwareVersion->setText(descstr + " " + date); - } else { - m_oplink->FirmwareVersion->setText(tr("Unknown")); + if (descField->getValue(0) != QChar(255)) { + /* + * This looks like a binary with a description at the end: + * 4 bytes: header: "OpFw". + * 4 bytes: GIT commit tag (short version of SHA1). + * 4 bytes: Unix timestamp of compile time. + * 2 bytes: target platform. Should follow same rule as BOARD_TYPE and BOARD_REVISION in board define files. + * 26 bytes: commit tag if it is there, otherwise branch name. '-dirty' may be added if needed. Zero-padded. + * 20 bytes: SHA1 sum of the firmware. + * 20 bytes: SHA1 sum of the uavo definitions. + * 20 bytes: free for now. + */ + char buf[OPLinkStatus::DESCRIPTION_NUMELEM]; + for (unsigned int i = 0; i < 26; ++i) { + buf[i] = descField->getValue(i + 14).toChar().toLatin1(); } + buf[26] = '\0'; + QString descstr(buf); + quint32 gitDate = descField->getValue(11).toChar().toLatin1() & 0xFF; + for (int i = 1; i < 4; i++) { + gitDate = gitDate << 8; + gitDate += descField->getValue(11 - i).toChar().toLatin1() & 0xFF; + } + QString date = QDateTime::fromTime_t(gitDate).toUTC().toString("yyyy-MM-dd HH:mm"); + m_oplink->FirmwareVersion->setText(descstr + " " + date); } else { - qDebug() << "ConfigPipXtremeWidget: Failed to read Description field."; + m_oplink->FirmwareVersion->setText(tr("Unknown")); } // Update the serial number field UAVObjectField *serialField = object->getField("CPUSerial"); - if (serialField) { - char buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2 + 1]; - for (unsigned int i = 0; i < OPLinkStatus::CPUSERIAL_NUMELEM; ++i) { - unsigned char val = serialField->getValue(i).toUInt() >> 4; - buf[i * 2] = ((val < 10) ? '0' : '7') + val; - val = serialField->getValue(i).toUInt() & 0xf; - buf[i * 2 + 1] = ((val < 10) ? '0' : '7') + val; - } - buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2] = '\0'; - m_oplink->SerialNumber->setText(buf); - } else { - qDebug() << "ConfigPipXtremeWidget: Failed to read CPUSerial field."; + char buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2 + 1]; + for (unsigned int i = 0; i < OPLinkStatus::CPUSERIAL_NUMELEM; ++i) { + unsigned char val = serialField->getValue(i).toUInt() >> 4; + buf[i * 2] = ((val < 10) ? '0' : '7') + val; + val = serialField->getValue(i).toUInt() & 0xf; + buf[i * 2 + 1] = ((val < 10) ? '0' : '7') + val; } + buf[OPLinkStatus::CPUSERIAL_NUMELEM * 2] = '\0'; + m_oplink->SerialNumber->setText(buf); - // Update the link state - UAVObjectField *linkField = object->getField("LinkState"); - if (linkField) { - m_oplink->LinkState->setText(linkField->getValue().toString()); - } else { - qDebug() << "ConfigPipXtremeWidget: Failed to read LinkState field."; - } + updateEnableControls(); } /*! @@ -239,124 +228,94 @@ void ConfigPipXtremeWidget::updateSettings(UAVObject *object) // Enable components based on the board type connected. UAVObjectField *board_type_field = oplinkStatusObj->getField("BoardType"); - if (board_type_field) { - switch (board_type_field->getValue().toInt()) { - case 0x09: // Revolution - m_oplink->MainPort->setVisible(false); - m_oplink->MainPortLabel->setVisible(false); - m_oplink->FlexiPort->setVisible(false); - m_oplink->FlexiPortLabel->setVisible(false); - m_oplink->VCPPort->setVisible(false); - m_oplink->VCPPortLabel->setVisible(false); - m_oplink->FlexiIOPort->setVisible(false); - m_oplink->FlexiIOPortLabel->setVisible(false); - m_oplink->PPM->setVisible(true); - break; - case 0x03: // OPLinkMini - m_oplink->MainPort->setVisible(true); - m_oplink->MainPortLabel->setVisible(true); - m_oplink->FlexiPort->setVisible(true); - m_oplink->FlexiPortLabel->setVisible(true); - m_oplink->VCPPort->setVisible(true); - m_oplink->VCPPortLabel->setVisible(true); - m_oplink->FlexiIOPort->setVisible(false); - m_oplink->FlexiIOPortLabel->setVisible(false); - m_oplink->PPM->setVisible(false); - break; - case 0x0A: - m_oplink->MainPort->setVisible(true); - m_oplink->MainPortLabel->setVisible(true); - m_oplink->FlexiPort->setVisible(true); - m_oplink->FlexiPortLabel->setVisible(true); - m_oplink->VCPPort->setVisible(true); - m_oplink->VCPPortLabel->setVisible(true); - m_oplink->FlexiIOPort->setVisible(true); - m_oplink->FlexiIOPortLabel->setVisible(true); - m_oplink->PPM->setVisible(false); - break; - default: - // This shouldn't happen. - break; - } - } else { - qDebug() << "BoardType not found."; + switch (board_type_field->getValue().toInt()) { + case 0x09: // Revolution + m_oplink->MainPort->setVisible(false); + m_oplink->MainPortLabel->setVisible(false); + m_oplink->FlexiPort->setVisible(false); + m_oplink->FlexiPortLabel->setVisible(false); + m_oplink->VCPPort->setVisible(false); + m_oplink->VCPPortLabel->setVisible(false); + m_oplink->FlexiIOPort->setVisible(false); + m_oplink->FlexiIOPortLabel->setVisible(false); + m_oplink->PPM->setVisible(true); + break; + case 0x03: // OPLinkMini + m_oplink->MainPort->setVisible(true); + m_oplink->MainPortLabel->setVisible(true); + m_oplink->FlexiPort->setVisible(true); + m_oplink->FlexiPortLabel->setVisible(true); + m_oplink->VCPPort->setVisible(true); + m_oplink->VCPPortLabel->setVisible(true); + m_oplink->FlexiIOPort->setVisible(false); + m_oplink->FlexiIOPortLabel->setVisible(false); + m_oplink->PPM->setVisible(false); + break; + case 0x0A: // OPLink? + m_oplink->MainPort->setVisible(true); + m_oplink->MainPortLabel->setVisible(true); + m_oplink->FlexiPort->setVisible(true); + m_oplink->FlexiPortLabel->setVisible(true); + m_oplink->VCPPort->setVisible(true); + m_oplink->VCPPortLabel->setVisible(true); + m_oplink->FlexiIOPort->setVisible(true); + m_oplink->FlexiIOPortLabel->setVisible(true); + m_oplink->PPM->setVisible(false); + break; + default: + // This shouldn't happen. + break; } - - // Enable the push buttons. - enableControls(true); + updateEnableControls(); } } +void ConfigPipXtremeWidget::updateEnableControls() +{ + enableControls(true); + ppmOnlyChanged(); +} + void ConfigPipXtremeWidget::disconnected() { if (settingsUpdated) { settingsUpdated = false; - - // Enable the push buttons. - enableControls(false); } } -void ConfigPipXtremeWidget::SetPairID(QLineEdit *pairIdWidget) +void ConfigPipXtremeWidget::bind() { - // Get the pair ID out of the selection widget - quint32 pairID = 0; - bool okay; + QPushButton *bindButton = qobject_cast(sender()); - pairID = pairIdWidget->text().toUInt(&okay, 16); - - // Store the ID in the coord ID field. - m_oplink->CoordID->setText(QString::number(pairID, 16).toUpper()); -} - -void ConfigPipXtremeWidget::bind1() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::bind2() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::bind3() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::bind4() -{ - SetPairID(m_oplink->PairID1); -} - -void ConfigPipXtremeWidget::ppmOnlyToggled(bool on) -{ - if (on) { - m_oplink->PPM->setEnabled(false); - m_oplink->OneWayLink->setEnabled(false); - m_oplink->ComSpeed->setEnabled(false); - } else { - m_oplink->PPM->setEnabled(true); - m_oplink->OneWayLink->setEnabled(true); - m_oplink->ComSpeed->setEnabled(true); - // Change the comspeed from 4800 of PPM only is turned off. - if (m_oplink->ComSpeed->currentIndex() == OPLinkSettings::COMSPEED_4800) { - m_oplink->ComSpeed->setCurrentIndex(OPLinkSettings::COMSPEED_9600); + if (bindButton) { + QLineEdit *editField = NULL; + if (bindButton == m_oplink->Bind1) { + editField = m_oplink->PairID1; + } else if (bindButton == m_oplink->Bind2) { + editField = m_oplink->PairID2; + } else if (bindButton == m_oplink->Bind3) { + editField = m_oplink->PairID3; + } else if (bindButton == m_oplink->Bind4) { + editField = m_oplink->PairID4; } + Q_ASSERT(editField); + bool ok; + quint32 pairid = editField->text().toUInt(&ok, 16); + if (ok) { + quint32 boundPairId = m_oplink->CoordID->text().toUInt(&ok, 16); + (pairid != boundPairId) ? m_oplink->CoordID->setText(QString::number(pairid, 16).toUpper()) : m_oplink->CoordID->setText("0"); + } + QMessageBox::information(this, tr("Information"), tr("To apply the changes when binding/unbinding the board must be rebooted or power cycled."), QMessageBox::Ok); } } -void ConfigPipXtremeWidget::comSpeedChanged(int index) +void ConfigPipXtremeWidget::ppmOnlyChanged() { - qDebug() << "comSpeedChanged: " << index; - switch (index) { - case OPLinkSettings::COMSPEED_4800: - m_oplink->PPMOnly->setChecked(true); - break; - default: - m_oplink->PPMOnly->setChecked(false); - break; - } + bool is_ppm_only = m_oplink->PPMOnly->isChecked(); + + m_oplink->PPM->setEnabled(!is_ppm_only); + m_oplink->OneWayLink->setEnabled(!is_ppm_only); + m_oplink->ComSpeed->setEnabled(!is_ppm_only); } /** diff --git a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h index 4b5493103..986f7c7bd 100644 --- a/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configpipxtremewidget.h @@ -55,16 +55,13 @@ private: // Are the settings current? bool settingsUpdated; - void SetPairID(QLineEdit *pairIdWidget); +protected: + void updateEnableControls(); private slots: void disconnected(); - void bind1(); - void bind2(); - void bind3(); - void bind4(); - void ppmOnlyToggled(bool toggled); - void comSpeedChanged(int index); + void bind(); + void ppmOnlyChanged(); }; #endif // CONFIGTXPIDWIDGET_H diff --git a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp index 5fae05678..951f94550 100644 --- a/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configstabilizationwidget.cpp @@ -117,9 +117,11 @@ ConfigStabilizationWidget::ConfigStabilizationWidget(QWidget *parent) : ConfigTa addWidget(ui->pushButton_23); addWidget(ui->basicResponsivenessGroupBox); - connect(ui->basicResponsivenessGroupBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); + addWidget(ui->basicResponsivenessCheckBox); + connect(ui->basicResponsivenessCheckBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); addWidget(ui->advancedResponsivenessGroupBox); - connect(ui->advancedResponsivenessGroupBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); + addWidget(ui->advancedResponsivenessCheckBox); + connect(ui->advancedResponsivenessCheckBox, SIGNAL(toggled(bool)), this, SLOT(linkCheckBoxes(bool))); connect(this, SIGNAL(widgetContentsChanged(QWidget *)), this, SLOT(processLinkedWidgets(QWidget *))); @@ -138,7 +140,7 @@ void ConfigStabilizationWidget::refreshWidgetsValues(UAVObject *o) { ConfigTaskWidget::refreshWidgetsValues(o); - ui->basicResponsivenessGroupBox->setChecked(ui->rateRollKp_3->value() == ui->ratePitchKp_4->value() && + ui->basicResponsivenessCheckBox->setChecked(ui->rateRollKp_3->value() == ui->ratePitchKp_4->value() && ui->rateRollKi_3->value() == ui->ratePitchKi_4->value()); } @@ -169,14 +171,18 @@ void ConfigStabilizationWidget::linkCheckBoxes(bool value) ui->checkBox_2->setChecked(value); } else if (sender() == ui->checkBox_2) { ui->checkBox_8->setChecked(value); - } else if (sender() == ui->basicResponsivenessGroupBox) { - ui->advancedResponsivenessGroupBox->setChecked(!value); + } else if (sender() == ui->basicResponsivenessCheckBox) { + ui->advancedResponsivenessCheckBox->setChecked(!value); + ui->basicResponsivenessControls->setEnabled(value); + ui->advancedResponsivenessControls->setEnabled(!value); if (value) { processLinkedWidgets(ui->AttitudeResponsivenessSlider); processLinkedWidgets(ui->RateResponsivenessSlider); } - } else if (sender() == ui->advancedResponsivenessGroupBox) { - ui->basicResponsivenessGroupBox->setChecked(!value); + } else if (sender() == ui->advancedResponsivenessCheckBox) { + ui->basicResponsivenessCheckBox->setChecked(!value); + ui->basicResponsivenessControls->setEnabled(!value); + ui->advancedResponsivenessControls->setEnabled(value); } } @@ -218,7 +224,7 @@ void ConfigStabilizationWidget::processLinkedWidgets(QWidget *widget) } } - if (ui->basicResponsivenessGroupBox->isChecked()) { + if (ui->basicResponsivenessCheckBox->isChecked()) { if (widget == ui->AttitudeResponsivenessSlider) { ui->ratePitchKp_4->setValue(ui->AttitudeResponsivenessSlider->value()); } else if (widget == ui->RateResponsivenessSlider) { diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp index 0d6d4ee05..8a49d6421 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp @@ -122,18 +122,18 @@ ConfigVehicleTypeWidget::ConfigVehicleTypeWidget(QWidget *parent) : ConfigTaskWi addUAVObject("MixerSettings"); addUAVObject("ActuatorSettings"); - ffTuningInProgress = false; - ffTuningPhase = false; + m_ffTuningInProgress = false; + m_ffTuningPhase = false; - QStringList airframeTypes; - airframeTypes << "Fixed Wing" << "Multirotor" << "Helicopter" << "Ground" << "Custom"; - m_aircraft->aircraftType->addItems(airframeTypes); - - // Set default vehicle to MultiRotor - // m_aircraft->aircraftType->setCurrentIndex(3); + // The order of the tabs is important since they correspond with the AirframCategory enum + m_aircraft->aircraftType->addTab(tr("Multirotor")); + m_aircraft->aircraftType->addTab(tr("Fixed Wing")); + m_aircraft->aircraftType->addTab(tr("Helicopter")); + m_aircraft->aircraftType->addTab(tr("Ground")); + m_aircraft->aircraftType->addTab(tr("Custom")); // Connect aircraft type selection dropbox to callback function - connect(m_aircraft->aircraftType, SIGNAL(currentIndexChanged(int)), this, SLOT(switchAirframeType(int))); + connect(m_aircraft->aircraftType, SIGNAL(currentChanged(int)), this, SLOT(switchAirframeType(int))); // Connect the three feed forward test checkboxes connect(m_aircraft->ffTestBox1, SIGNAL(clicked(bool)), this, SLOT(enableFFTest())); @@ -145,9 +145,6 @@ ConfigVehicleTypeWidget::ConfigVehicleTypeWidget(QWidget *parent) : ConfigTaskWi refreshWidgetsValues(); - // register widgets for dirty state management - addWidget(m_aircraft->aircraftType); - // register FF widgets for dirty state management addWidget(m_aircraft->feedForwardSlider); addWidget(m_aircraft->accelTime); @@ -171,10 +168,7 @@ ConfigVehicleTypeWidget::~ConfigVehicleTypeWidget() void ConfigVehicleTypeWidget::switchAirframeType(int index) { - // TODO not safe w/r to translation!!! - QString frameCategory = m_aircraft->aircraftType->currentText(); - - m_aircraft->airframesWidget->setCurrentWidget(getVehicleConfigWidget(frameCategory)); + m_aircraft->airframesWidget->setCurrentWidget(getVehicleConfigWidget(index)); } /** @@ -202,10 +196,9 @@ void ConfigVehicleTypeWidget::refreshWidgetsValues(UAVObject *o) // At this stage, we will need to have some hardcoded settings in this code, this // is not ideal, but there you go. QString frameType = field->getValue().toString(); - qDebug() << "ConfigVehicleTypeWidget::refreshWidgetsValues - frame type:" << frameType; - QString category = frameCategory(frameType); - setComboCurrentIndex(m_aircraft->aircraftType, m_aircraft->aircraftType->findText(category)); + int category = frameCategory(frameType); + m_aircraft->aircraftType->setCurrentIndex(category); VehicleConfig *vehicleConfig = getVehicleConfigWidget(category); if (vehicleConfig) { @@ -215,8 +208,6 @@ void ConfigVehicleTypeWidget::refreshWidgetsValues(UAVObject *o) updateFeedForwardUI(); setDirty(dirty); - - qDebug() << "ConfigVehicleTypeWidget::refreshWidgetsValues - end"; } /** @@ -264,63 +255,61 @@ void ConfigVehicleTypeWidget::updateObjectsFromWidgets() updateFeedForwardUI(); } -QString ConfigVehicleTypeWidget::frameCategory(QString frameType) +int ConfigVehicleTypeWidget::frameCategory(QString frameType) { - QString category; - if (frameType == "FixedWing" || frameType == "Elevator aileron rudder" || frameType == "FixedWingElevon" || frameType == "Elevon" || frameType == "FixedWingVtail" || frameType == "Vtail") { - category = "Fixed Wing"; + return ConfigVehicleTypeWidget::FIXED_WING; } else if (frameType == "Tri" || frameType == "Tricopter Y" || frameType == "QuadX" || frameType == "Quad X" || frameType == "QuadP" || frameType == "Quad +" || frameType == "Hexa" || frameType == "Hexacopter" || frameType == "HexaX" || frameType == "Hexacopter X" || frameType == "HexaCoax" || frameType == "Hexacopter Y6" || frameType == "Octo" || frameType == "Octocopter" || frameType == "OctoV" || frameType == "Octocopter V" || frameType == "OctoCoaxP" || frameType == "Octo Coax +" || frameType == "OctoCoaxX" || frameType == "Octo Coax X") { - category = "Multirotor"; + return ConfigVehicleTypeWidget::MULTIROTOR; } else if (frameType == "HeliCP") { - category = "Helicopter"; + return ConfigVehicleTypeWidget::HELICOPTER; } else if (frameType == "GroundVehicleCar" || frameType == "Turnable (car)" || frameType == "GroundVehicleDifferential" || frameType == "Differential (tank)" || frameType == "GroundVehicleMotorcyle" || frameType == "Motorcycle") { - category = "Ground"; + return ConfigVehicleTypeWidget::GROUND; } else { - category = "Custom"; + return ConfigVehicleTypeWidget::CUSTOM; } - return category; } -VehicleConfig *ConfigVehicleTypeWidget::getVehicleConfigWidget(QString frameCategory) +VehicleConfig *ConfigVehicleTypeWidget::getVehicleConfigWidget(int frameCategory) { VehicleConfig *vehiculeConfig; - if (!vehicleIndexMap.contains(frameCategory)) { + if (!m_vehicleIndexMap.contains(frameCategory)) { // create config widget vehiculeConfig = createVehicleConfigWidget(frameCategory); // bind config widget "field" to this ConfigTaskWodget // this is necessary to get "dirty" state management vehiculeConfig->registerWidgets(*this); + // add config widget to UI int index = m_aircraft->airframesWidget->insertWidget(m_aircraft->airframesWidget->count(), vehiculeConfig); - vehicleIndexMap[frameCategory] = index; + m_vehicleIndexMap[frameCategory] = index; + updateEnableControls(); } - int index = vehicleIndexMap.value(frameCategory); + int index = m_vehicleIndexMap.value(frameCategory); vehiculeConfig = (VehicleConfig *)m_aircraft->airframesWidget->widget(index); return vehiculeConfig; } -VehicleConfig *ConfigVehicleTypeWidget::createVehicleConfigWidget(QString frameCategory) +VehicleConfig *ConfigVehicleTypeWidget::createVehicleConfigWidget(int frameCategory) { - qDebug() << "ConfigVehicleTypeWidget::createVehicleConfigWidget - creating" << frameCategory; - if (frameCategory == "Fixed Wing") { + if (frameCategory == ConfigVehicleTypeWidget::FIXED_WING) { return new ConfigFixedWingWidget(); - } else if (frameCategory == "Multirotor") { + } else if (frameCategory == ConfigVehicleTypeWidget::MULTIROTOR) { return new ConfigMultiRotorWidget(); - } else if (frameCategory == "Helicopter") { + } else if (frameCategory == ConfigVehicleTypeWidget::HELICOPTER) { return new ConfigCcpmWidget(); - } else if (frameCategory == "Ground") { + } else if (frameCategory == ConfigVehicleTypeWidget::GROUND) { return new ConfigGroundVehicleWidget(); - } else if (frameCategory == "Custom") { + } else if (frameCategory == ConfigVehicleTypeWidget::CUSTOM) { return new ConfigCustomWidget(); } return NULL; @@ -337,17 +326,17 @@ void ConfigVehicleTypeWidget::enableFFTest() // - Every other time event: send FF settings to flight FW if (m_aircraft->ffTestBox1->isChecked() && m_aircraft->ffTestBox2->isChecked() && m_aircraft->ffTestBox3->isChecked()) { - if (!ffTuningInProgress) { + if (!m_ffTuningInProgress) { // Initiate tuning: UAVDataObject *obj = dynamic_cast(getObjectManager()->getObject( QString("ManualControlCommand"))); UAVObject::Metadata mdata = obj->getMetadata(); - accInitialData = mdata; + m_accInitialData = mdata; UAVObject::SetFlightAccess(mdata, UAVObject::ACCESS_READONLY); obj->setMetadata(mdata); } // Depending on phase, either move actuator or send FF settings: - if (ffTuningPhase) { + if (m_ffTuningPhase) { // Send FF settings to the board UAVDataObject *mixer = dynamic_cast(getObjectManager()->getObject(QString("MixerSettings"))); Q_ASSERT(mixer); @@ -369,18 +358,18 @@ void ConfigVehicleTypeWidget::enableFFTest() obj->getField("Throttle")->setValue(target); obj->updated(); } - ffTuningPhase = !ffTuningPhase; - ffTuningInProgress = true; + m_ffTuningPhase = !m_ffTuningPhase; + m_ffTuningInProgress = true; QTimer::singleShot(1000, this, SLOT(enableFFTest())); } else { // - If no: disarm timer, restore actuatorcommand metadata // Disarm! - if (ffTuningInProgress) { - ffTuningInProgress = false; + if (m_ffTuningInProgress) { + m_ffTuningInProgress = false; UAVDataObject *obj = dynamic_cast(getObjectManager()->getObject( QString("ManualControlCommand"))); UAVObject::Metadata mdata = obj->getMetadata(); - mdata = accInitialData; // Restore metadata + mdata = m_accInitialData; // Restore metadata obj->setMetadata(mdata); } } @@ -413,15 +402,3 @@ void ConfigVehicleTypeWidget::openHelp() { QDesktopServices::openUrl(QUrl("http://wiki.openpilot.org/x/44Cf", QUrl::StrictMode)); } - -/** - Helper function: - Sets the current index on supplied combobox to index - if it is within bounds 0 <= index < combobox.count() - */ -void ConfigVehicleTypeWidget::setComboCurrentIndex(QComboBox *box, int index) -{ - if (index >= 0 && index < box->count()) { - box->setCurrentIndex(index); - } -} diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h index 5bee9696c..be40b4d48 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h @@ -64,7 +64,6 @@ class ConfigVehicleTypeWidget : public ConfigTaskWidget { public: static QStringList getChannelDescriptions(); - static void setComboCurrentIndex(QComboBox *box, int index); ConfigVehicleTypeWidget(QWidget *parent = 0); ~ConfigVehicleTypeWidget(); @@ -76,20 +75,23 @@ protected slots: private: Ui_AircraftWidget *m_aircraft; + static enum { MULTIROTOR = 0, FIXED_WING, HELICOPTER, GROUND, CUSTOM } AirframeCategory; + // Maps a frame category to its index in the m_aircraft->airframesWidget QStackedWidget - QMap vehicleIndexMap; + QMap m_vehicleIndexMap; - QString frameCategory(QString frameType); - VehicleConfig *getVehicleConfigWidget(QString frameCategory); - VehicleConfig *createVehicleConfigWidget(QString frameCategory); + int frameCategory(QString frameType); + + VehicleConfig *getVehicleConfigWidget(int frameCategory); + VehicleConfig *createVehicleConfigWidget(int frameCategory); // Feed Forward void updateFeedForwardUI(); - bool ffTuningInProgress; - bool ffTuningPhase; - UAVObject::Metadata accInitialData; + bool m_ffTuningInProgress; + bool m_ffTuningPhase; + UAVObject::Metadata m_accInitialData; private slots: void switchAirframeType(int index); diff --git a/ground/openpilotgcs/src/plugins/config/input.ui b/ground/openpilotgcs/src/plugins/config/input.ui index 32a553d7c..aa3d1a7f4 100644 --- a/ground/openpilotgcs/src/plugins/config/input.ui +++ b/ground/openpilotgcs/src/plugins/config/input.ui @@ -14,18 +14,6 @@ Form - - 12 - - - 12 - - - 12 - - - 12 - @@ -128,8 +116,8 @@ 0 0 - 766 - 745 + 774 + 748 @@ -558,8 +546,8 @@ 0 0 - 766 - 745 + 768 + 742 @@ -2176,8 +2164,8 @@ Setup the flight mode channel on the RC Input tab if you have not done so alread 0 0 - 766 - 745 + 768 + 742 diff --git a/ground/openpilotgcs/src/plugins/config/output.ui b/ground/openpilotgcs/src/plugins/config/output.ui index fbe9e0e0a..aa2f892c7 100644 --- a/ground/openpilotgcs/src/plugins/config/output.ui +++ b/ground/openpilotgcs/src/plugins/config/output.ui @@ -14,9 +14,6 @@ Form - - 12 - @@ -36,7 +33,16 @@ 0 - + + 0 + + + 0 + + + 0 + + 0 @@ -116,15 +122,24 @@ 0 0 - 668 - 671 + 676 + 674 6 - + + 12 + + + 12 + + + 12 + + 12 @@ -145,12 +160,6 @@ Output Update Speed - - 12 - - - 6 - @@ -173,12 +182,6 @@ - - - 75 - true - - Channel: @@ -391,12 +394,6 @@ Leave at 50Hz for fixed wing. 20 - - - 75 - true - - Update rate: @@ -653,12 +650,9 @@ Leave at 50Hz for fixed wing. - + Output Channel Configuration - - 12 - @@ -668,15 +662,12 @@ Leave at 50Hz for fixed wing. - - 12 - 519 - 0 + 20 @@ -707,7 +698,7 @@ Leave at 50Hz for fixed wing. 20 - 542 + 0 @@ -724,12 +715,9 @@ Leave at 50Hz for fixed wing. - + Live Testing - - 12 - @@ -738,7 +726,7 @@ Leave at 50Hz for fixed wing. 105 - 0 + 20 diff --git a/ground/openpilotgcs/src/plugins/config/outputchannelform.ui b/ground/openpilotgcs/src/plugins/config/outputchannelform.ui index 3b4079ce7..84ee3a2be 100644 --- a/ground/openpilotgcs/src/plugins/config/outputchannelform.ui +++ b/ground/openpilotgcs/src/plugins/config/outputchannelform.ui @@ -23,29 +23,7 @@ 12 - - - - - 0 - 0 - - - - - 0 - 25 - - - - Current value of slider. - - - 0000 - - - - + @@ -55,7 +33,7 @@ - 0 + 45 20 @@ -81,22 +59,55 @@ margin:1px; - - + + + + + 0 + 25 + + + + Qt::StrongFocus + + + Maximum PWM value, beware of not overdriving your servo. + + + 9999 + + + + + - + 0 0 - 110 - 25 + 0 + 20 + + + 75 + false + true + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font:bold; +margin:1px; + - TextLabel + Neutral (slowest for motor) Qt::AlignCenter @@ -145,110 +156,21 @@ margin:1px; - - - - - 0 - 0 - + + + + Qt::Horizontal - + + QSizePolicy::Minimum + + - 20 - 25 - - - - Channel Number - - - Qt::LeftToRight - - - TextLabel - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 25 - - - - Qt::StrongFocus - - - Minimum PWM value, beware of not overdriving your servo. - - - 9999 - - - - - - - - 0 - 0 - - - - - 45 - 25 - - - - Qt::StrongFocus - - - Check to invert the channel. - - - - - - - - 0 - 0 - - - - - 0 + 5 20 - - - 75 - false - true - - - - background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); -color: rgb(255, 255, 255); -border-radius: 5; -font:bold; -margin:1px; - - - Neutral (slowest for motor) - - - Qt::AlignCenter - - + @@ -286,26 +208,29 @@ margin:1px; - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - + + + - 5 - 20 + 0 + 25 - + + Qt::StrongFocus + + + Minimum PWM value, beware of not overdriving your servo. + + + 9999 + + - - + + - + 0 0 @@ -313,28 +238,17 @@ margin:1px; 0 - 20 + 25 - - - 75 - false - true - + + Qt::StrongFocus - - background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); -color: rgb(255, 255, 255); -border-radius: 5; -font:bold; -margin:1px; + + 9999 - - Min - - - Qt::AlignCenter + + Qt::Horizontal @@ -374,30 +288,33 @@ margin:1px; - - + + - + 0 0 - 45 + 20 25 - - Qt::StrongFocus - - Output mode + Channel Number + + + TextLabel + + + Qt::AlignCenter - - + + Qt::Horizontal @@ -412,6 +329,28 @@ margin:1px; + + + + + 0 + 0 + + + + + 110 + 25 + + + + TextLabel + + + Qt::AlignCenter + + + @@ -441,17 +380,17 @@ font:bold; margin:1px; - Rev + Reversed Qt::AlignCenter - - + + - + 0 0 @@ -462,34 +401,152 @@ margin:1px; 25 - - Qt::StrongFocus + + Current value of slider. - - 9999 - - - Qt::Horizontal + + 0000 - - + + + + + 0 + 0 + + 0 - 25 + 20 - - Qt::StrongFocus + + + 75 + false + true + - - Maximum PWM value, beware of not overdriving your servo. + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font:bold; +margin:1px; - - 9999 + + Min + + Qt::AlignCenter + + + + + + + + 75 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Check to invert the channel. + + + + + + + + + + + 45 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + Output mode + + + + @@ -498,8 +555,6 @@ margin:1px; actuatorMin actuatorNeutral actuatorMax - actuatorRev - actuatorLink diff --git a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui index 5730bb139..7d75bea2d 100644 --- a/ground/openpilotgcs/src/plugins/config/pipxtreme.ui +++ b/ground/openpilotgcs/src/plugins/config/pipxtreme.ui @@ -15,1724 +15,1822 @@ - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - - + + + + OPLink configuration + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::NoFrame + + + true + + + + + 0 + 0 + 812 + 692 + + + + + + + 0 + 0 + + + + + 50 + false + + + + Configuration + + + + + + Com speed in bps. + + + + + + + + 50 + false + + + + Com Speed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + VCP Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 16777215 + + + + Choose the function for the flexi port + + + + + + + + 50 + false + + + + Main Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 16777215 + + + + Choose the function for the main port + + + + + + + + 16777215 + 16777215 + + + + Set the maximum TX output power the modem will use (mW) + + + Qt::LeftToRight + + + 0 + + + + + + + + 50 + false + + + + Max Power + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 16777215 + 16777215 + + + + Choose the function for the USB virtual com port + + + + + + + + 50 + false + + + + FlexiIO Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + 50 + false + + + + Flexi Port + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Max Chan + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. + + + 249 + + + + + + + + 50 + false + + + + Min Chan + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. + + + 249 + + + + + + + + 50 + false + + + + Channel Set + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Sets the random sequence of channels to use for frequency hopping. + + + 249 + + + + + + + + 50 + false + + + + Only PPM packets will be transmitted. + + + PPM Only + + + + + + + + 50 + false + + + + If selected, data will only be transmitted from the coordinator to the Rx modem. + + + One-Way + + + + + + + + 50 + false + + + + PPM packets will be received by this modem. Must be selected if Coordinator modem is configured for PPM. + + + PPM + + + + + + + + 50 + false + + + + This modem will be a coordinator and other modems will bind to it. + + + Coordinator + + + + + + + + + + Remote modems + + + + + + + 50 + false + + + + -100dB + + + + + + + -127 + + + 0 + + + 0 + + + false + + + %v dBm + + + + + + + + 50 + false + + + + -100dB + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + + + + + -127 + + + 0 + + + 0 + + + false + + + %v dBm + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + + + + + -127 + + + 0 + + + -127 + + + false + + + %v dBm + + + + + + + + 50 + false + + + + -100dB + + + + + + + -127 + + + 0 + + + 0 + + + false + + + %v dBm + + + + + + + + 50 + false + + + + -100dB + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + 12345678 + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Bind + + + + + + + + 50 + false + + + + Qt::LeftToRight + + + Coordinator ID + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 100 + 16777215 + + + + + 50 + false + + + + <html><head/><body><p>This is the coordinator id we currently are bound to.</p><p>To manually bind to a specific coordinator, just type</p><p>or paste its device id in this box and save.</p><p>The device must be rebooted for the binding to take place.</p></body></html> + + + 8 + + + + + + + + + + + 430 + 0 + + + + + 50 + false + + + + Qt::LeftToRight + + + QLineEdit { + border: none; + border-radius: 1px; + padding: 0 4px; + background: rgba(0, 0, 0, 16); + /* background: transparent; */ + /* selection-background-color: darkgray;*/ + } + + + Status + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + 12345678 + + + + + + + + 50 + false + + + + Link State + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The modems current state + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + Disconnected + + + + + + + + 50 + false + + + + Firmware Ver. + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + true + + + + + + + + 50 + false + + + + Serial Number + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 50 + false + false + + + + false + + + The modems serial number + + + true + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + Device ID + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Link Quality + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RSSI + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The number of packets that were unable to be transmitted + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + TX Seq. No. + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + TX Rate (B/s) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RX Seq. No. + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RX Rate (B/s) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + RX Good + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were corrected with error correction + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + RX Corrected + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were corrected with error correction + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + RX Errors + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that could not be corrected with error correction + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + RX Missed + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were not received at all + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + TX Dropped + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The number of packets that were unable to be transmitted + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + 50 + false + + + + TX Resent + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + Tx Failure + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + Free Heap + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + true + + + + + + + + 50 + false + + + + UAVTalk Errors + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + Resets + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 101 + 16777215 + + + + + 50 + false + + + + false + + + true + + + + + + + + 50 + false + + + + Timeouts + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 50 + false + + + + RX Failure + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 101 + 16777215 + + + + + 50 + false + + + + The percentage of packets that were not received at all + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + true + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - Qt::Horizontal - - - - 40 - 5 - - - - - - - - - - - - :/core/images/helpicon.svg:/core/images/helpicon.svg - - - - 32 - 32 - - - - true - - - - button:help - url:http://wiki.openpilot.org/x/dACrAQ - - - - - - - - Send settings to the board but do not save to the non-volatile memory - - - Apply - - - - - - - Send settings to the board and save to the non-volatile memory - - - Save - - - false - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - QFrame::StyledPanel - - - QFrame::Raised - - - - - - - 430 - 0 - - - - - 75 - true - - - - Qt::LeftToRight - - - Status - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - 12345678 - - - - - - - Link State - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The modems current state - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 3px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - Disconnected - - - - - - - Firmware Ver. - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - true - - - - - - - Serial Number - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - - 75 - false - true - - - - false - - - The modems serial number - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - true - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - Device ID - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Link Quality - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RSSI - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The number of packets that were unable to be transmitted - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - TX Seq. No. - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - TX Rate (B/s) - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RX Seq. No. - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RX Rate (B/s) - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - RX Good - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were corrected with error correction - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - RX Corrected - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were corrected with error correction - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - RX Errors - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that could not be corrected with error correction - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - RX Missed - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were not received at all - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - TX Dropped - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The number of packets that were unable to be transmitted - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - TX Resent - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Tx Failure - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - Free Heap - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - true - - - - - - - UAVTalk Errors - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - Resets - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 101 - 16777215 - - - - - 75 - true - - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - false - - - true - - - - - - - Timeouts - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - RX Failure - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 101 - 16777215 - - - - - 75 - true - - - - The percentage of packets that were not received at all - - - QLineEdit { - border: none; - border-radius: 1px; - padding: 0 4px; - background: rgba(0, 0, 0, 16); - /* background: transparent; */ - /* selection-background-color: darkgray;*/ - } - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - true - - - - - - - - - - - - - - 75 - true - - - - Remote Modems - - - - - - - - - -100dB - - - - - - - -127 - - - 0 - - - 0 - - - false - - - %v dBm - - - - - - - -100dB - - - - - - - - 100 - 16777215 - - - - - - - - -127 - - - 0 - - - 0 - - - false - - - %v dBm - - - - - - - - 100 - 16777215 - - - - - - - - -127 - - - 0 - - - -127 - - - false - - - %v dBm - - - - - - - -100dB - - - - - - - -127 - - - 0 - - - 0 - - - false - - - %v dBm - - - - - - - -100dB - - - - - - - - 100 - 16777215 - - - - - - - - - 100 - 16777215 - - - - 12345678 - - - - - - - Bind - - - - - - - Bind - - - - - - - Bind - - - - - - - Bind - - - - - - - Qt::LeftToRight - - - Coord ID - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 100 - 16777215 - - - - 8 - - - - - - - This modem will be a coordinator and other modems will bind to it. - - - Coordinator - - - - - - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Configuration - - - - - - Com speed in bps. - - - - - - - Com Speed - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - VCP Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 16777215 - 16777215 - - - - Choose the function for the flexi port - - - - - - - Main Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 16777215 - 16777215 - - - - Choose the function for the main port - - - - - - - - 16777215 - 16777215 - - - - Set the maximum TX output power the modem will use (mW) - - - Qt::LeftToRight - - - 0 - - - - - - - Max Power - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 16777215 - 16777215 - - - - Choose the function for the USB virtual com port - - - - - - - FlexiIO Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - Flexi Port - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - If selected, data will only be transmitted from the coordinator to the Rx modem. - - - One-Way Link - - - - - - - Only PPM packets will be transmitted. - - - PPM Only - - - - - - - Max Chan - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. - - - 249 - - - - - - - Min Chan - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Channel 0 is 430 MHz, channel 249 is 440 MHz, and the channel spacing is 40 KHz. - - - 249 - - - - - - - Channel Set - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - Sets the random sequence of channels to use for frequency hopping. - - - 249 - - - - - - - PPM packets will be received by this modem. Must be selected if Coordinator modem is configured for PPM. - - - PPM - - - - - - - + + + + + + + + + + Qt::Horizontal + + + + 40 + 5 + + + + + + + + + 25 + 25 + + + + + + + + :/core/images/helpicon.svg:/core/images/helpicon.svg + + + + 25 + 25 + + + + true + + + + button:help + url:http://wiki.openpilot.org/x/dACrAQ + + + + + + + + Send settings to the board but do not save to the non-volatile memory + + + Apply + + + + + + + Send settings to the board and save to the non-volatile memory + + + Save + + + false + + + + + diff --git a/ground/openpilotgcs/src/plugins/config/revosensors.ui b/ground/openpilotgcs/src/plugins/config/revosensors.ui index 390f7acea..8c6e2de1e 100644 --- a/ground/openpilotgcs/src/plugins/config/revosensors.ui +++ b/ground/openpilotgcs/src/plugins/config/revosensors.ui @@ -6,7 +6,7 @@ 0 0 - 649 + 808 510 @@ -20,7 +20,7 @@ true - 1 + 0 @@ -41,7 +41,16 @@ QFrame::Sunken - + + 3 + + + 3 + + + 3 + + 3 @@ -127,7 +136,16 @@ QFrame::Sunken - + + 3 + + + 3 + + + 3 + + 3 @@ -230,7 +248,16 @@ Hint: run this with engines at cruising speed. QFrame::Raised - + + 3 + + + 3 + + + 3 + + 3 @@ -308,7 +335,7 @@ Hint: run this with engines at cruising speed. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> <tr> <td style="border: none;"> @@ -338,7 +365,16 @@ p, li { white-space: pre-wrap; } - + + 6 + + + 6 + + + 6 + + 6 @@ -838,8 +874,8 @@ A setting of 0.00 disables the filter. - 32 - 32 + 25 + 25 diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index 947505d8d..a60e15d73 100644 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -22,421 +22,6 @@ 0 - - - - - - - 0 - 0 - 0 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 255 - - - - - - - 247 - 247 - 247 - - - - - - - 120 - 120 - 120 - - - - - - - 160 - 160 - 160 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 240 - 240 - 240 - - - - - - - 0 - 0 - 0 - - - - - - - 247 - 247 - 247 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 255 - - - - - - - 247 - 247 - 247 - - - - - - - 120 - 120 - 120 - - - - - - - 160 - 160 - 160 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 240 - 240 - 240 - - - - - - - 0 - 0 - 0 - - - - - - - 247 - 247 - 247 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 120 - 120 - 120 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 255 - - - - - - - 247 - 247 - 247 - - - - - - - 120 - 120 - 120 - - - - - - - 160 - 160 - 160 - - - - - - - 120 - 120 - 120 - - - - - - - 255 - 255 - 255 - - - - - - - 120 - 120 - 120 - - - - - - - 240 - 240 - 240 - - - - - - - 240 - 240 - 240 - - - - - - - 0 - 0 - 0 - - - - - - - 240 - 240 - 240 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Stabilization @@ -551,8 +136,8 @@ 0 0 - 796 - 708 + 798 + 705 @@ -582,9 +167,6 @@ margin-top: -1px; - - - @@ -598,9 +180,9 @@ margin-top: -1px; false - true + false - + 9 @@ -613,7 +195,7 @@ margin-top: -1px; 9 - + @@ -636,21 +218,8 @@ margin-top: -1px; - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - + + QGroupBox{border: 0px;} @@ -2617,6 +2186,29 @@ border-radius: 5; + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Use Basic Configuration + + + true + + + @@ -3114,7 +2706,7 @@ border-radius: 5; true - + 0 @@ -3124,19 +2716,6 @@ border-radius: 5; 0 - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -3163,6 +2742,760 @@ border-radius: 5; + + + + + 50 + 22 + + + + + 50 + 22 + + + + Qt::StrongFocus + + + As a rule of thumb, you can set the Integral at roughly the same +value as the Kp. + + + 200 + + + 200 + + + + objname:StabilizationSettingsBankX + fieldname:YawRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> + + + + + + 100 + + + 50 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:YawRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + + + 0 + 25 + + + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> + + + + + + 100 + + + 50 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:PitchRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 50 + 22 + + + + + 50 + 22 + + + + Qt::StrongFocus + + + As a rule of thumb, you can set the Integral at roughly the same +value as the Kp. + + + 200 + + + 200 + + + + objname:StabilizationSettingsBankX + fieldname:PitchRatePID + element:Ki + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + + + 0 + 16 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 58 + 58 + 58 + + + + + + + 48 + 48 + 48 + + + + + + + 19 + 19 + 19 + + + + + + + 26 + 26 + 26 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 0 + 0 + 0 + + + + + + + 19 + 19 + 19 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 58 + 58 + 58 + + + + + + + 48 + 48 + 48 + + + + + + + 19 + 19 + 19 + + + + + + + 26 + 26 + 26 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 0 + 0 + 0 + + + + + + + 19 + 19 + 19 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 58 + 58 + 58 + + + + + + + 48 + 48 + 48 + + + + + + + 19 + 19 + 19 + + + + + + + 26 + 26 + 26 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + + + 74 + 74 + 74 + + + + + 36 + 36 + 36 + + + + + + + + + 0 + 0 + 0 + + + + + + + 39 + 39 + 39 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 75 + true + + + + false + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; + + + Roll + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -4316,170 +4649,6 @@ border-radius: 5; - - - - - 50 - 22 - - - - - 50 - 22 - - - - Qt::StrongFocus - - - Slowly raise Proportional until you start seeing clear oscillations when you fly. -Then lower the value by 5 or so. - - - 200 - - - 200 - - - - objname:StabilizationSettingsBankX - fieldname:RollRatePID - element:Kp - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 78 - 16 - - - - - - - Proportional - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:YawRatePID - element:Kp - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:PitchRatePID - element:Kp - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - @@ -4666,8 +4835,8 @@ value as the Kp. - - + + 50 @@ -4684,8 +4853,8 @@ value as the Kp. Qt::StrongFocus - As a rule of thumb, you can set the Integral at roughly the same -value as the Kp. + Slowly raise Proportional until you start seeing clear oscillations when you fly. +Then lower the value by 5 or so. 200 @@ -4696,8 +4865,8 @@ value as the Kp. objname:StabilizationSettingsBankX - fieldname:YawRatePID - element:Ki + fieldname:RollRatePID + element:Kp haslimits:yes scale:0.0001 buttongroup:1,10 @@ -4705,707 +4874,130 @@ value as the Kp. - - + + - + 0 0 - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:YawRatePID - element:Ki - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 0 - 25 - - - - Qt::StrongFocus - - - <html><head/><body><p>This adjusts how much stability your vehicle will have when flying tilted (ie forward flight) in Rate mode. A good starting point for Integral is the same as Proportional</p></body></html> - - - - - - 100 - - - 50 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 25 - - - - objname:StabilizationSettingsBankX - fieldname:PitchRatePID - element:Ki - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 50 - 22 - - - - - 50 - 22 - - - - Qt::StrongFocus - - - As a rule of thumb, you can set the Integral at roughly the same -value as the Kp. - - - 200 - - - 200 - - - - objname:StabilizationSettingsBankX - fieldname:PitchRatePID - element:Ki - haslimits:yes - scale:0.0001 - buttongroup:1,10 - - - - - - - - - 0 - 0 - - - - - 0 + 78 16 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 58 - 58 - 58 - - - - - - - 48 - 48 - 48 - - - - - - - 19 - 19 - 19 - - - - - - - 26 - 26 - 26 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 0 - 0 - 0 - - - - - - - 19 - 19 - 19 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 58 - 58 - 58 - - - - - - - 48 - 48 - 48 - - - - - - - 19 - 19 - 19 - - - - - - - 26 - 26 - 26 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 0 - 0 - 0 - - - - - - - 19 - 19 - 19 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 58 - 58 - 58 - - - - - - - 48 - 48 - 48 - - - - - - - 19 - 19 - 19 - - - - - - - 26 - 26 - 26 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - 255 - 255 - 255 - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - - - 74 - 74 - 74 - - - - - 36 - 36 - 36 - - - - - - - - - 0 - 0 - 0 - - - - - - - 39 - 39 - 39 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 75 - true - - - - false - - background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); -color: rgb(255, 255, 255); -border-radius: 5; + - Roll + Proportional - Qt::AlignCenter + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - + + + + + 0 + 0 + + + + + 0 + 25 + + + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> + + + + + + 100 + + + 50 + Qt::Horizontal - + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:YawRatePID + element:Kp + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + + + + + + + 0 + 0 + + + - 40 - 20 + 0 + 25 - + + Qt::StrongFocus + + + <html><head/><body><p>This adjusts how much leveling stability is set into Rate mode (inner loop). Too much will make your vehicle oscillate in Rate mode.</p></body></html> + + + + + + 100 + + + 50 + + + Qt::Horizontal + + + QSlider::TicksBelow + + + 25 + + + + objname:StabilizationSettingsBankX + fieldname:PitchRatePID + element:Kp + haslimits:yes + scale:0.0001 + buttongroup:1,10 + + + @@ -5511,520 +5103,6 @@ border-radius: 5; 195 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - false @@ -8759,8 +7837,8 @@ border-radius: 5; 0 0 - 796 - 708 + 784 + 733 @@ -8805,520 +7883,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Responsiveness @@ -9326,7 +7890,7 @@ border-radius: 5; Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - true + false false @@ -9347,62 +7911,11 @@ border-radius: 5; 6 - - - - Qt::Horizontal + + + + false - - QSizePolicy::Expanding - - - - 632 - 20 - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Reset all values to GCS defaults - - - - - - Default - - - - objname:StabilizationSettings - button:default - buttongroup:6 - - - - - - 0 @@ -12143,596 +10656,21 @@ border-radius: 5; - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - Rate Stabilization (Inner Loop) - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - false - - - - 9 - - - 9 - - - 9 - - - 9 - - - 6 - - - - - Qt::Horizontal - - - - 497 - 20 - - - - - - - - <html><head/><body><p>Link roll &amp; pitch values together, thus giving the same value for each when setting up a symetrical vehicle that requires both to be the same.</p></body></html> - - - + + + + + 0 + 0 + - Link Roll and Pitch + Use Advanced Configuration - - + + 0 @@ -12764,11 +10702,72 @@ border-radius: 5; objname:StabilizationSettings button:default - buttongroup:4 + buttongroup:6 + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Rate Stabilization (Inner Loop) + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + + 9 + + + 9 + + + 9 + + + 9 + + + 6 + @@ -15476,6 +13475,70 @@ border-radius: 5; + + + + Qt::Horizontal + + + + 497 + 20 + + + + + + + + <html><head/><body><p>Link roll &amp; pitch values together, thus giving the same value for each when setting up a symetrical vehicle that requires both to be the same.</p></body></html> + + + + + + Link Roll and Pitch + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Reset all values to GCS defaults + + + + + + Default + + + + objname:StabilizationSettings + button:default + buttongroup:4 + + + + @@ -15499,520 +13562,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - false @@ -18750,8 +16299,8 @@ border-radius: 5; 0 0 - 796 - 708 + 798 + 705 @@ -23865,520 +21414,6 @@ border-radius: 5; - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - false @@ -26881,8 +23916,8 @@ border-radius: 5; 0 0 - 796 - 708 + 798 + 705 @@ -27727,8 +24762,8 @@ border-radius: 5; 0 0 - 796 - 708 + 798 + 705 @@ -27752,520 +24787,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Tuning @@ -28870,6 +25391,9 @@ border-radius: 5; + + <html><head/><body><p>How fast the vehicle should climb or descent to compensate a certain altitude difference. higher values could result in more accurate altitude hold but also more violent control actions, lower values are safer and ensure smoother flight. The default value should be fine for the majority of crafts.</p></body></html> + 100 @@ -28896,6 +25420,9 @@ border-radius: 5; + + <html><head/><body><p>How much the vehicle should throttle up or down to compensate or achieve a certain vertical speed. Higher values lead to more aggressive throttle changes and could lead to oscillations. This is the most likely candidate to change depending on the crafts engine thrust. Heavy craft with weak engines might require higher values.</p></body></html> + 100 @@ -28922,6 +25449,9 @@ border-radius: 5; + + <html><head/><body><p>How fast the vehicle should adjust its neutral throttle estimation. Altitude assumes that when engaged the throttle is in the range required to hover. If the throttle is a lot higher or lower, it needs to adjust this &quot;throttle trim&quot; Higher values make it do this adjustment faster, but this could lead to ugly oscillations. Leave at default unless you know what you are doing.</p></body></html> + 1000 @@ -29679,520 +26209,6 @@ border-radius: 5; 16777215 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - Vario Altitude diff --git a/ground/openpilotgcs/src/plugins/config/txpid.ui b/ground/openpilotgcs/src/plugins/config/txpid.ui index 550102209..496ffe032 100644 --- a/ground/openpilotgcs/src/plugins/config/txpid.ui +++ b/ground/openpilotgcs/src/plugins/config/txpid.ui @@ -17,18 +17,6 @@ 6 - - 12 - - - 12 - - - 12 - - - 12 - @@ -131,8 +119,8 @@ 0 0 - 742 - 450 + 753 + 475 diff --git a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp index f2886eebf..197058f29 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/mainwindow.cpp @@ -50,7 +50,9 @@ #include "ioutputpane.h" #include "icorelistener.h" #include "iconfigurableplugin.h" -#include "manhattanstyle.h" + +#include + #include "rightpane.h" #include "settingsdialog.h" #include "threadmanager.h" @@ -140,20 +142,7 @@ MainWindow::MainWindow() : QCoreApplication::setOrganizationName(QLatin1String("OpenPilot")); QCoreApplication::setOrganizationDomain(QLatin1String("openpilot.org")); QSettings::setDefaultFormat(XmlConfig::XmlSettingsFormat); - QString baseName = qApp->style()->objectName(); -#ifdef Q_WS_X11 - if (baseName == QLatin1String("windows")) { - // Sometimes we get the standard windows 95 style as a fallback - // e.g. if we are running on a KDE4 desktop - QByteArray desktopEnvironment = qgetenv("DESKTOP_SESSION"); - if (desktopEnvironment == "kde") { - baseName = QLatin1String("plastique"); - } else { - baseName = QLatin1String("cleanlooks"); - } - } -#endif - qApp->setStyle(new ManhattanStyle(baseName)); + qApp->setStyle(QStyleFactory::create("Fusion")); setDockNestingEnabled(true); diff --git a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp index 86ec14f21..96def978a 100644 --- a/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp +++ b/ground/openpilotgcs/src/plugins/coreplugin/uavgadgetmanager/uavgadgetview.cpp @@ -104,7 +104,7 @@ UAVGadgetView::UAVGadgetView(Core::UAVGadgetManager *uavGadgetManager, IUAVGadge ++index; } - m_defaultToolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + m_defaultToolBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); m_activeToolBar = m_defaultToolBar; QHBoxLayout *toolBarLayout = new QHBoxLayout(m_toolBar); @@ -115,7 +115,7 @@ UAVGadgetView::UAVGadgetView(Core::UAVGadgetManager *uavGadgetManager, IUAVGadge m_toolBar->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::MinimumExpanding); QWidget *spacerWidget = new QWidget(this); - spacerWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); + spacerWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); m_activeLabel->setTextFormat(Qt::RichText); m_activeLabel->setText("" + tr("Active") + ""); @@ -124,9 +124,10 @@ UAVGadgetView::UAVGadgetView(Core::UAVGadgetManager *uavGadgetManager, IUAVGadge m_closeButton->setIcon(QIcon(":/core/images/closebutton.png")); m_top = new Utils::StyledBar(this); + m_top->setMaximumHeight(35); QHBoxLayout *toplayout = new QHBoxLayout(m_top); - toplayout->setSpacing(0); - toplayout->setMargin(0); + toplayout->setSpacing(4); + toplayout->setMargin(4); toplayout->addWidget(m_uavGadgetList); toplayout->addWidget(m_toolBar); // Custom toolbar stretches toplayout->addWidget(spacerWidget); diff --git a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp index fbc68e1fe..84505cd26 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uavobjectwidgetutils/configtaskwidget.cpp @@ -138,6 +138,7 @@ void ConfigTaskWidget::doAddWidgetBinding(QString objectName, QString fieldName, if (!fieldName.isEmpty() && object) { field = object->getField(QString(fieldName)); + Q_ASSERT(field); } WidgetBinding *binding = new WidgetBinding(widget, object, field, index, scale, isLimited); diff --git a/package/linux/deb_common/rules b/package/linux/deb_common/rules index daa54864b..e3fed4f80 100644 --- a/package/linux/deb_common/rules +++ b/package/linux/deb_common/rules @@ -35,7 +35,7 @@ install: # Add here commands to install the package into debian/ cp -arp build/openpilotgcs_release/bin debian/openpilot/usr/local/OpenPilot cp -arp build/openpilotgcs_release/lib debian/openpilot/usr/local/OpenPilot - cp -arp build/openpilotgcs_release/share debian/openpilot/usr/local/OpenPilot + cp -arp build/openpilotgcs_release/share debian/openpilot/usr/local/OpenPilot cp -arp build/openpilotgcs_release/.obj debian/openpilot/usr/local/OpenPilot cp -arp package/linux/qt.conf debian/openpilot/usr/local/OpenPilot/bin cp -arp package/linux/openpilot.desktop debian/openpilot/usr/share/applications