1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-23 00:05:17 +03:00

Preliminary T18 support (#7581)

This commit is contained in:
3djc 2020-06-22 21:15:47 +02:00 committed by GitHub
parent 02b61fff24
commit 2d01916055
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
76 changed files with 952 additions and 426 deletions

View file

@ -351,6 +351,8 @@ elseif(PCB STREQUAL X10 AND PCBREV STREQUAL T16)
set(FLAVOUR t16) set(FLAVOUR t16)
elseif(PCB STREQUAL X10 AND PCBREV STREQUAL TX16S) elseif(PCB STREQUAL X10 AND PCBREV STREQUAL TX16S)
set(FLAVOUR tx16s) set(FLAVOUR tx16s)
elseif(PCB STREQUAL X10 AND PCBREV STREQUAL T18)
set(FLAVOUR t18)
else() else()
string(TOLOWER ${PCB} FLAVOUR) string(TOLOWER ${PCB} FLAVOUR)
endif() endif()

View file

@ -190,6 +190,16 @@
<file>images/simulator/JumperT16/left_tele.png</file> <file>images/simulator/JumperT16/left_tele.png</file>
<file>images/simulator/JumperT16/right_ent.png</file> <file>images/simulator/JumperT16/right_ent.png</file>
<file>images/simulator/JumperT16/right_rtn.png</file> <file>images/simulator/JumperT16/right_rtn.png</file>
<file>images/simulator/JumperT18/left.png</file>
<file>images/simulator/JumperT18/right.png</file>
<file>images/simulator/JumperT18/top.png</file>
<file>images/simulator/JumperT18/bottom.png</file>
<file>images/simulator/JumperT18/left_mdl.png</file>
<file>images/simulator/JumperT18/left_page.png</file>
<file>images/simulator/JumperT18/left_sys.png</file>
<file>images/simulator/JumperT18/left_tele.png</file>
<file>images/simulator/JumperT18/right_ent.png</file>
<file>images/simulator/JumperT18/right_rtn.png</file>
<file>images/simulator/TX16S/left.png</file> <file>images/simulator/TX16S/left.png</file>
<file>images/simulator/TX16S/right.png</file> <file>images/simulator/TX16S/right.png</file>
<file>images/simulator/TX16S/top.png</file> <file>images/simulator/TX16S/top.png</file>

View file

@ -81,6 +81,8 @@ uint32_t Boards::getFourCC(Type board)
return 0x3D78746F; return 0x3D78746F;
case BOARD_JUMPER_T16: case BOARD_JUMPER_T16:
return 0x3F78746F; return 0x3F78746F;
case BOARD_JUMPER_T18:
return 0x4078746F;
case BOARD_RADIOMASTER_TX16S: case BOARD_RADIOMASTER_TX16S:
return 0x3878746F; return 0x3878746F;
case BOARD_UNKNOWN: case BOARD_UNKNOWN:
@ -116,6 +118,7 @@ int Boards::getEEpromSize(Board::Type board)
case BOARD_X10: case BOARD_X10:
case BOARD_X10_EXPRESS: case BOARD_X10_EXPRESS:
case BOARD_JUMPER_T16: case BOARD_JUMPER_T16:
case BOARD_JUMPER_T18:
case BOARD_RADIOMASTER_TX16S: case BOARD_RADIOMASTER_TX16S:
return 0; return 0;
} }
@ -147,6 +150,7 @@ int Boards::getFlashSize(Type board)
case BOARD_X10: case BOARD_X10:
case BOARD_X10_EXPRESS: case BOARD_X10_EXPRESS:
case BOARD_JUMPER_T16: case BOARD_JUMPER_T16:
case BOARD_JUMPER_T18:
case BOARD_RADIOMASTER_TX16S: case BOARD_RADIOMASTER_TX16S:
return FSIZE_HORUS; return FSIZE_HORUS;
case BOARD_UNKNOWN: case BOARD_UNKNOWN:
@ -507,6 +511,8 @@ QString Boards::getBoardName(Board::Type board)
return "Horus X10/X10S Express"; return "Horus X10/X10S Express";
case BOARD_JUMPER_T16: case BOARD_JUMPER_T16:
return "Jumper T16"; return "Jumper T16";
case BOARD_JUMPER_T18:
return "Jumper T18";
case BOARD_RADIOMASTER_TX16S: case BOARD_RADIOMASTER_TX16S:
return "Radiomaster TX16S"; return "Radiomaster TX16S";
default: default:

View file

@ -51,9 +51,10 @@ namespace Board {
BOARD_JUMPER_T12, BOARD_JUMPER_T12,
BOARD_JUMPER_T16, BOARD_JUMPER_T16,
BOARD_RADIOMASTER_TX16S, BOARD_RADIOMASTER_TX16S,
BOARD_JUMPER_T18,
}; };
constexpr int BOARD_TYPE_MAX = BOARD_RADIOMASTER_TX16S ; constexpr int BOARD_TYPE_MAX = BOARD_JUMPER_T18;
enum PotType enum PotType
{ {
@ -207,6 +208,11 @@ inline bool IS_JUMPER_T16(Board::Type board)
return board == Board::BOARD_JUMPER_T16; return board == Board::BOARD_JUMPER_T16;
} }
inline bool IS_JUMPER_T18(Board::Type board)
{
return board == Board::BOARD_JUMPER_T18;
}
inline bool IS_RADIOMASTER_TX16S(Board::Type board) inline bool IS_RADIOMASTER_TX16S(Board::Type board)
{ {
return board == Board::BOARD_RADIOMASTER_TX16S; return board == Board::BOARD_RADIOMASTER_TX16S;
@ -214,7 +220,7 @@ inline bool IS_RADIOMASTER_TX16S(Board::Type board)
inline bool IS_FAMILY_T16(Board::Type board) inline bool IS_FAMILY_T16(Board::Type board)
{ {
return board == Board::BOARD_JUMPER_T16 || board == Board::BOARD_RADIOMASTER_TX16S; return board == Board::BOARD_JUMPER_T16 || board == Board::BOARD_RADIOMASTER_TX16S || board == Board::BOARD_JUMPER_T18;
} }
inline bool IS_TARANIS_XLITE(Board::Type board) inline bool IS_TARANIS_XLITE(Board::Type board)

View file

@ -142,6 +142,7 @@ class GeneralSettings {
unsigned int countryCode; unsigned int countryCode;
bool jitterFilter; bool jitterFilter;
bool rtcCheckDisable; bool rtcCheckDisable;
bool keysBacklight;
unsigned int imperial; unsigned int imperial;
char ttsLanguage[2+1]; char ttsLanguage[2+1];
int beepVolume; int beepVolume;

View file

@ -26,8 +26,8 @@
#define STR_MULTI_SUBTYPE QT_TRANSLATE_NOOP("Multiprotocols", "Subtype") #define STR_MULTI_SUBTYPE QT_TRANSLATE_NOOP("Multiprotocols", "Subtype")
#define STR_MULTI_VIDFREQ QT_TRANSLATE_NOOP("Multiprotocols", "Video TX frequency") #define STR_MULTI_VIDFREQ QT_TRANSLATE_NOOP("Multiprotocols", "Video TX frequency")
#define STR_MULTI_RFTUNE QT_TRANSLATE_NOOP("Multiprotocols", "CC2500 frequency fine tune") #define STR_MULTI_RFTUNE QT_TRANSLATE_NOOP("Multiprotocols", "CC2500 frequency fine tune")
#define STR_MULTI_RFPOWER QT_TRANSLATE_NOOP("Multiprotocols", "RF power")
#define STR_MULTI_TELEMETRY QT_TRANSLATE_NOOP("Multiprotocols", "Telemetry") #define STR_MULTI_TELEMETRY QT_TRANSLATE_NOOP("Multiprotocols", "Telemetry")
#define STR_MULTI_RFPOWER QT_TRANSLATE_NOOP("Multiprotocols", "Radio output power")
#define STR_MULTI_SERVOFREQ QT_TRANSLATE_NOOP("Multiprotocols", "Servo output frequency") #define STR_MULTI_SERVOFREQ QT_TRANSLATE_NOOP("Multiprotocols", "Servo output frequency")
#define STR_MULTI_OPTION QT_TRANSLATE_NOOP("Multiprotocols", "Option value") #define STR_MULTI_OPTION QT_TRANSLATE_NOOP("Multiprotocols", "Option value")
#define STR_MULTI_FIXEDID QT_TRANSLATE_NOOP("Multiprotocols", "Fixed ID value") #define STR_MULTI_FIXEDID QT_TRANSLATE_NOOP("Multiprotocols", "Fixed ID value")

View file

@ -2607,7 +2607,13 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, Board::Type
else else
internalField.Append(new SpareBitsField<2>(this)); internalField.Append(new SpareBitsField<2>(this));
internalField.Append(new BoolField<1>(this, generalData.rtcCheckDisable)); internalField.Append(new BoolField<1>(this, generalData.rtcCheckDisable));
internalField.Append(new SpareBitsField<2>(this)); if (IS_JUMPER_T18(board)) {
internalField.Append(new BoolField<1>(this, generalData.keysBacklight));
internalField.Append(new SpareBitsField<1>(this));
}
else {
internalField.Append(new SpareBitsField<2>(this));
}
for (int i=0; i<4; i++) { for (int i=0; i<4; i++) {
internalField.Append(new SignedField<16>(this, generalData.trainer.calib[i])); internalField.Append(new SignedField<16>(this, generalData.trainer.calib[i]));

View file

@ -62,6 +62,8 @@ const char * OpenTxEepromInterface::getName()
return "OpenTX for Jumper T12"; return "OpenTX for Jumper T12";
case BOARD_JUMPER_T16: case BOARD_JUMPER_T16:
return "OpenTX for Jumper T16"; return "OpenTX for Jumper T16";
case BOARD_JUMPER_T18:
return "OpenTX for Jumper T18";
case BOARD_RADIOMASTER_TX16S: case BOARD_RADIOMASTER_TX16S:
return "OpenTX for Radiomaster TX16S"; return "OpenTX for Radiomaster TX16S";
case BOARD_TARANIS_X9D: case BOARD_TARANIS_X9D:
@ -738,7 +740,7 @@ bool OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
case PULSES_ACCST_ISRM_D16: case PULSES_ACCST_ISRM_D16:
return IS_ACCESS_RADIO(board, id); return IS_ACCESS_RADIO(board, id);
case PULSES_MULTIMODULE: case PULSES_MULTIMODULE:
return id.contains("internalmulti") || IS_RADIOMASTER_TX16S(board); return id.contains("internalmulti") || IS_RADIOMASTER_TX16S(board) || IS_JUMPER_T18(board);
default: default:
return false; return false;
} }
@ -1276,6 +1278,13 @@ void registerOpenTxFirmwares()
firmware->addOptionsGroup({opt_bt, opt_internal_gps}); firmware->addOptionsGroup({opt_bt, opt_internal_gps});
registerOpenTxFirmware(firmware); registerOpenTxFirmware(firmware);
/* Jumper T18 board */
firmware = new OpenTxFirmware("opentx-t18", Firmware::tr("Jumper T18"), BOARD_JUMPER_T18);
addOpenTxFrskyOptions(firmware);
firmware->addOption("bluetooth", Firmware::tr("Support for bluetooth module"));
registerOpenTxFirmware(firmware);
addOpenTxRfOptions(firmware, FLEX);
/* 9XR-Pro */ /* 9XR-Pro */
firmware = new OpenTxFirmware("opentx-9xrpro", Firmware::tr("Turnigy 9XR-PRO"), BOARD_9XRPRO); firmware = new OpenTxFirmware("opentx-9xrpro", Firmware::tr("Turnigy 9XR-PRO"), BOARD_9XRPRO);
addOpenTxArm9xOptions(firmware, false); addOpenTxArm9xOptions(firmware, false);

View file

@ -197,6 +197,12 @@ ui(new Ui::GeneralSetup)
ui->label_OFFBright->hide(); ui->label_OFFBright->hide();
} }
if (!IS_JUMPER_T18(firmware->getBoard())) {
ui->keysBl_ChkB->hide();
ui->keysBl_ChkB->setDisabled(true);
ui->label_KeysBl->hide();
}
if (!firmware->getCapability(SoundMod)) { if (!firmware->getCapability(SoundMod)) {
ui->soundModeCB->setDisabled(true); ui->soundModeCB->setDisabled(true);
ui->label_soundMode->hide(); ui->label_soundMode->hide();

View file

@ -554,348 +554,13 @@
</item> </item>
<item row="0" column="3"> <item row="0" column="3">
<layout class="QGridLayout" name="gridLayout_3" columnstretch="0,0"> <layout class="QGridLayout" name="gridLayout_3" columnstretch="0,0">
<item row="2" column="1">
<widget class="QSpinBox" name="volume_SB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum">
<number>23</number>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="re_label">
<property name="text">
<string>RotEnc Navigation</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QCheckBox" name="blAlarm_ChkB">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="stickReverseLB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Stick reverse</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QComboBox" name="backlightswCB">
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>This is the switch selectrion for turning on the backlight (if installed).
</string>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="blAlarm_LB">
<property name="text">
<string>Backlight flash on alarm</string>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Backlight Auto OFF after</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Backlight Switch</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QSpinBox" name="varioR0_SB">
<property name="suffix">
<string> ms</string>
</property>
<property name="minimum">
<number>200</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item row="18" column="0"> <item row="18" column="0">
<widget class="QLabel" name="VoiceLang_label">
<property name="text">
<string>Voice Language</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="varioP0_SB">
<property name="suffix">
<string> Hz</string>
</property>
<property name="minimum">
<number>300</number>
</property>
<property name="maximum">
<number>1100</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>700</number>
</property>
</widget>
</item>
<item row="14" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="stickReverse1">
<property name="text">
<string notr="true">1</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse2">
<property name="text">
<string notr="true">2</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse3">
<property name="text">
<string notr="true">3</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse4">
<property name="text">
<string notr="true">4</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="6" column="0">
<widget class="QLabel" name="varioR0_label">
<property name="text">
<string>Vario repeat at zero</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="varioP0_label">
<property name="text">
<string>Vario pitch at zero</string>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_faimode">
<property name="text">
<string>FAI Mode</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_OFFBright">
<property name="text">
<string>Backlight OFF Brightness</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QSpinBox" name="BLBright_SB">
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QSpinBox" name="backlightautoSB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>If this value is not 0, any keypress will turn on the backlight and turn it off after the specified number of seconds.</string>
</property>
<property name="suffix">
<string> sec</string>
</property>
<property name="maximum">
<number>600</number>
</property>
<property name="singleStep">
<number>5</number>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="speakerPitchSB">
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;LCD Screen Contrast&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Values can be 20-45&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>20</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="varioPMax_SB">
<property name="suffix">
<string> Hz</string>
</property>
<property name="minimum">
<number>1300</number>
</property>
<property name="maximum">
<number>2900</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>1700</number>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="label_timezone"> <widget class="QLabel" name="label_timezone">
<property name="text"> <property name="text">
<string>Timeshift from UTC</string> <string>Timeshift from UTC</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="1">
<widget class="QSpinBox" name="OFFBright_SB">
<property name="minimum">
<number>5</number>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QComboBox" name="countrycode_CB">
<item>
<property name="text">
<string>America</string>
</property>
</item>
<item>
<property name="text">
<string>Japan</string>
</property>
</item>
<item>
<property name="text">
<string>Europe</string>
</property>
</item>
</widget>
</item>
<item row="15" column="1">
<widget class="QCheckBox" name="faimode_CB">
<property name="toolTip">
<string>If you enable FAI, only RSSI and RxBt sensors will keep working. This function cannot be disabled by the radio.</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="soundModeCB">
<item>
<property name="text">
<string>Beeper</string>
</property>
</item>
<item>
<property name="text">
<string>Speaker</string>
</property>
</item>
<item>
<property name="text">
<string>BeeperVoice</string>
</property>
</item>
<item>
<property name="text">
<string>SpeakerVoice</string>
</property>
</item>
</widget>
</item>
<item row="10" column="0">
<widget class="QLabel" name="label_BLBright">
<property name="text">
<string>Backlight Brightness</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2"> <item row="3" column="0" colspan="2">
<layout class="QGridLayout" name="gridLayout_9" columnstretch="1,0,1,0"> <layout class="QGridLayout" name="gridLayout_9" columnstretch="1,0,1,0">
<item row="0" column="0"> <item row="0" column="0">
@ -992,24 +657,288 @@ p, li { white-space: pre-wrap; }
</item> </item>
</layout> </layout>
</item> </item>
<item row="12" column="0"> <item row="19" column="1">
<widget class="QLabel" name="backlightColor_label"> <widget class="QComboBox" name="voiceLang_CB"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_soundMode">
<property name="text"> <property name="text">
<string>Backlight color</string> <string>Sound Mode</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="9" column="1">
<widget class="QLabel" name="varioPMax_label"> <widget class="QCheckBox" name="blAlarm_ChkB">
<property name="text"> <property name="text">
<string>Vario pitch at max</string> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="15" column="1">
<widget class="QLabel" name="label_speakerPitch"> <layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="stickReverse1">
<property name="text">
<string notr="true">1</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse2">
<property name="text">
<string notr="true">2</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse3">
<property name="text">
<string notr="true">3</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="stickReverse4">
<property name="text">
<string notr="true">4</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="7" column="1">
<widget class="QComboBox" name="backlightswCB">
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>This is the switch selectrion for turning on the backlight (if installed).
</string>
</property>
<property name="currentIndex">
<number>-1</number>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QSpinBox" name="varioP0_SB">
<property name="suffix">
<string> Hz</string>
</property>
<property name="minimum">
<number>300</number>
</property>
<property name="maximum">
<number>1100</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>700</number>
</property>
</widget>
</item>
<item row="21" column="0">
<spacer name="verticalSpacer_3">
<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 row="6" column="1">
<widget class="QSpinBox" name="varioR0_SB">
<property name="suffix">
<string> ms</string>
</property>
<property name="minimum">
<number>200</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item row="15" column="0">
<widget class="QLabel" name="stickReverseLB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Speaker Pitch (spkr only)</string> <string>Stick reverse</string>
</property>
</widget>
</item>
<item row="20" column="1">
<widget class="QLineEdit" name="registrationId">
<property name="inputMask">
<string>nnnnnnNN</string>
</property>
<property name="maxLength">
<number>8</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="soundModeCB">
<item>
<property name="text">
<string>Beeper</string>
</property>
</item>
<item>
<property name="text">
<string>Speaker</string>
</property>
</item>
<item>
<property name="text">
<string>BeeperVoice</string>
</property>
</item>
<item>
<property name="text">
<string>SpeakerVoice</string>
</property>
</item>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_OFFBright">
<property name="text">
<string>Backlight OFF Brightness</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="volume_SB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum">
<number>23</number>
</property>
</widget>
</item>
<item row="14" column="0">
<widget class="QLabel" name="re_label">
<property name="text">
<string>RotEnc Navigation</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QSpinBox" name="OFFBright_SB">
<property name="minimum">
<number>5</number>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Backlight Switch</string>
</property>
</widget>
</item>
<item row="17" column="1">
<widget class="QComboBox" name="countrycode_CB">
<item>
<property name="text">
<string>America</string>
</property>
</item>
<item>
<property name="text">
<string>Japan</string>
</property>
</item>
<item>
<property name="text">
<string>Europe</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="varioP0_label">
<property name="text">
<string>Vario pitch at zero</string>
</property>
</widget>
</item>
<item row="16" column="1">
<widget class="QCheckBox" name="faimode_CB">
<property name="toolTip">
<string>If you enable FAI, only RSSI and RxBt sensors will keep working. This function cannot be disabled by the radio.</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Backlight Auto OFF after</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="varioPMax_SB">
<property name="suffix">
<string> Hz</string>
</property>
<property name="minimum">
<number>1300</number>
</property>
<property name="maximum">
<number>2900</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>1700</number>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QSpinBox" name="BLBright_SB">
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="16" column="0">
<widget class="QLabel" name="label_faimode">
<property name="text">
<string>FAI Mode</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1044,31 +973,56 @@ p, li { white-space: pre-wrap; }
</item> </item>
</layout> </layout>
</item> </item>
<item row="16" column="0"> <item row="12" column="0">
<widget class="QLabel" name="backlightColor_label">
<property name="text">
<string>Backlight color</string>
</property>
</widget>
</item>
<item row="20" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Owner Registration ID</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QSpinBox" name="backlightautoSB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>If this value is not 0, any keypress will turn on the backlight and turn it off after the specified number of seconds.</string>
</property>
<property name="suffix">
<string> sec</string>
</property>
<property name="maximum">
<number>600</number>
</property>
<property name="singleStep">
<number>5</number>
</property>
</widget>
</item>
<item row="17" column="0">
<widget class="QLabel" name="countrycode_label"> <widget class="QLabel" name="countrycode_label">
<property name="text"> <property name="text">
<string>Country Code</string> <string>Country Code</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="1"> <item row="18" column="1">
<widget class="QComboBox" name="re_CB"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_soundMode">
<property name="text">
<string>Sound Mode</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_volume">
<property name="text">
<string>Speaker Volume</string>
</property>
</widget>
</item>
<item row="17" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2"> <layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="QSpinBox" name="timezoneSB"> <widget class="QSpinBox" name="timezoneSB">
@ -1098,36 +1052,96 @@ p, li { white-space: pre-wrap; }
</item> </item>
</layout> </layout>
</item> </item>
<item row="18" column="1"> <item row="10" column="0">
<widget class="QComboBox" name="voiceLang_CB"/> <widget class="QLabel" name="label_BLBright">
</item>
<item row="20" column="0">
<spacer name="verticalSpacer_3">
<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 row="19" column="0">
<widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>Owner Registration ID</string> <string>Backlight Brightness</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="1"> <item row="6" column="0">
<widget class="QLineEdit" name="registrationId"> <widget class="QLabel" name="varioR0_label">
<property name="inputMask"> <property name="text">
<string>nnnnnnNN</string> <string>Vario repeat at zero</string>
</property> </property>
<property name="maxLength"> </widget>
<number>8</number> </item>
<item row="19" column="0">
<widget class="QLabel" name="VoiceLang_label">
<property name="text">
<string>Voice Language</string>
</property>
</widget>
</item>
<item row="9" column="0">
<widget class="QLabel" name="blAlarm_LB">
<property name="text">
<string>Backlight flash on alarm</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="varioPMax_label">
<property name="text">
<string>Vario pitch at max</string>
</property>
</widget>
</item>
<item row="14" column="1">
<widget class="QComboBox" name="re_CB"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_speakerPitch">
<property name="text">
<string>Speaker Pitch (spkr only)</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_volume">
<property name="text">
<string>Speaker Volume</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="speakerPitchSB">
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;LCD Screen Contrast&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Values can be 20-45&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>20</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="13" column="0">
<widget class="QLabel" name="label_KeysBl">
<property name="text">
<string>Keys Backlight</string>
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="QCheckBox" name="keysBl_ChkB">
<property name="text">
<string/>
</property> </property>
</widget> </widget>
</item> </item>

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

View file

@ -14,6 +14,7 @@ set(simulation_SRCS
simulateduiwidgetX12.cpp simulateduiwidgetX12.cpp
simulateduiwidgetJumperT12.cpp simulateduiwidgetJumperT12.cpp
simulateduiwidgetJumperT16.cpp simulateduiwidgetJumperT16.cpp
simulateduiwidgetJumperT18.cpp
simulateduiwidgetTX16S.cpp simulateduiwidgetTX16S.cpp
simulatorinterface.cpp simulatorinterface.cpp
simulatormainwindow.cpp simulatormainwindow.cpp
@ -39,6 +40,7 @@ set(simulation_UIS
simulateduiwidgetX12.ui simulateduiwidgetX12.ui
simulateduiwidgetJumperT12.ui simulateduiwidgetJumperT12.ui
simulateduiwidgetJumperT16.ui simulateduiwidgetJumperT16.ui
simulateduiwidgetJumperT18.ui
simulateduiwidgetTX16S.ui simulateduiwidgetTX16S.ui
simulatormainwindow.ui simulatormainwindow.ui
simulatorstartupdialog.ui simulatorstartupdialog.ui

View file

@ -113,6 +113,7 @@ namespace Ui {
class SimulatedUIWidgetX12; class SimulatedUIWidgetX12;
class SimulatedUIWidgetJumperT12; class SimulatedUIWidgetJumperT12;
class SimulatedUIWidgetJumperT16; class SimulatedUIWidgetJumperT16;
class SimulatedUIWidgetJumperT18;
class SimulatedUIWidgetTX16S; class SimulatedUIWidgetTX16S;
} }
@ -252,6 +253,18 @@ class SimulatedUIWidgetJumperT16: public SimulatedUIWidget
Ui::SimulatedUIWidgetJumperT16 * ui; Ui::SimulatedUIWidgetJumperT16 * ui;
}; };
class SimulatedUIWidgetJumperT18: public SimulatedUIWidget
{
Q_OBJECT
public:
explicit SimulatedUIWidgetJumperT18(SimulatorInterface * simulator, QWidget * parent = nullptr);
virtual ~SimulatedUIWidgetJumperT18();
private:
Ui::SimulatedUIWidgetJumperT18 * ui;
};
class SimulatedUIWidgetTX16S: public SimulatedUIWidget class SimulatedUIWidgetTX16S: public SimulatedUIWidget
{ {
Q_OBJECT Q_OBJECT

View file

@ -0,0 +1,69 @@
/*
* Copyright (C) OpenTX
*
* Based on code named
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
// NOTE: RadioUiAction(NUMBER,...): NUMBER relates to enum EnumKeys in the specific board.h
#include "simulateduiwidget.h"
#include "ui_simulateduiwidgetJumperT18.h"
SimulatedUIWidgetJumperT18::SimulatedUIWidgetJumperT18(SimulatorInterface *simulator, QWidget * parent):
SimulatedUIWidget(simulator, parent),
ui(new Ui::SimulatedUIWidgetJumperT18)
{
RadioUiAction * act;
ui->setupUi(this);
// add actions in order of appearance on the help menu
act = new RadioUiAction(3, QList<int>() << Qt::Key_Up, SIMU_STR_HLP_KEY_UP, SIMU_STR_HLP_ACT_MDL);
addRadioWidget(ui->leftbuttons->addArea(QRect(60, 90, 80, 35), "JumperT18/left_mdl.png", act));
act = new RadioUiAction(6, QList<int>() << Qt::Key_Left, SIMU_STR_HLP_KEY_LFT, SIMU_STR_HLP_ACT_SYS);
addRadioWidget(ui->leftbuttons->addArea(QRect(25, 5, 100, 40), "JumperT18/left_sys.png", act));
act = new RadioUiAction(5, QList<int>() << Qt::Key_Right, SIMU_STR_HLP_KEY_RGT, SIMU_STR_HLP_ACT_TELE);
addRadioWidget(ui->leftbuttons->addArea(QRect(60, 180, 80, 35), "JumperT18/left_tele.png", act));
act = new RadioUiAction(4, QList<int>() << Qt::Key_Down << Qt::Key_Delete << Qt::Key_Escape << Qt::Key_Backspace,
SIMU_STR_HLP_KEY_DN % "<br>" % SIMU_STR_HLP_KEYS_EXIT, SIMU_STR_HLP_ACT_RTN);
addRadioWidget(ui->rightbuttons->addArea(QRect(20, 5, 100, 40), "JumperT18/right_rtn.png", act));
act = new RadioUiAction(1, QList<int>() << Qt::Key_PageDown, SIMU_STR_HLP_KEY_PGDN, SIMU_STR_HLP_ACT_PGDN);
addRadioWidget(ui->leftbuttons->addArea(QRect(60, 140, 80, 35), "JumperT18/left.png", act));
m_scrollUpAction = new RadioUiAction(-1, QList<int>() << Qt::Key_Minus, SIMU_STR_HLP_KEY_MIN % "|" % SIMU_STR_HLP_MOUSE_UP, SIMU_STR_HLP_ACT_ROT_LFT);
m_scrollDnAction = new RadioUiAction(-1, QList<int>() << Qt::Key_Plus << Qt::Key_Equal, SIMU_STR_HLP_KEY_PLS % "|" % SIMU_STR_HLP_MOUSE_DN, SIMU_STR_HLP_ACT_ROT_RGT);
connectScrollActions();
m_mouseMidClickAction = new RadioUiAction(2, QList<int>() << Qt::Key_Enter << Qt::Key_Return, SIMU_STR_HLP_KEYS_ACTIVATE, SIMU_STR_HLP_ACT_ROT_DN);
addRadioWidget(ui->rightbuttons->addArea(QRect(25, 90, 70, 130), "JumperT18/right_ent.png", m_mouseMidClickAction));
addRadioWidget(ui->leftbuttons->addArea(QRect(10, 245, 30, 30), "JumperT18/left_scrnsht.png", m_screenshotAction));
m_backlightColors << QColor(47, 123, 227);
setLcd(ui->lcd);
}
SimulatedUIWidgetJumperT18::~SimulatedUIWidgetJumperT18()
{
delete ui;
}

View file

@ -0,0 +1,197 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SimulatedUIWidgetJumperT18</class>
<widget class="QWidget" name="SimulatedUIWidgetJumperT18">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>825</width>
<height>292</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>825</width>
<height>292</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>825</width>
<height>292</height>
</size>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="2" rowspan="3">
<widget class="ButtonsWidget" name="rightbuttons" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>131 </width>
<height>289</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>131</width>
<height>289</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT18/right.png)</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="LcdWidget" name="lcd" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>480</width>
<height>272</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>480</width>
<height>272</height>
</size>
</property>
<property name="font">
<font>
<pointsize>5</pointsize>
</font>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="3">
<widget class="ButtonsWidget" name="leftbuttons" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>131</width>
<height>289</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>131</width>
<height>289</height>
</size>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT18/left.png);</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QWidget" name="top" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>480</width>
<height>10</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>480</width>
<height>10</height>
</size>
</property>
<property name="font">
<font>
<pointsize>5</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT18/top.png)</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QWidget" name="bottom" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>480</width>
<height>10</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>480</width>
<height>10</height>
</size>
</property>
<property name="font">
<font>
<pointsize>5</pointsize>
<kerning>false</kerning>
</font>
</property>
<property name="styleSheet">
<string notr="true">background:url(:/images/simulator/JumperT18/bottom.png)</string>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>LcdWidget</class>
<extends>QWidget</extends>
<header>lcdwidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>ButtonsWidget</class>
<extends>QWidget</extends>
<header>buttonswidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View file

@ -86,7 +86,7 @@ void SimulatorStartupDialog::changeEvent(QEvent *e)
// FIXME : need a better way to check for this // FIXME : need a better way to check for this
bool SimulatorStartupDialog::usesCategorizedStorage(const QString & name) bool SimulatorStartupDialog::usesCategorizedStorage(const QString & name)
{ {
return name.contains(QRegExp("(x12|x10|horus|16)", Qt::CaseInsensitive)); return name.contains(QRegExp("(x12|x10|horus|16|18)", Qt::CaseInsensitive));
} }
bool SimulatorStartupDialog::usesCategorizedStorage() bool SimulatorStartupDialog::usesCategorizedStorage()

View file

@ -94,6 +94,9 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato
case Board::BOARD_JUMPER_T16: case Board::BOARD_JUMPER_T16:
radioUiWidget = new SimulatedUIWidgetJumperT16(simulator, this); radioUiWidget = new SimulatedUIWidgetJumperT16(simulator, this);
break; break;
case Board::BOARD_JUMPER_T18:
radioUiWidget = new SimulatedUIWidgetJumperT18(simulator, this);
break;
case Board::BOARD_RADIOMASTER_TX16S: case Board::BOARD_RADIOMASTER_TX16S:
radioUiWidget = new SimulatedUIWidgetTX16S(simulator, this); radioUiWidget = new SimulatedUIWidgetTX16S(simulator, this);
break; break;

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

View file

@ -1,6 +1,9 @@
if(PCB STREQUAL X12S) if(PCB STREQUAL X12S)
set(BITMAP_TARGET_PREFIX x12s) set(BITMAP_TARGET_PREFIX x12s)
set(BITMAP_FMT_SUFFIX "") set(BITMAP_FMT_SUFFIX "")
elseif(PCB STREQUAL X10 AND PCBREV STREQUAL T18)
set(BITMAP_TARGET_PREFIX x10)
set(BITMAP_FMT_SUFFIX "")
else() else()
set(BITMAP_TARGET_PREFIX x10) set(BITMAP_TARGET_PREFIX x10)
set(BITMAP_FMT_SUFFIX "-R") set(BITMAP_FMT_SUFFIX "-R")

View file

@ -744,7 +744,12 @@ PACK(struct RadioData {
uint8_t backlightMode:3; uint8_t backlightMode:3;
int8_t antennaMode:2; int8_t antennaMode:2;
uint8_t disableRtcWarning:1; uint8_t disableRtcWarning:1;
#if defined(KEYS_BACKLIGHT_GPIO)
uint8_t keysBacklight:1;
int8_t spare1:1;
#else
int8_t spare1:2; int8_t spare1:2;
#endif
NOBACKUP(TrainerData trainer); NOBACKUP(TrainerData trainer);
NOBACKUP(uint8_t view); // index of view in main screen NOBACKUP(uint8_t view); // index of view in main screen
NOBACKUP(BUZZER_FIELD); /* 2bits */ NOBACKUP(BUZZER_FIELD); /* 2bits */

View file

@ -1544,7 +1544,10 @@ void menuModelSetup(event_t event)
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
optionValue = 50 + 5 * optionValue; optionValue = 50 + 5 * optionValue;
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr); if (multi_proto == MODULE_SUBTYPE_MULTI_FRSKY_R9)
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_POWER, optionValue, LEFT | attr);
else
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
if (attr) { if (attr) {
int8_t min, max; int8_t min, max;
getMultiOptionValues(multi_proto, min, max); getMultiOptionValues(multi_proto, min, max);

View file

@ -76,6 +76,6 @@ void menuRadioDiagKeys(event_t event)
#if defined(ROTARY_ENCODER_NAVIGATION) #if defined(ROTARY_ENCODER_NAVIGATION)
coord_t y = MENU_HEADER_HEIGHT + 1 + FH*KEY_COUNT; coord_t y = MENU_HEADER_HEIGHT + 1 + FH*KEY_COUNT;
lcdDrawText(0, y, STR_ROTARY_ENCODER); lcdDrawText(0, y, STR_ROTARY_ENCODER);
lcdDrawNumber(5*FW+FWNUM+2, y, rotencValue, RIGHT); lcdDrawNumber(5*FW+FWNUM+2, y, rotencValue / ROTARY_ENCODER_GRANULARITY, RIGHT);
#endif #endif
} }

View file

@ -1309,7 +1309,10 @@ void menuModelSetup(event_t event)
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
optionValue = 50 + 5 * optionValue; optionValue = 50 + 5 * optionValue;
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr); if (multi_proto == MODULE_SUBTYPE_MULTI_FRSKY_R9)
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_POWER, optionValue, LEFT | attr);
else
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
if (attr) { if (attr) {
int8_t min, max; int8_t min, max;
getMultiOptionValues(multi_proto, min, max); getMultiOptionValues(multi_proto, min, max);

View file

@ -59,6 +59,6 @@ void menuRadioDiagKeys(event_t event)
#if defined(ROTARY_ENCODER_NAVIGATION) #if defined(ROTARY_ENCODER_NAVIGATION)
coord_t y = MENU_HEADER_HEIGHT + 1 + FH*KEY_COUNT; coord_t y = MENU_HEADER_HEIGHT + 1 + FH*KEY_COUNT;
lcdDrawText(0, y, STR_ROTARY_ENCODER); lcdDrawText(0, y, STR_ROTARY_ENCODER);
lcdDrawNumber(5*FW+FWNUM+2, y, rotencValue, RIGHT); lcdDrawNumber(5*FW+FWNUM+2, y, rotencValue / ROTARY_ENCODER_GRANULARITY, RIGHT);
#endif #endif
} }

View file

@ -25,7 +25,7 @@
#include "colors.h" #include "colors.h"
#include "rle.h" #include "rle.h"
#if defined(PCBX10) && !defined(SIMU) #if defined(LCD_VERTICAL_INVERT)
#define MOVE_PIXEL_RIGHT(p, count) p -= count #define MOVE_PIXEL_RIGHT(p, count) p -= count
#else #else
#define MOVE_PIXEL_RIGHT(p, count) p += count #define MOVE_PIXEL_RIGHT(p, count) p += count
@ -100,7 +100,7 @@ class BitmapBufferBase
inline const display_t * getPixelPtr(coord_t x, coord_t y) const inline const display_t * getPixelPtr(coord_t x, coord_t y) const
{ {
#if defined(PCBX10) && !defined(SIMU) #if defined(LCD_VERTICAL_INVERT)
x = width - x - 1; x = width - x - 1;
y = height - y - 1; y = height - y - 1;
#endif #endif
@ -201,7 +201,7 @@ class BitmapBuffer: public BitmapBufferBase<uint16_t>
inline const display_t * getPixelPtr(coord_t x, coord_t y) const inline const display_t * getPixelPtr(coord_t x, coord_t y) const
{ {
#if defined(PCBX10) && !defined(SIMU) #if defined(LCD_VERTICAL_INVERT)
x = width - x - 1; x = width - x - 1;
y = height - y - 1; y = height - y - 1;
#endif #endif
@ -210,7 +210,7 @@ class BitmapBuffer: public BitmapBufferBase<uint16_t>
inline display_t * getPixelPtr(coord_t x, coord_t y) inline display_t * getPixelPtr(coord_t x, coord_t y)
{ {
#if defined(PCBX10) && !defined(SIMU) #if defined(LCD_VERTICAL_INVERT)
x = width - x - 1; x = width - x - 1;
y = height - y - 1; y = height - y - 1;
#endif #endif

View file

@ -156,7 +156,7 @@ void putsChnLetter(coord_t x, coord_t y, uint8_t idx, LcdFlags attr);
#define DOTTED 0x55 #define DOTTED 0x55
#define STASHED 0x33 #define STASHED 0x33
#if defined(PCBX10) && !defined(SIMU) #if defined(LCD_VERTICAL_INVERT)
#define PIXEL_PTR(x, y) &displayBuf[(LCD_H*LCD_W-1) - (y)*LCD_W - (x)] #define PIXEL_PTR(x, y) &displayBuf[(LCD_H*LCD_W-1) - (y)*LCD_W - (x)]
#else #else
#define PIXEL_PTR(x, y) &displayBuf[(y)*LCD_W + (x)] #define PIXEL_PTR(x, y) &displayBuf[(y)*LCD_W + (x)]

View file

@ -1686,7 +1686,10 @@ bool menuModelSetup(event_t event)
if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A) if (multi_proto == MODULE_SUBTYPE_MULTI_FS_AFHDS2A)
optionValue = 50 + 5 * optionValue; optionValue = 50 + 5 * optionValue;
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr); if (multi_proto == MODULE_SUBTYPE_MULTI_FRSKY_R9)
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_POWER, optionValue, LEFT | attr);
else
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
if (attr) { if (attr) {
int8_t min, max; int8_t min, max;
getMultiOptionValues(multi_proto, min, max); getMultiOptionValues(multi_proto, min, max);

View file

@ -73,7 +73,7 @@ bool menuRadioDiagKeys(event_t event)
#if defined(ROTARY_ENCODER_NAVIGATION) #if defined(ROTARY_ENCODER_NAVIGATION)
coord_t y = MENU_HEADER_HEIGHT + FH * (8 - KEY_START); coord_t y = MENU_HEADER_HEIGHT + FH * (8 - KEY_START);
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_ROTARY_ENCODER); lcdDrawText(MENUS_MARGIN_LEFT, y, STR_ROTARY_ENCODER);
lcdDrawNumber(70, y, rotencValue, 0); lcdDrawNumber(70, y, rotencValue / ROTARY_ENCODER_GRANULARITY, 0);
#endif #endif
return true; return true;

View file

@ -65,6 +65,9 @@ enum menuRadioSetupItems {
ITEM_SETUP_BACKLIGHT_DELAY, ITEM_SETUP_BACKLIGHT_DELAY,
ITEM_SETUP_BRIGHTNESS, ITEM_SETUP_BRIGHTNESS,
ITEM_SETUP_DIM_LEVEL, ITEM_SETUP_DIM_LEVEL,
#if defined(KEYS_BACKLIGHT_GPIO)
ITEM_SETUP_KEYS_BACKLIGHT,
#endif
ITEM_SETUP_FLASH_BEEP, ITEM_SETUP_FLASH_BEEP,
CASE_PWR_BUTTON_PRESS(ITEM_SETUP_PWR_OFF_SPEED) CASE_PWR_BUTTON_PRESS(ITEM_SETUP_PWR_OFF_SPEED)
#if defined(PXX2) #if defined(PXX2)
@ -110,6 +113,11 @@ bool menuRadioSetup(event_t event)
#else #else
#define FAI_CHOICE_ROW #define FAI_CHOICE_ROW
#endif #endif
#if defined(KEYS_BACKLIGHT_GPIO)
#define BACKLIGHT_ROWS LABEL(BACKLIGHT), 0, 0, 0, 0, 0, 0,
#else
#define BACKLIGHT_ROWS LABEL(BACKLIGHT), 0, 0, 0, 0, 0,
#endif
MENU(STR_MENURADIOSETUP, RADIO_ICONS, menuTabGeneral, MENU_RADIO_SETUP, ITEM_SETUP_MAX, { MENU(STR_MENURADIOSETUP, RADIO_ICONS, menuTabGeneral, MENU_RADIO_SETUP, ITEM_SETUP_MAX, {
2|NAVIGATION_LINE_BY_LINE, 2|NAVIGATION_LINE_BY_LINE, 1|NAVIGATION_LINE_BY_LINE, // Date Time Bat range 2|NAVIGATION_LINE_BY_LINE, 2|NAVIGATION_LINE_BY_LINE, 1|NAVIGATION_LINE_BY_LINE, // Date Time Bat range
@ -117,7 +125,7 @@ bool menuRadioSetup(event_t event)
CASE_VARIO(LABEL(VARIO)) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(LABEL(VARIO)) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0)
CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0)
LABEL(ALARMS), 0, 0, 0, 0, LABEL(ALARMS), 0, 0, 0, 0,
LABEL(BACKLIGHT), 0, 0, 0, 0, 0, BACKLIGHT_ROWS
CASE_PWR_BUTTON_PRESS(0) CASE_PWR_BUTTON_PRESS(0)
CASE_PXX2(0) // owner registration ID CASE_PXX2(0) // owner registration ID
CASE_GPS(LABEL(GPS)) CASE_GPS(LABEL(GPS))
@ -373,7 +381,7 @@ bool menuRadioSetup(event_t event)
break; break;
case ITEM_SETUP_BACKLIGHT_MODE: case ITEM_SETUP_BACKLIGHT_MODE:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODE); lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH , y, STR_MODE);
g_eeGeneral.backlightMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr, event); g_eeGeneral.backlightMode = editChoice(RADIO_SETUP_2ND_COLUMN, y, STR_VBLMODE, g_eeGeneral.backlightMode, e_backlight_mode_off, e_backlight_mode_on, attr, event);
break; break;
@ -388,7 +396,6 @@ bool menuRadioSetup(event_t event)
editName(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID, event, attr); editName(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.ownerRegistrationID, PXX2_LEN_REGISTRATION_ID, event, attr);
break; break;
#endif #endif
case ITEM_SETUP_BACKLIGHT_DELAY: case ITEM_SETUP_BACKLIGHT_DELAY:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLDELAY); lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLDELAY);
lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.lightAutoOff*5, attr|LEFT, 0, NULL, "s"); lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.lightAutoOff*5, attr|LEFT, 0, NULL, "s");
@ -405,6 +412,13 @@ bool menuRadioSetup(event_t event)
g_eeGeneral.blOffBright = editSlider(RADIO_SETUP_2ND_COLUMN, y, event, g_eeGeneral.blOffBright, BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, attr); g_eeGeneral.blOffBright = editSlider(RADIO_SETUP_2ND_COLUMN, y, event, g_eeGeneral.blOffBright, BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, attr);
break; break;
#if defined(KEYS_BACKLIGHT_GPIO)
case ITEM_SETUP_KEYS_BACKLIGHT:
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH , y, STR_KEYS_BACKLIGHT);
g_eeGeneral.keysBacklight = editCheckBox(g_eeGeneral.keysBacklight, RADIO_SETUP_2ND_COLUMN, y, attr, event ) ;
break;
#endif
#if defined(PWR_BUTTON_PRESS) #if defined(PWR_BUTTON_PRESS)
case ITEM_SETUP_PWR_OFF_SPEED: case ITEM_SETUP_PWR_OFF_SPEED:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_PWR_OFF_DELAY); lcdDrawText(MENUS_MARGIN_LEFT, y, STR_PWR_OFF_DELAY);

View file

@ -139,6 +139,8 @@ class DarkblueTheme: public Theme
delete calibHorus; delete calibHorus;
#if defined(RADIO_T16) #if defined(RADIO_T16)
calibHorus = BitmapBuffer::load(getThemePath("t16.bmp")); calibHorus = BitmapBuffer::load(getThemePath("t16.bmp"));
#elif defined(RADIO_T18)
calibHorus = BitmapBuffer::load(getThemePath("t18.bmp"));
#elif defined(RADIO_TX16S) #elif defined(RADIO_TX16S)
calibHorus = BitmapBuffer::load(getThemePath("tx16s.bmp")); calibHorus = BitmapBuffer::load(getThemePath("tx16s.bmp"));
#elif defined(PCBX10) #elif defined(PCBX10)

View file

@ -176,6 +176,8 @@ class DefaultTheme: public Theme
delete calibHorus; delete calibHorus;
#if defined(RADIO_T16) #if defined(RADIO_T16)
calibHorus = BitmapBuffer::load(getThemePath("t16.bmp")); calibHorus = BitmapBuffer::load(getThemePath("t16.bmp"));
#elif defined(RADIO_T18)
calibHorus = BitmapBuffer::load(getThemePath("t18.bmp"));
#elif defined(RADIO_TX16S) #elif defined(RADIO_TX16S)
calibHorus = BitmapBuffer::load(getThemePath("tx16s.bmp")); calibHorus = BitmapBuffer::load(getThemePath("tx16s.bmp"));
#elif defined(PCBX10) #elif defined(PCBX10)

View file

@ -921,7 +921,8 @@ const char* mm_options_strings::options[] = {
STR_MULTI_TELEMETRY, STR_MULTI_TELEMETRY,
STR_MULTI_SERVOFREQ, STR_MULTI_SERVOFREQ,
STR_MULTI_MAX_THROW, STR_MULTI_MAX_THROW,
STR_MULTI_RFCHAN STR_MULTI_RFCHAN,
STR_MULTI_RFPOWER
}; };
const mm_protocol_definition multi_protocols[] = { const mm_protocol_definition multi_protocols[] = {

View file

@ -2073,6 +2073,10 @@ int main()
inline uint32_t PWR_PRESS_SHUTDOWN_DELAY() inline uint32_t PWR_PRESS_SHUTDOWN_DELAY()
{ {
// Instant off when both power button are pressed
if (pwrForcePressed())
return 0;
return (2 - g_eeGeneral.pwrOffSpeed) * 100; return (2 - g_eeGeneral.pwrOffSpeed) * 100;
} }

View file

@ -536,7 +536,7 @@ bool setTrimValue(uint8_t phase, uint8_t idx, int trim);
#if defined(PCBSKY9X) #if defined(PCBSKY9X)
#define ROTARY_ENCODER_GRANULARITY (2 << g_eeGeneral.rotarySteps) #define ROTARY_ENCODER_GRANULARITY (2 << g_eeGeneral.rotarySteps)
#elif defined(RADIO_FAMILY_T16) #elif defined(RADIO_FAMILY_T16) && !defined(RADIO_T18)
#define ROTARY_ENCODER_GRANULARITY (1) #define ROTARY_ENCODER_GRANULARITY (1)
#else #else
#define ROTARY_ENCODER_GRANULARITY (2) #define ROTARY_ENCODER_GRANULARITY (2)

View file

@ -666,6 +666,10 @@ inline void getMultiOptionValues(int8_t multi_proto, int8_t & min, int8_t & max)
min = -1; min = -1;
max = 84; max = 84;
break; break;
case MODULE_SUBTYPE_MULTI_FRSKY_R9:
min = 0; // 10mW
max = 5; // 300mW
break;
default: default:
min = -128; min = -128;
max = 127; max = 127;

View file

@ -128,6 +128,8 @@ const char * getBasename(const char * path);
#define OTX_FOURCC 0x3478746F // otx for X12S #define OTX_FOURCC 0x3478746F // otx for X12S
#elif defined(RADIO_T16) #elif defined(RADIO_T16)
#define OTX_FOURCC 0x3F78746F // otx for Jumper T16 #define OTX_FOURCC 0x3F78746F // otx for Jumper T16
#elif defined(RADIO_T18)
#define OTX_FOURCC 0x4078746F // otx for Jumper T18
#elif defined(RADIO_TX16S) #elif defined(RADIO_TX16S)
#define OTX_FOURCC 0x3878746F // otx for Radiomaster TX16S #define OTX_FOURCC 0x3878746F // otx for Radiomaster TX16S
#elif defined(PCBX10) #elif defined(PCBX10)

View file

@ -24,6 +24,8 @@
// not needed // not needed
#elif defined(RADIO_T16) #elif defined(RADIO_T16)
const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, 1,1,1, -1,1, -1,1}; const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, 1,1,1, -1,1, -1,1};
#elif defined(RADIO_T18)
const int8_t adcDirection[NUM_ANALOGS] = { 1,-1,1,-1, -1,1,-1, -1,1, -1,1 };
#elif defined(RADIO_TX16S) #elif defined(RADIO_TX16S)
const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, 1,1,1, -1,1, -1,1}; const int8_t adcDirection[NUM_ANALOGS] = {1,-1,1,-1, 1,1,1, -1,1, -1,1};
#elif defined(PCBX10) #elif defined(PCBX10)

View file

@ -197,7 +197,8 @@ int main()
RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | KEYS_RCC_AHB1Periph | RCC_AHB1PeriphClockCmd(PWR_RCC_AHB1Periph | KEYS_RCC_AHB1Periph |
LCD_RCC_AHB1Periph | BACKLIGHT_RCC_AHB1Periph | LCD_RCC_AHB1Periph | BACKLIGHT_RCC_AHB1Periph |
AUX_SERIAL_RCC_AHB1Periph | AUX2_SERIAL_RCC_AHB1Periph | I2C_RCC_AHB1Periph | AUX_SERIAL_RCC_AHB1Periph | AUX2_SERIAL_RCC_AHB1Periph |
I2C_RCC_AHB1Periph | KEYS_BACKLIGHT_RCC_AHB1Periph |
SD_RCC_AHB1Periph, ENABLE); SD_RCC_AHB1Periph, ENABLE);
RCC_APB1PeriphClockCmd(ROTARY_ENCODER_RCC_APB1Periph | LCD_RCC_APB1Periph | BACKLIGHT_RCC_APB1Periph | RCC_APB1PeriphClockCmd(ROTARY_ENCODER_RCC_APB1Periph | LCD_RCC_APB1Periph | BACKLIGHT_RCC_APB1Periph |

View file

@ -51,6 +51,12 @@ void pwrInit()
GPIO_InitStructure.GPIO_Pin = PWR_SWITCH_GPIO_PIN; GPIO_InitStructure.GPIO_Pin = PWR_SWITCH_GPIO_PIN;
GPIO_Init(PWR_SWITCH_GPIO, &GPIO_InitStructure); GPIO_Init(PWR_SWITCH_GPIO, &GPIO_InitStructure);
#if defined(PWR_EXTRA_SWITCH_GPIO)
// PWR Extra switch
GPIO_InitStructure.GPIO_Pin = PWR_EXTRA_SWITCH_GPIO_PIN;
GPIO_Init(PWR_EXTRA_SWITCH_GPIO, &GPIO_InitStructure);
#endif
#if defined(PCBREV_HARDCODED) #if defined(PCBREV_HARDCODED)
hardwareOptions.pcbrev = PCBREV_HARDCODED; hardwareOptions.pcbrev = PCBREV_HARDCODED;
#elif defined(PCBREV_GPIO_PIN) #elif defined(PCBREV_GPIO_PIN)
@ -101,9 +107,20 @@ void pwrOff()
GPIO_ResetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN); GPIO_ResetBits(PWR_ON_GPIO, PWR_ON_GPIO_PIN);
} }
#if defined(PWR_EXTRA_SWITCH_GPIO)
bool pwrForcePressed()
{
return (GPIO_ReadInputDataBit(PWR_SWITCH_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET && GPIO_ReadInputDataBit(PWR_EXTRA_SWITCH_GPIO, PWR_EXTRA_SWITCH_GPIO_PIN) == Bit_RESET);
}
#endif
bool pwrPressed() bool pwrPressed()
{ {
#if defined(PWR_EXTRA_SWITCH_GPIO)
return (GPIO_ReadInputDataBit(PWR_SWITCH_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET || GPIO_ReadInputDataBit(PWR_EXTRA_SWITCH_GPIO, PWR_EXTRA_SWITCH_GPIO_PIN) == Bit_RESET);
#else
return GPIO_ReadInputDataBit(PWR_SWITCH_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET; return GPIO_ReadInputDataBit(PWR_SWITCH_GPIO, PWR_SWITCH_GPIO_PIN) == Bit_RESET;
#endif
} }
void pwrResetHandler() void pwrResetHandler()

View file

@ -71,7 +71,7 @@ void rotaryEncoderInit()
void rotaryEncoderCheck() void rotaryEncoderCheck()
{ {
#if defined(RADIO_FAMILY_T16) #if defined(RADIO_FAMILY_T16) && !defined(RADIO_T18)
static uint8_t state = 0; static uint8_t state = 0;
uint8_t pins = ROTARY_ENCODER_POSITION(); uint8_t pins = ROTARY_ENCODER_POSITION();

View file

@ -71,6 +71,13 @@ if (PCB STREQUAL X10)
set(AUX2_SERIAL ON) set(AUX2_SERIAL ON)
endif() endif()
set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS") set(INTERNAL_GPS_BAUDRATE "9600" CACHE STRING "Baud rate for internal GPS")
elseif (PCBREV STREQUAL T18)
set(FLAVOUR t18)
set(LUA_EXPORT lua_export_t16)
add_definitions(-DRADIO_T18)
add_definitions(-DRADIO_FAMILY_T16)
option(INTERNAL_MODULE_MULTI "Support for MULTI internal module" ON)
option(BLUETOOTH "Support for bluetooth module" OFF)
else() else()
set(FLAVOUR x10) set(FLAVOUR x10)
option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON) option(INTERNAL_MODULE_PXX1 "Support for PXX1 internal module" ON)

View file

@ -32,6 +32,15 @@ void backlightInit()
GPIO_Init(BACKLIGHT_GPIO, &GPIO_InitStructure); GPIO_Init(BACKLIGHT_GPIO, &GPIO_InitStructure);
GPIO_PinAFConfig(BACKLIGHT_GPIO, BACKLIGHT_GPIO_PinSource, BACKLIGHT_GPIO_AF); GPIO_PinAFConfig(BACKLIGHT_GPIO, BACKLIGHT_GPIO_PinSource, BACKLIGHT_GPIO_AF);
#if defined(KEYS_BACKLIGHT_GPIO)
GPIO_InitStructure.GPIO_Pin = KEYS_BACKLIGHT_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(KEYS_BACKLIGHT_GPIO, &GPIO_InitStructure);
#endif
// TIMER init // TIMER init
#if defined(PCBX12S) && PCBREV >= 13 #if defined(PCBX12S) && PCBREV >= 13
BACKLIGHT_TIMER->ARR = 100; BACKLIGHT_TIMER->ARR = 100;
@ -72,6 +81,15 @@ void backlightEnable(uint8_t dutyCycle)
BACKLIGHT_TIMER->CCR3 = BACKLIGHT_LEVEL_MAX - dutyCycle; BACKLIGHT_TIMER->CCR3 = BACKLIGHT_LEVEL_MAX - dutyCycle;
#endif #endif
#if defined(KEYS_BACKLIGHT_GPIO) && !defined(BOOT)
if (dutyCycle == 0 || g_eeGeneral.keysBacklight == 0) {
GPIO_ResetBits(KEYS_BACKLIGHT_GPIO, KEYS_BACKLIGHT_GPIO_PIN);
}
else {
GPIO_SetBits(KEYS_BACKLIGHT_GPIO, KEYS_BACKLIGHT_GPIO_PIN);
}
#endif
if (dutyCycle == 0) { if (dutyCycle == 0) {
BACKLIGHT_TIMER->BDTR &= ~TIM_BDTR_MOE; BACKLIGHT_TIMER->BDTR &= ~TIM_BDTR_MOE;
} }

View file

@ -103,6 +103,7 @@ void boardInit()
LED_RCC_AHB1Periph | LED_RCC_AHB1Periph |
LCD_RCC_AHB1Periph | LCD_RCC_AHB1Periph |
BACKLIGHT_RCC_AHB1Periph | BACKLIGHT_RCC_AHB1Periph |
KEYS_BACKLIGHT_RCC_AHB1Periph |
SD_RCC_AHB1Periph | SD_RCC_AHB1Periph |
AUDIO_RCC_AHB1Periph | AUDIO_RCC_AHB1Periph |
KEYS_RCC_AHB1Periph | KEYS_RCC_AHB1Periph |

View file

@ -492,6 +492,11 @@ void pwrOn();
void pwrOff(); void pwrOff();
void pwrResetHandler(); void pwrResetHandler();
bool pwrPressed(); bool pwrPressed();
#if defined(PWR_EXTRA_SWITCH_GPIO)
bool pwrForcePressed();
#else
#define pwrForcePressed() false
#endif
uint32_t pwrPressedDuration(); uint32_t pwrPressedDuration();
// USB Charger // USB Charger
@ -555,6 +560,10 @@ void usbJoystickUpdate();
#define USB_NAME "Jumper T16" #define USB_NAME "Jumper T16"
#define USB_MANUFACTURER 'J', 'u', 'm', 'p', 'e', 'r', ' ', ' ' /* 8 bytes */ #define USB_MANUFACTURER 'J', 'u', 'm', 'p', 'e', 'r', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'T', '1', '6', ' ', ' ', ' ', ' ', ' ' /* 8 Bytes */ #define USB_PRODUCT 'T', '1', '6', ' ', ' ', ' ', ' ', ' ' /* 8 Bytes */
#elif defined(RADIO_T18)
#define USB_NAME "Jumper T18"
#define USB_MANUFACTURER 'J', 'u', 'm', 'p', 'e', 'r', ' ', ' ' /* 8 bytes */
#define USB_PRODUCT 'T', '1', '8', ' ', ' ', ' ', ' ', ' ' /* 8 Bytes */
#elif defined(RADIO_TX16S) #elif defined(RADIO_TX16S)
#define USB_NAME "RadioMas TX16S" #define USB_NAME "RadioMas TX16S"
#define USB_MANUFACTURER 'R', 'a', 'd', 'i', 'o', 'M', 'a', 's' /* 8 bytes */ #define USB_MANUFACTURER 'R', 'a', 'd', 'i', 'o', 'M', 'a', 's' /* 8 bytes */

View file

@ -322,7 +322,7 @@
#define ADC_TRANSFER_COMPLETE() (ADC_DMA->LISR & DMA_LISR_TCIF0) #define ADC_TRANSFER_COMPLETE() (ADC_DMA->LISR & DMA_LISR_TCIF0)
#if defined(RADIO_TX16S) #if defined(RADIO_TX16S)
#define ADC_VREF_PREC2 330 #define ADC_VREF_PREC2 330
#elif defined(RADIO_T16) #elif defined(RADIO_T16) || defined(RADIO_T18)
#define ADC_VREF_PREC2 300 #define ADC_VREF_PREC2 300
#else #else
#define ADC_VREF_PREC2 250 #define ADC_VREF_PREC2 250
@ -330,11 +330,21 @@
#endif #endif
// Power // Power
#if defined(RADIO_T18)
#define PWR_RCC_AHB1Periph RCC_AHB1Periph_GPIOJ | RCC_AHB1Periph_GPIOB
#define PWR_ON_GPIO GPIOJ
#define PWR_ON_GPIO_PIN GPIO_Pin_1 // PJ.01
#define PWR_SWITCH_GPIO GPIOJ
#define PWR_SWITCH_GPIO_PIN GPIO_Pin_0 // PJ.00
#define PWR_EXTRA_SWITCH_GPIO GPIOB
#define PWR_EXTRA_SWITCH_GPIO_PIN GPIO_Pin_0 // PB.00
#else
#define PWR_RCC_AHB1Periph RCC_AHB1Periph_GPIOJ #define PWR_RCC_AHB1Periph RCC_AHB1Periph_GPIOJ
#define PWR_ON_GPIO GPIOJ #define PWR_ON_GPIO GPIOJ
#define PWR_ON_GPIO_PIN GPIO_Pin_1 // PJ.01 #define PWR_ON_GPIO_PIN GPIO_Pin_1 // PJ.01
#define PWR_SWITCH_GPIO GPIOJ #define PWR_SWITCH_GPIO GPIOJ
#define PWR_SWITCH_GPIO_PIN GPIO_Pin_0 // PJ.00 #define PWR_SWITCH_GPIO_PIN GPIO_Pin_0 // PJ.00
#endif
// USB Charger // USB Charger
#if defined(USB_CHARGER) #if defined(USB_CHARGER)
@ -514,6 +524,9 @@
#define LCD_GPIO_NRST GPIOI #define LCD_GPIO_NRST GPIOI
#define LCD_GPIO_PIN_NRST GPIO_Pin_10 // PI.10 #define LCD_GPIO_PIN_NRST GPIO_Pin_10 // PI.10
#endif #endif
#if defined(PCBX10) && !defined(RADIO_T18) && !defined(SIMU)
#define LCD_VERTICAL_INVERT
#endif
#define LTDC_IRQ_PRIO 4 #define LTDC_IRQ_PRIO 4
#define DMA_SCREEN_IRQ_PRIO 6 #define DMA_SCREEN_IRQ_PRIO 6
@ -549,6 +562,14 @@
#define BACKLIGHT_GPIO_AF GPIO_AF_TIM8 #define BACKLIGHT_GPIO_AF GPIO_AF_TIM8
#define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #define BACKLIGHT_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2)
#endif #endif
#if defined(RADIO_T18)
#define KEYS_BACKLIGHT_RCC_AHB1Periph RCC_AHB1Periph_GPIOC
#define KEYS_BACKLIGHT_GPIO GPIOC
#define KEYS_BACKLIGHT_GPIO_PIN GPIO_Pin_4 // PC.04
#define KEYS_BACKLIGHT_GPIO_PinSource GPIO_PinSource4
#else
#define KEYS_BACKLIGHT_RCC_AHB1Periph 0
#endif
// SD // SD
#define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2) #define SD_RCC_AHB1Periph (RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_DMA2)

View file

@ -20,14 +20,25 @@
#include "opentx.h" #include "opentx.h"
#define HBP 42 #if defined(RADIO_T18)
#define VBP 12 #define HBP 43
#define VBP 12
#define HSW 2 #define HSW 2
#define VSW 10 #define VSW 4
#define HFP 3 #define HFP 8
#define VFP 2 #define VFP 8
#else
#define HBP 42
#define VBP 12
#define HSW 2
#define VSW 10
#define HFP 3
#define VFP 2
#endif
#define LCD_FIRST_LAYER 0 #define LCD_FIRST_LAYER 0
#define LCD_SECOND_LAYER 1 #define LCD_SECOND_LAYER 1
@ -315,7 +326,11 @@ void LCD_Init(void)
{ {
/* Reset the LCD --------------------------------------------------------*/ /* Reset the LCD --------------------------------------------------------*/
LCD_NRSTConfig(); LCD_NRSTConfig();
#if defined(RADIO_T18) // T18 seems to have eractic display issue if NRST is ever driven low
NRST_HIGH();
#else
lcd_reset(); lcd_reset();
#endif
/* Configure the LCD Control pins */ /* Configure the LCD Control pins */
LCD_AF_GPIOConfig(); LCD_AF_GPIOConfig();
@ -383,7 +398,7 @@ void lcdInit(void)
void DMAFillRect(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color) void DMAFillRect(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color)
{ {
#if defined(PCBX10) #if defined(LCD_VERTICAL_INVERT)
x = destw - (x + w); x = destw - (x + w);
y = desth - (y + h); y = desth - (y + h);
#endif #endif
@ -415,7 +430,7 @@ void DMAFillRect(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, ui
void DMACopyBitmap(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, uint16_t y, const uint16_t * src, uint16_t srcw, uint16_t srch, uint16_t srcx, uint16_t srcy, uint16_t w, uint16_t h) void DMACopyBitmap(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, uint16_t y, const uint16_t * src, uint16_t srcw, uint16_t srch, uint16_t srcx, uint16_t srcy, uint16_t w, uint16_t h)
{ {
#if defined(PCBX10) #if defined(LCD_VERTICAL_INVERT)
x = destw - (x + w); x = destw - (x + w);
y = desth - (y + h); y = desth - (y + h);
srcx = srcw - (srcx + w); srcx = srcw - (srcx + w);
@ -458,7 +473,7 @@ void DMACopyBitmap(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x,
void DMACopyAlphaBitmap(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, uint16_t y, const uint16_t * src, uint16_t srcw, uint16_t srch, uint16_t srcx, uint16_t srcy, uint16_t w, uint16_t h) void DMACopyAlphaBitmap(uint16_t * dest, uint16_t destw, uint16_t desth, uint16_t x, uint16_t y, const uint16_t * src, uint16_t srcw, uint16_t srch, uint16_t srcx, uint16_t srcy, uint16_t w, uint16_t h)
{ {
#if defined(PCBX10) #if defined(LCD_VERTICAL_INVERT)
x = destw - (x + w); x = destw - (x + w);
y = desth - (y + h); y = desth - (y + h);
srcx = srcw - (srcx + w); srcx = srcw - (srcx + w);

View file

@ -377,6 +377,7 @@ void pwrOn();
uint32_t pwrCheck(); uint32_t pwrCheck();
bool pwrPressed(); bool pwrPressed();
#define UNEXPECTED_SHUTDOWN() (g_eeGeneral.unexpectedShutdown) #define UNEXPECTED_SHUTDOWN() (g_eeGeneral.unexpectedShutdown)
#define pwrForcePressed() (false)
// EEPROM driver // EEPROM driver
#define EEPROM_SIZE (4*1024*1024/8) #define EEPROM_SIZE (4*1024*1024/8)

View file

@ -648,6 +648,7 @@ bool pwrPressed();
uint32_t pwrPressedDuration(); uint32_t pwrPressedDuration();
#endif #endif
void pwrResetHandler(); void pwrResetHandler();
#define pwrForcePressed() false
#if defined(SIMU) #if defined(SIMU)
#define UNEXPECTED_SHUTDOWN() false #define UNEXPECTED_SHUTDOWN() false

View file

@ -1639,6 +1639,7 @@
#define BACKLIGHT_GPIO_PinSource GPIO_PinSource8 #define BACKLIGHT_GPIO_PinSource GPIO_PinSource8
#define BACKLIGHT_GPIO_AF GPIO_AF_TIM10 #define BACKLIGHT_GPIO_AF GPIO_AF_TIM10
#endif #endif
#define KEYS_BACKLIGHT_RCC_AHB1Periph 0
// LCD driver // LCD driver
#if defined(PCBX9E) #if defined(PCBX9E)

View file

@ -96,6 +96,7 @@ ISTR(INPUTNAMES);
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
ISTR(MULTI_PROTOCOLS); ISTR(MULTI_PROTOCOLS);
ISTR(MULTI_POWER);
#endif #endif
#if defined(BLUETOOTH) #if defined(BLUETOOTH)
@ -654,6 +655,7 @@ const char STR_GYRO_MAX[] = TR_GYRO_MAX;
#if defined(PWM_BACKLIGHT) || defined(COLORLCD) #if defined(PWM_BACKLIGHT) || defined(COLORLCD)
const char STR_BLONBRIGHTNESS[] = TR_BLONBRIGHTNESS; const char STR_BLONBRIGHTNESS[] = TR_BLONBRIGHTNESS;
const char STR_BLOFFBRIGHTNESS[] = TR_BLOFFBRIGHTNESS; const char STR_BLOFFBRIGHTNESS[] = TR_BLOFFBRIGHTNESS;
const char STR_KEYS_BACKLIGHT[] = TR_KEYS_BACKLIGHT;
#endif #endif
const char STR_TIMEZONE[] = TR_TIMEZONE; const char STR_TIMEZONE[] = TR_TIMEZONE;
@ -694,6 +696,7 @@ const char STR_BIND_OK[] = TR_BIND_OK;
const char STR_MULTI_CUSTOM[] = TR_MULTI_CUSTOM; const char STR_MULTI_CUSTOM[] = TR_MULTI_CUSTOM;
const char STR_MULTI_RFTUNE[] = TR_MULTI_RFTUNE; const char STR_MULTI_RFTUNE[] = TR_MULTI_RFTUNE;
const char STR_MULTI_RFPOWER[] = TR_MULTI_RFPOWER;
const char STR_MULTI_TELEMETRY[] = TR_MULTI_TELEMETRY; const char STR_MULTI_TELEMETRY[] = TR_MULTI_TELEMETRY;
const char STR_MULTI_VIDFREQ[] = TR_MULTI_VIDFREQ; const char STR_MULTI_VIDFREQ[] = TR_MULTI_VIDFREQ;
const char STR_MULTI_OPTION[] = TR_MULTI_OPTION; const char STR_MULTI_OPTION[] = TR_MULTI_OPTION;

View file

@ -159,10 +159,8 @@ extern const char STR_XJT_ACCST_RF_PROTOCOLS[];
extern const char STR_ISRM_RF_PROTOCOLS[]; extern const char STR_ISRM_RF_PROTOCOLS[];
extern const char STR_R9M_PXX2_RF_PROTOCOLS[]; extern const char STR_R9M_PXX2_RF_PROTOCOLS[];
extern const char STR_DSM_PROTOCOLS[]; extern const char STR_DSM_PROTOCOLS[];
#if defined(MULTIMODULE)
extern const char STR_MULTI_PROTOCOLS[]; extern const char STR_MULTI_PROTOCOLS[];
#endif extern const char STR_MULTI_POWER[];
#if defined(AFHDS3) #if defined(AFHDS3)
extern const char STR_AFHDS3_ONE_TO_ONE_TELEMETRY[]; extern const char STR_AFHDS3_ONE_TO_ONE_TELEMETRY[];
@ -305,6 +303,7 @@ extern const char STR_BLDELAY[];
#if defined(PWM_BACKLIGHT) || defined(COLORLCD) #if defined(PWM_BACKLIGHT) || defined(COLORLCD)
extern const char STR_BLONBRIGHTNESS[]; extern const char STR_BLONBRIGHTNESS[];
extern const char STR_BLOFFBRIGHTNESS[]; extern const char STR_BLOFFBRIGHTNESS[];
extern const char STR_KEYS_BACKLIGHT[];
#endif #endif
extern const char STR_SPLASHSCREEN[]; extern const char STR_SPLASHSCREEN[];
@ -399,6 +398,7 @@ extern const char STR_MULTI_FIXEDID[];
extern const char STR_MULTI_OPTION[]; extern const char STR_MULTI_OPTION[];
extern const char STR_MULTI_VIDFREQ[]; extern const char STR_MULTI_VIDFREQ[];
extern const char STR_MULTI_RFTUNE[]; extern const char STR_MULTI_RFTUNE[];
extern const char STR_MULTI_RFPOWER[];
extern const char STR_MULTI_TELEMETRY[]; extern const char STR_MULTI_TELEMETRY[];
extern const char STR_MULTI_AUTOBIND[]; extern const char STR_MULTI_AUTOBIND[];
extern const char STR_DISABLE_CH_MAP[]; extern const char STR_DISABLE_CH_MAP[];

View file

@ -522,6 +522,7 @@
#define TR_BLDELAY INDENT"Zhasnout po" #define TR_BLDELAY INDENT"Zhasnout po"
#define TR_BLONBRIGHTNESS TR3(INDENT"Jas Zap.", INDENT"Jas Zap.", INDENT"Jas zapnutého LCD") #define TR_BLONBRIGHTNESS TR3(INDENT"Jas Zap.", INDENT"Jas Zap.", INDENT"Jas zapnutého LCD")
#define TR_BLOFFBRIGHTNESS TR3(INDENT"Jas Vyp.", INDENT"Jas Vyp.", INDENT"Jas vypnutého LCD") #define TR_BLOFFBRIGHTNESS TR3(INDENT"Jas Vyp.", INDENT"Jas Vyp.", INDENT"Jas vypnutého LCD")
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Barva" #define TR_BLCOLOR INDENT "Barva"
#define TR_SPLASHSCREEN TR("úvodní logo", "Zobrazit úvodní logo") #define TR_SPLASHSCREEN TR("úvodní logo", "Zobrazit úvodní logo")
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
@ -628,6 +629,7 @@
#define TR_RECEIVER_NUM TR("RX číslo", "Číslo přijímače") #define TR_RECEIVER_NUM TR("RX číslo", "Číslo přijímače")
#define TR_RECEIVER "Přijímač" #define TR_RECEIVER "Přijímač"
#define TR_MULTI_RFTUNE TR(INDENT "Ladění frek", INDENT "Jemné ladění frek. RF") #define TR_MULTI_RFTUNE TR(INDENT "Ladění frek", INDENT "Jemné ladění frek. RF")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetrie" #define TR_MULTI_TELEMETRY "Telemetrie"
#define TR_MULTI_VIDFREQ TR(INDENT "Freq. videa", INDENT "Frekvence videa") #define TR_MULTI_VIDFREQ TR(INDENT "Freq. videa", INDENT "Frekvence videa")
#define TR_RFPOWER "Výkon RF" #define TR_RFPOWER "Výkon RF"

View file

@ -524,6 +524,7 @@
#define TR_BLDELAY INDENT "Dauer" #define TR_BLDELAY INDENT "Dauer"
#define TR_BLONBRIGHTNESS INDENT "An-Helligkeit" #define TR_BLONBRIGHTNESS INDENT "An-Helligkeit"
#define TR_BLOFFBRIGHTNESS INDENT "Aus-Helligkeit" #define TR_BLOFFBRIGHTNESS INDENT "Aus-Helligkeit"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Farbe" #define TR_BLCOLOR INDENT "Farbe"
#define TR_SPLASHSCREEN TR("Startbild Ein", "Startbild Anzeigedauer") #define TR_SPLASHSCREEN TR("Startbild Ein", "Startbild Anzeigedauer")
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
@ -630,6 +631,7 @@
#define TR_RECEIVER_NUM TR("Empf Nr.", "Empfänger Nummer") #define TR_RECEIVER_NUM TR("Empf Nr.", "Empfänger Nummer")
#define TR_RECEIVER "Empfänger" #define TR_RECEIVER "Empfänger"
#define TR_MULTI_RFTUNE TR(INDENT "RF Freq.", INDENT "RF Freq. Feintuning") #define TR_MULTI_RFTUNE TR(INDENT "RF Freq.", INDENT "RF Freq. Feintuning")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetry" #define TR_MULTI_TELEMETRY "Telemetry"
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. Freq.", INDENT "Video Frequenz") #define TR_MULTI_VIDFREQ TR(INDENT "Vid. Freq.", INDENT "Video Frequenz")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -523,6 +523,7 @@
#define TR_BLDELAY INDENT "Duration" #define TR_BLDELAY INDENT "Duration"
#define TR_BLONBRIGHTNESS INDENT "ON brightness" #define TR_BLONBRIGHTNESS INDENT "ON brightness"
#define TR_BLOFFBRIGHTNESS INDENT "OFF brightness" #define TR_BLOFFBRIGHTNESS INDENT "OFF brightness"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Color" #define TR_BLCOLOR INDENT "Color"
#define TR_SPLASHSCREEN "Splash screen" #define TR_SPLASHSCREEN "Splash screen"
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
@ -629,6 +630,7 @@
#define TR_RECEIVER_NUM TR("RxNum", "Receiver No.") #define TR_RECEIVER_NUM TR("RxNum", "Receiver No.")
#define TR_RECEIVER "Receiver" #define TR_RECEIVER "Receiver"
#define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune") #define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetry" #define TR_MULTI_TELEMETRY "Telemetry"
#define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency") #define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -522,6 +522,7 @@
#define TR_BLDELAY INDENT"Duración" #define TR_BLDELAY INDENT"Duración"
#define TR_BLONBRIGHTNESS INDENT"MAS brillo" #define TR_BLONBRIGHTNESS INDENT"MAS brillo"
#define TR_BLOFFBRIGHTNESS INDENT"MENOS brillo" #define TR_BLOFFBRIGHTNESS INDENT"MENOS brillo"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Color" #define TR_BLCOLOR INDENT "Color"
#define TR_SPLASHSCREEN "Pantalla inicio" #define TR_SPLASHSCREEN "Pantalla inicio"
#define TR_PWR_ON_DELAY TR("Atraso On", "Atraso encendido") #define TR_PWR_ON_DELAY TR("Atraso On", "Atraso encendido")
@ -631,6 +632,7 @@
#define TR_RECEIVER_NUM TR("Num Rx", "Receptor No.") #define TR_RECEIVER_NUM TR("Num Rx", "Receptor No.")
#define TR_RECEIVER "Receptor" #define TR_RECEIVER "Receptor"
#define TR_MULTI_RFTUNE TR("Sint.freq.", "RF Freq. sint.fina") #define TR_MULTI_RFTUNE TR("Sint.freq.", "RF Freq. sint.fina")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetría" #define TR_MULTI_TELEMETRY "Telemetría"
#define TR_MULTI_VIDFREQ TR("Freq.vídeo", "Frecuencia vídeo") #define TR_MULTI_VIDFREQ TR("Freq.vídeo", "Frecuencia vídeo")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -536,6 +536,7 @@
#define TR_BLDELAY INDENT"Duration" #define TR_BLDELAY INDENT"Duration"
#define TR_BLONBRIGHTNESS INDENT"ON Brightness" #define TR_BLONBRIGHTNESS INDENT"ON Brightness"
#define TR_BLOFFBRIGHTNESS INDENT"OFF Brightness" #define TR_BLOFFBRIGHTNESS INDENT"OFF Brightness"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Color" #define TR_BLCOLOR INDENT "Color"
#define TR_SPLASHSCREEN "Splash screen" #define TR_SPLASHSCREEN "Splash screen"
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
@ -647,6 +648,7 @@
#define TR_RECEIVER_NUM TR("RxNum", "Receiver No.") #define TR_RECEIVER_NUM TR("RxNum", "Receiver No.")
#define TR_RECEIVER "Receiver" #define TR_RECEIVER "Receiver"
#define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune") #define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetry" #define TR_MULTI_TELEMETRY "Telemetry"
#define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency") #define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -542,6 +542,7 @@
#define TR_BLDELAY INDENT "Durée" #define TR_BLDELAY INDENT "Durée"
#define TR_BLONBRIGHTNESS INDENT "Luminosité ON" #define TR_BLONBRIGHTNESS INDENT "Luminosité ON"
#define TR_BLOFFBRIGHTNESS INDENT "Luminosité OFF" #define TR_BLOFFBRIGHTNESS INDENT "Luminosité OFF"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Couleur" #define TR_BLCOLOR INDENT "Couleur"
#define TR_SPLASHSCREEN "Logo d'accueil" #define TR_SPLASHSCREEN "Logo d'accueil"
#define TR_PWR_ON_DELAY "Délai btn ON" #define TR_PWR_ON_DELAY "Délai btn ON"
@ -650,6 +651,7 @@
#define TR_RECEIVER_NUM TR("NumRx", "No. récepteur") #define TR_RECEIVER_NUM TR("NumRx", "No. récepteur")
#define TR_RECEIVER "Récept." #define TR_RECEIVER "Récept."
#define TR_MULTI_RFTUNE TR(INDENT "Ajust.fréq", INDENT "Ajustement fréq.") #define TR_MULTI_RFTUNE TR(INDENT "Ajust.fréq", INDENT "Ajustement fréq.")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Télémétrie" #define TR_MULTI_TELEMETRY "Télémétrie"
#define TR_MULTI_VIDFREQ TR(INDENT "Fréq. vidéo", INDENT "Fréquence vidéo") #define TR_MULTI_VIDFREQ TR(INDENT "Fréq. vidéo", INDENT "Fréquence vidéo")
#define TR_RFPOWER TR("Puiss. RF", "Puissance RF") #define TR_RFPOWER TR("Puiss. RF", "Puissance RF")

View file

@ -544,6 +544,7 @@
#define TR_BLDELAY INDENT "Durata" #define TR_BLDELAY INDENT "Durata"
#define TR_BLONBRIGHTNESS TR(INDENT "Lumin. ON", INDENT "Luminosità ON") #define TR_BLONBRIGHTNESS TR(INDENT "Lumin. ON", INDENT "Luminosità ON")
#define TR_BLOFFBRIGHTNESS TR(INDENT "Lumin. OFF", INDENT "Luminosità OFF") #define TR_BLOFFBRIGHTNESS TR(INDENT "Lumin. OFF", INDENT "Luminosità OFF")
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Colore" #define TR_BLCOLOR INDENT "Colore"
#define TR_SPLASHSCREEN TR("Sch. avvio", "Schermata d'avvio") #define TR_SPLASHSCREEN TR("Sch. avvio", "Schermata d'avvio")
#define TR_PWR_ON_DELAY "Rit. accens." #define TR_PWR_ON_DELAY "Rit. accens."
@ -649,6 +650,7 @@
#define TR_RECEIVER_NUM TR("RxNum", "Ricevente N.") #define TR_RECEIVER_NUM TR("RxNum", "Ricevente N.")
#define TR_RECEIVER "Ricevente" #define TR_RECEIVER "Ricevente"
#define TR_MULTI_RFTUNE TR("Tune RF", "Tune fine Freq. RF") #define TR_MULTI_RFTUNE TR("Tune RF", "Tune fine Freq. RF")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetria" #define TR_MULTI_TELEMETRY "Telemetria"
#define TR_MULTI_VIDFREQ TR("Freq. video", "Frequenza video") #define TR_MULTI_VIDFREQ TR("Freq. video", "Frequenza video")
#define TR_RFPOWER "Potenza RF" #define TR_RFPOWER "Potenza RF"

View file

@ -525,6 +525,7 @@
#define TR_BLDELAY INDENT "Duur" #define TR_BLDELAY INDENT "Duur"
#define TR_BLONBRIGHTNESS INDENT "Aan-Helderheid" #define TR_BLONBRIGHTNESS INDENT "Aan-Helderheid"
#define TR_BLOFFBRIGHTNESS INDENT "Uit-Helderheid" #define TR_BLOFFBRIGHTNESS INDENT "Uit-Helderheid"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Kleur" #define TR_BLCOLOR INDENT "Kleur"
#define TR_SPLASHSCREEN "Startscherm Aan" #define TR_SPLASHSCREEN "Startscherm Aan"
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
@ -635,6 +636,7 @@
#define TR_RECEIVER_NUM TR("RxNum", "Receiver Nr.") #define TR_RECEIVER_NUM TR("RxNum", "Receiver Nr.")
#define TR_RECEIVER "Receiver" #define TR_RECEIVER "Receiver"
#define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune") #define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetry" #define TR_MULTI_TELEMETRY "Telemetry"
#define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency") #define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -543,6 +543,7 @@
#define TR_BLDELAY INDENT"Czas trwania" #define TR_BLDELAY INDENT"Czas trwania"
#define TR_BLONBRIGHTNESS INDENT"Jasnośc wł." #define TR_BLONBRIGHTNESS INDENT"Jasnośc wł."
#define TR_BLOFFBRIGHTNESS INDENT"Jasność wył." #define TR_BLOFFBRIGHTNESS INDENT"Jasność wył."
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Color" #define TR_BLCOLOR INDENT "Color"
#define TR_SPLASHSCREEN "Logo ekranu" #define TR_SPLASHSCREEN "Logo ekranu"
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
@ -648,6 +649,7 @@
#define TR_RECEIVER_NUM TR("Nr RX", "Nr odbiornika") #define TR_RECEIVER_NUM TR("Nr RX", "Nr odbiornika")
#define TR_RECEIVER INDENT "Receiver" #define TR_RECEIVER INDENT "Receiver"
#define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune") #define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetry" #define TR_MULTI_TELEMETRY "Telemetry"
#define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency") #define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -529,6 +529,7 @@
#define TR_BLDELAY INDENT "Tempo Backlight" #define TR_BLDELAY INDENT "Tempo Backlight"
#define TR_BLONBRIGHTNESS INDENT "ON Brightness" #define TR_BLONBRIGHTNESS INDENT "ON Brightness"
#define TR_BLOFFBRIGHTNESS INDENT "OFF Brightness" #define TR_BLOFFBRIGHTNESS INDENT "OFF Brightness"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_BLCOLOR INDENT "Color" #define TR_BLCOLOR INDENT "Color"
#define TR_SPLASHSCREEN "Splash screen" #define TR_SPLASHSCREEN "Splash screen"
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
@ -639,6 +640,7 @@
#define TR_RECEIVER "Receiver" #define TR_RECEIVER "Receiver"
#define TR_SYNCMENU "Sync [MENU]" #define TR_SYNCMENU "Sync [MENU]"
#define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune") #define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetry" #define TR_MULTI_TELEMETRY "Telemetry"
#define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency") #define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -542,6 +542,7 @@
#define TR_BLDELAY INDENT "Av efter" #define TR_BLDELAY INDENT "Av efter"
#define TR_BLONBRIGHTNESS INDENT "På Ljusstyrka" #define TR_BLONBRIGHTNESS INDENT "På Ljusstyrka"
#define TR_BLOFFBRIGHTNESS INDENT "Av Ljusstyrka" #define TR_BLOFFBRIGHTNESS INDENT "Av Ljusstyrka"
#define TR_KEYS_BACKLIGHT "Keys backlight"
#define TR_SPLASHSCREEN "Startbild" #define TR_SPLASHSCREEN "Startbild"
#define TR_PWR_ON_DELAY "Pwr On delay" #define TR_PWR_ON_DELAY "Pwr On delay"
#define TR_PWR_OFF_DELAY "Pwr Off delay" #define TR_PWR_OFF_DELAY "Pwr Off delay"
@ -648,6 +649,7 @@
#define TR_RECEIVER "Receiver" #define TR_RECEIVER "Receiver"
#define TR_SYNCMENU "Synk [MENU]" #define TR_SYNCMENU "Synk [MENU]"
#define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune") #define TR_MULTI_RFTUNE TR("Freq tune", "RF Freq. fine tune")
#define TR_MULTI_RFPOWER "RF power"
#define TR_MULTI_TELEMETRY "Telemetry" #define TR_MULTI_TELEMETRY "Telemetry"
#define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency") #define TR_MULTI_VIDFREQ TR("Vid. freq.", "Video frequency")
#define TR_RFPOWER "RF Power" #define TR_RFPOWER "RF Power"

View file

@ -125,8 +125,10 @@
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" #define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
#define LEN_MULTI_PROTOCOLS "\007" #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""FlSky2A""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 ""BayanRX""Pelikan""Tiger\0 ""XK\0 ""XN297DU""FrSkyX2""FrSkyR9""Propel\0""FrSkyL\0""Skyarte""ESky-v2""DSM RX\0""JJRC345""Q90C\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""FlSky2A""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 ""BayanRX""Pelikan""Tiger\0 ""XK\0 ""XN297DU""FrSkyX2""FrSkyR9""Propel\0""FrSkyL\0""Skyartc""ESky-v2""DSM RX\0""JJRC345""Q90C\0 " #define LEN_MULTI_POWER "\005"
#define TR_MULTI_POWER "10mW\0""25mW\0""50mW\0""100mW""200mW""300mW""500mW""1W\0 ""2W\0 "
#define LEN_AFHDS3_PROTOCOLS "\x008" #define LEN_AFHDS3_PROTOCOLS "\x008"
#define TR_AFHDS3_PROTOCOLS "PWM/IBUS""PWM/SBUS""PPM/IBUS""PPM/SBUS" #define TR_AFHDS3_PROTOCOLS "PWM/IBUS""PWM/SBUS""PPM/IBUS""PPM/SBUS"

View file

@ -148,6 +148,11 @@ def main():
cmake_options["PCBREV"] = "T16" cmake_options["PCBREV"] = "T16"
firmware_options = options_jumper_t16 firmware_options = options_jumper_t16
maxsize = 2 * 1024 * 1024 maxsize = 2 * 1024 * 1024
elif board_name == "t18":
cmake_options["PCB"] = "X10"
cmake_options["PCBREV"] = "T18"
firmware_options = options_jumper_t16
maxsize = 2 * 1024 * 1024
elif board_name == "tx16s": elif board_name == "tx16s":
cmake_options["PCB"] = "X10" cmake_options["PCB"] = "X10"
cmake_options["PCBREV"] = "TX16S" cmake_options["PCBREV"] = "TX16S"

View file

@ -106,6 +106,10 @@ cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=TX16S ${SRCDIR}
make -j${JOBS} libsimulator make -j${JOBS} libsimulator
rm CMakeCache.txt rm CMakeCache.txt
cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=T18 ${SRCDIR}
make -j${JOBS} libsimulator
rm CMakeCache.txt
cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=EXPRESS ${SRCDIR} cmake ${COMMON_OPTIONS} -DPCB=X10 -DPCBREV=EXPRESS ${SRCDIR}
make -j${JOBS} libsimulator make -j${JOBS} libsimulator
rm CMakeCache.txt rm CMakeCache.txt

View file

@ -25,6 +25,12 @@ boards = {
"PCBREV": "T16", "PCBREV": "T16",
"INTERNAL_MODULE_MULTI": "YES", "INTERNAL_MODULE_MULTI": "YES",
"DEFAULT_MODE": "2", "DEFAULT_MODE": "2",
},
"T18": {
"PCB": "X10",
"PCBREV": "T18",
"INTERNAL_MODULE_MULTI": "YES",
"DEFAULT_MODE": "2",
} }
} }