mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
Fixes #1633
This commit is contained in:
parent
6c5d53194a
commit
74252f787b
24 changed files with 340 additions and 183 deletions
|
@ -839,7 +839,18 @@ struct FrSkyBarData {
|
|||
};
|
||||
|
||||
struct FrSkyLineData {
|
||||
unsigned int source[3];
|
||||
unsigned int source[3];
|
||||
};
|
||||
|
||||
struct TelemetryScriptData {
|
||||
char filename[8+1];
|
||||
};
|
||||
|
||||
enum TelemetryScreenEnum {
|
||||
TELEMETRY_SCREEN_NONE,
|
||||
TELEMETRY_SCREEN_NUMBERS,
|
||||
TELEMETRY_SCREEN_BARS,
|
||||
TELEMETRY_SCREEN_SCRIPT
|
||||
};
|
||||
|
||||
class FrSkyScreenData {
|
||||
|
@ -849,6 +860,7 @@ class FrSkyScreenData {
|
|||
typedef union {
|
||||
FrSkyBarData bars[4];
|
||||
FrSkyLineData lines[4];
|
||||
TelemetryScriptData script;
|
||||
} FrSkyScreenBody;
|
||||
|
||||
unsigned int type;
|
||||
|
@ -894,7 +906,7 @@ class FrSkyData {
|
|||
bool altitudeDisplayed;
|
||||
unsigned int currentSource;
|
||||
unsigned int FrSkyGpsAlt;
|
||||
FrSkyScreenData screens[3];
|
||||
FrSkyScreenData screens[4];
|
||||
FrSkyRSSIAlarm rssiAlarms[2];
|
||||
unsigned int varioSource;
|
||||
int varioMin;
|
||||
|
|
|
@ -2263,7 +2263,7 @@ class FrskyScreenField: public DataField {
|
|||
bars.Append(new UnsignedField<8>(screen.body.bars[i].barMax));
|
||||
}
|
||||
|
||||
int columns=(IS_TARANIS(board) ? 3:2);
|
||||
int columns = (IS_TARANIS(board) ? 3 : 2);
|
||||
for (int i=0; i<4; i++) {
|
||||
for (int j=0; j<columns; j++) {
|
||||
numbers.Append(new TelemetrySourceField<8>(screen.body.lines[i].source[j], board, version));
|
||||
|
@ -2274,43 +2274,61 @@ class FrskyScreenField: public DataField {
|
|||
numbers.Append(new SpareBitsField<8>());
|
||||
}
|
||||
}
|
||||
|
||||
none.Append(new SpareBitsField<12*8>());
|
||||
|
||||
if (IS_TARANIS(board) && version >= 217) {
|
||||
script.Append(new CharField<8>(screen.body.script.filename));
|
||||
script.Append(new SpareBitsField<32>());
|
||||
}
|
||||
}
|
||||
|
||||
virtual void ExportBits(QBitArray & output)
|
||||
{
|
||||
if (screen.type == 0)
|
||||
if (screen.type == TELEMETRY_SCREEN_SCRIPT)
|
||||
script.ExportBits(output);
|
||||
else if (screen.type == TELEMETRY_SCREEN_NUMBERS)
|
||||
numbers.ExportBits(output);
|
||||
else
|
||||
else if (screen.type == TELEMETRY_SCREEN_BARS)
|
||||
bars.ExportBits(output);
|
||||
else
|
||||
none.ExportBits(output);
|
||||
}
|
||||
|
||||
virtual void ImportBits(QBitArray & input)
|
||||
{
|
||||
// NOTA: screen.type should have been imported first!
|
||||
if (screen.type == 0) {
|
||||
if (screen.type == TELEMETRY_SCREEN_SCRIPT)
|
||||
script.ImportBits(input);
|
||||
else if (screen.type == TELEMETRY_SCREEN_NUMBERS)
|
||||
numbers.ImportBits(input);
|
||||
}
|
||||
else {
|
||||
else if (screen.type == TELEMETRY_SCREEN_BARS)
|
||||
bars.ImportBits(input);
|
||||
}
|
||||
|
||||
else
|
||||
none.ImportBits(input);
|
||||
}
|
||||
|
||||
virtual unsigned int size()
|
||||
{
|
||||
// NOTA: screen.type should have been imported first!
|
||||
if (screen.type == 0)
|
||||
if (screen.type == TELEMETRY_SCREEN_SCRIPT)
|
||||
return script.size();
|
||||
else if (screen.type == TELEMETRY_SCREEN_NUMBERS)
|
||||
return numbers.size();
|
||||
else
|
||||
else if (screen.type == TELEMETRY_SCREEN_BARS)
|
||||
return bars.size();
|
||||
else
|
||||
return none.size();
|
||||
}
|
||||
|
||||
protected:
|
||||
FrSkyScreenData & screen;
|
||||
BoardEnum board;
|
||||
unsigned int version;
|
||||
StructField none;
|
||||
StructField bars;
|
||||
StructField numbers;
|
||||
StructField script;
|
||||
};
|
||||
|
||||
class RSSIConversionTable: public ConversionTable
|
||||
|
@ -2418,13 +2436,22 @@ class FrskyField: public StructField {
|
|||
Append(new ConversionField< SignedField<8> >(frsky.blades, -2));
|
||||
Append(new ConversionField< UnsignedField<8> >(frsky.currentSource, &telemetryCurrentSourceConversionTable, "Current Source"));
|
||||
|
||||
Append(new UnsignedField<1>(frsky.screens[0].type));
|
||||
Append(new UnsignedField<1>(frsky.screens[1].type));
|
||||
Append(new UnsignedField<1>(frsky.screens[2].type));
|
||||
Append(new SpareBitsField<5>());
|
||||
|
||||
for (int i=0; i<3; i++) {
|
||||
Append(new FrskyScreenField(frsky.screens[i], board, version));
|
||||
if (version >= 217) {
|
||||
for (int i=0; i<4; i++) {
|
||||
Append(new UnsignedField<2>(frsky.screens[i].type));
|
||||
}
|
||||
for (int i=0; i<4; i++) {
|
||||
Append(new FrskyScreenField(frsky.screens[i], board, version));
|
||||
}
|
||||
}
|
||||
else {
|
||||
Append(new UnsignedField<1>(frsky.screens[0].type));
|
||||
Append(new UnsignedField<1>(frsky.screens[1].type));
|
||||
Append(new UnsignedField<1>(frsky.screens[2].type));
|
||||
Append(new SpareBitsField<5>());
|
||||
for (int i=0; i<3; i++) {
|
||||
Append(new FrskyScreenField(frsky.screens[i], board, version));
|
||||
}
|
||||
}
|
||||
|
||||
Append(new ConversionField< UnsignedField<8> >(frsky.varioSource, &telemetryVarioSourceConversionTable, "Vario Source"));
|
||||
|
@ -2708,20 +2735,35 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
|||
}
|
||||
}
|
||||
|
||||
if (IS_TARANIS(board) && version >= 216) {
|
||||
for (int i=0; i<7; i++) {
|
||||
ScriptData & script = modelData.scriptData[i];
|
||||
internalField.Append(new CharField<10>(script.filename));
|
||||
internalField.Append(new ZCharField<10>(script.name));
|
||||
for (int j=0; j<10; j++) {
|
||||
internalField.Append(new SignedField<8>(script.inputs[j]));
|
||||
if (IS_TARANIS(board)) {
|
||||
if (version >= 217) {
|
||||
for (int i=0; i<7; i++) {
|
||||
ScriptData & script = modelData.scriptData[i];
|
||||
internalField.Append(new CharField<8>(script.filename));
|
||||
internalField.Append(new ZCharField<8>(script.name));
|
||||
for (int j=0; j<8; j++) {
|
||||
internalField.Append(new SignedField<8>(script.inputs[j]));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (version >= 216) {
|
||||
for (int i=0; i<7; i++) {
|
||||
ScriptData & script = modelData.scriptData[i];
|
||||
internalField.Append(new CharField<10>(script.filename));
|
||||
internalField.Append(new ZCharField<10>(script.name));
|
||||
for (int j=0; j<10; j++) {
|
||||
internalField.Append(new SignedField<8>(script.inputs[j]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_TARANIS(board) && version >= 216) {
|
||||
for (int i=0; i<32; i++) {
|
||||
internalField.Append(new ZCharField<4>(modelData.inputNames[i]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (IS_ARM(board) && version >= 216) {
|
||||
internalField.Append(new UnsignedField<8>(modelData.nPotsToWarn));
|
||||
for (int i=0; i < GetCurrentFirmware()->getCapability(Pots); i++) {
|
||||
|
|
|
@ -653,7 +653,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
|
|||
case TelemetryBars:
|
||||
return 1;
|
||||
case TelemetryCustomScreens:
|
||||
return IS_TARANIS(board) ? 3 : 2;
|
||||
return IS_ARM(board) ? 4 : 2;
|
||||
case TelemetryCustomScreensFieldsPerLine:
|
||||
return IS_TARANIS(board) ? 3 : 2;
|
||||
case NoTelemetryProtocol:
|
||||
|
|
|
@ -362,8 +362,8 @@ void TelemetryCustomScreen::update()
|
|||
lock = true;
|
||||
|
||||
ui->screenType->setCurrentIndex(screen.type);
|
||||
ui->screenNums->setVisible(screen.type == 0);
|
||||
ui->screenBars->setVisible(screen.type != 0);
|
||||
ui->screenNums->setVisible(screen.type == TELEMETRY_SCREEN_NUMBERS);
|
||||
ui->screenBars->setVisible(screen.type == TELEMETRY_SCREEN_BARS);
|
||||
|
||||
for (int l=0; l<4; l++) {
|
||||
for (int c=0; c<firmware->getCapability(TelemetryCustomScreensFieldsPerLine); c++) {
|
||||
|
@ -375,14 +375,7 @@ void TelemetryCustomScreen::update()
|
|||
populateTelemetrySourceCB(barsCB[l], screen.body.bars[l].source, false, model.frsky.usrProto);
|
||||
}
|
||||
|
||||
if (screen.type == 0) {
|
||||
for (int l=0; l<4; l++) {
|
||||
for (int c=0; c<firmware->getCapability(TelemetryCustomScreensFieldsPerLine); c++) {
|
||||
fieldsCB[l][c]->setCurrentIndex(screen.body.lines[l].source[c]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (screen.type == TELEMETRY_SCREEN_BARS) {
|
||||
for (int i=0; i<4; i++) {
|
||||
updateBar(i);
|
||||
}
|
||||
|
|
|
@ -51,7 +51,12 @@
|
|||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Nums</string>
|
||||
<string>None</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Numbers</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -59,6 +64,11 @@
|
|||
<string>Bars</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Script</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
|
|
@ -328,7 +328,7 @@ PACK(typedef struct {
|
|||
uint8_t blades; // How many blades for RPMs, 0=2 blades, 1=3 blades
|
||||
uint8_t currentSource;
|
||||
uint8_t screensType;
|
||||
FrSkyScreenData screens[MAX_FRSKY_SCREENS];
|
||||
FrSkyScreenData screens[MAX_TELEMETRY_SCREENS];
|
||||
uint8_t varioSource;
|
||||
int8_t varioCenterMax;
|
||||
int8_t varioCenterMin;
|
||||
|
@ -337,6 +337,12 @@ PACK(typedef struct {
|
|||
FrSkyRSSIAlarm rssiAlarms[2];
|
||||
}) FrSkyData_v215;
|
||||
|
||||
PACK(typedef struct t_ScriptData {
|
||||
char file[10];
|
||||
char name[10];
|
||||
int8_t inputs[10];
|
||||
}) ScriptData_v216;
|
||||
|
||||
PACK(typedef struct {
|
||||
ModelHeader header;
|
||||
TimerData_v215 timers[2];
|
||||
|
@ -420,7 +426,7 @@ PACK(typedef struct {
|
|||
uint8_t trainerMode;
|
||||
ModuleData moduleData[NUM_MODULES+1];
|
||||
char curveNames[MAX_CURVES][6];
|
||||
ScriptData scriptsData[MAX_SCRIPTS];
|
||||
ScriptData_v216 scriptsData[MAX_SCRIPTS];
|
||||
char inputNames[MAX_INPUTS][LEN_INPUT_NAME];
|
||||
uint8_t nPotsToWarn;
|
||||
int8_t potPosition[NUM_POTS];
|
||||
|
@ -1104,6 +1110,9 @@ void ConvertModel_216_to_217(ModelData &model)
|
|||
{
|
||||
// Timer3 added
|
||||
// 32bits Timers
|
||||
// MixData reduction
|
||||
// PPM center range
|
||||
// Telemetry custom screens
|
||||
|
||||
assert(sizeof(ModelData_v216) <= sizeof(ModelData));
|
||||
|
||||
|
@ -1210,7 +1219,7 @@ void ConvertModel_216_to_217(ModelData &model)
|
|||
memcpy(newModel.moduleData, oldModel.moduleData, sizeof(newModel.moduleData));
|
||||
#if defined(PCBTARANIS)
|
||||
newModel.trainerMode = oldModel.trainerMode;
|
||||
memcpy(newModel.scriptsData, oldModel.scriptsData, sizeof(newModel.scriptsData));
|
||||
// TODO memcpy(newModel.scriptsData, oldModel.scriptsData, sizeof(newModel.scriptsData));
|
||||
memcpy(newModel.curveNames, oldModel.curveNames, sizeof(newModel.curveNames));
|
||||
memcpy(newModel.inputNames, oldModel.inputNames, sizeof(newModel.inputNames));
|
||||
#endif
|
||||
|
|
|
@ -1059,7 +1059,6 @@ void menuModelSetup(uint8_t event)
|
|||
|
||||
for (uint8_t i=0; i<LCD_LINES-1; i++) {
|
||||
coord_t y = MENU_TITLE_HEIGHT + 1 + i*FH;
|
||||
|
||||
uint8_t k = i+s_pgOfs;
|
||||
#if defined(CPUARM)
|
||||
for (int j=0; j<=k; j++) {
|
||||
|
@ -5617,6 +5616,11 @@ enum menuModelTelemetryItems {
|
|||
ITEM_TELEMETRY_SCREEN_LINE10,
|
||||
ITEM_TELEMETRY_SCREEN_LINE11,
|
||||
ITEM_TELEMETRY_SCREEN_LINE12,
|
||||
ITEM_TELEMETRY_SCREEN_LABEL4,
|
||||
ITEM_TELEMETRY_SCREEN_LINE13,
|
||||
ITEM_TELEMETRY_SCREEN_LINE14,
|
||||
ITEM_TELEMETRY_SCREEN_LINE15,
|
||||
ITEM_TELEMETRY_SCREEN_LINE16,
|
||||
#endif
|
||||
ITEM_TELEMETRY_MAX
|
||||
};
|
||||
|
@ -5636,7 +5640,7 @@ enum menuModelTelemetryItems {
|
|||
#define TELEM_COL3 (28*FW)
|
||||
#define TELEM_BARS_COLMIN (3*FW+56)
|
||||
#define TELEM_BARS_COLMAX (20*FW-3)
|
||||
#define TELEM_SCRTYPE_COL (10*FW)
|
||||
#define TELEM_SCRTYPE_COL TELEM_COL2
|
||||
#else
|
||||
#define TELEM_COL1 INDENT_WIDTH
|
||||
#if defined(TRANSLATIONS_FR) || defined(TRANSLATIONS_CZ)
|
||||
|
@ -5646,18 +5650,22 @@ enum menuModelTelemetryItems {
|
|||
#endif
|
||||
#define TELEM_BARS_COLMIN (56-3*FW)
|
||||
#define TELEM_BARS_COLMAX (14*FW-3)
|
||||
#define TELEM_SCRTYPE_COL (10*FW)
|
||||
#define TELEM_SCRTYPE_COL TELEM_COL2
|
||||
#endif
|
||||
|
||||
#define IS_RANGE_DEFINED(k) (g_model.frsky.channels[k].ratio > 0)
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#define CHANNEL_ROWS LABEL(CHANNEL), 1, 0, 0, 0
|
||||
#define CHANNEL_ROWS(x) LABEL(CHANNEL), IS_RANGE_DEFINED(x) ? (uint8_t)1 : (uint8_t)0, IS_RANGE_DEFINED(x) ? (uint8_t)0 : HIDDEN_ROW, IS_RANGE_DEFINED(x) ? (uint8_t)0 : HIDDEN_ROW, IS_RANGE_DEFINED(x) ? (uint8_t)0 : HIDDEN_ROW
|
||||
#define RSSI_ROWS LABEL(RSSI), 0, 0
|
||||
#else
|
||||
#define CHANNEL_ROWS LABEL(CHANNEL), 1, 0, 2, 2
|
||||
#define CHANNEL_ROWS(x) LABEL(CHANNEL), 1, 0, 2, 2
|
||||
#define RSSI_ROWS LABEL(RSSI), 1, 1
|
||||
#endif
|
||||
|
||||
#if defined(GAUGES)
|
||||
#if defined(LUA)
|
||||
#define SCREEN_TYPE_ROWS 1
|
||||
#elif defined(CPUARM) || defined(GAUGES)
|
||||
#define SCREEN_TYPE_ROWS 0
|
||||
#else
|
||||
#define SCREEN_TYPE_ROWS LABEL(SCREEN)
|
||||
|
@ -5683,9 +5691,44 @@ enum menuModelTelemetryItems {
|
|||
#define TELEMETRY_TYPE_ROWS
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
#if defined(LUA)
|
||||
#define TELEMETRY_SCREEN_LINE(x) ((TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE || TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_SCRIPT) ? HIDDEN_ROW : (uint8_t)2)
|
||||
#else
|
||||
#define TELEMETRY_SCREEN_LINE(x) (TELEMETRY_SCREEN_TYPE(x) == TELEMETRY_SCREEN_TYPE_NONE ? HIDDEN_ROW : (uint8_t)2)
|
||||
#endif
|
||||
#define TELEMETRY_SCREEN_ROWS(x) SCREEN_TYPE_ROWS, TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x), TELEMETRY_SCREEN_LINE(x)
|
||||
#define TELEMETRY_CURRENT_EDIT_SCREEN(k) (k < ITEM_TELEMETRY_SCREEN_LABEL2 ? 0 : (k < ITEM_TELEMETRY_SCREEN_LABEL3 ? 1 : (k < ITEM_TELEMETRY_SCREEN_LABEL4 ? 2 : 3)))
|
||||
#define TELEMETRY_CURRENT_EDIT_CHANNEL(k) (k >= ITEM_TELEMETRY_A4_LABEL ? TELEM_ANA_A4 : (k >= ITEM_TELEMETRY_A3_LABEL ? TELEM_ANA_A3 : (k >= ITEM_TELEMETRY_A2_LABEL ? TELEM_ANA_A2 : TELEM_ANA_A1)))
|
||||
#else
|
||||
#define TELEMETRY_SCREEN_ROWS(x) SCREEN_TYPE_ROWS, 2, 2, 2, 2
|
||||
#define TELEMETRY_CURRENT_EDIT_CHANNEL(k) (k >= ITEM_TELEMETRY_A2_LABEL ? TELEM_ANA_A2 : TELEM_ANA_A1)
|
||||
#endif
|
||||
|
||||
#if defined(LUA)
|
||||
void onTelemetryScriptFileSelectionMenu(const char *result)
|
||||
{
|
||||
int8_t sub = m_posVert - 1;
|
||||
uint8_t screenIndex = TELEMETRY_CURRENT_EDIT_SCREEN(sub);
|
||||
|
||||
if (result == STR_UPDATE_LIST) {
|
||||
if (!listSdFiles(SCRIPTS_TELEM_PATH, SCRIPTS_EXT, sizeof(g_model.frsky.screens[screenIndex].script.file), NULL)) {
|
||||
POPUP_WARNING(STR_NO_SCRIPTS_ON_SD);
|
||||
s_menu_flags = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// The user choosed a file in the list
|
||||
memcpy(g_model.frsky.screens[screenIndex].script.file, result, sizeof(g_model.frsky.screens[screenIndex].script.file));
|
||||
eeDirty(EE_MODEL);
|
||||
LUA_LOAD_MODEL_SCRIPTS();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void menuModelTelemetry(uint8_t event)
|
||||
{
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, TELEMETRY_TYPE_ROWS CHANNEL_ROWS, CHANNEL_ROWS, CASE_CPUARM(CHANNEL_ROWS) CASE_CPUARM(CHANNEL_ROWS) RSSI_ROWS, USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) SCREEN_TYPE_ROWS, 2, 2, 2, 2, SCREEN_TYPE_ROWS, 2, 2, 2, 2, CASE_CPUARM(SCREEN_TYPE_ROWS) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2)});
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, TELEMETRY_TYPE_ROWS CHANNEL_ROWS(0), CHANNEL_ROWS(1), CASE_CPUARM(CHANNEL_ROWS(2)) CASE_CPUARM(CHANNEL_ROWS(3)) RSSI_ROWS, USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) TELEMETRY_SCREEN_ROWS(0), TELEMETRY_SCREEN_ROWS(1), CASE_CPUARM(TELEMETRY_SCREEN_ROWS(2)) CASE_CPUARM(TELEMETRY_SCREEN_ROWS(3))});
|
||||
|
||||
uint8_t sub = m_posVert - 1;
|
||||
|
||||
|
@ -5713,22 +5756,11 @@ void menuModelTelemetry(uint8_t event)
|
|||
|
||||
uint8_t blink = ((s_editMode>0) ? BLINK|INVERS : INVERS);
|
||||
uint8_t attr = (sub == k ? blink : 0);
|
||||
#if defined(CPUARM)
|
||||
uint8_t ch = TELEM_ANA_A1;
|
||||
if (k >= ITEM_TELEMETRY_A4_LABEL)
|
||||
ch = TELEM_ANA_A4;
|
||||
else if (k >= ITEM_TELEMETRY_A3_LABEL)
|
||||
ch = TELEM_ANA_A3;
|
||||
else if (k >= ITEM_TELEMETRY_A2_LABEL)
|
||||
ch = TELEM_ANA_A2;
|
||||
#else
|
||||
uint8_t ch = (k >= ITEM_TELEMETRY_A2_LABEL) ? TELEM_ANA_A2 : TELEM_ANA_A1;
|
||||
#endif
|
||||
uint8_t ch = TELEMETRY_CURRENT_EDIT_CHANNEL(k);
|
||||
FrSkyChannelData & channel = g_model.frsky.channels[ch];
|
||||
uint8_t dest = TELEM_A1-1+ch;
|
||||
|
||||
switch (k) {
|
||||
|
||||
#if defined(CPUARM)
|
||||
case ITEM_TELEMETRY_PROTOCOL_TYPE:
|
||||
g_model.telemetryProtocol = selectMenuItem(TELEM_COL2, y, STR_TELEMETRY_TYPE, "\017FrSky S.PORT\0 FrSky D\0 FrSky D (cable)", g_model.telemetryProtocol, PROTOCOL_TELEMETRY_FIRST, CASE_PCBTARANIS(g_eeGeneral.uart3Mode==UART_MODE_TELEMETRY ? PROTOCOL_FRSKY_D_SECONDARY : PROTOCOL_FRSKY_D) CASE_PCBSKY9X(PROTOCOL_FRSKY_D_SECONDARY) attr, event);
|
||||
|
@ -5743,7 +5775,10 @@ void menuModelTelemetry(uint8_t event)
|
|||
#endif
|
||||
lcd_putsLeft(y, STR_ACHANNEL);
|
||||
lcd_outdezAtt(2*FW, y, ch+1, 0);
|
||||
putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, frskyData.analog[ch].value, LEFT);
|
||||
#if defined(CPUARM)
|
||||
if (channel.ratio != 0)
|
||||
#endif
|
||||
putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, frskyData.analog[ch].value, LEFT);
|
||||
break;
|
||||
|
||||
case ITEM_TELEMETRY_A1_RANGE:
|
||||
|
@ -5753,8 +5788,16 @@ void menuModelTelemetry(uint8_t event)
|
|||
case ITEM_TELEMETRY_A4_RANGE:
|
||||
#endif
|
||||
lcd_putsLeft(y, STR_RANGE);
|
||||
putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, (m_posHorz<=0 ? attr : 0)|NO_UNIT|LEFT);
|
||||
lcd_putsiAtt(lcdLastPos, y, STR_VTELEMUNIT, channel.type, m_posHorz!=0 ? attr : 0);
|
||||
#if defined(CPUARM)
|
||||
if (channel.ratio == 0) {
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VCSWFUNC, 0, attr);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, (m_posHorz<=0 ? attr : 0)|NO_UNIT|LEFT);
|
||||
lcd_putsiAtt(lcdLastPos, y, STR_VTELEMUNIT, channel.type, m_posHorz!=0 ? attr : 0);
|
||||
}
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
if (m_posHorz == 0) {
|
||||
uint16_t ratio = checkIncDec(event, channel.ratio, 0, 256, EE_MODEL);
|
||||
|
@ -5993,13 +6036,41 @@ void menuModelTelemetry(uint8_t event)
|
|||
case ITEM_TELEMETRY_SCREEN_LABEL2:
|
||||
#if defined(CPUARM)
|
||||
case ITEM_TELEMETRY_SCREEN_LABEL3:
|
||||
case ITEM_TELEMETRY_SCREEN_LABEL4:
|
||||
{
|
||||
uint8_t screenIndex = (k < ITEM_TELEMETRY_SCREEN_LABEL2 ? 0 : (k < ITEM_TELEMETRY_SCREEN_LABEL3 ? 1 : 2));
|
||||
uint8_t screenIndex = TELEMETRY_CURRENT_EDIT_SCREEN(k);
|
||||
putsStrIdx(0*FW, y, STR_SCREEN, screenIndex+1);
|
||||
#if defined(GAUGES)
|
||||
bool screenType = IS_BARS_SCREEN(screenIndex);
|
||||
if (screenType != (bool)selectMenuItem(TELEM_SCRTYPE_COL, y, PSTR(""), STR_VSCREEN, screenType, 0, 1, attr, event))
|
||||
g_model.frsky.screensType ^= (1 << screenIndex);
|
||||
TelemetryScreenType oldScreenType = TELEMETRY_SCREEN_TYPE(screenIndex);
|
||||
TelemetryScreenType newScreenType = (TelemetryScreenType)selectMenuItem(TELEM_SCRTYPE_COL, y, PSTR(""), STR_VTELEMSCREENTYPE, oldScreenType, 0, TELEMETRY_SCREEN_TYPE_MAX, (m_posHorz==0 ? attr : 0), event);
|
||||
if (newScreenType != oldScreenType) {
|
||||
g_model.frsky.screensType = (g_model.frsky.screensType & (~(0x03 << (2*screenIndex)))) | (newScreenType << (2*screenIndex));
|
||||
memset(&g_model.frsky.screens[screenIndex], 0, sizeof(g_model.frsky.screens[screenIndex]));
|
||||
}
|
||||
#if defined(LUA)
|
||||
if (newScreenType == TELEMETRY_SCREEN_TYPE_SCRIPT) {
|
||||
TelemetryScriptData & scriptData = g_model.frsky.screens[screenIndex].script;
|
||||
|
||||
// TODO better function name for ---
|
||||
// TODO function for these lines
|
||||
if (ZEXIST(scriptData.file))
|
||||
lcd_putsnAtt(TELEM_SCRTYPE_COL+7*FW, y, scriptData.file, sizeof(scriptData.file), (m_posHorz==1 ? attr : 0));
|
||||
else
|
||||
lcd_putsiAtt(TELEM_SCRTYPE_COL+7*FW, y, STR_VCSWFUNC, 0, (m_posHorz==1 ? attr : 0));
|
||||
|
||||
if (m_posHorz==1 && attr && event==EVT_KEY_BREAK(KEY_ENTER) && READ_ONLY_UNLOCKED()) {
|
||||
s_editMode = 0;
|
||||
if (listSdFiles(SCRIPTS_TELEM_PATH, SCRIPTS_EXT, sizeof(g_model.frsky.screens[screenIndex].script.file), g_model.frsky.screens[screenIndex].script.file)) {
|
||||
menuHandler = onTelemetryScriptFileSelectionMenu;
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_NO_SCRIPTS_ON_SD);
|
||||
s_menu_flags = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (attr) {
|
||||
MOVE_CURSOR_FROM_HERE();
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
@ -6009,7 +6080,7 @@ void menuModelTelemetry(uint8_t event)
|
|||
putsStrIdx(0*FW, y, STR_SCREEN, screenIndex);
|
||||
#if defined(GAUGES)
|
||||
bool screenType = g_model.frsky.screensType & screenIndex;
|
||||
if (screenType != (bool)selectMenuItem(TELEM_SCRTYPE_COL, y, PSTR(""), STR_VSCREEN, screenType, 0, 1, attr, event))
|
||||
if (screenType != (bool)selectMenuItem(TELEM_SCRTYPE_COL, y, PSTR(""), STR_VTELEMSCREENTYPE, screenType, 0, 1, attr, event))
|
||||
g_model.frsky.screensType ^= screenIndex;
|
||||
#endif
|
||||
break;
|
||||
|
@ -6030,8 +6101,11 @@ void menuModelTelemetry(uint8_t event)
|
|||
case ITEM_TELEMETRY_SCREEN_LINE10:
|
||||
case ITEM_TELEMETRY_SCREEN_LINE11:
|
||||
case ITEM_TELEMETRY_SCREEN_LINE12:
|
||||
case ITEM_TELEMETRY_SCREEN_LINE13:
|
||||
case ITEM_TELEMETRY_SCREEN_LINE14:
|
||||
case ITEM_TELEMETRY_SCREEN_LINE15:
|
||||
case ITEM_TELEMETRY_SCREEN_LINE16:
|
||||
#endif
|
||||
|
||||
{
|
||||
uint8_t screenIndex, lineIndex;
|
||||
if (k < ITEM_TELEMETRY_SCREEN_LABEL2) {
|
||||
|
@ -6039,6 +6113,10 @@ void menuModelTelemetry(uint8_t event)
|
|||
lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE1;
|
||||
}
|
||||
#if defined(CPUARM)
|
||||
else if (k >= ITEM_TELEMETRY_SCREEN_LABEL4) {
|
||||
screenIndex = 3;
|
||||
lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE13;
|
||||
}
|
||||
else if (k >= ITEM_TELEMETRY_SCREEN_LABEL3) {
|
||||
screenIndex = 2;
|
||||
lineIndex = k-ITEM_TELEMETRY_SCREEN_LINE9;
|
||||
|
|
|
@ -424,32 +424,30 @@ bool displayCustomTelemetryScreen(uint8_t index)
|
|||
FrSkyScreenData & screen = g_model.frsky.screens[index];
|
||||
|
||||
#if defined(GAUGES)
|
||||
if (g_model.frsky.screensType & (1<<(s_frsky_view-TELEMETRY_CUSTOM_SCREEN_1))) {
|
||||
if (IS_BARS_SCREEN(s_frsky_view)) {
|
||||
return displayGaugesTelemetryScreen(screen);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
return displayNumbersTelemetryScreen(screen);
|
||||
}
|
||||
|
||||
return displayNumbersTelemetryScreen(screen);
|
||||
}
|
||||
|
||||
bool displayTelemetryScreen()
|
||||
{
|
||||
#if defined(LUA)
|
||||
if (s_frsky_view < TELEMETRY_CUSTOM_SCREEN_1) {
|
||||
return isTelemetryScriptAvailable(s_frsky_view);
|
||||
if (TELEMETRY_SCREEN_TYPE(s_frsky_view) == TELEMETRY_SCREEN_TYPE_SCRIPT) {
|
||||
return ZEXIST(g_model.frsky.screens[s_frsky_view].script.file);
|
||||
}
|
||||
#endif
|
||||
|
||||
lcdDrawTelemetryTopBar();
|
||||
|
||||
if (s_frsky_view < MAX_TELEMETRY_SCREENS) {
|
||||
return displayCustomTelemetryScreen(s_frsky_view);
|
||||
}
|
||||
if (s_frsky_view == TELEMETRY_VOLTAGES_SCREEN) {
|
||||
displayVoltagesScreen();
|
||||
}
|
||||
else if (s_frsky_view < TELEMETRY_CUSTOM_SCREEN_1+MAX_FRSKY_SCREENS) {
|
||||
return displayCustomTelemetryScreen(s_frsky_view-TELEMETRY_CUSTOM_SCREEN_1);
|
||||
}
|
||||
#if defined(FRSKY_HUB)
|
||||
else {
|
||||
displayAfterFlightScreen();
|
||||
|
|
|
@ -1528,7 +1528,7 @@ int luaLoad(const char *filename, ScriptInternalData & sid, ScriptInputsOutputs
|
|||
#endif
|
||||
|
||||
if (luaState == INTERPRETER_PANIC) {
|
||||
return SCRIPT_PANIC;
|
||||
return SCRIPT_PANIC;
|
||||
}
|
||||
|
||||
SET_LUA_INSTRUCTIONS_COUNT(MANUAL_SCRIPTS_MAX_INSTRUCTIONS);
|
||||
|
@ -1635,54 +1635,34 @@ bool luaLoadFunctionScript(uint8_t index)
|
|||
return true;
|
||||
}
|
||||
|
||||
void getTelemetryScriptPath(char * path, uint8_t index)
|
||||
{
|
||||
strcpy(path, SCRIPTS_PATH "/");
|
||||
char * curs = strcat_modelname(path+sizeof(SCRIPTS_PATH), g_eeGeneral.currModel);
|
||||
if (index == TELEMETRY_VOLTAGES_SCREEN) {
|
||||
strcpy(curs, "/telempw.lua");
|
||||
}
|
||||
else if (index == TELEMETRY_AFTER_FLIGHT_SCREEN) {
|
||||
strcpy(curs, "/telemaf.lua");
|
||||
}
|
||||
else {
|
||||
strcpy(curs, "/telemX.lua");
|
||||
curs[6] = '1' + index;
|
||||
}
|
||||
}
|
||||
|
||||
bool luaLoadTelemetryScript(uint8_t index)
|
||||
{
|
||||
char path[256];
|
||||
getTelemetryScriptPath(path, index);
|
||||
if (isFileAvailable(path)) {
|
||||
if (luaScriptsCount < MAX_SCRIPTS) {
|
||||
ScriptInternalData & sid = scriptInternalData[luaScriptsCount++];
|
||||
sid.reference = SCRIPT_TELEMETRY_FIRST+index;
|
||||
sid.state = SCRIPT_NOFILE;
|
||||
if (luaLoad(path, sid) == SCRIPT_PANIC) {
|
||||
TelemetryScreenType screenType = TELEMETRY_SCREEN_TYPE(index);
|
||||
|
||||
if (screenType == TELEMETRY_SCREEN_TYPE_SCRIPT) {
|
||||
TelemetryScriptData & script = g_model.frsky.screens[index].script;
|
||||
if (ZEXIST(script.file)) {
|
||||
if (luaScriptsCount < MAX_SCRIPTS) {
|
||||
ScriptInternalData & sid = scriptInternalData[luaScriptsCount++];
|
||||
sid.reference = SCRIPT_TELEMETRY_FIRST+index;
|
||||
sid.state = SCRIPT_NOFILE;
|
||||
char filename[sizeof(SCRIPTS_TELEM_PATH)+sizeof(script.file)+sizeof(SCRIPTS_EXT)] = SCRIPTS_TELEM_PATH "/";
|
||||
strncpy(filename+sizeof(SCRIPTS_TELEM_PATH), script.file, sizeof(script.file));
|
||||
filename[sizeof(SCRIPTS_TELEM_PATH)+sizeof(script.file)] = '\0';
|
||||
strcat(filename+sizeof(SCRIPTS_TELEM_PATH), SCRIPTS_EXT);
|
||||
if (luaLoad(filename, sid) == SCRIPT_PANIC) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_TOO_MANY_LUA_SCRIPTS);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
POPUP_WARNING(STR_TOO_MANY_LUA_SCRIPTS);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool isTelemetryScriptAvailable(uint8_t index)
|
||||
{
|
||||
for (int i=0; i<luaScriptsCount; i++) {
|
||||
ScriptInternalData & sid = scriptInternalData[i];
|
||||
if (sid.reference == SCRIPT_TELEMETRY_FIRST+index) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void luaLoadPermanentScripts()
|
||||
{
|
||||
luaScriptsCount = 0;
|
||||
|
@ -1691,9 +1671,9 @@ void luaLoadPermanentScripts()
|
|||
|
||||
// Load model scripts
|
||||
for (int i=0; i<MAX_SCRIPTS; i++) {
|
||||
if (!luaLoadMixScript(i)) {
|
||||
return;
|
||||
}
|
||||
if (!luaLoadMixScript(i)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Load custom function scripts
|
||||
|
@ -1704,17 +1684,11 @@ void luaLoadPermanentScripts()
|
|||
}
|
||||
|
||||
// Load custom telemetry scripts
|
||||
for (int i=0; i<MAX_SCRIPTS; i++) {
|
||||
for (int i=0; i<MAX_TELEMETRY_SCREENS; i++) {
|
||||
if (!luaLoadTelemetryScript(i)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!luaLoadTelemetryScript(TELEMETRY_VOLTAGES_SCREEN)) {
|
||||
return;
|
||||
}
|
||||
if (!luaLoadTelemetryScript(TELEMETRY_AFTER_FLIGHT_SCREEN)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
char lua_warning_str[WARNING_LINE_LEN+1];
|
||||
|
@ -1880,8 +1854,9 @@ void luaDoOneRunPermanentScript(uint8_t evt, int i)
|
|||
lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run);
|
||||
}
|
||||
else {
|
||||
TelemetryScriptData & script = g_model.frsky.screens[sid.reference-SCRIPT_TELEMETRY_FIRST].script;
|
||||
#if defined(SIMU) || defined(DEBUG)
|
||||
filename = "[telem]";
|
||||
filename = script.file;
|
||||
#endif
|
||||
if (g_menuStack[0]==menuTelemetryFrsky && sid.reference==SCRIPT_TELEMETRY_FIRST+s_frsky_view) {
|
||||
lua_rawgeti(L, LUA_REGISTRYINDEX, sid.run);
|
||||
|
|
|
@ -342,11 +342,12 @@ PACK(typedef struct t_ModuleData {
|
|||
|
||||
#define SET_DEFAULT_PPM_FRAME_LENGTH(idx) g_model.moduleData[idx].ppmFrameLength = 4 * max((int8_t)0, g_model.moduleData[idx].channelsCount)
|
||||
|
||||
#define MAX_SCRIPT_INPUTS 10
|
||||
#define MAX_SCRIPT_OUTPUTS 6
|
||||
PACK(typedef struct t_ScriptData {
|
||||
char file[10];
|
||||
char name[10];
|
||||
#define LEN_SCRIPT_FILENAME 8
|
||||
#define MAX_SCRIPT_INPUTS 8
|
||||
#define MAX_SCRIPT_OUTPUTS 6
|
||||
PACK(typedef struct {
|
||||
char file[LEN_SCRIPT_FILENAME];
|
||||
char name[8];
|
||||
int8_t inputs[MAX_SCRIPT_INPUTS];
|
||||
}) ScriptData;
|
||||
|
||||
|
@ -1183,7 +1184,7 @@ enum VarioSource {
|
|||
#define NUM_TELEMETRY TELEM_TIMER_MAX
|
||||
#endif
|
||||
|
||||
PACK(typedef struct t_FrSkyBarData {
|
||||
PACK(typedef struct {
|
||||
uint8_t source;
|
||||
uint8_t barMin; // minimum for bar display
|
||||
uint8_t barMax; // ditto for max display (would usually = ratio)
|
||||
|
@ -1194,13 +1195,24 @@ PACK(typedef struct t_FrSkyBarData {
|
|||
#else
|
||||
#define NUM_LINE_ITEMS 2
|
||||
#endif
|
||||
PACK(typedef struct t_FrSkyLineData {
|
||||
PACK(typedef struct {
|
||||
uint8_t sources[NUM_LINE_ITEMS];
|
||||
}) FrSkyLineData;
|
||||
|
||||
typedef union t_FrSkyScreenData {
|
||||
#if defined(PCBTARANIS)
|
||||
#define MAX_TELEM_SCRIPT_INPUTS 4
|
||||
PACK(typedef struct {
|
||||
char file[LEN_SCRIPT_FILENAME];
|
||||
int8_t inputs[MAX_TELEM_SCRIPT_INPUTS];
|
||||
}) TelemetryScriptData;
|
||||
#endif
|
||||
|
||||
typedef union {
|
||||
FrSkyBarData bars[4];
|
||||
FrSkyLineData lines[4];
|
||||
#if defined(PCBTARANIS)
|
||||
TelemetryScriptData script;
|
||||
#endif
|
||||
} FrSkyScreenData;
|
||||
|
||||
enum FrskyUsrProtocols {
|
||||
|
@ -1235,17 +1247,30 @@ enum FrskyVoltsSource {
|
|||
};
|
||||
|
||||
#if defined(CPUARM)
|
||||
enum TelemetryScreenType {
|
||||
TELEMETRY_SCREEN_TYPE_NONE,
|
||||
TELEMETRY_SCREEN_TYPE_VALUES,
|
||||
TELEMETRY_SCREEN_TYPE_GAUGES,
|
||||
#if defined(PCBTARANIS) && defined(LUA)
|
||||
TELEMETRY_SCREEN_TYPE_SCRIPT,
|
||||
TELEMETRY_SCREEN_TYPE_MAX = TELEMETRY_SCREEN_TYPE_SCRIPT
|
||||
#else
|
||||
TELEMETRY_SCREEN_TYPE_MAX = TELEMETRY_SCREEN_TYPE_GAUGES
|
||||
#endif
|
||||
};
|
||||
#define MAX_FRSKY_A_CHANNELS 4
|
||||
#define MAX_FRSKY_SCREENS 3
|
||||
PACK(typedef struct t_FrSkyData {
|
||||
#define MAX_TELEMETRY_SCREENS 4
|
||||
#define TELEMETRY_SCREEN_TYPE(screenIndex) TelemetryScreenType((g_model.frsky.screensType >> (2*(screenIndex))) & 0x03)
|
||||
#define IS_BARS_SCREEN(screenIndex) (TELEMETRY_SCREEN_TYPE(screenIndex) == TELEMETRY_SCREEN_TYPE_GAUGES)
|
||||
PACK(typedef struct {
|
||||
FrSkyChannelData channels[MAX_FRSKY_A_CHANNELS];
|
||||
uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh, 3=Halcyon
|
||||
uint8_t voltsSource:7;
|
||||
uint8_t altitudeDisplayed:1;
|
||||
int8_t blades; // How many blades for RPMs, 0=2 blades
|
||||
uint8_t currentSource;
|
||||
uint8_t screensType;
|
||||
FrSkyScreenData screens[MAX_FRSKY_SCREENS];
|
||||
uint8_t screensType; // 2bits per screen (None/Gauges/Numbers/Script)
|
||||
FrSkyScreenData screens[MAX_TELEMETRY_SCREENS];
|
||||
uint8_t varioSource;
|
||||
int8_t varioCenterMax;
|
||||
int8_t varioCenterMin;
|
||||
|
@ -1260,7 +1285,8 @@ PACK(typedef struct t_FrSkyData {
|
|||
#define MAX_BLADES 126 // 128 blades
|
||||
#else
|
||||
#define MAX_FRSKY_A_CHANNELS 2
|
||||
#define MAX_FRSKY_SCREENS 2
|
||||
#define MAX_TELEMETRY_SCREENS 2
|
||||
#define IS_BARS_SCREEN(screenIndex) (g_model.frsky.screensType & (1<<(screenIndex)))
|
||||
PACK(typedef struct t_FrSkyData {
|
||||
FrSkyChannelData channels[MAX_FRSKY_A_CHANNELS];
|
||||
uint8_t usrProto:2; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh, 3=Halcyon
|
||||
|
@ -1270,7 +1296,7 @@ PACK(typedef struct t_FrSkyData {
|
|||
int8_t varioMin:4;
|
||||
int8_t varioMax:4;
|
||||
FrSkyRSSIAlarm rssiAlarms[2];
|
||||
FrSkyScreenData screens[MAX_FRSKY_SCREENS];
|
||||
FrSkyScreenData screens[MAX_TELEMETRY_SCREENS];
|
||||
uint8_t varioSource:3;
|
||||
int8_t varioCenterMin:5;
|
||||
uint8_t currentSource:3;
|
||||
|
@ -1822,7 +1848,7 @@ PACK(typedef struct {
|
|||
|
||||
MODELDATA_EXTRA
|
||||
|
||||
ARM_FIELD(uint8_t spare3[188]) // TODO dirty hack for eeprom conversions (we load the model inside the g_model structure)
|
||||
ARM_FIELD(uint8_t spare3[230]) // TODO dirty hack for eeprom conversions (we load the model inside the g_model structure)
|
||||
}) ModelData;
|
||||
|
||||
extern EEGeneral g_eeGeneral;
|
||||
|
|
|
@ -1519,7 +1519,6 @@ enum AUDIO_SOUNDS {
|
|||
void luaExec(const char *filename);
|
||||
int luaGetMemUsed();
|
||||
#define luaGetCpuUsed(idx) scriptInternalData[idx].instructions
|
||||
bool isTelemetryScriptAvailable(uint8_t index);
|
||||
#define LUA_LOAD_MODEL_SCRIPTS() luaState |= INTERPRETER_RELOAD_PERMANENT_SCRIPTS
|
||||
#define LUA_LOAD_MODEL_SCRIPT(idx) luaState |= INTERPRETER_RELOAD_PERMANENT_SCRIPTS
|
||||
|
||||
|
@ -1693,23 +1692,27 @@ extern const pm_uint8_t bchunit_ar[];
|
|||
#define FRSKY_MULTIPLIER_MAX 3
|
||||
#endif
|
||||
|
||||
#define IS_BARS_SCREEN(screenIndex) (g_model.frsky.screensType & (1<<(screenIndex)))
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
enum FrskyViews {
|
||||
TELEMETRY_CUSTOM_SCREEN_1,
|
||||
TELEMETRY_CUSTOM_SCREEN_2,
|
||||
TELEMETRY_CUSTOM_SCREEN_3,
|
||||
TELEMETRY_CUSTOM_SCREEN_4,
|
||||
TELEMETRY_VOLTAGES_SCREEN, // TODO NOT IF LUA
|
||||
TELEMETRY_AFTER_FLIGHT_SCREEN, // TODO NOT IF LUA
|
||||
FRSKY_VIEW_MAX = TELEMETRY_AFTER_FLIGHT_SCREEN
|
||||
};
|
||||
#else
|
||||
enum FrskyViews {
|
||||
CASE_LUA(TELEMETRY_LUA_SCREEN_1)
|
||||
CASE_LUA(TELEMETRY_LUA_SCREEN_2)
|
||||
CASE_LUA(TELEMETRY_LUA_SCREEN_3)
|
||||
CASE_LUA(TELEMETRY_LUA_SCREEN_4)
|
||||
CASE_LUA(TELEMETRY_LUA_SCREEN_5)
|
||||
CASE_LUA(TELEMETRY_LUA_SCREEN_6)
|
||||
CASE_LUA(TELEMETRY_LUA_SCREEN_7)
|
||||
TELEMETRY_CUSTOM_SCREEN_1,
|
||||
TELEMETRY_CUSTOM_SCREEN_2,
|
||||
CASE_CPUARM(TELEMETRY_CUSTOM_SCREEN_3)
|
||||
CASE_CPUARM(TELEMETRY_CUSTOM_SCREEN_4)
|
||||
TELEMETRY_VOLTAGES_SCREEN,
|
||||
TELEMETRY_AFTER_FLIGHT_SCREEN,
|
||||
FRSKY_VIEW_MAX = TELEMETRY_AFTER_FLIGHT_SCREEN
|
||||
};
|
||||
#endif
|
||||
|
||||
extern uint8_t s_frsky_view;
|
||||
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
#define TEMPLATES_PATH SCRIPTS_PATH "/TEMPLATES"
|
||||
#define SCRIPTS_MIXES_PATH SCRIPTS_PATH "/MIXES"
|
||||
#define SCRIPTS_FUNCS_PATH SCRIPTS_PATH "/FUNCTIONS"
|
||||
#define SCRIPTS_TELEM_PATH SCRIPTS_PATH "/TELEM"
|
||||
|
||||
#define MODELS_EXT ".bin"
|
||||
#define LOGS_EXT ".csv"
|
||||
|
|
|
@ -86,7 +86,7 @@ const pm_char STR_OPEN9X[] PROGMEM =
|
|||
ISTR(GPSFORMAT)
|
||||
ISTR(AMPSRC)
|
||||
ISTR(VARIOSRC)
|
||||
ISTR(VSCREEN)
|
||||
ISTR(VTELEMSCREENTYPE)
|
||||
#endif
|
||||
#if defined(TEMPLATES)
|
||||
ISTR(VTEMPLATES)
|
||||
|
|
|
@ -137,7 +137,7 @@ extern const pm_char STR_OPEN9X[];
|
|||
#define OFS_AMPSRC (OFS_GPSFORMAT + sizeof(TR_GPSFORMAT))
|
||||
#define OFS_VARIOSRC (OFS_AMPSRC + sizeof(TR_AMPSRC))
|
||||
#define OFS_VSCREEN (OFS_VARIOSRC + sizeof(TR_VARIOSRC))
|
||||
#define OFS_VTEMPLATES (OFS_VSCREEN + sizeof(TR_VSCREEN))
|
||||
#define OFS_VTEMPLATES (OFS_VSCREEN + sizeof(TR_VTELEMSCREENTYPE))
|
||||
#else
|
||||
#define OFS_VTEMPLATES (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS))
|
||||
#endif
|
||||
|
@ -234,7 +234,7 @@ extern const pm_char STR_OPEN9X[];
|
|||
#define STR_GPSFORMAT (STR_OPEN9X + OFS_GPSFORMAT)
|
||||
#define STR_AMPSRC (STR_OPEN9X + OFS_AMPSRC)
|
||||
#define STR_VARIOSRC (STR_OPEN9X + OFS_VARIOSRC)
|
||||
#define STR_VSCREEN (STR_OPEN9X + OFS_VSCREEN)
|
||||
#define STR_VTELEMSCREENTYPE (STR_OPEN9X + OFS_VSCREEN)
|
||||
#define STR_TELEMCHNS (STR_OPEN9X + OFS_TELEMCHNS)
|
||||
#endif
|
||||
|
||||
|
|
|
@ -404,8 +404,8 @@
|
|||
#define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\010"
|
||||
#define TR_VSCREEN "Hodnota ""Ukazatel"
|
||||
#define LEN_VTELEMSCREENTYPE "\010"
|
||||
#define TR_VTELEMSCREENTYPE "Hodnota ""Ukazatel"
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "DMS\0""NMEA"
|
||||
|
|
|
@ -402,8 +402,13 @@
|
|||
#define TR_VARIOSRC "Alt\0""Alt+""Vspd""A1\0 ""A2\0 "
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\007"
|
||||
#define TR_VSCREEN ":Werte\0"":Balken" //Telemetrie Werte oder Balken
|
||||
#if defined(CPUARM)
|
||||
#define LEN_VTELEMSCREENTYPE "\007"
|
||||
#define TR_VTELEMSCREENTYPE "None\0 "":Werte\0"":Balken""Script\0"
|
||||
#else
|
||||
#define LEN_VTELEMSCREENTYPE "\006"
|
||||
#define TR_VTELEMSCREENTYPE "Werte\0""Balken"
|
||||
#endif
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "GMS\0""NMEA" //Koordinatenanzeige
|
||||
|
@ -476,10 +481,10 @@
|
|||
#define LEN_VTMRMODES "\003"
|
||||
#define TR_VTMRMODES "AUS""ABS""GSs""GS%""GSt"
|
||||
|
||||
#define LEN_VTRAINERMODES "\007" // "\006"
|
||||
#define LEN_VTRAINERMODES "\007"
|
||||
#define TR_VTRAINERMODES "Lehrer\0""Schüler\0" // "Master""Slave\0"
|
||||
|
||||
#define LEN_VFAILSAFE "\013" // "\011"
|
||||
#define LEN_VFAILSAFE "\013"
|
||||
#define TR_VFAILSAFE "Halte Pos.\0""Angepasst\0 ""Kein Signal""Empfänger\0"
|
||||
|
||||
#if defined(MAVLINK)
|
||||
|
|
|
@ -402,8 +402,13 @@
|
|||
#define TR_VARIOSRC "Alt\0""Alt+""VSpd""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\004"
|
||||
#define TR_VSCREEN "Nums""Bars"
|
||||
#if defined(CPUARM)
|
||||
#define LEN_VTELEMSCREENTYPE "\006"
|
||||
#define TR_VTELEMSCREENTYPE "None\0 ""Nums\0 ""Bars\0 ""Script"
|
||||
#else
|
||||
#define LEN_VTELEMSCREENTYPE "\004"
|
||||
#define TR_VTELEMSCREENTYPE "Nums""Bars"
|
||||
#endif
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "DMS\0""NMEA"
|
||||
|
@ -587,7 +592,7 @@
|
|||
#define TR_ALARM INDENT "Alarm"
|
||||
#define TR_USRDATA TR("UsrData","User Data")
|
||||
#define TR_BLADES INDENT "Blades"
|
||||
#define TR_SCREEN "Screen "
|
||||
#define TR_SCREEN "Screen\001"
|
||||
#define TR_SOUND_LABEL "Sound"
|
||||
#define TR_LENGTH INDENT "Length"
|
||||
#define TR_BEEP_LENGTH INDENT "Beep Length"
|
||||
|
|
|
@ -400,8 +400,8 @@
|
|||
#define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\004"
|
||||
#define TR_VSCREEN "Nums""Bars"
|
||||
#define LEN_VTELEMSCREENTYPE "\004"
|
||||
#define TR_VTELEMSCREENTYPE "Nums""Bars"
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "HMS NMEA"
|
||||
|
|
|
@ -400,8 +400,8 @@
|
|||
#define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\004"
|
||||
#define TR_VSCREEN "Nums""Bars"
|
||||
#define LEN_VTELEMSCREENTYPE "\004"
|
||||
#define TR_VTELEMSCREENTYPE "Nums""Bars"
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "HMS NMEA"
|
||||
|
|
|
@ -400,8 +400,8 @@
|
|||
#define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN TR("\004", "\007")
|
||||
#define TR_VSCREEN TR("Val.""Bars", "Valeurs""Barres\0")
|
||||
#define LEN_VTELEMSCREENTYPE TR("\004", "\007")
|
||||
#define TR_VTELEMSCREENTYPE TR("Val.""Bars", "Valeurs""Barres\0")
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "DMS\0""NMEA"
|
||||
|
|
|
@ -400,8 +400,8 @@
|
|||
#define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\006"
|
||||
#define TR_VSCREEN "Valori""Barre "
|
||||
#define LEN_VTELEMSCREENTYPE "\006"
|
||||
#define TR_VTELEMSCREENTYPE "Valori""Barre "
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "HMS NMEA"
|
||||
|
|
|
@ -400,8 +400,8 @@
|
|||
#define TR_VARIOSRC "Wys\0""Wys+""VSpd""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\004"
|
||||
#define TR_VSCREEN "Licz""Pask"
|
||||
#define LEN_VTELEMSCREENTYPE "\004"
|
||||
#define TR_VTELEMSCREENTYPE "Licz""Pask"
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "DMS\0""NMEA"
|
||||
|
|
|
@ -400,8 +400,8 @@
|
|||
#define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\004"
|
||||
#define TR_VSCREEN "Nums""Bars"
|
||||
#define LEN_VTELEMSCREENTYPE "\004"
|
||||
#define TR_VTELEMSCREENTYPE "Nums""Bars"
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "HMS NMEA"
|
||||
|
|
|
@ -400,8 +400,8 @@
|
|||
#define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0"
|
||||
#endif
|
||||
|
||||
#define LEN_VSCREEN "\007"
|
||||
#define TR_VSCREEN "Siffror""Staplar"
|
||||
#define LEN_VTELEMSCREENTYPE "\007"
|
||||
#define TR_VTELEMSCREENTYPE "Siffror""Staplar"
|
||||
|
||||
#define LEN_GPSFORMAT "\004"
|
||||
#define TR_GPSFORMAT "HMS NMEA"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue