Merge branch '2.3' into 3djc/TX16s-2.3
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@ project(OpenTX)
|
||||
|
||||
set(VERSION_MAJOR "2")
|
||||
set(VERSION_MINOR "3")
|
||||
set(VERSION_REVISION "6")
|
||||
set(VERSION_REVISION "8")
|
||||
set(VERSION_SUFFIX $ENV{OPENTX_VERSION_SUFFIX})
|
||||
set(VERSION_FAMILY ${VERSION_MAJOR}.${VERSION_MINOR})
|
||||
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}${VERSION_SUFFIX})
|
||||
|
||||
@@ -1707,3 +1707,5 @@ Fabrice Debonnet
|
||||
James Laver
|
||||
Kevin Bowens
|
||||
David Frech
|
||||
Udo Kastenholz
|
||||
Julio Margarido
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
## OpenTX 2.3 Branch
|
||||
|
||||
[](https://travis-ci.org/opentx/opentx)
|
||||
[](https://discord.gg/pAmmCp2)
|
||||
[](https://discord.gg/CZCwVx2)
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DJ9MASSKVW8WN)
|
||||
|
||||
The ongoing development on 2.3.x is done in this branch.
|
||||
|
||||
@@ -352,6 +352,13 @@ void AppPreferencesDialog::on_ge_pathButton_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
void AppPreferencesDialog::on_btnClearPos_clicked()
|
||||
{
|
||||
SimulatorOptions opts = g.profile[g.sessionId()].simulatorOptions();
|
||||
opts.controlsState.clear();
|
||||
g.profile[g.sessionId()].simulatorOptions(opts);
|
||||
}
|
||||
|
||||
#if defined(JOYSTICKS)
|
||||
void AppPreferencesDialog::on_joystickChkB_clicked() {
|
||||
if (ui->joystickChkB->isChecked()) {
|
||||
|
||||
@@ -66,6 +66,7 @@ class AppPreferencesDialog : public QDialog
|
||||
void on_SplashSelect_clicked();
|
||||
void on_clearImageButton_clicked();
|
||||
void on_btn_appLogsDir_clicked();
|
||||
void on_btnClearPos_clicked();
|
||||
|
||||
#if defined(JOYSTICKS)
|
||||
void on_joystickChkB_clicked();
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="profileTab">
|
||||
<attribute name="title">
|
||||
@@ -61,22 +61,40 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="optionsLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="horizontalSpacing">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="4">
|
||||
<widget class="QWidget" name="widget_splashImage" native="true">
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<property name="margin">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
@@ -728,6 +746,19 @@ Mode 4:
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" column="0" rowspan="2">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Startup Settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_10" stretch="0,1">
|
||||
<property name="spacing">
|
||||
@@ -764,8 +795,8 @@ Mode 4:
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" column="0" rowspan="2">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<item row="13" column="0">
|
||||
<widget class="QLabel" name="label_17">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -773,7 +804,7 @@ Mode 4:
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Startup Settings</string>
|
||||
<string>Automatic Backup Folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -790,13 +821,6 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QCheckBox" name="showSplash">
|
||||
<property name="text">
|
||||
@@ -807,16 +831,10 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QLabel" name="label_17">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Automatic Backup Folder</string>
|
||||
<item row="11" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -833,37 +851,6 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="backupPath">
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="backupPathButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Select Folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="18" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
@@ -891,6 +878,63 @@ Mode 4:
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="13" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_8">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="backupPath">
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="backupPathButton">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Select Folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="19" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="23" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Debug Output Logging</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="1">
|
||||
<widget class="QCheckBox" name="backupEnable">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable automatic backup before writing firmware</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="1">
|
||||
<widget class="QCheckBox" name="opt_removeBlankSlots">
|
||||
<property name="toolTip">
|
||||
@@ -914,16 +958,37 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="23" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<item row="4" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="1">
|
||||
<widget class="QComboBox" name="splashincludeCB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Debug Output Logging</string>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Only show user splash images</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Show user and companion splash images</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -961,52 +1026,26 @@ Mode 4:
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="14" column="1">
|
||||
<widget class="QCheckBox" name="backupEnable">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable automatic backup before writing firmware</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="19" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="1">
|
||||
<widget class="QComboBox" name="splashincludeCB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item row="24" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Only show user splash images</string>
|
||||
</property>
|
||||
<widget class="QLineEdit" name="appLogsDir">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Show user and companion splash images</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="btn_appLogsDir">
|
||||
<property name="text">
|
||||
<string>Select Folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0" rowspan="2" colspan="2">
|
||||
<widget class="Line" name="line_5">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="21" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
@@ -1032,34 +1071,6 @@ Mode 4:
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="24" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="appLogsDir">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_appLogsDir">
|
||||
<property name="text">
|
||||
<string>Select Folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="22" column="0" colspan="2">
|
||||
<widget class="Line" name="line_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="18" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="sizePolicy">
|
||||
@@ -1073,6 +1084,13 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_18">
|
||||
<property name="text">
|
||||
<string>Release channel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="17" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="sizePolicy">
|
||||
@@ -1099,6 +1117,13 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="22" column="0" colspan="2">
|
||||
<widget class="Line" name="line_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="23" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
@@ -1123,13 +1148,6 @@ Mode 4:
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_18">
|
||||
<property name="text">
|
||||
<string>Release channel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<widget class="QComboBox" name="OpenTxBranch">
|
||||
<property name="sizePolicy">
|
||||
@@ -1180,7 +1198,38 @@ Mode 4:
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="5" column="1">
|
||||
<item row="10" column="1">
|
||||
<widget class="QDoubleSpinBox" name="volumeGain">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.500000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>3.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<widget class="QComboBox" name="joystickCB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
@@ -1193,14 +1242,20 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="3">
|
||||
<widget class="QPushButton" name="joystickcalButton">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_19">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Calibrate</string>
|
||||
<string>Screenshot capture folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="7" column="1">
|
||||
<widget class="QComboBox" name="backLightColor">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
@@ -1235,31 +1290,22 @@ Mode 4:
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_19">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item row="9" column="3">
|
||||
<widget class="QPushButton" name="joystickcalButton">
|
||||
<property name="text">
|
||||
<string>Screenshot capture folder</string>
|
||||
<string>Calibrate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<item row="0" column="3">
|
||||
<widget class="QPushButton" name="snapshotPathButton">
|
||||
<property name="text">
|
||||
<string>Select Folder</string>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>5</height>
|
||||
</size>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</spacer>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="3">
|
||||
<widget class="QCheckBox" name="snapshotClipboardCKB">
|
||||
@@ -1274,7 +1320,7 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<item row="9" column="2">
|
||||
<widget class="QCheckBox" name="joystickChkB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
@@ -1287,17 +1333,20 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QPushButton" name="snapshotPathButton">
|
||||
<property name="text">
|
||||
<string>Select Folder</string>
|
||||
<item row="12" column="1">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>5</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
@@ -1310,7 +1359,20 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel" name="label_volumeGain">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Simulator Volume Gain</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
@@ -1348,60 +1410,30 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="3">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_20">
|
||||
<property name="text">
|
||||
<string>Simulator controls</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<widget class="QCheckBox" name="simuSW">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Remember simulator switch values</string>
|
||||
<string>Save switch/pot positions on simulator exit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_volumeGain">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item row="2" column="3">
|
||||
<widget class="QPushButton" name="btnClearPos">
|
||||
<property name="text">
|
||||
<string>Simulator Volume Gain</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QDoubleSpinBox" name="volumeGain">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>50</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.500000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>3.000000000000000</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.100000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>1.000000000000000</double>
|
||||
<string>Clear saved positions</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -119,7 +119,14 @@ enum MultiModuleRFProtocols {
|
||||
MODULE_SUBTYPE_MULTI_AFHDS2A_RX,
|
||||
MODULE_SUBTYPE_MULTI_HOTT,
|
||||
MODULE_SUBTYPE_MULTI_FX816,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_FX816
|
||||
MODULE_SUBTYPE_MULTI_BAYANG_RX,
|
||||
MODULE_SUBTYPE_MULTI_PELIKAN,
|
||||
MODULE_SUBTYPE_MULTI_TIGER,
|
||||
MODULE_SUBTYPE_MULTI_XK,
|
||||
MODULE_SUBTYPE_MULTI_XN297DUMP,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX2,
|
||||
MODULE_SUBTYPE_MULTI_FRSKY_R9,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_FRSKY_R9
|
||||
};
|
||||
|
||||
enum TrainerProtocol {
|
||||
|
||||
@@ -40,6 +40,7 @@ static const QStringList STR_SUBTYPE_CUSTOM ({
|
||||
static const QStringList STR_SUBTYPE_FLYSKY {"Standard", "V9x9", "V6x6", "V912", "CX20"};
|
||||
static const QStringList STR_SUBTYPE_HUBSAN {"H107", "H301", "H501"};
|
||||
static const QStringList STR_SUBTYPE_FRSKY {"D16", "D8", "D16 8ch", "V8", "D16 EU-LBT", "D16 EU-LBT 8ch"};
|
||||
static const QStringList STR_SUBTYPE_FRSKYX2 {"D16", "D16 8ch", "D16 EU-LBT", "D16 EU-LBT 8ch"};
|
||||
static const QStringList STR_SUBTYPE_HISKY {"Standard", "HK310"};
|
||||
static const QStringList STR_SUBTYPE_V2X2 {"Standard", "JXD506"};
|
||||
static const QStringList STR_SUBTYPE_DSM {"DSM2 22ms", "DSM2 11ms", "DSMX 22ms", "DSMX 11ms"};
|
||||
@@ -125,6 +126,7 @@ const Multiprotocols multiProtocols {
|
||||
{MODULE_SUBTYPE_MULTI_ESKY150, 1, false, STR_SUBTYPE_ESKY150, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FX816, 0, false, STR_SUBTYPE_FX816, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HOTT, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX2, 3, true, STR_SUBTYPE_FRSKYX2, STR_MULTI_RFTUNE},
|
||||
{MM_RF_CUSTOM_SELECTED, 7, true, STR_SUBTYPE_CUSTOM, STR_MULTI_OPTION},
|
||||
|
||||
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||
@@ -167,7 +169,8 @@ QString Multiprotocols::protocolToString(int protocol, bool custom)
|
||||
"Bayang", "ESky", "MT99XX", "MJXQ", "Shenqi", "FY326", "SFHSS", "J6 PRO","FQ777","Assan","Hontai","Open LRS",
|
||||
"FlySky AFHDS2A", "Q2x2", "Walkera", "Q303", "GW008", "DM002", "Cabell", "ESky 150", "H8 3D", "Corona", "CFlie",
|
||||
"Hitec", "Wfly", "Bugs", "Bugs Mini", "Traxxas", "NCC-1701-A", "E01X", "WL Heli V911S", "GD00X", "Volantex V761",
|
||||
"KFPlan KF606", "Redpine", "Potensic", "ZXS", "FlyZone", "Scanner", "FrSky RX", "FlySky AFHDS2A RX", "HoTT", "Fx816"
|
||||
"KFPlan KF606", "Redpine", "Potensic", "ZXS", "FlyZone", "Scanner", "FrSky RX", "FlySky AFHDS2A RX", "HoTT", "Fx816",
|
||||
"Bayang RX", "Pelikan", "Tiger", "WK", "XN297 Dump", "FrSky X 2.1", "FrSky R9"
|
||||
});
|
||||
|
||||
if (protocol == MM_RF_CUSTOM_SELECTED || custom)
|
||||
|
||||
@@ -693,11 +693,13 @@ class FlightModeField: public TransformedField {
|
||||
internalField.Append(new UnsignedField<8>(this, phase.fadeIn));
|
||||
internalField.Append(new UnsignedField<8>(this, phase.fadeOut));
|
||||
|
||||
for (int i=0; i<rotencCount; i++) {
|
||||
internalField.Append(new SignedField<16>(this, phase.rotaryEncoders[i]));
|
||||
if (version < 219) {
|
||||
for (int i = 0; i < rotencCount; i++) {
|
||||
internalField.Append(new SignedField<16>(this, phase.rotaryEncoders[i]));
|
||||
}
|
||||
}
|
||||
|
||||
for (int i=0; i<MAX_GVARS(board, version); i++) {
|
||||
for (int i = 0; i < MAX_GVARS(board, version); i++) {
|
||||
internalField.Append(new SignedField<16>(this, phase.gvars[i]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1252,6 +1252,7 @@ void registerOpenTxFirmwares()
|
||||
|
||||
/* FrSky Taranis X9D board */
|
||||
firmware = new OpenTxFirmware("opentx-x9d", Firmware::tr("FrSky Taranis X9D"), BOARD_TARANIS_X9D);
|
||||
firmware->addOption("noras", Firmware::tr("Disable RAS (SWR)"));
|
||||
firmware->addOption("haptic", Firmware::tr("Haptic module installed"));
|
||||
addOpenTxTaranisOptions(firmware);
|
||||
addPPMInternalModuleHack(firmware);
|
||||
@@ -1331,7 +1332,6 @@ void registerOpenTxFirmwares()
|
||||
firmware->addOption("noheli", Firmware::tr("Disable HELI menu and cyclic mix support"));
|
||||
firmware->addOption("nogvars", Firmware::tr("Disable Global variables"));
|
||||
firmware->addOption("lua", Firmware::tr("Enable Lua custom scripts screen"));
|
||||
firmware->addOption("flexr9m", Firmware::tr("Enable non certified R9M firmwares"));
|
||||
firmware->addOption("internalmulti", Firmware::tr("Support for MULTI internal module"));
|
||||
addOpenTxFontOptions(firmware);
|
||||
registerOpenTxFirmware(firmware);
|
||||
@@ -1345,11 +1345,12 @@ void registerOpenTxFirmwares()
|
||||
registerOpenTxFirmware(firmware);
|
||||
addOpenTxRfOptions(firmware, FLEX);
|
||||
|
||||
/* Radiomaster TX16S board */
|
||||
// TX16S is unavailable until finalized
|
||||
/* Radiomaster TX16S board
|
||||
firmware = new OpenTxFirmware("opentx-tx16s", Firmware::tr("Radiomaster TX16s / TX16s Hall / TX16s Masterfire"), BOARD_RADIOMASTER_TX16S);
|
||||
addOpenTxFrskyOptions(firmware);
|
||||
firmware->addOption("bluetooth", Firmware::tr("Support for bluetooth module"));
|
||||
registerOpenTxFirmware(firmware);
|
||||
registerOpenTxFirmware(firmware);*/
|
||||
|
||||
/* 9XR-Pro */
|
||||
firmware = new OpenTxFirmware("opentx-9xrpro", Firmware::tr("Turnigy 9XR-PRO"), BOARD_9XRPRO);
|
||||
|
||||
@@ -1,500 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>preferencesDialog</class>
|
||||
<widget class="QDialog" name="preferencesDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>685</width>
|
||||
<height>432</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>685</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Preferences</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4" columnstretch="1">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SetMinimumSize</enum>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>4</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="spacing">
|
||||
<number>8</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="snapshotPath">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Simu BackLight</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_19">
|
||||
<property name="text">
|
||||
<string>Simulator capture folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Joystick</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Remember simulator switches</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="simuSW">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QComboBox" name="joystickCB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="joystickChkB">
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="snapshotClipboardCKB">
|
||||
<property name="text">
|
||||
<string>Use clipboard only</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="joystickcalButton">
|
||||
<property name="text">
|
||||
<string>Calibrate</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="backLightColor">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Blue</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Green</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Red</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Orange</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Yellow</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="snapshotPathButton">
|
||||
<property name="text">
|
||||
<string>Open Folder</string>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Personal splash library</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="libraryPath">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="libraryPathButton">
|
||||
<property name="text">
|
||||
<string>Open Folder</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QComboBox" name="splashincludeCB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Include companion splashes</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Only user defined splashes</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Splash library behaviour</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Custom TX splash screen</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="SplashFileName">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="SplashSelect">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open Image</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QToolButton" name="SplashLibraryDialogButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="clearImageButton">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="InvertPixels">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Invert Pixels</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="imageLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>128</width>
|
||||
<height>64</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>128</width>
|
||||
<height>64</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Panel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>backLightColor</tabstop>
|
||||
<tabstop>joystickCB</tabstop>
|
||||
<tabstop>joystickChkB</tabstop>
|
||||
<tabstop>joystickcalButton</tabstop>
|
||||
<tabstop>simuSW</tabstop>
|
||||
<tabstop>snapshotPath</tabstop>
|
||||
<tabstop>snapshotPathButton</tabstop>
|
||||
<tabstop>snapshotClipboardCKB</tabstop>
|
||||
<tabstop>libraryPath</tabstop>
|
||||
<tabstop>libraryPathButton</tabstop>
|
||||
<tabstop>splashincludeCB</tabstop>
|
||||
<tabstop>SplashFileName</tabstop>
|
||||
<tabstop>SplashSelect</tabstop>
|
||||
<tabstop>SplashLibraryDialogButton</tabstop>
|
||||
<tabstop>clearImageButton</tabstop>
|
||||
<tabstop>InvertPixels</tabstop>
|
||||
<tabstop>buttonBox</tabstop>
|
||||
</tabstops>
|
||||
<resources>
|
||||
<include location="companion.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>preferencesDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>370</x>
|
||||
<y>49</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>preferencesDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>390</x>
|
||||
<y>55</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
@@ -99,8 +99,9 @@ void Joystick::processEvents()
|
||||
axes[i] = moved;
|
||||
}
|
||||
}
|
||||
else
|
||||
else {
|
||||
axisRepeatTimers[i].restart();
|
||||
}
|
||||
}
|
||||
else {
|
||||
emit axisValueChanged(i, 0);
|
||||
@@ -108,17 +109,20 @@ void Joystick::processEvents()
|
||||
}
|
||||
for (i = 0; i < numButtons; i++) {
|
||||
Uint8 changed = SDL_JoystickGetButton(joystick, i);
|
||||
if ( (changed != buttons[i]) ) {
|
||||
if ((changed != buttons[i])) {
|
||||
emit buttonValueChanged(i, (bool) changed);
|
||||
buttons[i] = changed;
|
||||
buttonRepeatTimers[i].restart();
|
||||
} else if (autoRepeat && changed != 0) {
|
||||
}
|
||||
else if (autoRepeat && changed != 0) {
|
||||
if ( buttonRepeatTimers[i].elapsed() >= autoRepeatDelay ) {
|
||||
emit buttonValueChanged(i, (bool) changed);
|
||||
buttons[i] = changed;
|
||||
}
|
||||
} else
|
||||
}
|
||||
else {
|
||||
buttonRepeatTimers[i].restart();
|
||||
}
|
||||
}
|
||||
for (i = 0; i < numHats; i++) {
|
||||
Uint8 changed = SDL_JoystickGetHat(joystick, i);
|
||||
@@ -126,19 +130,22 @@ void Joystick::processEvents()
|
||||
emit hatValueChanged(i, changed);
|
||||
hats[i] = changed;
|
||||
hatRepeatTimers[i].restart();
|
||||
} else if (autoRepeat && changed != 0) {
|
||||
if ( hatRepeatTimers[i].elapsed() >= autoRepeatDelay ) {
|
||||
}
|
||||
else if (autoRepeat && changed != 0) {
|
||||
if (hatRepeatTimers[i].elapsed() >= autoRepeatDelay) {
|
||||
emit hatValueChanged(i, changed);
|
||||
hats[i] = changed;
|
||||
}
|
||||
} else
|
||||
}
|
||||
else {
|
||||
hatRepeatTimers[i].restart();
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < numTrackballs; i++) {
|
||||
int dx, dy;
|
||||
SDL_JoystickGetBall(joystick, i, &dx, &dy);
|
||||
if ( dx != 0 || dy != 0 )
|
||||
if (dx != 0 || dy != 0)
|
||||
emit trackballValueChanged(i, dx, dy);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -699,9 +699,11 @@ void SimulatorWidget::restoreRadioWidgetsState()
|
||||
void SimulatorWidget::saveRadioWidgetsState(QList<QByteArray> & state)
|
||||
{
|
||||
if (m_radioWidgets.size()) {
|
||||
state.clear();
|
||||
foreach (RadioWidget * rw, m_radioWidgets)
|
||||
state.append(rw->getStateData());
|
||||
if (g.simuSW()) {
|
||||
state.clear();
|
||||
foreach (RadioWidget * rw, m_radioWidgets)
|
||||
state.append(rw->getStateData());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ Section "OpenTX Companion @VERSION_FAMILY@" SecDummy
|
||||
|
||||
;Registry information for add/remove programs
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion @VERSION_FAMILY@" "DisplayName" "OpenTX Companion @VERSION_FAMILY@"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion @VERSION_FAMILY@" "DisplayVersion" "@VERSION@"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion @VERSION_FAMILY@" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\""
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion @VERSION_FAMILY@" "DisplayIcon" "$\"$INSTDIR\companion.exe$\""
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion @VERSION_FAMILY@" "Publisher" "OpenTX"
|
||||
|
||||
@@ -452,12 +452,12 @@ void lcdDraw8bitsNumber(coord_t x, coord_t y, int8_t val)
|
||||
lcdDrawNumber(x, y, val);
|
||||
}
|
||||
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int val, LcdFlags flags)
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags)
|
||||
{
|
||||
lcdDrawNumber(x, y, val, flags, 0);
|
||||
}
|
||||
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int val, LcdFlags flags, uint8_t len)
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags flags, uint8_t len)
|
||||
{
|
||||
char str[16+1];
|
||||
char *s = str+16;
|
||||
|
||||
@@ -117,8 +117,8 @@ void drawTimerWithMode(coord_t x, coord_t y, uint8_t index, LcdFlags att);
|
||||
void lcdDrawHexNumber(coord_t x, coord_t y, uint32_t val, LcdFlags mode=0);
|
||||
void lcdDrawHexChar(coord_t x, coord_t y, uint8_t val, LcdFlags flags=0);
|
||||
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int val, LcdFlags mode, uint8_t len);
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int val, LcdFlags mode=0);
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags mode, uint8_t len);
|
||||
void lcdDrawNumber(coord_t x, coord_t y, int32_t val, LcdFlags mode=0);
|
||||
void lcdDraw8bitsNumber(coord_t x, coord_t y, int8_t val);
|
||||
|
||||
void putsModelName(coord_t x, coord_t y, char * name, uint8_t id, LcdFlags att);
|
||||
|
||||
@@ -85,6 +85,7 @@ enum MenuModelSetupItems {
|
||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL,
|
||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE,
|
||||
#if defined(MULTIMODULE)
|
||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_PROTOCOL,
|
||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE,
|
||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS,
|
||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS,
|
||||
@@ -113,6 +114,7 @@ enum MenuModelSetupItems {
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
|
||||
#if defined(MULTIMODULE)
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SUBTYPE,
|
||||
#endif
|
||||
#if defined(MULTIMODULE)
|
||||
@@ -208,7 +210,7 @@ inline uint8_t MODULE_TYPE_ROWS(int moduleIdx)
|
||||
return 1;
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(moduleIdx)) {
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
@@ -306,19 +308,20 @@ void onBluetoothConnectMenu(const char * result)
|
||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||
#define INTERNAL_MODULE_ROWS \
|
||||
LABEL(InternalModule), \
|
||||
MODULE_TYPE_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE*/ \
|
||||
MULTIMODULE_SUBTYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE*/ \
|
||||
MODULE_TYPE_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE */ \
|
||||
MULTIMODULE_TYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PROTOCOL */ \
|
||||
MULTIMODULE_SUBTYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE */ \
|
||||
MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \
|
||||
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS*/ \
|
||||
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS */ \
|
||||
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(IF_INTERNAL_MODULE_ON(isModuleRxNumAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1))), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM*/ \
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM */ \
|
||||
MODULE_OPTION_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS */ \
|
||||
MULTIMODULE_MODULE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_AUTOBIND */ \
|
||||
EXTERNAL_ANTENNA_ROW /* ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA */ \
|
||||
MODULE_POWER_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_POWER */ \
|
||||
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE */ \
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_REGISTER_RANGE */ \
|
||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_OPTIONS*/ \
|
||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_OPTIONS */ \
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1 */ \
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_2 */ \
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_3 */
|
||||
@@ -362,7 +365,8 @@ void menuModelSetup(event_t event)
|
||||
|
||||
LABEL(ExternalModule),
|
||||
MODULE_TYPE_ROWS(EXTERNAL_MODULE),
|
||||
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE)
|
||||
MULTIMODULE_TYPE_ROWS(EXTERNAL_MODULE) // PROTOCOL
|
||||
MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE) // SUBTYPE
|
||||
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE)
|
||||
MODULE_CHANNELS_ROWS(EXTERNAL_MODULE),
|
||||
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, MODULE_BIND_ROWS(EXTERNAL_MODULE)), // line reused for PPM: PPM settings
|
||||
@@ -904,12 +908,6 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_DSM_PROTOCOLS, g_model.moduleData[moduleIdx].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (isModuleR9MNonAccess(moduleIdx))
|
||||
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_R9M_REGION, g_model.moduleData[moduleIdx].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(moduleIdx)) {
|
||||
int multi_rfProto = g_model.moduleData[moduleIdx].getMultiProtocol();
|
||||
lcdDrawMultiProtocolString(lcdNextPos + 3, y, moduleIdx, multi_rfProto, menuHorizontalPosition == 1 ? attr : 0);
|
||||
}
|
||||
#endif
|
||||
if (attr && menuHorizontalPosition == 0 && moduleIdx == EXTERNAL_MODULE) {
|
||||
if (s_editMode > 0) {
|
||||
g_model.moduleData[moduleIdx].type = MODULE_TYPE_NONE;
|
||||
@@ -958,18 +956,6 @@ void menuModelSetup(event_t event)
|
||||
g_model.moduleData[moduleIdx].channelsCount = defaultModuleChannels_M8(moduleIdx);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(moduleIdx)) {
|
||||
int multiRfProto = g_model.moduleData[moduleIdx].getMultiProtocol();
|
||||
CHECK_INCDEC_MODELVAR_CHECK(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MULTI_MAX_PROTOCOLS, isMultiProtocolSelectable);
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[moduleIdx].setMultiProtocol(multiRfProto);
|
||||
g_model.moduleData[moduleIdx].subType = 0;
|
||||
resetMultiProtocolsOptions(moduleIdx);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].subType, 0, MODULE_SUBTYPE_PXX1_LAST);
|
||||
}
|
||||
@@ -1004,6 +990,26 @@ void menuModelSetup(event_t event)
|
||||
break;
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||
case ITEM_MODEL_SETUP_INTERNAL_MODULE_PROTOCOL:
|
||||
#endif
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL:
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, TR_TYPE);
|
||||
int multi_rfProto = g_model.moduleData[moduleIdx].getMultiProtocol();
|
||||
lcdDrawMultiProtocolString(MODEL_SETUP_2ND_COLUMN, y, moduleIdx, multi_rfProto, attr);
|
||||
if (attr) {
|
||||
int multiRfProto = g_model.moduleData[moduleIdx].getMultiProtocol();
|
||||
CHECK_INCDEC_MODELVAR_CHECK(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MULTI_MAX_PROTOCOLS, isMultiProtocolSelectable);
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[moduleIdx].setMultiProtocol(multiRfProto);
|
||||
g_model.moduleData[moduleIdx].subType = 0;
|
||||
resetMultiProtocolsOptions(moduleIdx);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||
case ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE:
|
||||
#endif
|
||||
|
||||
@@ -98,6 +98,7 @@ enum MenuModelSetupItems {
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
|
||||
#if defined (MULTIMODULE)
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
|
||||
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
|
||||
#endif
|
||||
@@ -130,8 +131,6 @@ enum MenuModelSetupItems {
|
||||
|
||||
#define MODEL_SETUP_2ND_COLUMN (LCD_W-17*FW-MENUS_SCROLLBAR_WIDTH-1)
|
||||
#define MODEL_SETUP_3RD_COLUMN (MODEL_SETUP_2ND_COLUMN+6*FW)
|
||||
#define MODEL_SETUP_BIND_OFS 3*FW-2
|
||||
#define MODEL_SETUP_RANGE_OFS 7*FW
|
||||
#define MODEL_SETUP_SET_FAILSAFE_OFS 10*FW-2
|
||||
|
||||
void copySelection(char * dst, const char * src, uint8_t size)
|
||||
@@ -250,11 +249,6 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW()
|
||||
{
|
||||
if (isModuleXJT(EXTERNAL_MODULE) || isModuleR9MNonAccess(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE))
|
||||
return 1;
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||
return 1 + MULTIMODULE_RFPROTO_COLUMNS(EXTERNAL_MODULE);
|
||||
}
|
||||
#endif
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
@@ -353,7 +347,7 @@ void menuModelSetup(event_t event)
|
||||
LABEL(InternalModule),
|
||||
INTERNAL_MODULE_TYPE_ROWS,
|
||||
MODULE_CHANNELS_ROWS(INTERNAL_MODULE),
|
||||
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(isModuleRangeAvailable(INTERNAL_MODULE)? (uint8_t)2 : (uint8_t)1)), // RxNum, Range check and Register buttons
|
||||
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(isModuleBindRangeAvailable(INTERNAL_MODULE)? (uint8_t)2 : (uint8_t)1)), // RxNum, Range check and Register buttons
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum for ACCESS
|
||||
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), // Failsafe
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), // Range check and Register buttons
|
||||
@@ -364,6 +358,7 @@ void menuModelSetup(event_t event)
|
||||
|
||||
LABEL(ExternalModule),
|
||||
EXTERNAL_MODULE_TYPE_ROW(),
|
||||
MULTIMODULE_TYPE_ROW(EXTERNAL_MODULE)
|
||||
MULTIMODULE_STATUS_ROWS(EXTERNAL_MODULE)
|
||||
MODULE_CHANNELS_ROWS(EXTERNAL_MODULE),
|
||||
IF_NOT_ACCESS_MODULE_RF(EXTERNAL_MODULE, MODULE_BIND_ROWS(EXTERNAL_MODULE)),
|
||||
@@ -815,15 +810,6 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (isModuleR9MNonAccess(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(lcdNextPos + 3, y, STR_R9M_REGION, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(EXTERNAL_MODULE)) {
|
||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol();
|
||||
// Do not use MODEL_SETUP_3RD_COLUMN here since some the protocol string are so long that we cannot afford the 2 spaces (+6) here
|
||||
lcdDrawMultiProtocolString(lcdNextPos + 3, y, EXTERNAL_MODULE, multi_rfProto, menuHorizontalPosition == 1 ? attr : 0);
|
||||
if (MULTIMODULE_HAS_SUBTYPE(EXTERNAL_MODULE))
|
||||
lcdDrawMultiSubProtocolString(lcdNextPos + 3, y, EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||
}
|
||||
#endif
|
||||
if (attr && menuHorizontalPosition == 0) {
|
||||
if (s_editMode > 0) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].type = MODULE_TYPE_NONE;
|
||||
@@ -908,6 +894,40 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_PROTOCOL:
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, TR_TYPE);
|
||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol();
|
||||
lcdDrawMultiProtocolString(MODEL_SETUP_2ND_COLUMN, y, EXTERNAL_MODULE, multi_rfProto, menuHorizontalPosition == 0 ? attr : 0);
|
||||
if (MULTIMODULE_HAS_SUBTYPE(EXTERNAL_MODULE))
|
||||
lcdDrawMultiSubProtocolString(MODEL_SETUP_3RD_COLUMN + 15, y, EXTERNAL_MODULE, g_model.moduleData[EXTERNAL_MODULE].subType,
|
||||
menuHorizontalPosition == 1 ? attr : 0);
|
||||
if (attr) {
|
||||
switch (menuHorizontalPosition) {
|
||||
case 0: {
|
||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol();
|
||||
CHECK_INCDEC_MODELVAR_CHECK(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MULTI_MAX_PROTOCOLS, isMultiProtocolSelectable);
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||
resetMultiProtocolsOptions(EXTERNAL_MODULE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, getMaxMultiSubtype(EXTERNAL_MODULE));
|
||||
if (checkIncDec_Ret) {
|
||||
resetMultiProtocolsOptions(EXTERNAL_MODULE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_MODEL_SETUP_TRAINER_LABEL:
|
||||
lcdDrawTextAlignedLeft(y, STR_TRAINER);
|
||||
break;
|
||||
@@ -1093,9 +1113,8 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
else {
|
||||
horzpos_t l_posHorz = menuHorizontalPosition;
|
||||
coord_t xOffsetBind = MODEL_SETUP_BIND_OFS;
|
||||
coord_t bindButtonPos = MODEL_SETUP_2ND_COLUMN;
|
||||
if (!isModuleRxNumAvailable(moduleIdx)) {
|
||||
xOffsetBind = 0;
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_RECEIVER);
|
||||
if (attr) l_posHorz += 1;
|
||||
}
|
||||
@@ -1103,8 +1122,8 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_RECEIVER_NUM);
|
||||
}
|
||||
if (isModuleBindRangeAvailable(moduleIdx)) {
|
||||
if (xOffsetBind)
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
bindButtonPos = lcdNextPos + FW;
|
||||
if (attr && l_posHorz==0) {
|
||||
if (s_editMode>0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx));
|
||||
@@ -1121,8 +1140,8 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
}
|
||||
}
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN+xOffsetBind, y, STR_MODULE_BIND, l_posHorz==1 ? attr : 0);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN+MODEL_SETUP_RANGE_OFS+xOffsetBind, y, STR_MODULE_RANGE, l_posHorz==2 ? attr : 0);
|
||||
lcdDrawText(bindButtonPos, y, STR_MODULE_BIND, l_posHorz==1 ? attr : 0);
|
||||
lcdDrawText(lcdNextPos + FW, y, STR_MODULE_RANGE, l_posHorz==2 ? attr : 0);
|
||||
uint8_t newFlag = 0;
|
||||
#if defined(MULTIMODULE)
|
||||
if (getMultiBindStatus(moduleIdx) == MULTI_BIND_FINISHED) {
|
||||
|
||||
@@ -38,12 +38,4 @@ void menuRadioDiagAnalogs(event_t event)
|
||||
lcdDrawNumber(x+10*FW-1, y, (int16_t)calibratedAnalogs[CONVERT_MODE(i)]*25/256, RIGHT);
|
||||
#endif
|
||||
}
|
||||
|
||||
// RAS
|
||||
if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||
lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH, "RAS");
|
||||
lcdDrawNumber(10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.swrInternal.value(), RIGHT);
|
||||
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+6*FH, "XJTVER");
|
||||
lcdDrawNumber(LCD_W/2 + 10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.xjtVersion, RIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,14 +46,18 @@ void onRxOptionsUpdateConfirm(const char * result)
|
||||
enum {
|
||||
ITEM_RECEIVER_SETTINGS_PWM_RATE,
|
||||
ITEM_RECEIVER_SETTINGS_TELEMETRY,
|
||||
ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW,
|
||||
ITEM_RECEIVER_SETTINGS_SPORT_FPORT,
|
||||
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1,
|
||||
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2,
|
||||
ITEM_RECEIVER_SETTINGS_PINMAP_FIRST
|
||||
};
|
||||
|
||||
#define IS_RECEIVER_CAPABILITY_ENABLED(capability) (reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability))
|
||||
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t(IS_RECEIVER_CAPABILITY_ENABLED(capability) ? count : HIDDEN_ROW)
|
||||
|
||||
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t((reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability)) ? count : HIDDEN_ROW)
|
||||
#define CH_ENABLE_SPORT 4
|
||||
#define CH_ENABLE_SBUS 5
|
||||
|
||||
bool menuModelReceiverOptions(event_t event)
|
||||
{
|
||||
@@ -76,6 +80,7 @@ bool menuModelReceiverOptions(event_t event)
|
||||
SUBMENU(STR_RECEIVER_OPTIONS, ICON_MODEL_SETUP, ITEM_RECEIVER_SETTINGS_PINMAP_FIRST + outputsCount, {
|
||||
0, // PWM rate
|
||||
isModuleR9MAccess(g_moduleIdx) && receiverVariant == PXX2_VARIANT_EU && reusableBuffer.hardwareAndSettings.moduleSettings.txPower > 14 /*25mW*/ ? READONLY_ROW : (uint8_t)0, // Telemetry
|
||||
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_TELEMETRY_25MW, 0),
|
||||
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT, 0),
|
||||
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
|
||||
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
|
||||
@@ -156,6 +161,14 @@ bool menuModelReceiverOptions(event_t event)
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, "25mw Tele");
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw, RECEIVER_OPTIONS_2ND_COLUMN, y, attr, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_RECEIVER_SETTINGS_SPORT_FPORT:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, "F.Port");
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.fport = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport, RECEIVER_OPTIONS_2ND_COLUMN, y, attr, event);
|
||||
@@ -182,21 +195,43 @@ bool menuModelReceiverOptions(event_t event)
|
||||
int32_t channelValue = channelOutputs[channel];
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_PIN);
|
||||
lcdDrawNumber(lcdNextPos + 1, y, pin + 1);
|
||||
putsChn(100, y, channel + 1, attr);
|
||||
|
||||
uint8_t channelMax = sentModuleChannels(g_moduleIdx) - 1;
|
||||
uint8_t selectionMax = channelMax;
|
||||
|
||||
if (IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6)) {
|
||||
if (CH_ENABLE_SPORT == pin || CH_ENABLE_SBUS == pin) {
|
||||
selectionMax += 1;
|
||||
}
|
||||
if (CH_ENABLE_SPORT == pin && selectionMax == channel) {
|
||||
lcdDrawText(100, y, "S.PORT", attr);
|
||||
}
|
||||
else if (CH_ENABLE_SBUS == pin && selectionMax == channel) {
|
||||
lcdDrawText(100, y, "SBUS", attr);
|
||||
}
|
||||
else {
|
||||
putsChn(100, y, channel + 1, attr);
|
||||
}
|
||||
}
|
||||
else {
|
||||
putsChn(100, y, channel + 1, attr);
|
||||
}
|
||||
|
||||
// Channel
|
||||
if (attr) {
|
||||
mapping = checkIncDec(event, mapping, 0, sentModuleChannels(g_moduleIdx) - 1);
|
||||
mapping = checkIncDec(event, mapping, 0, selectionMax);
|
||||
if (checkIncDec_Ret) {
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
|
||||
}
|
||||
}
|
||||
|
||||
// Bargraph
|
||||
lcdDrawRect(RECEIVER_OPTIONS_2ND_COLUMN, y + 4, wbar + 1, 10);
|
||||
const uint8_t lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
|
||||
const coord_t xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
|
||||
lcdDrawSolidFilledRect(xChannel, y + 5, lenChannel, 8, TEXT_INVERTED_BGCOLOR);
|
||||
if (channel <= channelMax) {
|
||||
lcdDrawRect(RECEIVER_OPTIONS_2ND_COLUMN, y + 4, wbar + 1, 10);
|
||||
auto lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
|
||||
auto xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
|
||||
lcdDrawSolidFilledRect(xChannel, y + 5, lenChannel, 8, TEXT_INVERTED_BGCOLOR);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ void showAlertBox(const char * title, const char * text, const char * action, ui
|
||||
lcdRefresh();
|
||||
lcdSetContrast();
|
||||
waitKeysReleased();
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
checkBacklight();
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
constexpr coord_t LEFT_NAME_COLUMN = MENUS_MARGIN_LEFT;
|
||||
constexpr coord_t RIGHT_NAME_COLUMN = LCD_W / 2;
|
||||
constexpr coord_t ANA_OFFSET = 150;
|
||||
constexpr coord_t RAS_TOP_POSITION = LCD_H - 45;
|
||||
|
||||
bool menuRadioDiagAnalogs(event_t event)
|
||||
{
|
||||
@@ -49,14 +48,6 @@ bool menuRadioDiagAnalogs(event_t event)
|
||||
#endif
|
||||
}
|
||||
|
||||
// RAS
|
||||
if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, RAS_TOP_POSITION, "RAS : ");
|
||||
lcdDrawNumber(lcdNextPos, RAS_TOP_POSITION, telemetryData.swrInternal.value(), 0);
|
||||
lcdDrawText(LCD_W / 2, RAS_TOP_POSITION, "XJTVER : ");
|
||||
lcdDrawNumber(lcdNextPos, RAS_TOP_POSITION, telemetryData.xjtVersion, 0);
|
||||
}
|
||||
|
||||
#if (NUM_PWMSTICKS > 0) && !defined(SIMU)
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP + 8 * FH, STICKS_PWM_ENABLED() ? "Sticks: PWM" : "Sticks: ANA");
|
||||
#endif
|
||||
|
||||
@@ -72,6 +72,8 @@ enum MenuRadioHardwareItems {
|
||||
#endif
|
||||
|
||||
ITEM_RADIO_HARDWARE_JITTER_FILTER,
|
||||
ITEM_RADIO_HARDWARE_RAS,
|
||||
|
||||
#if defined(SPORT_UPDATE_PWR_GPIO)
|
||||
ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER,
|
||||
#endif
|
||||
@@ -79,7 +81,8 @@ enum MenuRadioHardwareItems {
|
||||
ITEM_RADIO_HARDWARE_MAX
|
||||
};
|
||||
|
||||
#define HW_SETTINGS_COLUMN 150
|
||||
#define HW_SETTINGS_COLUMN1 150
|
||||
#define HW_SETTINGS_COLUMN2 200
|
||||
|
||||
#if defined(AUX_SERIAL)
|
||||
#define AUX_SERIAL_ROW 0,
|
||||
@@ -157,6 +160,7 @@ bool menuRadioHardware(event_t event)
|
||||
|
||||
AUX_SERIAL_ROW /* aux serial mode */
|
||||
0, /* ADC filter */
|
||||
READONLY_ROW /* RAS */,
|
||||
SPORT_POWER_ROWS
|
||||
1, /* Debug */
|
||||
});
|
||||
@@ -197,7 +201,7 @@ bool menuRadioHardware(event_t event)
|
||||
case ITEM_RADIO_HARDWARE_STICK2:
|
||||
case ITEM_RADIO_HARDWARE_STICK3:
|
||||
case ITEM_RADIO_HARDWARE_STICK4:
|
||||
editStickHardwareSettings(HW_SETTINGS_COLUMN, y, k - ITEM_RADIO_HARDWARE_STICK1, event, attr);
|
||||
editStickHardwareSettings(HW_SETTINGS_COLUMN1, y, k - ITEM_RADIO_HARDWARE_STICK1, event, attr);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_LS:
|
||||
@@ -211,11 +215,11 @@ bool menuRadioHardware(event_t event)
|
||||
uint8_t mask = (0x01 << idx);
|
||||
lcdDrawTextAtIndex(INDENT_WIDTH, y, STR_VSRCRAW, NUM_STICKS+NUM_POTS+idx+1, menuHorizontalPosition < 0 ? attr : 0);
|
||||
if (ZEXIST(g_eeGeneral.anaNames[NUM_STICKS+NUM_POTS+idx]) || (attr && menuHorizontalPosition == 0))
|
||||
editName(HW_SETTINGS_COLUMN, y, g_eeGeneral.anaNames[NUM_STICKS+NUM_POTS+idx], LEN_ANA_NAME, event, attr && menuHorizontalPosition == 0);
|
||||
editName(HW_SETTINGS_COLUMN1, y, g_eeGeneral.anaNames[NUM_STICKS+NUM_POTS+idx], LEN_ANA_NAME, event, attr && menuHorizontalPosition == 0);
|
||||
else
|
||||
lcdDrawMMM(HW_SETTINGS_COLUMN, y, 0);
|
||||
lcdDrawMMM(HW_SETTINGS_COLUMN1, y, 0);
|
||||
uint8_t potType = (g_eeGeneral.slidersConfig & mask) >> idx;
|
||||
potType = editChoice(HW_SETTINGS_COLUMN+50, y, STR_SLIDERTYPES, potType, SLIDER_NONE, SLIDER_WITH_DETENT, menuHorizontalPosition == 1 ? attr : 0, event);
|
||||
potType = editChoice(HW_SETTINGS_COLUMN2, y, STR_SLIDERTYPES, potType, SLIDER_NONE, SLIDER_WITH_DETENT, menuHorizontalPosition == 1 ? attr : 0, event);
|
||||
g_eeGeneral.slidersConfig &= ~mask;
|
||||
g_eeGeneral.slidersConfig |= (potType << idx);
|
||||
break;
|
||||
@@ -236,11 +240,11 @@ bool menuRadioHardware(event_t event)
|
||||
int index = k - ITEM_RADIO_HARDWARE_POT1;
|
||||
lcdDrawTextAtIndex(INDENT_WIDTH, y, STR_VSRCRAW, NUM_STICKS+index+1, menuHorizontalPosition < 0 ? attr : 0);
|
||||
if (ZEXIST(g_eeGeneral.anaNames[NUM_STICKS+index]) || (attr && menuHorizontalPosition == 0))
|
||||
editName(HW_SETTINGS_COLUMN, y, g_eeGeneral.anaNames[NUM_STICKS+index], LEN_ANA_NAME, event, attr && menuHorizontalPosition == 0);
|
||||
editName(HW_SETTINGS_COLUMN1, y, g_eeGeneral.anaNames[NUM_STICKS+index], LEN_ANA_NAME, event, attr && menuHorizontalPosition == 0);
|
||||
else
|
||||
lcdDrawMMM(HW_SETTINGS_COLUMN, y, 0);
|
||||
lcdDrawMMM(HW_SETTINGS_COLUMN1, y, 0);
|
||||
uint32_t potType = bfGet<uint32_t>(g_eeGeneral.potsConfig, 2*(index), 2);
|
||||
potType = editChoice(HW_SETTINGS_COLUMN+50, y, STR_POTTYPES, potType, POT_NONE, POT_WITHOUT_DETENT, menuHorizontalPosition == 1 ? attr : 0, event);
|
||||
potType = editChoice(HW_SETTINGS_COLUMN2, y, STR_POTTYPES, potType, POT_NONE, POT_WITHOUT_DETENT, menuHorizontalPosition == 1 ? attr : 0, event);
|
||||
g_eeGeneral.potsConfig = bfSet<uint32_t>(g_eeGeneral.potsConfig, potType, 2*index, 2);
|
||||
break;
|
||||
}
|
||||
@@ -264,10 +268,10 @@ bool menuRadioHardware(event_t event)
|
||||
int config = SWITCH_CONFIG(index);
|
||||
lcdDrawTextAtIndex(INDENT_WIDTH, y, STR_VSRCRAW, MIXSRC_FIRST_SWITCH-MIXSRC_Rud+index+1, menuHorizontalPosition < 0 ? attr : 0);
|
||||
if (ZEXIST(g_eeGeneral.switchNames[index]) || (attr && menuHorizontalPosition == 0))
|
||||
editName(HW_SETTINGS_COLUMN, y, g_eeGeneral.switchNames[index], LEN_SWITCH_NAME, event, menuHorizontalPosition == 0 ? attr : 0);
|
||||
editName(HW_SETTINGS_COLUMN1, y, g_eeGeneral.switchNames[index], LEN_SWITCH_NAME, event, menuHorizontalPosition == 0 ? attr : 0);
|
||||
else
|
||||
lcdDrawMMM(HW_SETTINGS_COLUMN, y, 0);
|
||||
config = editChoice(HW_SETTINGS_COLUMN+50, y, STR_SWTYPES, config, SWITCH_NONE, SWITCH_TYPE_MAX(index), menuHorizontalPosition == 1 ? attr : 0, event);
|
||||
lcdDrawMMM(HW_SETTINGS_COLUMN1, y, 0);
|
||||
config = editChoice(HW_SETTINGS_COLUMN2, y, STR_SWTYPES, config, SWITCH_NONE, SWITCH_TYPE_MAX(index), menuHorizontalPosition == 1 ? attr : 0, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
g_eeGeneral.switchConfig = bfSet<swconfig_t>(g_eeGeneral.switchConfig, config, 2*index, 2);
|
||||
}
|
||||
@@ -276,18 +280,18 @@ bool menuRadioHardware(event_t event)
|
||||
|
||||
case ITEM_RADIO_HARDWARE_BATTERY_CALIB:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BATT_CALIB);
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN+50, y, getBatteryVoltage(), attr|PREC2, 0, NULL, "V");
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, getBatteryVoltage(), attr|PREC2, 0, NULL, "V");
|
||||
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.txVoltageCalibration, -127, 127);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_RTC_BATTERY:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_RTC_BATT);
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN+50, y, getRTCBatteryVoltage(), attr|PREC2, 0, NULL, "V");
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, getRTCBatteryVoltage(), attr|PREC2, 0, NULL, "V");
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_SERIAL_BAUDRATE:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MAXBAUDRATE);
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN+50, y, CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate], attr|LEFT);
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, CROSSFIRE_BAUDRATES[g_eeGeneral.telemetryBaudrate], attr|LEFT);
|
||||
if (attr) {
|
||||
g_eeGeneral.telemetryBaudrate = DIM(CROSSFIRE_BAUDRATES) - 1 - checkIncDecModel(event, DIM(CROSSFIRE_BAUDRATES) - 1 - g_eeGeneral.telemetryBaudrate, 0, DIM(CROSSFIRE_BAUDRATES) - 1);
|
||||
if (checkIncDec_Ret && IS_EXTERNAL_MODULE_ON()) {
|
||||
@@ -307,40 +311,40 @@ bool menuRadioHardware(event_t event)
|
||||
{
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_RTC_CHECK);
|
||||
uint8_t b = 1 - g_eeGeneral.disableRtcWarning;
|
||||
g_eeGeneral.disableRtcWarning = 1 - editCheckBox(b, HW_SETTINGS_COLUMN + 50, y, attr, event);
|
||||
g_eeGeneral.disableRtcWarning = 1 - editCheckBox(b, HW_SETTINGS_COLUMN2, y, attr, event);
|
||||
break;
|
||||
}
|
||||
#if defined(BLUETOOTH)
|
||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_MODE:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLUETOOTH);
|
||||
g_eeGeneral.bluetoothMode = editChoice(HW_SETTINGS_COLUMN+50, y, STR_BLUETOOTH_MODES, g_eeGeneral.bluetoothMode, BLUETOOTH_OFF, BLUETOOTH_TRAINER, attr, event);
|
||||
g_eeGeneral.bluetoothMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_BLUETOOTH_MODES, g_eeGeneral.bluetoothMode, BLUETOOTH_OFF, BLUETOOTH_TRAINER, attr, event);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_PIN_CODE);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN+50, y, "000000", 0);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, "000000", 0);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_LOCAL_ADDR:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_LOCAL_ADDR);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN+50, y, bluetooth.localAddr[0] == '\0' ? "---" : bluetooth.localAddr);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, bluetooth.localAddr[0] == '\0' ? "---" : bluetooth.localAddr);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_DISTANT_ADDR:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_BLUETOOTH_DIST_ADDR);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN+50, y, bluetooth.distantAddr[0] == '\0' ? "---" : bluetooth.distantAddr);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, bluetooth.distantAddr[0] == '\0' ? "---" : bluetooth.distantAddr);
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_NAME:
|
||||
lcdDrawText(INDENT_WIDTH, y, STR_NAME);
|
||||
editName(HW_SETTINGS_COLUMN+50, y, g_eeGeneral.bluetoothName, LEN_BLUETOOTH_NAME, event, attr);
|
||||
editName(HW_SETTINGS_COLUMN2, y, g_eeGeneral.bluetoothName, LEN_BLUETOOTH_NAME, event, attr);
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||
case ITEM_RADIO_HARDWARE_EXTERNAL_ANTENNA:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_ANTENNA);
|
||||
reusableBuffer.radioHardware.antennaMode = editChoice(HW_SETTINGS_COLUMN+50, y, STR_ANTENNA_MODES, reusableBuffer.radioHardware.antennaMode, ANTENNA_MODE_INTERNAL, ANTENNA_MODE_EXTERNAL, attr, event);
|
||||
reusableBuffer.radioHardware.antennaMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_ANTENNA_MODES, reusableBuffer.radioHardware.antennaMode, ANTENNA_MODE_INTERNAL, ANTENNA_MODE_EXTERNAL, attr, event);
|
||||
if (!s_editMode && reusableBuffer.radioHardware.antennaMode != g_eeGeneral.antennaMode) {
|
||||
if (!isExternalAntennaEnabled() && (reusableBuffer.radioHardware.antennaMode == ANTENNA_MODE_EXTERNAL || (reusableBuffer.radioHardware.antennaMode == ANTENNA_MODE_PER_MODEL && g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode == ANTENNA_MODE_EXTERNAL))) {
|
||||
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onHardwareAntennaSwitchConfirm);
|
||||
@@ -360,7 +364,7 @@ bool menuRadioHardware(event_t event)
|
||||
#if defined(RADIO_TX16S)
|
||||
lcdDrawText(lcdNextPos, y, " (TTL)");
|
||||
#endif
|
||||
g_eeGeneral.auxSerialMode = editChoice(HW_SETTINGS_COLUMN+50, y, STR_AUX_SERIAL_MODES, g_eeGeneral.auxSerialMode, 0, UART_MODE_MAX, attr, event);
|
||||
g_eeGeneral.auxSerialMode = editChoice(HW_SETTINGS_COLUMN2, y, STR_AUX_SERIAL_MODES, g_eeGeneral.auxSerialMode, 0, UART_MODE_MAX, attr, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
auxSerialInit(g_eeGeneral.auxSerialMode, modelTelemetryProtocol());
|
||||
}
|
||||
@@ -371,14 +375,32 @@ bool menuRadioHardware(event_t event)
|
||||
{
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_JITTER_FILTER);
|
||||
uint8_t b = 1 - g_eeGeneral.jitterFilter;
|
||||
g_eeGeneral.jitterFilter = 1 - editCheckBox(b, HW_SETTINGS_COLUMN+50, y, attr, event);
|
||||
g_eeGeneral.jitterFilter = 1 - editCheckBox(b, HW_SETTINGS_COLUMN2, y, attr, event);
|
||||
break;
|
||||
}
|
||||
|
||||
case ITEM_RADIO_HARDWARE_RAS:
|
||||
#if defined(HARDWARE_INTERNAL_RAS)
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, "RAS");
|
||||
if (telemetryData.swrInternal.isFresh())
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value());
|
||||
else
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, "---");
|
||||
lcdDrawText(lcdNextPos, y, "/");
|
||||
#else
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, "Ext. RAS");
|
||||
lcdNextPos = HW_SETTINGS_COLUMN2;
|
||||
#endif
|
||||
if (telemetryData.swrExternal.isFresh())
|
||||
lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value());
|
||||
else
|
||||
lcdDrawText(lcdNextPos, y, "---");
|
||||
break;
|
||||
|
||||
#if defined(SPORT_UPDATE_PWR_GPIO)
|
||||
case ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_SPORT_UPDATE_POWER_MODE);
|
||||
g_eeGeneral.sportUpdatePower = editChoice(HW_SETTINGS_COLUMN + 50, y, STR_SPORT_UPDATE_POWER_MODES, g_eeGeneral.sportUpdatePower, 0, 1, attr, event);
|
||||
g_eeGeneral.sportUpdatePower = editChoice(HW_SETTINGS_COLUMN2, y, STR_SPORT_UPDATE_POWER_MODES, g_eeGeneral.sportUpdatePower, 0, 1, attr, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
SPORT_UPDATE_POWER_INIT();
|
||||
}
|
||||
@@ -387,7 +409,7 @@ bool menuRadioHardware(event_t event)
|
||||
|
||||
case ITEM_RADIO_HARDWARE_DEBUG:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_DEBUG);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN + 50, y, STR_ANALOGS_BTN, menuHorizontalPosition == 0 ? attr : 0);
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, STR_ANALOGS_BTN, menuHorizontalPosition == 0 ? attr : 0);
|
||||
lcdDrawText(lcdNextPos + 10, y, STR_KEYS_BTN, menuHorizontalPosition == 1 ? attr : 0);
|
||||
if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
if (menuHorizontalPosition == 0)
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "io/frsky_firmware_update.h"
|
||||
#include "io/multi_firmware_update.h"
|
||||
#include "opentx.h"
|
||||
@@ -91,6 +90,49 @@ void onSdFormatConfirm(const char * result)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(PXX2)
|
||||
void onUpdateConfirmation(const char * result)
|
||||
{
|
||||
if (result == STR_OK) {
|
||||
OtaUpdateInformation * destination = moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].otaUpdateInformation;
|
||||
Pxx2OtaUpdate otaUpdate(reusableBuffer.sdManager.otaUpdateInformation.module, destination->candidateReceiversNames[destination->selectedReceiverIndex]);
|
||||
otaUpdate.flashFirmware(destination->filename);
|
||||
}
|
||||
else {
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
void onUpdateStateChanged()
|
||||
{
|
||||
if (reusableBuffer.sdManager.otaUpdateInformation.step == BIND_INFO_REQUEST) {
|
||||
uint8_t modelId = reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.modelID;
|
||||
if (modelId > 0 && modelId < DIM(PXX2ReceiversNames)) {
|
||||
if (isPXX2ReceiverOptionAvailable(modelId, RECEIVER_OPTION_OTA)) {
|
||||
POPUP_CONFIRMATION(getPXX2ReceiverName(modelId), onUpdateConfirmation);
|
||||
char *tmp = strAppend(reusableBuffer.sdManager.otaReceiverVersion, TR_CURRENT_VERSION);
|
||||
tmp = strAppendUnsigned(tmp, 1 + reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.swVersion.major);
|
||||
*tmp++ = '.';
|
||||
tmp = strAppendUnsigned(tmp, reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.swVersion.minor);
|
||||
*tmp++ = '.';
|
||||
tmp = strAppendUnsigned(tmp, reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.swVersion.revision);
|
||||
SET_WARNING_INFO(reusableBuffer.sdManager.otaReceiverVersion, tmp - reusableBuffer.sdManager.otaReceiverVersion, 0);
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
|
||||
SET_WARNING_INFO(STR_UNSUPPORTED_RX, sizeof(TR_UNSUPPORTED_RX) - 1, 0);
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
|
||||
SET_WARNING_INFO(STR_UNKNOWN_RX, sizeof(TR_UNKNOWN_RX) - 1, 0);
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void onSdManagerMenu(const char * result)
|
||||
{
|
||||
TCHAR lfn[_MAX_LFN+1];
|
||||
@@ -203,6 +245,14 @@ void onSdManagerMenu(const char * result)
|
||||
multiFlashFirmware(EXTERNAL_MODULE, lfn);
|
||||
}
|
||||
#endif
|
||||
#if defined(PXX2)
|
||||
else if (result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL || result == STR_FLASH_RECEIVER_OTA_BY_EXTERNAL) {
|
||||
memclear(&reusableBuffer.sdManager.otaUpdateInformation, sizeof(OtaUpdateInformation));
|
||||
getSelectionFullPath(reusableBuffer.sdManager.otaUpdateInformation.filename);
|
||||
reusableBuffer.sdManager.otaUpdateInformation.module = result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL ? INTERNAL_MODULE : EXTERNAL_MODULE;
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].startBind(&reusableBuffer.sdManager.otaUpdateInformation, onUpdateStateChanged);
|
||||
}
|
||||
#endif
|
||||
#if defined(LUA)
|
||||
else if (result == STR_EXECUTE_FILE) {
|
||||
getSelectionFullPath(lfn);
|
||||
@@ -211,20 +261,47 @@ void onSdManagerMenu(const char * result)
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(PXX2)
|
||||
void onUpdateReceiverSelection(const char * result)
|
||||
{
|
||||
if (result != STR_EXIT) {
|
||||
reusableBuffer.sdManager.otaUpdateInformation.selectedReceiverIndex = (result - reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversNames[0]) / sizeof(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversNames[0]);
|
||||
reusableBuffer.sdManager.otaUpdateInformation.step = BIND_INFO_REQUEST;
|
||||
#if defined(SIMU)
|
||||
reusableBuffer.sdManager.otaUpdateInformation.receiverInformation.modelID = 0x01;
|
||||
onUpdateStateChanged();
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
// the user pressed [Exit]
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
bool menuRadioSdManager(event_t _event)
|
||||
{
|
||||
#if defined(PXX2)
|
||||
if (EVT_KEY_MASK(_event) == KEY_EXIT && moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND) {
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
CLEAR_POPUP();
|
||||
killEvents(KEY_EXIT);
|
||||
_event = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event);
|
||||
SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, RADIO_ICONS, menuTabGeneral, MENU_RADIO_SD_MANAGER, reusableBuffer.sdManager.count);
|
||||
|
||||
int index = menuVerticalPosition - menuVerticalOffset;
|
||||
|
||||
switch(_event) {
|
||||
switch (_event) {
|
||||
case EVT_ENTRY:
|
||||
f_chdir(ROOT_PATH);
|
||||
// no break;
|
||||
|
||||
case EVT_ENTRY_UP:
|
||||
memset(&reusableBuffer.sdManager, 0, sizeof(reusableBuffer.sdManager));
|
||||
memclear(&reusableBuffer.sdManager, sizeof(reusableBuffer.sdManager));
|
||||
menuVerticalPosition = 0;
|
||||
REFRESH_FILES();
|
||||
break;
|
||||
@@ -300,8 +377,12 @@ bool menuRadioSdManager(event_t _event)
|
||||
if (HAS_SPORT_UPDATE_CONNECTOR() && (information.productFamily == FIRMWARE_FAMILY_RECEIVER || information.productFamily == FIRMWARE_FAMILY_SENSOR))
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_EXTERNAL_DEVICE);
|
||||
#if defined(PXX2)
|
||||
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER)
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA);
|
||||
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER) {
|
||||
if (isReceiverOTAEnabledFromModule(INTERNAL_MODULE, information.productId))
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_INTERNAL);
|
||||
if (isReceiverOTAEnabledFromModule(EXTERNAL_MODULE, information.productId))
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_EXTERNAL);
|
||||
}
|
||||
#endif
|
||||
#if defined(BLUETOOTH)
|
||||
if (information.productFamily == FIRMWARE_FAMILY_BLUETOOTH_CHIP)
|
||||
@@ -476,6 +557,27 @@ bool menuRadioSdManager(event_t _event)
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(PXX2)
|
||||
if (moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND) {
|
||||
if (reusableBuffer.sdManager.otaUpdateInformation.step == BIND_INIT) {
|
||||
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount > 0) {
|
||||
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount != popupMenuItemsCount) {
|
||||
CLEAR_POPUP();
|
||||
popupMenuItemsCount = min<uint8_t>(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount,PXX2_MAX_RECEIVERS_PER_MODULE);
|
||||
for (auto rx = 0; rx < popupMenuItemsCount; rx++) {
|
||||
popupMenuItems[rx] = reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversNames[rx];
|
||||
}
|
||||
//popupMenuTitle = STR_PXX2_SELECT_RX;
|
||||
POPUP_MENU_START(onUpdateReceiverSelection);
|
||||
}
|
||||
}
|
||||
else {
|
||||
POPUP_WAIT(STR_WAITING_FOR_RX);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
const char * ext = getFileExtension(reusableBuffer.sdManager.lines[index]);
|
||||
if (ext && isExtensionMatching(ext, BITMAPS_EXT)) {
|
||||
if (currentBitmapIndex != menuVerticalPosition) {
|
||||
|
||||
@@ -31,7 +31,7 @@ void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFla
|
||||
lcdDrawText(x, y, s, flags);
|
||||
}
|
||||
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att)
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int32_t val, uint8_t unit, LcdFlags att)
|
||||
{
|
||||
// convertUnit(val, unit);
|
||||
if (!(att & NO_UNIT) && unit != UNIT_RAW) {
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "lcd.h"
|
||||
|
||||
void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFlags flags, const char * prefix, const char * suffix);
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att);
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int32_t val, uint8_t unit, LcdFlags att);
|
||||
int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event, IsValueAvailable isValueAvailable=nullptr);
|
||||
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, LcdFlags attr, event_t event);
|
||||
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event);
|
||||
|
||||
@@ -84,7 +84,7 @@ void drawTrimMode(coord_t x, coord_t y, uint8_t flightMode, uint8_t idx, LcdFlag
|
||||
}
|
||||
}
|
||||
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att)
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int32_t val, uint8_t unit, LcdFlags att)
|
||||
{
|
||||
// convertUnit(val, unit);
|
||||
lcdDrawNumber(x, y, val, att & (~NO_UNIT));
|
||||
@@ -370,11 +370,11 @@ void drawSensorCustomValue(coord_t x, coord_t y, uint8_t sensor, int32_t value,
|
||||
lcdDrawText(x, y, "OK", flags);
|
||||
}
|
||||
else {
|
||||
for (uint8_t i=0; i<16; i++) {
|
||||
if (value & (1 << i)) {
|
||||
for (uint8_t i = 0; i < 16; i++) {
|
||||
if (value & (1u << i)) {
|
||||
char s[] = "CH__ KO";
|
||||
strAppendUnsigned(&s[2], i+1, 2);
|
||||
lcdDrawText(x, flags & DBLSIZE ? y+1 : y, s, flags & ~DBLSIZE);
|
||||
strAppendUnsigned(&s[2], i + 1, 2);
|
||||
lcdDrawText(x, flags & DBLSIZE ? y + 1 : y, s, flags & ~DBLSIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -382,7 +382,7 @@ void drawSensorCustomValue(coord_t x, coord_t y, uint8_t sensor, int32_t value,
|
||||
}
|
||||
else {
|
||||
if (value == 0) {
|
||||
lcdDrawText(x, flags & DBLSIZE ? y+1 : y, "Rx OK", flags & ~DBLSIZE);
|
||||
lcdDrawText(x, flags & DBLSIZE ? y + 1 : y, "Rx OK", flags & ~DBLSIZE);
|
||||
}
|
||||
else {
|
||||
static const char * const RXS_STATUS[] = {
|
||||
@@ -398,23 +398,47 @@ void drawSensorCustomValue(coord_t x, coord_t y, uint8_t sensor, int32_t value,
|
||||
"Rx1 NS",
|
||||
"Rx2 NS",
|
||||
};
|
||||
for (uint8_t i=0; i<DIM(RXS_STATUS); i++) {
|
||||
if (value & (1<<i)) {
|
||||
lcdDrawText(x, flags & DBLSIZE ? y+1 : y, RXS_STATUS[i], flags & ~DBLSIZE);
|
||||
for (uint8_t i = 0; i < DIM(RXS_STATUS); i++) {
|
||||
if (value & (1u << i)) {
|
||||
lcdDrawText(x, flags & DBLSIZE ? y + 1 : y, RXS_STATUS[i], flags & ~DBLSIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (telemetrySensor.id >= RB3040_OUTPUT_FIRST_ID && telemetrySensor.id <= RB3040_OUTPUT_LAST_ID) {
|
||||
if (telemetrySensor.subId == 0) {
|
||||
if (value == 0) {
|
||||
lcdDrawText(x, y, "OK", flags);
|
||||
}
|
||||
else {
|
||||
for (uint8_t i = 0; i < 9; i++) {
|
||||
if (value & (1u << i)) {
|
||||
if (i < 8) {
|
||||
char s[] = "CH__ KO";
|
||||
strAppendUnsigned(&s[2], i + 17, 2);
|
||||
lcdDrawText(x, flags & DBLSIZE ? y + 1 : y, s, flags & ~DBLSIZE);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
char s[] = "S.P Ovl";
|
||||
lcdDrawText(x, flags & DBLSIZE ? y + 1 : y, s, flags & ~DBLSIZE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (telemetrySensor.unit == UNIT_TEXT) {
|
||||
lcdDrawSizedText(x, flags & DBLSIZE ? y+1 : y, telemetryItem.text, sizeof(telemetryItem.text), flags & ~DBLSIZE);
|
||||
lcdDrawSizedText(x, flags & DBLSIZE ? y + 1 : y, telemetryItem.text, sizeof(telemetryItem.text), flags & ~DBLSIZE);
|
||||
}
|
||||
else {
|
||||
if (telemetrySensor.prec > 0) {
|
||||
flags |= (telemetrySensor.prec==1 ? PREC1 : PREC2);
|
||||
flags |= (telemetrySensor.prec == 1 ? PREC1 : PREC2);
|
||||
}
|
||||
drawValueWithUnit(x, y, value, telemetrySensor.unit == UNIT_CELLS ? UNIT_VOLTS : telemetrySensor.unit, flags);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
void lcdDrawMultiProtocolString(coord_t x, coord_t y, uint8_t moduleIdx, uint8_t protocol, LcdFlags flags = 0);
|
||||
void lcdDrawMultiSubProtocolString(coord_t x, coord_t y, uint8_t moduleIdx, uint8_t subType, LcdFlags flags = 0);
|
||||
void drawStringWithIndex(coord_t x, coord_t y, const char * str, uint8_t idx, LcdFlags att=0);
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att=0);
|
||||
void drawValueWithUnit(coord_t x, coord_t y, int32_t val, uint8_t unit, LcdFlags att=0);
|
||||
|
||||
void drawPower(coord_t x, coord_t y, int8_t dBm, LcdFlags att = 0);
|
||||
void drawGVarName(coord_t x, coord_t y, int8_t index, LcdFlags flags=0);
|
||||
|
||||
@@ -46,14 +46,18 @@ void onRxOptionsUpdateConfirm(const char * result)
|
||||
enum {
|
||||
ITEM_RECEIVER_SETTINGS_PWM_RATE,
|
||||
ITEM_RECEIVER_SETTINGS_TELEMETRY,
|
||||
ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW,
|
||||
ITEM_RECEIVER_SETTINGS_SPORT_FPORT,
|
||||
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED1,
|
||||
ITEM_RECEIVER_SETTINGS_CAPABILITY_NOT_SUPPORTED2,
|
||||
ITEM_RECEIVER_SETTINGS_PINMAP_FIRST
|
||||
};
|
||||
|
||||
#define IS_RECEIVER_CAPABILITY_ENABLED(capability) (reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability))
|
||||
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t(IS_RECEIVER_CAPABILITY_ENABLED(capability) ? count : HIDDEN_ROW)
|
||||
|
||||
#define IF_RECEIVER_CAPABILITY(capability, count) uint8_t((reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilities & (1 << capability)) ? count : HIDDEN_ROW)
|
||||
#define CH_ENABLE_SPORT 4
|
||||
#define CH_ENABLE_SBUS 5
|
||||
|
||||
void menuModelReceiverOptions(event_t event)
|
||||
{
|
||||
@@ -76,6 +80,7 @@ void menuModelReceiverOptions(event_t event)
|
||||
SUBMENU_NOTITLE(ITEM_RECEIVER_SETTINGS_PINMAP_FIRST + outputsCount, {
|
||||
0, // PWM rate
|
||||
isModuleR9MAccess(g_moduleIdx) && receiverVariant == PXX2_VARIANT_EU && reusableBuffer.hardwareAndSettings.moduleSettings.txPower > 14 /*25mW*/ ? READONLY_ROW : (uint8_t)0, // Telemetry
|
||||
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_TELEMETRY_25MW, 0),
|
||||
IF_RECEIVER_CAPABILITY(RECEIVER_CAPABILITY_FPORT, 0),
|
||||
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
|
||||
uint8_t(reusableBuffer.hardwareAndSettings.modules[g_moduleIdx].receivers[receiverId].information.capabilityNotSupported ? READONLY_ROW : HIDDEN_ROW),
|
||||
@@ -139,7 +144,7 @@ void menuModelReceiverOptions(event_t event)
|
||||
|
||||
switch (i) {
|
||||
case ITEM_RECEIVER_SETTINGS_PWM_RATE:
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate, RECEIVER_OPTIONS_2ND_COLUMN, y, isModuleR9MAccess(g_moduleIdx) ? "6.67ms PWM": "9ms PWM", attr, event);
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.pwmRate, RECEIVER_OPTIONS_2ND_COLUMN, y, isModuleR9MAccess(g_moduleIdx) ? "6.67ms PWM": "7ms PWM", attr, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
|
||||
}
|
||||
@@ -152,6 +157,13 @@ void menuModelReceiverOptions(event_t event)
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_RECEIVER_SETTINGS_TELEMETRY_25MW:
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw, RECEIVER_OPTIONS_2ND_COLUMN, y, "25mw Tele", attr, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_RECEIVER_SETTINGS_SPORT_FPORT:
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.fport = editCheckBox(reusableBuffer.hardwareAndSettings.receiverSettings.fport, RECEIVER_OPTIONS_2ND_COLUMN, y, "F.Port", attr, event);
|
||||
if (attr && checkIncDec_Ret) {
|
||||
@@ -174,27 +186,49 @@ void menuModelReceiverOptions(event_t event)
|
||||
if (pin < reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount) {
|
||||
uint8_t & mapping = reusableBuffer.hardwareAndSettings.receiverSettings.outputsMapping[pin];
|
||||
uint8_t channel = g_model.moduleData[g_moduleIdx].channelsStart + mapping;
|
||||
int32_t channelValue = channelOutputs[channel];
|
||||
lcdDrawText(0, y, STR_PIN);
|
||||
lcdDrawNumber(lcdLastRightPos + 1, y, pin + 1);
|
||||
putsChn(7 * FW, y, channel + 1, attr);
|
||||
|
||||
uint8_t channelMax = sentModuleChannels(g_moduleIdx) - 1;
|
||||
uint8_t selectionMax = channelMax;
|
||||
|
||||
if (IS_RECEIVER_CAPABILITY_ENABLED(RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6)) {
|
||||
if (CH_ENABLE_SPORT == pin || CH_ENABLE_SBUS == pin)
|
||||
selectionMax += 1;
|
||||
|
||||
if (CH_ENABLE_SPORT == pin && selectionMax == channel) {
|
||||
lcdDrawText(7 * FW, y, "S.PORT", attr);
|
||||
}
|
||||
else if (CH_ENABLE_SBUS == pin && selectionMax == channel) {
|
||||
lcdDrawText(7 * FW, y, "SBUS", attr);
|
||||
}
|
||||
else {
|
||||
putsChn(7 * FW, y, channel + 1, attr);
|
||||
}
|
||||
}
|
||||
else {
|
||||
putsChn(7 * FW, y, channel + 1, attr);
|
||||
}
|
||||
|
||||
// Channel
|
||||
if (attr) {
|
||||
mapping = checkIncDec(event, mapping, 0, sentModuleChannels(g_moduleIdx) - 1);
|
||||
mapping = checkIncDec(event, mapping, 0, selectionMax);
|
||||
if (checkIncDec_Ret) {
|
||||
reusableBuffer.hardwareAndSettings.receiverSettings.dirty = RECEIVER_SETTINGS_DIRTY;
|
||||
}
|
||||
}
|
||||
|
||||
// Bargraph
|
||||
#if !defined(PCBX7) // X7 LCD doesn't like too many horizontal lines
|
||||
lcdDrawRect(RECEIVER_OPTIONS_2ND_COLUMN, y + 2, wbar + 1, 4);
|
||||
#endif
|
||||
const uint8_t lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
|
||||
const coord_t xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
|
||||
lcdDrawHorizontalLine(xChannel, y + 3, lenChannel, SOLID, 0);
|
||||
lcdDrawHorizontalLine(xChannel, y + 4, lenChannel, SOLID, 0);
|
||||
if (channel <= channelMax) {
|
||||
int32_t channelValue = channelOutputs[channel];
|
||||
#if !defined(PCBX7) // X7 LCD doesn't like too many horizontal lines
|
||||
lcdDrawRect(RECEIVER_OPTIONS_2ND_COLUMN, y + 2, wbar + 1, 4);
|
||||
#endif
|
||||
auto lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar / 2 + lim / 2) / lim, wbar / 2);
|
||||
auto xChannel = (channelValue > 0) ? RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 : RECEIVER_OPTIONS_2ND_COLUMN + wbar / 2 + 1 - lenChannel;
|
||||
lcdDrawHorizontalLine(xChannel, y + 3, lenChannel, SOLID, 0);
|
||||
lcdDrawHorizontalLine(xChannel, y + 4, lenChannel, SOLID, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ void showAlertBox(const char * title, const char * text, const char * action , u
|
||||
lcdRefresh();
|
||||
lcdSetContrast();
|
||||
waitKeysReleased();
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
checkBacklight();
|
||||
}
|
||||
|
||||
|
||||
@@ -624,22 +624,23 @@ void menuRadioHardware(event_t event)
|
||||
break;
|
||||
|
||||
case ITEM_RADIO_HARDWARE_RAS:
|
||||
#if defined(PCBX9LITE) && !defined(PCBX9LITES)
|
||||
lcdDrawTextAlignedLeft(y, "Ext. RAS");
|
||||
lcdNextPos = HW_SETTINGS_COLUMN2;
|
||||
#else
|
||||
#if defined(HARDWARE_INTERNAL_RAS)
|
||||
lcdDrawTextAlignedLeft(y, "RAS");
|
||||
if (telemetryData.swrInternal.isFresh())
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value());
|
||||
else
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, "---");
|
||||
lcdDrawText(lcdNextPos, y, "/");
|
||||
#else
|
||||
lcdDrawTextAlignedLeft(y, "Ext. RAS");
|
||||
lcdNextPos = HW_SETTINGS_COLUMN2;
|
||||
#endif
|
||||
if (telemetryData.swrExternal.isFresh())
|
||||
lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value());
|
||||
else
|
||||
lcdDrawText(lcdNextPos, y, "---");
|
||||
break;
|
||||
|
||||
#if defined(SPORT_UPDATE_PWR_GPIO)
|
||||
case ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER:
|
||||
g_eeGeneral.sportUpdatePower = editChoice(HW_SETTINGS_COLUMN2, y, STR_SPORT_UPDATE_POWER_MODE, STR_SPORT_UPDATE_POWER_MODES, g_eeGeneral.sportUpdatePower, 0, 1, attr, event);
|
||||
|
||||
@@ -94,12 +94,12 @@ void onSdFormatConfirm(const char * result)
|
||||
void onUpdateConfirmation(const char * result)
|
||||
{
|
||||
if (result == STR_OK) {
|
||||
OtaUpdateInformation * destination = moduleState[EXTERNAL_MODULE].otaUpdateInformation;
|
||||
Pxx2OtaUpdate otaUpdate(EXTERNAL_MODULE, destination->candidateReceiversNames[destination->selectedReceiverIndex]);
|
||||
OtaUpdateInformation * destination = moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].otaUpdateInformation;
|
||||
Pxx2OtaUpdate otaUpdate(reusableBuffer.sdManager.otaUpdateInformation.module, destination->candidateReceiversNames[destination->selectedReceiverIndex]);
|
||||
otaUpdate.flashFirmware(destination->filename);
|
||||
}
|
||||
else {
|
||||
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,13 +121,13 @@ void onUpdateStateChanged()
|
||||
else {
|
||||
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
|
||||
SET_WARNING_INFO(STR_UNSUPPORTED_RX, sizeof(TR_UNSUPPORTED_RX) - 1, 0);
|
||||
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_OTA_UPDATE_ERROR);
|
||||
SET_WARNING_INFO(STR_UNKNOWN_RX, sizeof(TR_UNKNOWN_RX) - 1, 0);
|
||||
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -246,10 +246,11 @@ void onSdManagerMenu(const char * result)
|
||||
}
|
||||
#endif
|
||||
#if defined(PXX2)
|
||||
else if (result == STR_FLASH_RECEIVER_OTA) {
|
||||
else if (result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL || result == STR_FLASH_RECEIVER_OTA_BY_EXTERNAL) {
|
||||
memclear(&reusableBuffer.sdManager.otaUpdateInformation, sizeof(OtaUpdateInformation));
|
||||
getSelectionFullPath(reusableBuffer.sdManager.otaUpdateInformation.filename);
|
||||
moduleState[EXTERNAL_MODULE].startBind(&reusableBuffer.sdManager.otaUpdateInformation, onUpdateStateChanged);
|
||||
reusableBuffer.sdManager.otaUpdateInformation.module = result == STR_FLASH_RECEIVER_OTA_BY_INTERNAL ? INTERNAL_MODULE : EXTERNAL_MODULE;
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].startBind(&reusableBuffer.sdManager.otaUpdateInformation, onUpdateStateChanged);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
@@ -274,7 +275,7 @@ void onUpdateReceiverSelection(const char * result)
|
||||
}
|
||||
else {
|
||||
// the user pressed [Exit]
|
||||
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -285,12 +286,14 @@ void menuRadioSdManager(event_t _event)
|
||||
int lastPos = menuVerticalPosition;
|
||||
#endif
|
||||
|
||||
if (moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND && EVT_KEY_MASK(_event) == KEY_EXIT) {
|
||||
moduleState[EXTERNAL_MODULE].mode = MODULE_MODE_NORMAL;
|
||||
#if defined(PXX2)
|
||||
if (EVT_KEY_MASK(_event) == KEY_EXIT && moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND) {
|
||||
moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode = MODULE_MODE_NORMAL;
|
||||
CLEAR_POPUP();
|
||||
killEvents(KEY_EXIT);
|
||||
_event = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
event_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event);
|
||||
SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, menuTabGeneral, MENU_RADIO_SD_MANAGER, HEADER_LINE + reusableBuffer.sdManager.count);
|
||||
@@ -298,13 +301,13 @@ void menuRadioSdManager(event_t _event)
|
||||
switch (_event) {
|
||||
case EVT_ENTRY:
|
||||
f_chdir(ROOT_PATH);
|
||||
REFRESH_FILES();
|
||||
#if LCD_DEPTH > 1
|
||||
lastPos = -1;
|
||||
#endif
|
||||
break;
|
||||
// no break
|
||||
|
||||
case EVT_ENTRY_UP:
|
||||
memclear(&reusableBuffer.sdManager, sizeof(reusableBuffer.sdManager));
|
||||
REFRESH_FILES();
|
||||
break;
|
||||
|
||||
@@ -417,8 +420,12 @@ void menuRadioSdManager(event_t _event)
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_EXTERNAL_MODULE);
|
||||
}
|
||||
#if defined(PXX2)
|
||||
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER)
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA);
|
||||
if (information.productFamily == FIRMWARE_FAMILY_RECEIVER) {
|
||||
if (isReceiverOTAEnabledFromModule(INTERNAL_MODULE, information.productId))
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_INTERNAL);
|
||||
if (isReceiverOTAEnabledFromModule(EXTERNAL_MODULE, information.productId))
|
||||
POPUP_MENU_ADD_ITEM(STR_FLASH_RECEIVER_OTA_BY_EXTERNAL);
|
||||
}
|
||||
#endif
|
||||
#if defined(BLUETOOTH)
|
||||
if (information.productFamily == FIRMWARE_FAMILY_BLUETOOTH_CHIP)
|
||||
@@ -564,10 +571,10 @@ void menuRadioSdManager(event_t _event)
|
||||
}
|
||||
|
||||
#if defined(PXX2)
|
||||
if (moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND) {
|
||||
if (moduleState[reusableBuffer.sdManager.otaUpdateInformation.module].mode == MODULE_MODE_BIND) {
|
||||
if (reusableBuffer.sdManager.otaUpdateInformation.step == BIND_INIT) {
|
||||
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount > 0) {
|
||||
if(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount != popupMenuItemsCount) {
|
||||
if (reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount != popupMenuItemsCount) {
|
||||
CLEAR_POPUP();
|
||||
popupMenuItemsCount = min<uint8_t>(reusableBuffer.sdManager.otaUpdateInformation.candidateReceiversCount,PXX2_MAX_RECEIVERS_PER_MODULE);
|
||||
for (auto rx = 0; rx < popupMenuItemsCount; rx++) {
|
||||
|
||||
@@ -832,6 +832,7 @@ uint8_t convertMultiProtocol(uint8_t moduleIdx, uint8_t type)
|
||||
const char STR_SUBTYPE_FLYSKY[] = "\004""Std\0""V9x9""V6x6""V912""CX20";
|
||||
const char STR_SUBTYPE_HUBSAN[] = "\004""H107""H301""H501";
|
||||
const char STR_SUBTYPE_FRSKY[] = "\007""D16\0 ""D8\0 ""D16 8ch""V8\0 ""LBT(EU)""LBT 8ch";
|
||||
const char STR_SUBTYPE_FRSKYX2[] = "\007""D16\0 ""D16 8ch""LBT(EU)""LBT 8ch";
|
||||
const char STR_SUBTYPE_HISKY[] = "\005""Std\0 ""HK310";
|
||||
const char STR_SUBTYPE_V2X2[] = "\006""Std\0 ""JXD506";
|
||||
const char STR_SUBTYPE_DSM[] = "\006""2 22ms""2 11ms""X 22ms""X 11ms";
|
||||
@@ -923,6 +924,7 @@ const mm_protocol_definition multi_protocols[] = {
|
||||
{MODULE_SUBTYPE_MULTI_ESKY150, 1, false, false, STR_SUBTYPE_ESKY150, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FX816, 0, false, false, STR_SUBTYPE_FX816, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HOTT, 0, true, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX2, 3, true, false, STR_SUBTYPE_FRSKYX2, STR_MULTI_RFTUNE},
|
||||
{MM_RF_CUSTOM_SELECTED, 7, true, true, NO_SUBTYPE, STR_MULTI_OPTION},
|
||||
|
||||
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||
|
||||
@@ -251,8 +251,10 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx)
|
||||
}
|
||||
|
||||
#define MULTIMODULE_MODULE_ROWS(moduleIdx) MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTI_DISABLE_CHAN_MAP_ROW(moduleIdx), // AUTOBIND, DISABLE TELEM, DISABLE CN.MAP
|
||||
#define MULTIMODULE_TYPE_ROW(moduleIdx) isModuleMultimodule(moduleIdx) ? MULTIMODULE_RFPROTO_COLUMNS(moduleIdx) : HIDDEN_ROW,
|
||||
#define MULTIMODULE_STATUS_ROWS(moduleIdx) isModuleMultimodule(moduleIdx) ? TITLE_ROW : HIDDEN_ROW, (isModuleMultimodule(moduleIdx) && getMultiSyncStatus(moduleIdx).isValid()) ? TITLE_ROW : HIDDEN_ROW,
|
||||
#define MULTIMODULE_MODE_ROWS(moduleIdx) (g_model.moduleData[moduleIdx].multi.customProto) ? (uint8_t) 3 : MULTIMODULE_HAS_SUBTYPE(moduleIdx) ? (uint8_t)2 : (uint8_t)1
|
||||
#define MULTIMODULE_TYPE_ROWS(moduleIdx) isModuleMultimodule(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW,
|
||||
#define MULTIMODULE_SUBTYPE_ROWS(moduleIdx) isModuleMultimodule(moduleIdx) ? MULTIMODULE_RFPROTO_COLUMNS(moduleIdx) : HIDDEN_ROW,
|
||||
#define MULTIMODULE_OPTIONS_ROW(moduleIdx) (isModuleMultimodule(moduleIdx) && MULTIMODULE_HASOPTIONS(moduleIdx)) ? (uint8_t) 0: HIDDEN_ROW
|
||||
#define MODULE_POWER_ROW(moduleIdx) (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) || isModuleR9MNonAccess(moduleIdx)) ? (isModuleR9MLiteNonPro(moduleIdx) ? (isModuleR9M_FCC_VARIANT(moduleIdx) ? READONLY_ROW : (uint8_t)0) : (uint8_t)0) : HIDDEN_ROW
|
||||
|
||||
@@ -313,12 +313,12 @@ const char * FrskyDeviceFirmwareUpdate::doFlashFirmware(const char * filename)
|
||||
}
|
||||
else {
|
||||
#if defined(PCBHORUS)
|
||||
information.productId = FIRMWARE_ID_XJT;
|
||||
information.productId = FIRMWARE_ID_MODULE_XJT;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(PCBHORUS)
|
||||
if (module == INTERNAL_MODULE && information.productId == FIRMWARE_ID_XJT) {
|
||||
if (module == INTERNAL_MODULE && information.productId == FIRMWARE_ID_MODULE_XJT) {
|
||||
INTERNAL_MODULE_ON();
|
||||
RTOS_WAIT_MS(1);
|
||||
intmoduleSerialStart(38400, true, USART_Parity_No, USART_StopBits_1, USART_WordLength_8b);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "dataconstants.h"
|
||||
#include "definitions.h"
|
||||
#include "frsky_pxx2.h"
|
||||
#include "pulses/modules_helpers.h"
|
||||
#include "ff.h"
|
||||
|
||||
enum FrskyFirmwareProductFamily {
|
||||
@@ -35,12 +36,65 @@ enum FrskyFirmwareProductFamily {
|
||||
FIRMWARE_FAMILY_POWER_MANAGEMENT_UNIT,
|
||||
};
|
||||
|
||||
enum FrskyFirmwareProductId {
|
||||
FIRMWARE_ID_NONE,
|
||||
FIRMWARE_ID_XJT = 0x01,
|
||||
FIRMWARE_ID_ISRM = 0x02,
|
||||
enum FrskyFirmwareModuleProductId {
|
||||
FIRMWARE_ID_MODULE_NONE,
|
||||
FIRMWARE_ID_MODULE_XJT = 0x01,
|
||||
FIRMWARE_ID_MODULE_ISRM = 0x02,
|
||||
};
|
||||
|
||||
enum FrskyFirmwareReceiverProductId {
|
||||
FIRMWARE_ID_RECEIVER_NONE,
|
||||
FIRMWARE_ID_RECEIVER_X8R = 0x01,
|
||||
FIRMWARE_ID_RECEIVER_RX8R = 0x02,
|
||||
FIRMWARE_ID_RECEIVER_RX8R_PRO = 0x03,
|
||||
FIRMWARE_ID_RECEIVER_RX6R = 0x04,
|
||||
FIRMWARE_ID_RECEIVER_RX4R = 0x05,
|
||||
FIRMWARE_ID_RECEIVER_G_RX8 = 0x06,
|
||||
FIRMWARE_ID_RECEIVER_G_RX6 = 0x07,
|
||||
FIRMWARE_ID_RECEIVER_X6R = 0x08,
|
||||
FIRMWARE_ID_RECEIVER_X4R = 0x09,
|
||||
FIRMWARE_ID_RECEIVER_X4R_SB = 0x0A,
|
||||
FIRMWARE_ID_RECEIVER_XSR = 0x0B,
|
||||
FIRMWARE_ID_RECEIVER_XSR_M = 0x0C,
|
||||
FIRMWARE_ID_RECEIVER_RXSR = 0x0D,
|
||||
FIRMWARE_ID_RECEIVER_S6R = 0x0E,
|
||||
FIRMWARE_ID_RECEIVER_S8R = 0x0F,
|
||||
FIRMWARE_ID_RECEIVER_XM = 0x10,
|
||||
FIRMWARE_ID_RECEIVER_XMP = 0x11,
|
||||
FIRMWARE_ID_RECEIVER_XMR = 0x12,
|
||||
FIRMWARE_ID_RECEIVER_R9 = 0x13,
|
||||
FIRMWARE_ID_RECEIVER_R9_SLIM = 0x14,
|
||||
FIRMWARE_ID_RECEIVER_R9_SLIMP = 0x15,
|
||||
FIRMWARE_ID_RECEIVER_R9_MINI = 0x16,
|
||||
FIRMWARE_ID_RECEIVER_R9_MM = 0x17,
|
||||
FIRMWARE_ID_RECEIVER_R9_STAB = 0x18, // R9_STAB has OTA
|
||||
FIRMWARE_ID_RECEIVER_R9_MINI_OTA = 0x19, // this one has OTA (different bootloader)
|
||||
FIRMWARE_ID_RECEIVER_R9_MM_OTA = 0x1A, // this one has OTA (different bootloader)
|
||||
FIRMWARE_ID_RECEIVER_R9_SLIMP_OTA = 0x1B, // this one has OTA (different bootloader)
|
||||
FIRMWARE_ID_RECEIVER_ARCHER_X = 0x1C, // this one has OTA (internal module)
|
||||
FIRMWARE_ID_RECEIVER_R9MX = 0x1D, // this one has OTA
|
||||
FIRMWARE_ID_RECEIVER_R9SX = 0x1E, // this one has OTA
|
||||
};
|
||||
|
||||
inline bool isReceiverOTAEnabledFromModule(uint8_t moduleIdx, uint8_t productId)
|
||||
{
|
||||
switch (productId) {
|
||||
case FIRMWARE_ID_RECEIVER_ARCHER_X:
|
||||
return isModuleISRM(moduleIdx);
|
||||
|
||||
case FIRMWARE_ID_RECEIVER_R9_STAB:
|
||||
case FIRMWARE_ID_RECEIVER_R9_MINI_OTA:
|
||||
case FIRMWARE_ID_RECEIVER_R9_MM_OTA:
|
||||
case FIRMWARE_ID_RECEIVER_R9_SLIMP_OTA:
|
||||
case FIRMWARE_ID_RECEIVER_R9MX:
|
||||
case FIRMWARE_ID_RECEIVER_R9SX:
|
||||
return isModuleR9M(moduleIdx);
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
PACK(struct FrSkyFirmwareInformation {
|
||||
uint32_t fourcc;
|
||||
uint8_t headerVersion;
|
||||
@@ -69,7 +123,7 @@ class FrskyDeviceFirmwareUpdate {
|
||||
};
|
||||
|
||||
public:
|
||||
FrskyDeviceFirmwareUpdate(ModuleIndex module):
|
||||
explicit FrskyDeviceFirmwareUpdate(ModuleIndex module):
|
||||
module(module) {
|
||||
}
|
||||
|
||||
|
||||
@@ -1751,7 +1751,7 @@ const luaR_value_entry opentxConstants[] = {
|
||||
{ "EVT_VIRTUAL_INC_REPT", EVT_KEY_REPT(KEY_UP) },
|
||||
#endif
|
||||
|
||||
#if defined(NAVIGATION_9X) || defined(NAVIGATION_XLITE)
|
||||
#if defined(NAVIGATION_9X)
|
||||
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_LEFT) },
|
||||
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_LEFT) },
|
||||
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_RIGHT) },
|
||||
@@ -1759,6 +1759,14 @@ const luaR_value_entry opentxConstants[] = {
|
||||
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
|
||||
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
|
||||
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
|
||||
#elif defined(NAVIGATION_XLITE)
|
||||
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_LEFT) },
|
||||
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_LONG(KEY_RIGHT) },
|
||||
{ "EVT_VIRTUAL_MENU", EVT_KEY_BREAK(KEY_SHIFT) },
|
||||
{ "EVT_VIRTUAL_MENU_LONG", EVT_KEY_LONG(KEY_SHIFT) },
|
||||
{ "EVT_VIRTUAL_ENTER", EVT_KEY_BREAK(KEY_ENTER) },
|
||||
{ "EVT_VIRTUAL_ENTER_LONG", EVT_KEY_LONG(KEY_ENTER) },
|
||||
{ "EVT_VIRTUAL_EXIT", EVT_KEY_BREAK(KEY_EXIT) },
|
||||
#elif defined(NAVIGATION_X7) || defined(NAVIGATION_X9D)
|
||||
{ "EVT_VIRTUAL_PREV_PAGE", EVT_KEY_LONG(KEY_PAGE) },
|
||||
{ "EVT_VIRTUAL_NEXT_PAGE", EVT_KEY_BREAK(KEY_PAGE) },
|
||||
|
||||
@@ -62,6 +62,20 @@ static int luaLcdClear(lua_State *L)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*luadoc
|
||||
@function lcd.resetBacklightTimeout()
|
||||
|
||||
Reset the backlight timeout
|
||||
|
||||
@status current Introduced in 2.3.6
|
||||
*/
|
||||
static int luaLcdResetBacklightTimeout(lua_State * L)
|
||||
{
|
||||
if (!luaLcdAllowed) return 0;
|
||||
resetBacklightTimeout();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*luadoc
|
||||
@function lcd.drawPoint(x, y)
|
||||
|
||||
@@ -861,6 +875,7 @@ static int luaRGB(lua_State *L)
|
||||
const luaL_Reg lcdLib[] = {
|
||||
{ "refresh", luaLcdRefresh },
|
||||
{ "clear", luaLcdClear },
|
||||
{ "resetBacklightTimeout", luaLcdResetBacklightTimeout },
|
||||
{ "drawPoint", luaLcdDrawPoint },
|
||||
{ "drawLine", luaLcdDrawLine },
|
||||
{ "drawRectangle", luaLcdDrawRectangle },
|
||||
|
||||
+1
-1
@@ -460,7 +460,7 @@ void evalInputs(uint8_t mode)
|
||||
if (mode == e_perout_mode_normal) {
|
||||
if (tmp==0 || (tmp==1 && (bpanaCenter & mask))) {
|
||||
anaCenter |= mask;
|
||||
if ((g_model.beepANACenter & mask) && !(bpanaCenter & mask) && !menuCalibrationState) {
|
||||
if ((g_model.beepANACenter & mask) && !(bpanaCenter & mask) && s_mixer_first_run_done && !menuCalibrationState) {
|
||||
if (!IS_POT(i) || IS_POT_SLIDER_AVAILABLE(i)) {
|
||||
AUDIO_POT_MIDDLE(i);
|
||||
}
|
||||
|
||||
@@ -687,7 +687,7 @@ void checkBacklight()
|
||||
if (inputsMoved()) {
|
||||
inactivity.counter = 0;
|
||||
if (g_eeGeneral.backlightMode & e_backlight_mode_sticks) {
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -700,7 +700,7 @@ void checkBacklight()
|
||||
}
|
||||
}
|
||||
|
||||
void backlightOn()
|
||||
void resetBacklightTimeout()
|
||||
{
|
||||
lightOffCounter = ((uint16_t)g_eeGeneral.lightAutoOff*250) << 1;
|
||||
}
|
||||
@@ -727,7 +727,7 @@ void doSplash()
|
||||
#endif
|
||||
|
||||
if (SPLASH_NEEDED()) {
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
drawSplash();
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
@@ -1977,7 +1977,7 @@ void opentxInit()
|
||||
|
||||
if (g_eeGeneral.backlightMode != e_backlight_mode_off) {
|
||||
// on Tx start turn the light on
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
}
|
||||
|
||||
if (!globalData.unexpectedShutdown) {
|
||||
@@ -1995,7 +1995,7 @@ void opentxInit()
|
||||
lcdSetContrast();
|
||||
#endif
|
||||
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
|
||||
startPulses();
|
||||
|
||||
|
||||
+1
-12
@@ -255,17 +255,6 @@
|
||||
|
||||
#include "myeeprom.h"
|
||||
|
||||
inline void memclear(void * p, size_t size)
|
||||
{
|
||||
memset(p, 0, size);
|
||||
}
|
||||
|
||||
inline bool is_memclear(void * p, size_t size)
|
||||
{
|
||||
uint8_t * buf = (uint8_t *)p;
|
||||
return buf[0] == 0 && memcmp(buf, buf + 1, size - 1) == 0;
|
||||
}
|
||||
|
||||
void memswap(void * a, void * b, uint8_t size);
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) || defined(PCBHORUS)
|
||||
@@ -646,7 +635,7 @@ static inline void GET_ADC_IF_MIXER_NOT_RUNNING()
|
||||
|
||||
#include "sbus.h"
|
||||
|
||||
void backlightOn();
|
||||
void resetBacklightTimeout();
|
||||
void checkBacklight();
|
||||
|
||||
#define BITMASK(bit) (1<<(bit))
|
||||
|
||||
@@ -21,10 +21,23 @@
|
||||
#ifndef _OPENTX_HELPERS_H_
|
||||
#define _OPENTX_HELPERS_H_
|
||||
|
||||
#include <string.h>
|
||||
|
||||
template<class t> inline t min(t a, t b) { return a<b?a:b; }
|
||||
template<class t> inline t max(t a, t b) { return a>b?a:b; }
|
||||
template<class t> inline t sgn(t a) { return a>0 ? 1 : (a < 0 ? -1 : 0); }
|
||||
template<class t> inline t limit(t mi, t x, t ma) { return min(max(mi,x),ma); }
|
||||
template<class t> inline void SWAP(t & a, t & b) { t tmp = b; b = a; a = tmp; }
|
||||
|
||||
inline void memclear(void * p, size_t size)
|
||||
{
|
||||
memset(p, 0, size);
|
||||
}
|
||||
|
||||
inline bool is_memclear(void * p, size_t size)
|
||||
{
|
||||
uint8_t * buf = (uint8_t *)p;
|
||||
return buf[0] == 0 && memcmp(buf, buf + 1, size - 1) == 0;
|
||||
}
|
||||
|
||||
#endif // _OPENTX_HELPERS_H_
|
||||
|
||||
@@ -157,7 +157,14 @@ enum ModuleSubtypeMulti {
|
||||
MODULE_SUBTYPE_MULTI_AFHDS2A_RX,
|
||||
MODULE_SUBTYPE_MULTI_HOTT,
|
||||
MODULE_SUBTYPE_MULTI_FX816,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_FX816
|
||||
MODULE_SUBTYPE_MULTI_BAYANG_RX,
|
||||
MODULE_SUBTYPE_MULTI_PELIKAN,
|
||||
MODULE_SUBTYPE_MULTI_TIGER,
|
||||
MODULE_SUBTYPE_MULTI_XK,
|
||||
MODULE_SUBTYPE_MULTI_XN297DUMP,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX2,
|
||||
MODULE_SUBTYPE_MULTI_FRSKY_R9,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_FRSKY_R9
|
||||
};
|
||||
#define MODULE_SUBTYPE_MULTI_XN297DP 63-3
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#include "definitions.h"
|
||||
#include "opentx_helpers.h"
|
||||
#include "telemetry/telemetry.h"
|
||||
#include "storage/storage.h"
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#include "telemetry/multi.h"
|
||||
#endif
|
||||
@@ -421,11 +423,6 @@ inline bool isModuleBindRangeAvailable(uint8_t moduleIdx)
|
||||
return isModulePXX2(moduleIdx) || isModulePXX1(moduleIdx) || isModuleDSM2(moduleIdx) || isModuleMultimodule(moduleIdx);
|
||||
}
|
||||
|
||||
inline bool isModuleRangeAvailable(uint8_t moduleIdx)
|
||||
{
|
||||
return isModuleXJTD16(moduleIdx) || isModuleXJTLR12(moduleIdx);
|
||||
}
|
||||
|
||||
constexpr uint8_t MAX_RXNUM = 63;
|
||||
|
||||
inline uint8_t getMaxRxNum(uint8_t idx)
|
||||
|
||||
@@ -121,8 +121,10 @@ class ReceiverSettings {
|
||||
uint8_t receiverId;
|
||||
uint8_t dirty;
|
||||
uint8_t telemetryDisabled;
|
||||
uint8_t telemetry25mw;
|
||||
uint8_t pwmRate;
|
||||
uint8_t fport;
|
||||
uint8_t enablePwmCh5Ch6;
|
||||
uint8_t outputsCount;
|
||||
uint8_t outputsMapping[24];
|
||||
};
|
||||
@@ -144,6 +146,7 @@ class OtaUpdateInformation: public BindInformation {
|
||||
public:
|
||||
char filename[_MAX_LFN + 1];
|
||||
uint32_t address;
|
||||
uint32_t module;
|
||||
};
|
||||
|
||||
typedef void (* ModuleCallback)();
|
||||
|
||||
@@ -223,6 +223,10 @@ void Pxx2Pulses::setupReceiverSettingsFrame(uint8_t module)
|
||||
flag1 |= PXX2_RX_SETTINGS_FLAG1_FASTPWM;
|
||||
if (reusableBuffer.hardwareAndSettings.receiverSettings.fport)
|
||||
flag1 |= PXX2_RX_SETTINGS_FLAG1_FPORT;
|
||||
if (reusableBuffer.hardwareAndSettings.receiverSettings.telemetry25mw)
|
||||
flag1 |= PXX2_RX_SETTINGS_FLAG1_TELEMETRY_25MW;
|
||||
if (reusableBuffer.hardwareAndSettings.receiverSettings.enablePwmCh5Ch6)
|
||||
flag1 |= PXX2_RX_SETTINGS_FLAG1_ENABLE_PWM_CH5_CH6;
|
||||
Pxx2Transport::addByte(flag1);
|
||||
uint8_t outputsCount = min<uint8_t>(24, reusableBuffer.hardwareAndSettings.receiverSettings.outputsCount);
|
||||
for (int i = 0; i < outputsCount; i++) {
|
||||
@@ -355,6 +359,8 @@ void Pxx2Pulses::sendOtaUpdate(uint8_t module, const char * rxName, uint32_t add
|
||||
|
||||
if (module == EXTERNAL_MODULE)
|
||||
extmoduleSendNextFrame();
|
||||
else if (module == INTERNAL_MODULE)
|
||||
intmoduleSendNextFrame();
|
||||
}
|
||||
|
||||
void Pxx2Pulses::setupAuthenticationFrame(uint8_t module, uint8_t mode, const uint8_t * outputMessage)
|
||||
@@ -464,7 +470,12 @@ const char * Pxx2OtaUpdate::nextStep(uint8_t step, const char * rxName, uint32_t
|
||||
destination->address = address;
|
||||
|
||||
for (uint8_t retry = 0;; retry++) {
|
||||
extmodulePulsesData.pxx2.sendOtaUpdate(module, rxName, address, (const char *) buffer);
|
||||
if (module == EXTERNAL_MODULE) {
|
||||
extmodulePulsesData.pxx2.sendOtaUpdate(module, rxName, address, (const char *) buffer);
|
||||
}
|
||||
else if (module == INTERNAL_MODULE) {
|
||||
intmodulePulsesData.pxx2.sendOtaUpdate(module, rxName, address, (const char *) buffer);
|
||||
}
|
||||
if (waitStep(step + 1, 20)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
+13
-3
@@ -53,6 +53,8 @@
|
||||
#define PXX2_RX_SETTINGS_FLAG1_READONLY (1 << 6)
|
||||
#define PXX2_RX_SETTINGS_FLAG1_FASTPWM (1 << 4)
|
||||
#define PXX2_RX_SETTINGS_FLAG1_FPORT (1 << 3)
|
||||
#define PXX2_RX_SETTINGS_FLAG1_TELEMETRY_25MW (1 << 2)
|
||||
#define PXX2_RX_SETTINGS_FLAG1_ENABLE_PWM_CH5_CH6 (1 << 1)
|
||||
|
||||
#define PXX2_TX_SETTINGS_FLAG0_WRITE (1 << 6)
|
||||
#define PXX2_TX_SETTINGS_FLAG1_EXTERNAL_ANTENNA (1 << 3)
|
||||
@@ -81,7 +83,7 @@ enum PXX2ModuleModelID {
|
||||
PXX2_MODULE_ISRM_S_X10E,
|
||||
PXX2_MODULE_XJT_LITE,
|
||||
PXX2_MODULE_ISRM_S_X10S,
|
||||
PXX2_MODULE_ISRM_S_X9LITE,
|
||||
PXX2_MODULE_ISRM_X9LITES,
|
||||
};
|
||||
|
||||
static const char * const PXX2ModulesNames[] = {
|
||||
@@ -98,7 +100,7 @@ static const char * const PXX2ModulesNames[] = {
|
||||
"ISRM-S-X10E",
|
||||
"XJT Lite",
|
||||
"ISRM-S-X10S",
|
||||
"ISRM-S-X9Lite"
|
||||
"ISRM-X9LiteS"
|
||||
};
|
||||
|
||||
inline const char * getPXX2ModuleName(uint8_t modelId)
|
||||
@@ -140,7 +142,7 @@ static const uint8_t PXX2ModuleOptions[] = {
|
||||
0b00000101, // ISRM-S-X10E
|
||||
0b00000001, // XJT_LITE
|
||||
0b00000101, // ISRM-S-X10S
|
||||
0b00000101, // ISRM-S-X9LITE
|
||||
0b00000100, // ISRM-X9LITES
|
||||
};
|
||||
|
||||
inline uint8_t getPXX2ModuleOptions(uint8_t modelId)
|
||||
@@ -189,6 +191,9 @@ static const char * const PXX2ReceiversNames[] = {
|
||||
"R9-MINI-OTA", // this one has OTA (different bootloader)
|
||||
"R9-MM-OTA", // this one has OTA (different bootloader)
|
||||
"R9-SLIM+-OTA", // this one has OTA (different bootloader)
|
||||
"Archer-X", // this one has OTA (internal module)
|
||||
"R9MX", // this one has OTA
|
||||
"R9SX", // this one has OTA
|
||||
};
|
||||
|
||||
inline const char * getPXX2ReceiverName(uint8_t modelId)
|
||||
@@ -239,6 +244,9 @@ static const uint8_t PXX2ReceiverOptions[] = {
|
||||
0b11111111, // R9-MINI+OTA
|
||||
0b11111111, // R9-MM+OTA
|
||||
0b11111111, // R9-SLIM+OTA
|
||||
0b11111111, // ARCHER-X
|
||||
0b11111111, // R9MX
|
||||
0b11111111, // R9SX
|
||||
};
|
||||
|
||||
inline uint8_t getPXX2ReceiverOptions(uint8_t modelId)
|
||||
@@ -256,6 +264,8 @@ inline bool isPXX2ReceiverOptionAvailable(uint8_t modelId, uint8_t option)
|
||||
|
||||
enum ReceiverCapabilities {
|
||||
RECEIVER_CAPABILITY_FPORT,
|
||||
RECEIVER_CAPABILITY_TELEMETRY_25MW,
|
||||
RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6,
|
||||
RECEIVER_CAPABILITY_COUNT
|
||||
};
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ void ModelCell::loadBitmap()
|
||||
buffer->drawSizedText(5, 2, modelName, LEN_MODEL_NAME, SMLSIZE|TEXT_COLOR);
|
||||
getTimerString(timer, 0);
|
||||
for (uint8_t i = 0; i < MAX_TIMERS; i++) {
|
||||
if (partialmodel.timers[i].mode > 0 && partialmodel.timers[i].persistent) {
|
||||
if (partialmodel.timers[i].mode != 0 && partialmodel.timers[i].persistent) {
|
||||
getTimerString(timer, partialmodel.timers[i].value);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -642,7 +642,7 @@ void checkSwitches()
|
||||
}
|
||||
|
||||
LED_ERROR_BEGIN();
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
|
||||
// first - display warning
|
||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||
|
||||
@@ -104,7 +104,7 @@ void rotaryEncoderCheck()
|
||||
#endif
|
||||
#if !defined(BOOT)
|
||||
if (g_eeGeneral.backlightMode & e_backlight_mode_keys) {
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
}
|
||||
inactivity.counter = 0;
|
||||
#endif
|
||||
|
||||
@@ -146,6 +146,10 @@ void SDRAM_Init();
|
||||
// Pulses driver
|
||||
#define INTERNAL_MODULE_ON() GPIO_SetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN)
|
||||
|
||||
#if defined(INTERNAL_MODULE_PXX1) || defined(INTERNAL_MODULE_PXX2)
|
||||
#define HARDWARE_INTERNAL_RAS
|
||||
#endif
|
||||
|
||||
#if defined(INTMODULE_USART)
|
||||
#define INTERNAL_MODULE_OFF() intmoduleStop()
|
||||
#else
|
||||
|
||||
@@ -107,7 +107,7 @@ void readKeysAndTrims()
|
||||
|
||||
if ((keys_input || trims_input) && (g_eeGeneral.backlightMode & e_backlight_mode_keys)) {
|
||||
// on keypress turn the light on
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -501,7 +501,7 @@ void readKeysAndTrims()
|
||||
}
|
||||
|
||||
if (keysInput || trimsInput) {
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ void readKeysAndTrims()
|
||||
|
||||
if ((keys_input || trims_input) && (g_eeGeneral.backlightMode & e_backlight_mode_keys)) {
|
||||
// on keypress turn the light on
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -114,12 +114,16 @@ uint32_t isBootloaderStart(const uint8_t * buffer);
|
||||
#define INTERNAL_MODULE_OFF() GPIO_ResetBits(INTMODULE_PWR_GPIO, INTMODULE_PWR_GPIO_PIN)
|
||||
#endif
|
||||
|
||||
#if !defined(PCBX9LITE) || defined(PCBX9LITES)
|
||||
#define HARDWARE_INTERNAL_RAS
|
||||
#endif
|
||||
|
||||
#define EXTERNAL_MODULE_ON() EXTERNAL_MODULE_PWR_ON()
|
||||
|
||||
#if defined(EXTMODULE_USART)
|
||||
#define EXTERNAL_MODULE_OFF() extmoduleStop()
|
||||
#define EXTERNAL_MODULE_OFF() extmoduleStop()
|
||||
#else
|
||||
#define EXTERNAL_MODULE_OFF() EXTERNAL_MODULE_PWR_OFF()
|
||||
#define EXTERNAL_MODULE_OFF() EXTERNAL_MODULE_PWR_OFF()
|
||||
#endif
|
||||
|
||||
#if defined(RADIO_T12)
|
||||
|
||||
@@ -130,7 +130,7 @@ void readKeysAndTrims()
|
||||
if ((keys_input || trims_input) && (g_eeGeneral.backlightMode & e_backlight_mode_keys)) {
|
||||
#endif
|
||||
// on keypress turn the light on
|
||||
backlightOn();
|
||||
resetBacklightTimeout();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -150,6 +150,16 @@ enum FrSkyDataState {
|
||||
#define ESC_RPM_CONS_LAST_ID 0x0B6f
|
||||
#define ESC_TEMPERATURE_FIRST_ID 0x0B70
|
||||
#define ESC_TEMPERATURE_LAST_ID 0x0B7f
|
||||
#define RB3040_OUTPUT_FIRST_ID 0x0B80
|
||||
#define RB3040_OUTPUT_LAST_ID 0x0B8F
|
||||
#define RB3040_CH1_2_FIRST_ID 0x0B90
|
||||
#define RB3040_CH1_2_LAST_ID 0x0B9F
|
||||
#define RB3040_CH3_4_FIRST_ID 0x0BA0
|
||||
#define RB3040_CH3_4_LAST_ID 0x0BAF
|
||||
#define RB3040_CH5_6_FIRST_ID 0x0BB0
|
||||
#define RB3040_CH5_6_LAST_ID 0x0BBF
|
||||
#define RB3040_CH7_8_FIRST_ID 0x0BC0
|
||||
#define RB3040_CH7_8_LAST_ID 0x0BCF
|
||||
#define X8R_FIRST_ID 0x0c20
|
||||
#define X8R_LAST_ID 0x0c2F
|
||||
#define S6R_FIRST_ID 0x0c30
|
||||
@@ -177,6 +187,7 @@ enum FrSkyDataState {
|
||||
#define DIY_STREAM_FIRST_ID 0x5000
|
||||
#define DIY_STREAM_LAST_ID 0x50FF
|
||||
#define FACT_TEST_ID 0xF000
|
||||
#define FRAME_LOSS_RATE_ID 0xF010
|
||||
#define RSSI_ID 0xF101
|
||||
#define ADC1_ID 0xF102
|
||||
#define ADC2_ID 0xF103
|
||||
@@ -282,10 +293,10 @@ inline bool isRasValueValid()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#elif defined(PCBX9DP) || defined(PCBX9E)
|
||||
#elif defined(PCBTARANIS)
|
||||
inline bool isRasValueValid()
|
||||
{
|
||||
return telemetryData.xjtVersion != 0x0000 && telemetryData.xjtVersion != 0x00FF;
|
||||
return telemetryData.xjtVersion != 0x00FF;
|
||||
}
|
||||
#elif defined(PCBHORUS)
|
||||
inline bool isRasValueValid()
|
||||
|
||||
@@ -86,6 +86,12 @@ void processReceiverSettingsFrame(uint8_t module, const uint8_t * frame)
|
||||
if (frame[4] & PXX2_RX_SETTINGS_FLAG1_TELEMETRY_DISABLED)
|
||||
destination->telemetryDisabled = 1;
|
||||
|
||||
if (frame[4] & PXX2_RX_SETTINGS_FLAG1_TELEMETRY_25MW)
|
||||
destination->telemetry25mw = 1;
|
||||
|
||||
if (frame[4] & PXX2_RX_SETTINGS_FLAG1_ENABLE_PWM_CH5_CH6)
|
||||
destination->enablePwmCh5Ch6 = 1;
|
||||
|
||||
uint8_t outputsCount = min<uint8_t>(16, frame[0] - 4);
|
||||
destination->outputsCount = outputsCount;
|
||||
for (uint8_t pin = 0; pin < outputsCount; pin++) {
|
||||
|
||||
@@ -30,6 +30,7 @@ struct FrSkySportSensor {
|
||||
};
|
||||
|
||||
const FrSkySportSensor sportSensors[] = {
|
||||
{ FRAME_LOSS_RATE_ID, FRAME_LOSS_RATE_ID, 0, ZSTR_FLR, UNIT_PERCENT, 0 },
|
||||
{ RSSI_ID, RSSI_ID, 0, ZSTR_RSSI, UNIT_DB, 0 },
|
||||
#if defined(MULTIMODULE)
|
||||
{ TX_RSSI_ID, TX_RSSI_ID, 0, ZSTR_TX_RSSI , UNIT_DB , 0 },
|
||||
@@ -84,6 +85,15 @@ const FrSkySportSensor sportSensors[] = {
|
||||
{ GASSUIT_AVG_FLOW_FIRST_ID, GASSUIT_AVG_FLOW_LAST_ID, 0, ZSTR_GASSUIT_AVG_FLOW, UNIT_MILLILITERS_PER_MINUTE, 0 },
|
||||
{ SBEC_POWER_FIRST_ID, SBEC_POWER_LAST_ID, 0, ZSTR_SBEC_VOLTAGE, UNIT_VOLTS, 2 },
|
||||
{ SBEC_POWER_FIRST_ID, SBEC_POWER_LAST_ID, 1, ZSTR_SBEC_CURRENT, UNIT_AMPS, 2 },
|
||||
{ RB3040_OUTPUT_FIRST_ID, RB3040_OUTPUT_LAST_ID, 0, ZSTR_RB3040_EXTRA_STATE, UNIT_BITFIELD, 0 },
|
||||
{ RB3040_CH1_2_FIRST_ID, RB3040_CH1_2_LAST_ID, 0, ZSTR_RB3040_CHANNEL1, UNIT_AMPS, 2 },
|
||||
{ RB3040_CH1_2_FIRST_ID, RB3040_CH1_2_LAST_ID, 1, ZSTR_RB3040_CHANNEL2, UNIT_AMPS, 2 },
|
||||
{ RB3040_CH3_4_FIRST_ID, RB3040_CH3_4_LAST_ID, 0, ZSTR_RB3040_CHANNEL3, UNIT_AMPS, 2 },
|
||||
{ RB3040_CH3_4_FIRST_ID, RB3040_CH3_4_LAST_ID, 1, ZSTR_RB3040_CHANNEL4, UNIT_AMPS, 2 },
|
||||
{ RB3040_CH5_6_FIRST_ID, RB3040_CH5_6_LAST_ID, 0, ZSTR_RB3040_CHANNEL5, UNIT_AMPS, 2 },
|
||||
{ RB3040_CH5_6_FIRST_ID, RB3040_CH5_6_LAST_ID, 1, ZSTR_RB3040_CHANNEL6, UNIT_AMPS, 2 },
|
||||
{ RB3040_CH7_8_FIRST_ID, RB3040_CH7_8_LAST_ID, 0, ZSTR_RB3040_CHANNEL7, UNIT_AMPS, 2 },
|
||||
{ RB3040_CH7_8_FIRST_ID, RB3040_CH7_8_LAST_ID, 1, ZSTR_RB3040_CHANNEL8, UNIT_AMPS, 2 },
|
||||
{ 0, 0, 0, NULL, UNIT_RAW, 0 } // sentinel
|
||||
};
|
||||
|
||||
@@ -167,17 +177,20 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
|
||||
|
||||
if (primId == DATA_FRAME) {
|
||||
uint8_t originMask;
|
||||
uint8_t moduleIndex;
|
||||
if (origin == TELEMETRY_ENDPOINT_SPORT) {
|
||||
#if defined(SIMU) && defined(INTERNAL_MODULE_PXX2)
|
||||
// When running simu on ACCESS radio, we set the origin as internal module
|
||||
moduleIndex = 0;
|
||||
origin = 0;
|
||||
originMask = 0x01;
|
||||
#else
|
||||
moduleIndex = isSportLineUsedByInternalModule() ? 0 : 1;
|
||||
originMask = 0x04;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
uint8_t moduleIndex = (origin >> 2);
|
||||
moduleIndex = (origin >> 2);
|
||||
originMask = 0x01 << moduleIndex;
|
||||
}
|
||||
uint8_t instance = physicalId + (origin << 5);
|
||||
@@ -216,12 +229,12 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
|
||||
else if (dataId == XJT_VERSION_ID) {
|
||||
telemetryData.xjtVersion = HUB_DATA_U16(packet);
|
||||
if (!isRasValueValid()) {
|
||||
telemetryData.setSwr(origin >> 2, 0);
|
||||
telemetryData.setSwr(moduleIndex, 0);
|
||||
}
|
||||
}
|
||||
else if (dataId == RAS_ID) {
|
||||
if (isRasValueValid()) {
|
||||
telemetryData.setSwr(origin >> 2, SPORT_DATA_U8(packet));
|
||||
telemetryData.setSwr(moduleIndex, SPORT_DATA_U8(packet));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -308,6 +321,10 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
|
||||
}
|
||||
#endif
|
||||
}
|
||||
else if (dataId >= RB3040_CH1_2_FIRST_ID && dataId <= RB3040_CH7_8_LAST_ID) {
|
||||
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xffff);
|
||||
sportProcessTelemetryPacket(dataId, 1, instance, (data >> 16u) & 0xffff);
|
||||
}
|
||||
else {
|
||||
sportProcessTelemetryPacket(dataId, 0, instance, data);
|
||||
}
|
||||
|
||||
@@ -555,7 +555,7 @@ void MultiModuleStatus::getStatusString(char * statusText) const
|
||||
return;
|
||||
}
|
||||
|
||||
if (major <= 1 && minor <= 3 && revision <= 0 && patch <= 47 && SLOW_BLINK_ON_PHASE) {
|
||||
if (major <= 1 && minor <= 3 && revision <= 0 && patch <= 78 && SLOW_BLINK_ON_PHASE) {
|
||||
strcpy(statusText, STR_MODULE_UPGRADE);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
/*
|
||||
* Documentation of the Spektrum protocol is available under
|
||||
* https://www.spektrumrc.com/ProdInfo/Files/SPM_Telemetry_Developers_Specs.pdf
|
||||
* https://github.com/SpektrumRC/SpektrumDocumentation/blob/master/Telemetry/spektrumTelemetrySensors.h
|
||||
*
|
||||
* Multi module adds two byte header of 0xAA [RSSI of telemetry packet] [16 byte message]
|
||||
*/
|
||||
@@ -49,7 +50,18 @@
|
||||
#define I2C_TEXTGEN 0x0c
|
||||
#define I2C_GPS 0x17
|
||||
#define I2C_GPS2 0x17
|
||||
#define I2C_ESC 0x20
|
||||
#define I2C_CELLS 0x3a
|
||||
|
||||
// SMART_BAT is using fake I2C adresses compared to official Spektrum address because of subtype used only for this I2C address
|
||||
#define I2C_SMART_BAT_BASE_ADDRESS 0x42
|
||||
#define I2C_SMART_BAT_REALTIME 0x42
|
||||
#define I2C_SMART_BAT_CELLS_1_6 0x43
|
||||
#define I2C_SMART_BAT_CELLS_7_12 0x44
|
||||
#define I2C_SMART_BAT_CELLS_13_18 0x45
|
||||
#define I2C_SMART_BAT_ID 0x4A
|
||||
#define I2C_SMART_BAT_LIMITS 0x4B
|
||||
|
||||
#define I2C_QOS 0x7f
|
||||
|
||||
enum SpektrumDataType : uint8_t {
|
||||
@@ -62,6 +74,8 @@ enum SpektrumDataType : uint8_t {
|
||||
uint8bcd,
|
||||
uint16bcd,
|
||||
uint32bcd,
|
||||
uint16le,
|
||||
uint32le,
|
||||
custom
|
||||
};
|
||||
|
||||
@@ -151,7 +165,16 @@ const SpektrumSensor spektrumSensors[] = {
|
||||
{0x1b, 2, int16, ZSTR_PITCH, UNIT_DEGREE, 1},
|
||||
{0x1b, 4, int16, ZSTR_YAW, UNIT_DEGREE, 1},
|
||||
|
||||
// {0x20, esc}, does not exist in the wild?
|
||||
// {0x20, esc}, Smart ESC telemetry
|
||||
{I2C_ESC, 0, uint16, ZSTR_ESC_RPM, UNIT_RPMS, 0},
|
||||
{I2C_ESC, 2, uint16, ZSTR_ESC_VIN, UNIT_VOLTS, 2},
|
||||
{I2C_ESC, 4, uint16, ZSTR_ESC_TFET, UNIT_CELSIUS, 1},
|
||||
{I2C_ESC, 6, uint16, ZSTR_ESC_CUR, UNIT_MAH, 1},
|
||||
{I2C_ESC, 8, uint16, ZSTR_ESC_TBEC, UNIT_CELSIUS, 1},
|
||||
{I2C_ESC, 10, uint8, ZSTR_ESC_BCUR, UNIT_AMPS, 1},
|
||||
{I2C_ESC, 11, uint8, ZSTR_ESC_VBEC, UNIT_VOLTS, 2},
|
||||
{I2C_ESC, 12, uint8, ZSTR_ESC_THR, UNIT_PERCENT, 1},
|
||||
{I2C_ESC, 13, uint8, ZSTR_ESC_POUT, UNIT_PERCENT, 1},
|
||||
|
||||
// Dual Cell monitor (0x34)
|
||||
{0x34, 0, int16, ZSTR_BATT1_CURRENT, UNIT_AMPS, 1},
|
||||
@@ -178,6 +201,53 @@ const SpektrumSensor spektrumSensors[] = {
|
||||
{0x40, 0, int16, ZSTR_ALT, UNIT_METERS, 1},
|
||||
{0x40, 2, int16, ZSTR_VSPD, UNIT_METERS_PER_SECOND, 1},
|
||||
|
||||
// Smartbat
|
||||
//{I2C_SMART_BAT_REALTIME, 1, int8, ZSTR_SMART_BAT_BTMP, UNIT_CELSIUS, 0}, // disabled because sensor is a duplicate of cells sensors ones
|
||||
{I2C_SMART_BAT_REALTIME, 2, uint32le, ZSTR_SMART_BAT_BCUR, UNIT_MAH, 0},
|
||||
{I2C_SMART_BAT_REALTIME, 6, uint16le, ZSTR_SMART_BAT_BCAP, UNIT_MAH, 0},
|
||||
{I2C_SMART_BAT_REALTIME, 8, uint16le, ZSTR_SMART_BAT_MIN_CEL, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_REALTIME, 10, uint16le, ZSTR_SMART_BAT_MAX_CEL, UNIT_VOLTS, 2},
|
||||
//{I2C_SMART_BAT_REALTIME, 12, uint16le, "RFU[2]", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
|
||||
{I2C_SMART_BAT_CELLS_1_6, 1, int8, ZSTR_SMART_BAT_BTMP, UNIT_CELSIUS, 0},
|
||||
{I2C_SMART_BAT_CELLS_1_6, 2, uint16le, ZSTR_CL01, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_1_6, 4, uint16le, ZSTR_CL02, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_1_6, 6, uint16le, ZSTR_CL03, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_1_6, 8, uint16le, ZSTR_CL04, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_1_6, 10, uint16le, ZSTR_CL05, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_1_6, 12, uint16le, ZSTR_CL06, UNIT_VOLTS, 2},
|
||||
|
||||
{I2C_SMART_BAT_CELLS_7_12, 1, int8, ZSTR_SMART_BAT_BTMP, UNIT_CELSIUS, 0},
|
||||
{I2C_SMART_BAT_CELLS_7_12, 2, uint16le, ZSTR_CL07, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_7_12, 4, uint16le, ZSTR_CL08, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_7_12, 6, uint16le, ZSTR_CL09, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_7_12, 8, uint16le, ZSTR_CL10, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_7_12, 10, uint16le, ZSTR_CL11, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_7_12, 12, uint16le, ZSTR_CL12, UNIT_VOLTS, 2},
|
||||
|
||||
{I2C_SMART_BAT_CELLS_13_18, 1, int8, ZSTR_SMART_BAT_BTMP, UNIT_CELSIUS, 0},
|
||||
{I2C_SMART_BAT_CELLS_13_18, 2, uint16le, ZSTR_CL13, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_13_18, 4, uint16le, ZSTR_CL14, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_13_18, 6, uint16le, ZSTR_CL15, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_13_18, 8, uint16le, ZSTR_CL16, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_13_18, 10, uint16le, ZSTR_CL17, UNIT_VOLTS, 2},
|
||||
{I2C_SMART_BAT_CELLS_13_18, 12, uint16le, ZSTR_CL18, UNIT_VOLTS, 2},
|
||||
|
||||
//{I2C_SMART_BAT_ID, 1, uint8, "chemistery", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
//{I2C_SMART_BAT_ID, 2, uint8, "number of cells", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
//{I2C_SMART_BAT_ID, 3, uint8, "manufacturer code", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
{I2C_SMART_BAT_ID, 4, uint16le, ZSTR_SMART_BAT_CYCLES, UNIT_RAW, 0},
|
||||
//{I2C_SMART_BAT_ID, 6, uint8, "uniqueID[8]", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
|
||||
//{I2C_SMART_BAT_LIMITS, 1, uint8, "rfu", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
{I2C_SMART_BAT_LIMITS, 2, uint16le, ZSTR_SMART_BAT_CAPACITY,UNIT_MAH, 0},
|
||||
//{I2C_SMART_BAT_LIMITS, 4, uint16le, "dischargeCurrentRating", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
//{I2C_SMART_BAT_LIMITS, 6, uint16le, "overDischarge_mV", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
//{I2C_SMART_BAT_LIMITS, 8, uint16le, "zeroCapacity_mV", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
//{I2C_SMART_BAT_LIMITS, 10, uint16le, "fullyCharged_mV", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
//{I2C_SMART_BAT_LIMITS, 12, uint8, "minWorkingTemp", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
//{I2C_SMART_BAT_LIMITS, 13, uint8, "maxWorkingTemp", UNIT_RAW, 0}, // disabled to save sensors slots
|
||||
|
||||
// 0x50-0x56 custom 3rd party sensors
|
||||
//{0x50, 0, int16, ZSTR_}
|
||||
|
||||
@@ -248,6 +318,10 @@ static int32_t spektrumGetValue(const uint8_t *packet, int startByte, SpektrumDa
|
||||
return bcdToInt8(*(uint8_t *)data);
|
||||
case uint32bcd:
|
||||
return bcdToInt32(*(uint32_t *)data);
|
||||
case uint16le:
|
||||
return (int16_t) ((uint16_t) (data[0] + (data[1] << 8)));
|
||||
case uint32le:
|
||||
return ((uint32_t) (data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)));
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
@@ -274,6 +348,12 @@ void processSpektrumPacket(const uint8_t *packet)
|
||||
setTelemetryValue(PROTOCOL_TELEMETRY_SPEKTRUM, (I2C_PSEUDO_TX << 8) + 0, 0, 0, packet[1], UNIT_RAW, 0);
|
||||
// highest bit indicates that TM1100 is in use, ignore it
|
||||
uint8_t i2cAddress = (packet[2] & 0x7f);
|
||||
|
||||
//SmartBat Hack
|
||||
if (i2cAddress == I2C_SMART_BAT_BASE_ADDRESS) {
|
||||
i2cAddress = i2cAddress + (packet[4] >> 4); // use type to create virtual I2CAddresses
|
||||
}
|
||||
|
||||
uint8_t instance = packet[3];
|
||||
|
||||
if (i2cAddress == I2C_TEXTGEN) {
|
||||
@@ -303,6 +383,41 @@ void processSpektrumPacket(const uint8_t *packet)
|
||||
if (!isSpektrumValidValue(value, sensor->dataType))
|
||||
continue;
|
||||
|
||||
// mV to VOLT PREC2 for Smart Batteries
|
||||
if ((i2cAddress >= I2C_SMART_BAT_REALTIME && i2cAddress <= I2C_SMART_BAT_LIMITS) && sensor->unit == UNIT_VOLTS) {
|
||||
if (value == -1) {
|
||||
continue; // discard unavailable sensors
|
||||
}
|
||||
else {
|
||||
value = value / 10;
|
||||
}
|
||||
}
|
||||
|
||||
// RPM, 10RPM (0-655340 RPM)
|
||||
if (i2cAddress == I2C_ESC && sensor->unit == UNIT_RPMS) {
|
||||
value = value / 10;
|
||||
}
|
||||
|
||||
// Current, 10mA (0-655.34A)
|
||||
if (i2cAddress == I2C_ESC && sensor->startByte == 6) {
|
||||
value = value / 10;
|
||||
}
|
||||
|
||||
// BEC Current, 100mA (0-25.4A)
|
||||
if (i2cAddress == I2C_ESC && sensor->startByte == 10) {
|
||||
value = value / 10;
|
||||
}
|
||||
|
||||
// Throttle 0.5% (0-127%)
|
||||
if (i2cAddress == I2C_ESC && sensor->startByte == 12) {
|
||||
value = value / 2;
|
||||
}
|
||||
|
||||
// Power 0.5% (0-127%)
|
||||
if (i2cAddress == I2C_ESC && sensor->startByte == 13) {
|
||||
value = value / 2;
|
||||
}
|
||||
|
||||
if (i2cAddress == I2C_CELLS && sensor->unit == UNIT_VOLTS) {
|
||||
// Map to FrSky style cell values
|
||||
int cellIndex = (sensor->startByte / 2) << 16;
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
|
||||
#include "frsky.h"
|
||||
#include "crossfire.h"
|
||||
#include "myeeprom.h"
|
||||
#include "io/frsky_sport.h"
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#include "spektrum.h"
|
||||
#include "flysky_ibus.h"
|
||||
@@ -105,7 +108,8 @@ void frskyDSetDefault(int index, uint16_t id);
|
||||
extern uint8_t telemetryProtocol;
|
||||
|
||||
#if defined (MULTIMODULE)
|
||||
#define IS_D16_MULTI(module) ((g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKY) && (g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH))
|
||||
#define IS_D16_MULTI(module) (((g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKY) && (g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH)) \
|
||||
|| (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKYX2))
|
||||
#define IS_HOTT_MULTI(module) (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_HOTT)
|
||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && (IS_D16_MULTI(INTERNAL_MODULE)||IS_D16_MULTI(EXTERNAL_MODULE))))
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#define _TELEMETRY_HOLDERS_H_
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <string.h>
|
||||
#include "../timers.h"
|
||||
|
||||
#define TELEMETRY_AVERAGE_COUNT 3 // we actually average one more reading!
|
||||
|
||||
@@ -428,6 +428,8 @@ const char STR_FIRMWARE_UPDATE_SUCCESS[] = TR_FIRMWARE_UPDATE_SUCCESS;
|
||||
const char STR_WRITING[] = TR_WRITING;
|
||||
const char STR_FLASH_EXTERNAL_DEVICE[] = TR_FLASH_EXTERNAL_DEVICE;
|
||||
const char STR_FLASH_RECEIVER_OTA[] = TR_FLASH_RECEIVER_OTA;
|
||||
const char STR_FLASH_RECEIVER_OTA_BY_EXTERNAL[] = TR_FLASH_RECEIVER_OTA_BY_EXTERNAL;
|
||||
const char STR_FLASH_RECEIVER_OTA_BY_INTERNAL[] = TR_FLASH_RECEIVER_OTA_BY_INTERNAL;
|
||||
const char STR_FLASH_BLUETOOTH_MODULE[] = TR_FLASH_BLUETOOTH_MODULE;
|
||||
const char STR_FLASH_POWER_MANAGEMENT_UNIT[] = TR_FLASH_POWER_MANAGEMENT_UNIT;
|
||||
const char STR_CONFIRM_FORMAT[] = TR_CONFIRM_FORMAT;
|
||||
|
||||
@@ -626,6 +626,8 @@ extern const char STR_VIEW_TEXT[];
|
||||
extern const char STR_FLASH_BOOTLOADER[];
|
||||
extern const char STR_FLASH_EXTERNAL_DEVICE[];
|
||||
extern const char STR_FLASH_RECEIVER_OTA[];
|
||||
extern const char STR_FLASH_RECEIVER_OTA_BY_EXTERNAL[];
|
||||
extern const char STR_FLASH_RECEIVER_OTA_BY_INTERNAL[];
|
||||
extern const char STR_FLASH_BLUETOOTH_MODULE[];
|
||||
extern const char STR_FLASH_POWER_MANAGEMENT_UNIT[];
|
||||
extern const char STR_CURRENT_VERSION[];
|
||||
|
||||
@@ -821,6 +821,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Flash bootloaderu"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE TR("Flash S.Portem", "Flash S.Portem")
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash příjímače OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash modulu BT", "Flash modulu Bluetooth")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash řízení spotř.", "Flash jednotky řízení spotřeby")
|
||||
#define TR_CURRENT_VERSION TR("Současná ver. ", "Současná verze: ")
|
||||
@@ -1165,6 +1167,7 @@
|
||||
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1252,7 +1255,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1267,3 +1270,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
|
||||
@@ -823,6 +823,8 @@
|
||||
#define TR_FLASH_BOOTLOADER TR("Flash bootloader","Flash bootloader") //
|
||||
#define TR_FLASH_EXTERNAL_DEVICE TR("Flash ext. Gerät","Flash externes Gerät")
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetoothmodul")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Flash pwr mngt unit", "Flash power management unit")
|
||||
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
|
||||
@@ -1171,6 +1173,7 @@
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1258,7 +1261,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1273,3 +1276,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
|
||||
@@ -822,6 +822,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Flash bootloader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE TR("Flash S.Port", "Flash S.Port device")
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
|
||||
#define TR_CURRENT_VERSION TR("Curr Vers: ", "Current version: ")
|
||||
@@ -1169,6 +1171,7 @@
|
||||
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1256,7 +1259,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1271,3 +1274,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
|
||||
+463
-421
File diff suppressed because it is too large
Load Diff
@@ -840,6 +840,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Flash bootloader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device"
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
|
||||
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
|
||||
@@ -1178,6 +1180,7 @@
|
||||
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1265,7 +1268,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1279,3 +1282,45 @@
|
||||
#define ZSTR_GASSUIT_MAX_FLOW "GMFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
@@ -842,6 +842,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Flasher BootLoader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE TR("Flasher S.Port", "Flasher S.Port externe")
|
||||
#define TR_FLASH_RECEIVER_OTA "Flasher RX OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash module BT", "Flash module Bluetooth")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flasher pwr mngt unit"
|
||||
#define TR_CURRENT_VERSION "Version courante :"
|
||||
@@ -1193,6 +1195,7 @@
|
||||
#define TR_RTC_CHECK TR("Vérif. RTC", "Vérif. pile RTC")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1280,7 +1283,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1295,3 +1298,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
@@ -842,6 +842,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Prog. bootloader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE "Progr. dispositivo Esterno"
|
||||
#define TR_FLASH_RECEIVER_OTA TR("Prog. RX OTA", INDENT "Prog. ricevente OTA")
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Prog. mod. BT", INDENT "Prog. modulo Bluetooth")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT TR("Prog. PMU", "Program. PMU")
|
||||
#define TR_CURRENT_VERSION TR("Vers. currente ", "Versione corrente: ")
|
||||
@@ -1187,6 +1189,7 @@
|
||||
#define TR_RTC_CHECK TR("Controllo RTC", "Controllo voltaggio RTC")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1274,7 +1277,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1289,3 +1292,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
@@ -828,6 +828,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Flash bootloader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE "Flash extern Apparaat"
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
|
||||
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
|
||||
@@ -1179,6 +1181,7 @@
|
||||
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1266,7 +1269,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1281,3 +1284,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
@@ -841,6 +841,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Flash bootloader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE "Sflashuj Moduł Zewnętrzny"
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
|
||||
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
|
||||
@@ -1186,6 +1188,7 @@
|
||||
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1273,7 +1276,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1288,3 +1291,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
@@ -831,6 +831,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Flash bootloader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device"
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
|
||||
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
|
||||
@@ -1175,6 +1177,7 @@
|
||||
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1262,7 +1265,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1277,3 +1280,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
@@ -841,6 +841,8 @@
|
||||
#define TR_FLASH_BOOTLOADER "Skriv BootLoader"
|
||||
#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device"
|
||||
#define TR_FLASH_RECEIVER_OTA "Flash receiver OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_EXTERNAL "Flash RX by ext. OTA"
|
||||
#define TR_FLASH_RECEIVER_OTA_BY_INTERNAL "Flash RX by int. OTA"
|
||||
#define TR_FLASH_BLUETOOTH_MODULE TR("Flash BT module", "Flash Bluetooth module")
|
||||
#define TR_FLASH_POWER_MANAGEMENT_UNIT "Flash pwr mngt unit"
|
||||
#define TR_CURRENT_VERSION TR("Current vers. ", "Current version: ")
|
||||
@@ -1186,6 +1188,7 @@
|
||||
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
|
||||
#define TR_AUTH_FAILURE "Auth-failure"
|
||||
|
||||
#define ZSTR_FLR "FLR"
|
||||
#define ZSTR_RSSI "RSSI"
|
||||
#define ZSTR_R9PW "R9PW"
|
||||
#define ZSTR_RAS "SWR"
|
||||
@@ -1273,7 +1276,7 @@
|
||||
#define ZSTR_GATE_TIME "GteT"
|
||||
#define ZSTR_ESC_VOLTAGE "EscV"
|
||||
#define ZSTR_ESC_CURRENT "EscA"
|
||||
#define ZSTR_ESC_RPM "EscR"
|
||||
#define ZSTR_ESC_RPM "Erpm"
|
||||
#define ZSTR_ESC_CONSUMPTION "EscC"
|
||||
#define ZSTR_ESC_TEMP "EscT"
|
||||
#define ZSTR_SD1_CHANNEL "Chan"
|
||||
@@ -1288,3 +1291,45 @@
|
||||
#define ZSTR_GASSUIT_AVG_FLOW "GAFl"
|
||||
#define ZSTR_SBEC_VOLTAGE "BecV"
|
||||
#define ZSTR_SBEC_CURRENT "BecA"
|
||||
#define ZSTR_RB3040_EXTRA_STATE "RBES"
|
||||
#define ZSTR_RB3040_CHANNEL1 "CH1A"
|
||||
#define ZSTR_RB3040_CHANNEL2 "CH2A"
|
||||
#define ZSTR_RB3040_CHANNEL3 "CH3A"
|
||||
#define ZSTR_RB3040_CHANNEL4 "CH4A"
|
||||
#define ZSTR_RB3040_CHANNEL5 "CH5A"
|
||||
#define ZSTR_RB3040_CHANNEL6 "CH6A"
|
||||
#define ZSTR_RB3040_CHANNEL7 "CH7A"
|
||||
#define ZSTR_RB3040_CHANNEL8 "CH8A"
|
||||
#define ZSTR_ESC_VIN "EVIN"
|
||||
#define ZSTR_ESC_TFET "TFET"
|
||||
#define ZSTR_ESC_CUR "ECUR"
|
||||
#define ZSTR_ESC_TBEC "TBEC"
|
||||
#define ZSTR_ESC_BCUR "CBEC"
|
||||
#define ZSTR_ESC_VBEC "VBEC"
|
||||
#define ZSTR_ESC_THR "ETHR"
|
||||
#define ZSTR_ESC_POUT "EOUT"
|
||||
#define ZSTR_SMART_BAT_BTMP "BTmp"
|
||||
#define ZSTR_SMART_BAT_BCUR "BCur"
|
||||
#define ZSTR_SMART_BAT_BCAP "BUse"
|
||||
#define ZSTR_SMART_BAT_MIN_CEL "CLMi"
|
||||
#define ZSTR_SMART_BAT_MAX_CEL "CLMa"
|
||||
#define ZSTR_SMART_BAT_CYCLES "Cycl"
|
||||
#define ZSTR_SMART_BAT_CAPACITY "BCpT"
|
||||
#define ZSTR_CL01 "Cel1"
|
||||
#define ZSTR_CL02 "Cel2"
|
||||
#define ZSTR_CL03 "Cel3"
|
||||
#define ZSTR_CL04 "Cel4"
|
||||
#define ZSTR_CL05 "Cel5"
|
||||
#define ZSTR_CL06 "Cel6"
|
||||
#define ZSTR_CL07 "Cel7"
|
||||
#define ZSTR_CL08 "Cel8"
|
||||
#define ZSTR_CL09 "Cel9"
|
||||
#define ZSTR_CL10 "Cl10"
|
||||
#define ZSTR_CL11 "Cl11"
|
||||
#define ZSTR_CL12 "Cl12"
|
||||
#define ZSTR_CL13 "Cl13"
|
||||
#define ZSTR_CL14 "Cl14"
|
||||
#define ZSTR_CL15 "Cl15"
|
||||
#define ZSTR_CL16 "Cl16"
|
||||
#define ZSTR_CL17 "Cl17"
|
||||
#define ZSTR_CL18 "Cl18"
|
||||
@@ -125,4 +125,4 @@
|
||||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\007"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky\0""Hubsan\0""FrSky\0 ""Hisky\0 ""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0 ""KN\0 ""SymaX\0 ""SLT\0 ""CX10\0 ""CG023\0 ""Bayang\0""ESky\0 ""MT99XX\0""MJXq\0 ""Shenqi\0""FY326\0 ""SFHSS\0 ""J6 Pro\0""FQ777\0 ""Assan\0 ""Hontai\0""OpenLrs""FSky 2A""Q2x2\0 ""Walkera""Q303\0 ""GW008\0 ""DM002\0 ""Cabell\0""Esky150""H8 3D\0 ""Corona\0""CFlie\0 ""Hitec\0 ""WFly\0 ""Bugs\0 ""BugMini""Traxxas""NCC1701""E01X\0 ""V911S\0 ""GD00X\0 ""V761\0 ""KF606\0 ""Redpine""Potensi""ZSX\0 ""FlyZone""Scanner""FrSkyRX""FS2A_RX""HoTT\0 ""FX816\0 "
|
||||
#define TR_MULTI_PROTOCOLS "FlySky\0""Hubsan\0""FrSky\0 ""Hisky\0 ""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0 ""KN\0 ""SymaX\0 ""SLT\0 ""CX10\0 ""CG023\0 ""Bayang\0""ESky\0 ""MT99XX\0""MJXq\0 ""Shenqi\0""FY326\0 ""SFHSS\0 ""J6 Pro\0""FQ777\0 ""Assan\0 ""Hontai\0""OpenLrs""FSky 2A""Q2x2\0 ""Walkera""Q303\0 ""GW008\0 ""DM002\0 ""Cabell\0""Esky150""H8 3D\0 ""Corona\0""CFlie\0 ""Hitec\0 ""WFly\0 ""Bugs\0 ""BugMini""Traxxas""NCC1701""E01X\0 ""V911S\0 ""GD00X\0 ""V761\0 ""KF606\0 ""Redpine""Potensi""ZSX\0 ""FlyZone""Scanner""FrSkyRX""FS2A_RX""HoTT\0 ""FX816\0 ""BayangR""Pelikan""Tiger\0 ""WK\0 ""XN297DU""FrSkyX2""FrSkyR9"
|
||||
|
||||
Reference in New Issue
Block a user