1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-21 23:35:12 +03:00

Merge branch '2.3' of https://github.com/opentx/opentx into 2.3

This commit is contained in:
MRC3742 2019-08-28 19:59:54 -04:00
commit b8408e3b53
61 changed files with 544 additions and 388 deletions

View file

@ -44,6 +44,20 @@ bool ModuleData::isPxx2Module() const
} }
} }
bool ModuleData::isPxx1Module() const
{
switch(protocol){
case PULSES_PXX_XJT_X16:
case PULSES_PXX_R9M:
case PULSES_PXX_R9M_LITE:
case PULSES_PXX_R9M_LITE_PRO:
return true;
default:
return false;
}
}
QString ModuleData::rfProtocolToString() const QString ModuleData::rfProtocolToString() const
{ {
switch (protocol) { switch (protocol) {

View file

@ -183,6 +183,7 @@ class ModuleData {
void clear() { memset(this, 0, sizeof(ModuleData)); } void clear() { memset(this, 0, sizeof(ModuleData)); }
void convert(RadioDataConversionState & cstate); void convert(RadioDataConversionState & cstate);
bool isPxx2Module() const; bool isPxx2Module() const;
bool isPxx1Module() const;
QString polarityToString() const { return ppm.pulsePol ? tr("Positive") : tr("Negative"); } QString polarityToString() const { return ppm.pulsePol ? tr("Positive") : tr("Negative"); }
QString rfProtocolToString() const; QString rfProtocolToString() const;
QString subTypeToString(int type = -1) const; QString subTypeToString(int type = -1) const;

View file

@ -1856,10 +1856,11 @@ class CustomScreenField: public StructField {
class SensorField: public TransformedField { class SensorField: public TransformedField {
public: public:
SensorField(DataField * parent, SensorData & sensor, Board::Type board, unsigned int version): SensorField(DataField * parent, const ModelData& model, SensorData & sensor, Board::Type board, unsigned int version):
TransformedField(parent, internalField), TransformedField(parent, internalField),
internalField(this, "Sensor"), internalField(this, "Sensor"),
sensor(sensor), sensor(sensor),
model(model),
version(version), version(version),
_param(0) _param(0)
{ {
@ -1921,7 +1922,10 @@ class SensorField: public TransformedField {
if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) { if (sensor.type == SensorData::TELEM_TYPE_CUSTOM) {
sensor.id = _id; sensor.id = _id;
sensor.subid = _subid; sensor.subid = _subid;
if (model.moduleData[0].isPxx1Module() || model.moduleData[1].isPxx1Module())
sensor.instance = (_instance & 0x1F) + (version <= 218 ? -1 : 0); // 5 bits instance sensor.instance = (_instance & 0x1F) + (version <= 218 ? -1 : 0); // 5 bits instance
else
sensor.instance = _instance;
sensor.rxIdx = (_instance >> 5) & 0x03; // 2 bits Rx idx sensor.rxIdx = (_instance >> 5) & 0x03; // 2 bits Rx idx
sensor.moduleIdx = (_instance >> 7) & 0x1; // 1 bit module idx sensor.moduleIdx = (_instance >> 7) & 0x1; // 1 bit module idx
sensor.ratio = _ratio; sensor.ratio = _ratio;
@ -1954,6 +1958,7 @@ class SensorField: public TransformedField {
protected: protected:
StructField internalField; StructField internalField;
SensorData & sensor; SensorData & sensor;
const ModelData& model;
unsigned int version; unsigned int version;
unsigned int _id; unsigned int _id;
unsigned int _subid; unsigned int _subid;
@ -2426,7 +2431,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig
} }
for (int i=0; i<MAX_TELEMETRY_SENSORS(board, version); ++i) { for (int i=0; i<MAX_TELEMETRY_SENSORS(board, version); ++i) {
internalField.Append(new SensorField(this, modelData.sensorData[i], board, version)); internalField.Append(new SensorField(this, modelData, modelData.sensorData[i], board, version));
} }
if (IS_TARANIS_X9E(board)) { if (IS_TARANIS_X9E(board)) {

View file

@ -97,7 +97,7 @@ void *bin_l_alloc (void *ud, void *ptr, size_t osize, size_t nsize)
free(ptr); free(ptr);
} }
} }
return NULL; return nullptr;
} }
else { else {
#if defined(DEBUG) #if defined(DEBUG)

View file

@ -95,7 +95,7 @@ char * Bluetooth::readline(bool error_reset)
state = BLUETOOTH_STATE_OFF; state = BLUETOOTH_STATE_OFF;
wakeupTime = get_tmr10ms() + 100; /* 1s */ wakeupTime = get_tmr10ms() + 100; /* 1s */
#endif #endif
return NULL; return nullptr;
} }
else else
#endif #endif

View file

@ -70,7 +70,7 @@ int toLongLongInt(const char ** argv, int index, long long int * val)
base = 16; base = 16;
s = &argv[index][2]; s = &argv[index][2];
} }
char * endptr = NULL; char * endptr = nullptr;
*val = strtoll(s, &endptr, base); *val = strtoll(s, &endptr, base);
if (*endptr == '\0') if (*endptr == '\0')
return 1; return 1;
@ -782,7 +782,7 @@ const MemArea memAreas[] = {
{ "USART1", USART1, sizeof(USART_TypeDef) }, { "USART1", USART1, sizeof(USART_TypeDef) },
{ "USART2", USART2, sizeof(USART_TypeDef) }, { "USART2", USART2, sizeof(USART_TypeDef) },
{ "USART3", USART3, sizeof(USART_TypeDef) }, { "USART3", USART3, sizeof(USART_TypeDef) },
{ NULL, NULL, 0 }, { nullptr, nullptr, 0 },
}; };
int cliSet(const char ** argv) int cliSet(const char ** argv)
@ -947,7 +947,7 @@ int cliDisplay(const char ** argv)
{ {
long long int address = 0; long long int address = 0;
for (const MemArea * area = memAreas; area->name != NULL; area++) { for (const MemArea * area = memAreas; area->name != nullptr; area++) {
if (!strcmp(area->name, argv[1])) { if (!strcmp(area->name, argv[1])) {
dump((uint8_t *)area->start, area->size); dump((uint8_t *)area->start, area->size);
return 0; return 0;
@ -1218,12 +1218,12 @@ const CliCommand cliCommands[] = {
#if defined(BLUETOOTH) #if defined(BLUETOOTH)
{ "bt", cliBlueTooth, "<baudrate>|<command>" }, { "bt", cliBlueTooth, "<baudrate>|<command>" },
#endif #endif
{ NULL, NULL, NULL } /* sentinel */ { nullptr, nullptr, nullptr } /* sentinel */
}; };
int cliHelp(const char ** argv) int cliHelp(const char ** argv)
{ {
for (const CliCommand * command = cliCommands; command->name != NULL; command++) { for (const CliCommand * command = cliCommands; command->name != nullptr; command++) {
if (argv[1][0] == '\0' || !strcmp(command->name, argv[0])) { if (argv[1][0] == '\0' || !strcmp(command->name, argv[0])) {
serialPrint("%s %s", command->name, command->args); serialPrint("%s %s", command->name, command->args);
if (argv[1][0] != '\0') { if (argv[1][0] != '\0') {
@ -1242,7 +1242,7 @@ int cliExecCommand(const char ** argv)
if (argv[0][0] == '\0') if (argv[0][0] == '\0')
return 0; return 0;
for (const CliCommand * command = cliCommands; command->name != NULL; command++) { for (const CliCommand * command = cliCommands; command->name != nullptr; command++) {
if (!strcmp(command->name, argv[0])) { if (!strcmp(command->name, argv[0])) {
return command->func(argv); return command->func(argv);
} }

View file

@ -249,12 +249,16 @@ enum UartModes {
enum TelemetryProtocol enum TelemetryProtocol
{ {
TELEM_PROTO_FRSKY_D, PROTOCOL_TELEMETRY_FIRST,
TELEM_PROTO_FRSKY_SPORT, PROTOCOL_TELEMETRY_FRSKY_SPORT = PROTOCOL_TELEMETRY_FIRST,
TELEM_PROTO_CROSSFIRE, PROTOCOL_TELEMETRY_FRSKY_D,
TELEM_PROTO_SPEKTRUM, PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY,
TELEM_PROTO_LUA, PROTOCOL_TELEMETRY_CROSSFIRE,
TELEM_PROTO_FLYSKY_IBUS, PROTOCOL_TELEMETRY_SPEKTRUM,
PROTOCOL_TELEMETRY_FLYSKY_IBUS,
PROTOCOL_TELEMETRY_MULTIMODULE,
PROTOCOL_TELEMETRY_LAST=PROTOCOL_TELEMETRY_MULTIMODULE,
PROTOCOL_TELEMETRY_LUA
}; };
#define TELEM_LABEL_LEN 4 #define TELEM_LABEL_LEN 4

View file

@ -379,7 +379,7 @@ PACK(struct TelemetrySensor {
int32_t getPrecDivisor() const; int32_t getPrecDivisor() const;
bool isSameInstance(TelemetryProtocol protocol, uint8_t instance) bool isSameInstance(TelemetryProtocol protocol, uint8_t instance)
{ {
if (protocol == TELEM_PROTO_FRSKY_SPORT) { if (protocol == PROTOCOL_TELEMETRY_FRSKY_SPORT) {
if (((this->instance ^ instance) & 0x9F) == 0) { if (((this->instance ^ instance) & 0x9F) == 0) {
this->instance = instance; // update the instance in case we had telemetry switching this->instance = instance; // update the instance in case we had telemetry switching
return true; return true;

View file

@ -22,12 +22,6 @@ set(GUI_SRC
view_statistics.cpp view_statistics.cpp
) )
set(SRC
${SRC}
gui/common/widgets.cpp
gui/common/arm/widgets.cpp
)
if(FLIGHT_MODES) if(FLIGHT_MODES)
set(GUI_SRC set(GUI_SRC
${GUI_SRC} ${GUI_SRC}

View file

@ -813,21 +813,6 @@ void drawTimerMode(coord_t x, coord_t y, swsrc_t mode, LcdFlags att)
drawSwitch(x, y, mode, att); drawSwitch(x, y, mode, att);
} }
void drawTrimMode(coord_t x, coord_t y, uint8_t fm, uint8_t idx, LcdFlags att)
{
trim_t v = getRawTrimValue(fm, idx);
uint8_t mode = v.mode;
uint8_t p = mode >> 1;
char s[] = "--";
if (mode != TRIM_MODE_NONE) {
if (mode % 2 == 0)
s[0] = ':';
else
s[0] = '+';
s[1] = '0'+p;
}
lcdDrawText(x, y, s, att);
}
void drawShortTrimMode(coord_t x, coord_t y, uint8_t fm, uint8_t idx, LcdFlags att) void drawShortTrimMode(coord_t x, coord_t y, uint8_t fm, uint8_t idx, LcdFlags att)
{ {
trim_t v = getRawTrimValue(fm, idx); trim_t v = getRawTrimValue(fm, idx);
@ -841,15 +826,6 @@ void drawShortTrimMode(coord_t x, coord_t y, uint8_t fm, uint8_t idx, LcdFlags a
} }
} }
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att)
{
// convertUnit(val, unit);
lcdDrawNumber(x, y, val, att & (~NO_UNIT));
if (!(att & NO_UNIT) && unit != UNIT_RAW) {
lcdDrawTextAtIndex(lcdLastRightPos/*+1*/, y, STR_VTELEMUNIT, unit, 0);
}
}
void drawGPSCoord(coord_t x, coord_t y, int32_t value, const char * direction, LcdFlags att, bool seconds=true) void drawGPSCoord(coord_t x, coord_t y, int32_t value, const char * direction, LcdFlags att, bool seconds=true)
{ {
att &= ~RIGHT & ~BOLD; att &= ~RIGHT & ~BOLD;

View file

@ -130,7 +130,6 @@ void drawSource(coord_t x, coord_t y, mixsrc_t idx, LcdFlags att=0);
void drawCurveName(coord_t x, coord_t y, int8_t idx, LcdFlags att=0); void drawCurveName(coord_t x, coord_t y, int8_t idx, LcdFlags att=0);
void drawTimerMode(coord_t x, coord_t y, swsrc_t mode, LcdFlags att=0); void drawTimerMode(coord_t x, coord_t y, swsrc_t mode, LcdFlags att=0);
void drawTrimMode(coord_t x, coord_t y, uint8_t phase, uint8_t idx, LcdFlags att);
void drawShortTrimMode(coord_t x, coord_t y, uint8_t mode, uint8_t idx, LcdFlags att); void drawShortTrimMode(coord_t x, coord_t y, uint8_t mode, uint8_t idx, LcdFlags att);
#define putsChn(x, y, idx, att) drawSource(x, y, MIXSRC_CH1+idx-1, att) #define putsChn(x, y, idx, att) drawSource(x, y, MIXSRC_CH1+idx-1, att)

View file

@ -33,7 +33,7 @@ void onModelCustomScriptMenu(const char *result)
ScriptData &sd = g_model.scriptsData[s_currIdx]; ScriptData &sd = g_model.scriptsData[s_currIdx];
if (result == STR_UPDATE_LIST) { if (result == STR_UPDATE_LIST) {
if (!sdListFiles(SCRIPTS_MIXES_PATH, SCRIPTS_EXT, sizeof(sd.file), NULL)) { if (!sdListFiles(SCRIPTS_MIXES_PATH, SCRIPTS_EXT, sizeof(sd.file), nullptr)) {
POPUP_WARNING(STR_NO_SCRIPTS_ON_SD); POPUP_WARNING(STR_NO_SCRIPTS_ON_SD);
} }
} }

View file

@ -31,7 +31,7 @@ const unsigned char sticks[] = {
#define SLIDER_5POS(y, value, label, event, attr) { \ #define SLIDER_5POS(y, value, label, event, attr) { \
int8_t tmp = value; \ int8_t tmp = value; \
drawSlider(RADIO_SETUP_2ND_COLUMN, y, LCD_W - 2 - RADIO_SETUP_2ND_COLUMN, 2+tmp, 4, attr); \ drawSlider(RADIO_SETUP_2ND_COLUMN, y, LCD_W - 2 - RADIO_SETUP_2ND_COLUMN, 2+tmp, 4, attr); \
value = editChoice(RADIO_SETUP_2ND_COLUMN, y, label, NULL, tmp, -2, +2, attr, event); \ value = editChoice(RADIO_SETUP_2ND_COLUMN, y, label, nullptr, tmp, -2, +2, attr, event); \
} }
#if defined(SPLASH) #if defined(SPLASH)

View file

@ -550,7 +550,7 @@ void menuMainView(event_t event)
lcdDrawText(lcdLastRightPos, 5*FH, "%", BOLD); lcdDrawText(lcdLastRightPos, 5*FH, "%", BOLD);
} }
lcdDrawText(lcdLastRightPos, 5*FH, "]", BOLD); lcdDrawText(lcdLastRightPos, 5*FH, "]", BOLD);
warningText = NULL; warningText = nullptr;
} }
#endif #endif

View file

@ -22,12 +22,6 @@ set(GUI_SRC
view_statistics.cpp view_statistics.cpp
) )
set(SRC
${SRC}
gui/common/widgets.cpp
gui/common/arm/widgets.cpp
)
if(FLIGHT_MODES) if(FLIGHT_MODES)
set(GUI_SRC set(GUI_SRC
${GUI_SRC} ${GUI_SRC}

View file

@ -718,33 +718,6 @@ void drawTimerMode(coord_t x, coord_t y, swsrc_t mode, LcdFlags att)
drawSwitch(x, y, mode, att); drawSwitch(x, y, mode, att);
} }
void drawTrimMode(coord_t x, coord_t y, uint8_t phase, uint8_t idx, LcdFlags att)
{
trim_t v = getRawTrimValue(phase, idx);
unsigned int mode = v.mode;
unsigned int p = mode >> 1;
if (mode == TRIM_MODE_NONE) {
lcdDrawText(x, y, "--", att);
}
else {
if (mode % 2 == 0)
lcdDrawChar(x, y, ':', att|FIXEDWIDTH);
else
lcdDrawChar(x, y, '+', att|FIXEDWIDTH);
lcdDrawChar(lcdNextPos, y, '0'+p, att);
}
}
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att)
{
// convertUnit(val, unit);
lcdDrawNumber(x, y, val, att & (~NO_UNIT));
if (!(att & NO_UNIT) && unit != UNIT_RAW) {
lcdDrawTextAtIndex(lcdLastRightPos/*+1*/, y, STR_VTELEMUNIT, unit, 0);
}
}
void drawGPSCoord(coord_t x, coord_t y, int32_t value, const char * direction, LcdFlags att, bool seconds=true) void drawGPSCoord(coord_t x, coord_t y, int32_t value, const char * direction, LcdFlags att, bool seconds=true)
{ {
uint32_t absvalue = abs(value); uint32_t absvalue = abs(value);

View file

@ -123,7 +123,6 @@ void putsStickName(coord_t x, coord_t y, uint8_t idx, LcdFlags att=0);
void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att=0); void drawSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att=0);
void drawCurveName(coord_t x, coord_t y, int8_t idx, LcdFlags att=0); void drawCurveName(coord_t x, coord_t y, int8_t idx, LcdFlags att=0);
void drawTimerMode(coord_t x, coord_t y, swsrc_t mode, LcdFlags att=0); void drawTimerMode(coord_t x, coord_t y, swsrc_t mode, LcdFlags att=0);
void drawTrimMode(coord_t x, coord_t y, uint8_t phase, uint8_t idx, LcdFlags att);
#define putsChn(x, y, idx, att) drawSource(x, y, MIXSRC_CH1+idx-1, att) #define putsChn(x, y, idx, att) drawSource(x, y, MIXSRC_CH1+idx-1, att)
void putsChnLetter(coord_t x, coord_t y, uint8_t idx, LcdFlags attr); void putsChnLetter(coord_t x, coord_t y, uint8_t idx, LcdFlags attr);

View file

@ -143,7 +143,7 @@ void copySelection(char * dst, const char * src, uint8_t size)
void onModelSetupBitmapMenu(const char * result) void onModelSetupBitmapMenu(const char * result)
{ {
if (result == STR_UPDATE_LIST) { if (result == STR_UPDATE_LIST) {
if (!sdListFiles(BITMAPS_PATH, BITMAPS_EXT, sizeof(g_model.header.bitmap), NULL)) { if (!sdListFiles(BITMAPS_PATH, BITMAPS_EXT, sizeof(g_model.header.bitmap), nullptr)) {
POPUP_WARNING(STR_NO_BITMAPS_ON_SD); POPUP_WARNING(STR_NO_BITMAPS_ON_SD);
} }
} }

View file

@ -52,7 +52,7 @@ void onCustomFunctionsFileSelectionMenu(const char * result)
strcpy(directory, SOUNDS_PATH); strcpy(directory, SOUNDS_PATH);
strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2);
} }
if (!sdListFiles(directory, func==FUNC_PLAY_SCRIPT ? SCRIPTS_EXT : SOUNDS_EXT, sizeof(cfn->play.name), NULL)) { if (!sdListFiles(directory, func==FUNC_PLAY_SCRIPT ? SCRIPTS_EXT : SOUNDS_EXT, sizeof(cfn->play.name), nullptr)) {
POPUP_WARNING(func==FUNC_PLAY_SCRIPT ? STR_NO_SCRIPTS_ON_SD : STR_NO_SOUNDS_ON_SD); POPUP_WARNING(func==FUNC_PLAY_SCRIPT ? STR_NO_SCRIPTS_ON_SD : STR_NO_SOUNDS_ON_SD);
} }
} }

View file

@ -33,7 +33,7 @@ const unsigned char sticks[] = {
#define SLIDER_5POS(y, value, label, event, attr) { \ #define SLIDER_5POS(y, value, label, event, attr) { \
int8_t tmp = value; \ int8_t tmp = value; \
drawSlider(RADIO_SETUP_2ND_COLUMN, y, 2+tmp, 4, attr); \ drawSlider(RADIO_SETUP_2ND_COLUMN, y, 2+tmp, 4, attr); \
value = editChoice(RADIO_SETUP_2ND_COLUMN, y, label, NULL, tmp, -2, +2, attr, event); \ value = editChoice(RADIO_SETUP_2ND_COLUMN, y, label, nullptr, tmp, -2, +2, attr, event); \
} }
#if defined(SPLASH) #if defined(SPLASH)

View file

@ -92,7 +92,7 @@ choice_t editChoice(coord_t x, coord_t y, const char * label, const char *values
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, const char *label, LcdFlags attr, event_t event ) uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, const char *label, LcdFlags attr, event_t event )
{ {
drawCheckBox(x, y, value, attr); drawCheckBox(x, y, value, attr);
return editChoice(x, y, label, NULL, value, 0, 1, attr, event); return editChoice(x, y, label, nullptr, value, 0, 1, attr, event);
} }
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event) swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event)

View file

@ -26,12 +26,6 @@ set(GUI_SRC
view_statistics.cpp view_statistics.cpp
) )
set(SRC
${SRC}
gui/common/widgets.cpp
gui/common/arm/widgets.cpp
)
if(FLIGHT_MODES) if(FLIGHT_MODES)
set(GUI_SRC set(GUI_SRC
${GUI_SRC} ${GUI_SRC}

View file

@ -18,11 +18,11 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#ifndef _WIDGETS_H_ #ifndef _DRAW_FUNCTIONS_H_
#define _WIDGETS_H_ #define _DRAW_FUNCTIONS_H_
#include "opentx.h" #include "opentx.h"
#include <stdio.h> #include "common/colorlcd/draw_functions.h"
#define OPTION_MENU_NO_FOOTER 0x01 #define OPTION_MENU_NO_FOOTER 0x01
#define OPTION_MENU_TITLE_BAR 0x02 #define OPTION_MENU_TITLE_BAR 0x02
@ -78,4 +78,4 @@ void drawTrims(uint8_t flightMode);
void drawReceiverName(coord_t x, coord_t y, uint8_t moduleIdx, uint8_t receiverIdx, LcdFlags flags); void drawReceiverName(coord_t x, coord_t y, uint8_t moduleIdx, uint8_t receiverIdx, LcdFlags flags);
#endif // _WIDGETS_H_ #endif // _DRAW_FUNCTIONS_H_

View file

@ -24,7 +24,7 @@
#include "gui_common.h" #include "gui_common.h"
#include "lcd.h" #include "lcd.h"
#include "menus.h" #include "menus.h"
#include "widgets.h" #include "draw_functions.h"
#include "bitmaps.h" #include "bitmaps.h"
#include "theme.h" #include "theme.h"

View file

@ -18,6 +18,7 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include <stdio.h>
#include "opentx.h" #include "opentx.h"
unsigned int Topbar::getZonesCount() const unsigned int Topbar::getZonesCount() const

View file

@ -1,6 +1,6 @@
set(GUI_SRC set(GUI_SRC
${GUI_SRC} ${GUI_SRC}
../common/colorlcd/widgets.cpp ../common/colorlcd/draw_functions.cpp
) )
if(HELI) if(HELI)

View file

@ -20,6 +20,155 @@
#include "opentx.h" #include "opentx.h"
void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFlags flags, const char * prefix, const char * suffix)
{
char s[64];
char * tmp = (prefix ? strAppend(s, prefix) : s);
tmp = strAppend(tmp, str);
tmp = strAppendUnsigned(tmp, abs(idx));
if (suffix)
strAppend(tmp, suffix);
lcdDrawText(x, y, s, flags);
}
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att)
{
// convertUnit(val, unit);
if (!(att & NO_UNIT) && unit != UNIT_RAW) {
char unitStr[8];
strAppend(unitStr, STR_VTELEMUNIT+1+unit*STR_VTELEMUNIT[0], STR_VTELEMUNIT[0]);
lcdDrawNumber(x, y, val, att, 0, NULL, unitStr);
}
else {
lcdDrawNumber(x, y, val, att);
}
}
int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event)
{
if (attr & INVERS) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL);
if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr);
return value;
}
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, LcdFlags attr, event_t event )
{
value = editChoice(x, y, NULL, value, 0, 1, attr, event);
drawCheckBox(x, y, value, attr);
return value;
}
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event)
{
if (attr & INVERS) CHECK_INCDEC_MODELSWITCH(event, value, SWSRC_FIRST_IN_MIXES, SWSRC_LAST_IN_MIXES, isSwitchAvailableInMixes);
drawSwitch(x, y, value, attr);
return value;
}
void drawFatalErrorScreen(const char * message)
{
lcdClear();
lcdDrawText(LCD_W/2, LCD_H/2-20, message, DBLSIZE|CENTERED|TEXT_BGCOLOR);
lcdRefresh();
}
void runFatalErrorScreen(const char * message)
{
while (1) {
drawFatalErrorScreen(message);
backlightEnable(100);
uint8_t refresh = false;
while (1) {
uint32_t pwr_check = pwrCheck();
if (pwr_check == e_power_off) {
boardOff();
return; // only happens in SIMU, required for proper shutdown
}
else if (pwr_check == e_power_press) {
refresh = true;
}
else if (pwr_check == e_power_on && refresh) {
break;
}
}
}
}
void drawPower(coord_t x, coord_t y, int8_t dBm, LcdFlags att)
{
float power_W_PREC1 = pow(10.0, (dBm - 30.0) / 10.0) * 10;
if (dBm >= 30) {
lcdDrawNumber(x, y, power_W_PREC1, PREC1 | att);
lcdDrawText(lcdNextPos, y, "W", att);
}
else if (dBm < 10) {
uint16_t power_MW_PREC1 = round(power_W_PREC1 * 1000);
lcdDrawNumber(x, y, power_MW_PREC1, PREC1 | att);
lcdDrawText(lcdNextPos, y, "mW", att);
}
else {
uint16_t power_MW = round(power_W_PREC1 * 100);
if (power_MW >= 50) {
power_MW = (power_MW / 5) * 5;
lcdDrawNumber(x, y, power_MW, att);
lcdDrawText(lcdNextPos, y, "mW", att);
}
else {
lcdDrawNumber(x, y, power_MW, att);
lcdDrawText(lcdNextPos, y, "mW", att);
}
}
}
void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags)
{
lcdDrawTextAtIndex(x, y, STR_MMMINV, 0, flags);
}
#if defined(FLIGHT_MODES)
void drawFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att)
{
if (idx==0) {
lcdDrawMMM(x, y, att);
return;
}
// TODO this code was not included in Taranis! and used with abs(...) on Horus
if (idx < 0) {
lcdDrawChar(x-2, y, '!', att);
idx = -idx;
}
#if defined(CONDENSED)
if (att & CONDENSED) {
lcdDrawNumber(x+FW*1, y, idx-1, (att & ~CONDENSED), 1);
return;
}
#endif
drawStringWithIndex(x, y, STR_FM, idx-1, att);
}
#endif
/*
* 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.
*/
#include "opentx.h"
void drawCurveRef(coord_t x, coord_t y, CurveRef & curve, LcdFlags att) void drawCurveRef(coord_t x, coord_t y, CurveRef & curve, LcdFlags att)
{ {
if (curve.value != 0) { if (curve.value != 0) {

View file

@ -0,0 +1,40 @@
/*
* 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.
*/
#ifndef __COLORLCD_DRAW_FUNCTIONS__
#define __COLORLCD_DRAW_FUNCTIONS__
#include "lcd.h"
void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFlags flags, const char * prefix, const char * suffix);
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att);
int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event);
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, LcdFlags attr, event_t event);
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event);
void drawFatalErrorScreen(const char * message);
void runFatalErrorScreen(const char * message);
void drawPower(coord_t x, coord_t y, int8_t dBm, LcdFlags att);
void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags);
#if defined(FLIGHT_MODES)
void drawFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att);
#endif
#endif // __COLORLCD_DRAW_FUNCTIONS__

View file

@ -1,121 +0,0 @@
/*
* 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.
*/
#include "opentx.h"
void drawStringWithIndex(coord_t x, coord_t y, const char * str, int idx, LcdFlags flags, const char * prefix, const char * suffix)
{
char s[64];
char * tmp = (prefix ? strAppend(s, prefix) : s);
tmp = strAppend(tmp, str);
tmp = strAppendUnsigned(tmp, abs(idx));
if (suffix)
strAppend(tmp, suffix);
lcdDrawText(x, y, s, flags);
}
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att)
{
// convertUnit(val, unit);
if (!(att & NO_UNIT) && unit != UNIT_RAW) {
char unitStr[8];
strAppend(unitStr, STR_VTELEMUNIT+1+unit*STR_VTELEMUNIT[0], STR_VTELEMUNIT[0]);
lcdDrawNumber(x, y, val, att, 0, NULL, unitStr);
}
else {
lcdDrawNumber(x, y, val, att);
}
}
int editChoice(coord_t x, coord_t y, const char * values, int value, int min, int max, LcdFlags attr, event_t event)
{
if (attr & INVERS) value = checkIncDec(event, value, min, max, (isModelMenuDisplayed()) ? EE_MODEL : EE_GENERAL);
if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr);
return value;
}
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, LcdFlags attr, event_t event )
{
value = editChoice(x, y, NULL, value, 0, 1, attr, event);
drawCheckBox(x, y, value, attr);
return value;
}
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event)
{
if (attr & INVERS) CHECK_INCDEC_MODELSWITCH(event, value, SWSRC_FIRST_IN_MIXES, SWSRC_LAST_IN_MIXES, isSwitchAvailableInMixes);
drawSwitch(x, y, value, attr);
return value;
}
void drawFatalErrorScreen(const char * message)
{
lcdClear();
lcdDrawText(LCD_W/2, LCD_H/2-20, message, DBLSIZE|CENTERED|TEXT_BGCOLOR);
lcdRefresh();
}
void runFatalErrorScreen(const char * message)
{
while (1) {
drawFatalErrorScreen(message);
backlightEnable(100);
uint8_t refresh = false;
while (1) {
uint32_t pwr_check = pwrCheck();
if (pwr_check == e_power_off) {
boardOff();
return; // only happens in SIMU, required for proper shutdown
}
else if (pwr_check == e_power_press) {
refresh = true;
}
else if (pwr_check == e_power_on && refresh) {
break;
}
}
}
}
void drawPower(coord_t x, coord_t y, int8_t dBm, LcdFlags att)
{
float power_W_PREC1 = pow(10.0, (dBm - 30.0) / 10.0) * 10;
if (dBm >= 30) {
lcdDrawNumber(x, y, power_W_PREC1, PREC1 | att);
lcdDrawText(lcdNextPos, y, "W", att);
}
else if (dBm < 10) {
uint16_t power_MW_PREC1 = round(power_W_PREC1 * 1000);
lcdDrawNumber(x, y, power_MW_PREC1, PREC1 | att);
lcdDrawText(lcdNextPos, y, "mW", att);
}
else {
uint16_t power_MW = round(power_W_PREC1 * 100);
if (power_MW >= 50) {
power_MW = (power_MW / 5) * 5;
lcdDrawNumber(x, y, power_MW, att);
lcdDrawText(lcdNextPos, y, "mW", att);
}
else {
lcdDrawNumber(x, y, power_MW, att);
lcdDrawText(lcdNextPos, y, "mW", att);
}
}
}

View file

@ -3,7 +3,7 @@ add_definitions(-DGRAPHICS)
set(GUI_SRC set(GUI_SRC
${GUI_SRC} ${GUI_SRC}
../common/stdlcd/menus.cpp ../common/stdlcd/menus.cpp
../common/stdlcd/widgets.cpp ../common/stdlcd/draw_functions.cpp
../common/stdlcd/popups.cpp ../common/stdlcd/popups.cpp
../common/stdlcd/model_inputs.cpp ../common/stdlcd/model_inputs.cpp
../common/stdlcd/model_mixes.cpp ../common/stdlcd/model_mixes.cpp

View file

@ -33,6 +33,33 @@ void drawStringWithIndex(coord_t x, coord_t y, const char * str, uint8_t idx, Lc
} }
} }
void drawTrimMode(coord_t x, coord_t y, uint8_t flightMode, uint8_t idx, LcdFlags att)
{
trim_t v = getRawTrimValue(flightMode, idx);
unsigned int mode = v.mode;
unsigned int p = mode >> 1;
if (mode == TRIM_MODE_NONE) {
lcdDrawText(x, y, "--", att);
}
else {
if (mode % 2 == 0)
lcdDrawChar(x, y, ':', att|FIXEDWIDTH);
else
lcdDrawChar(x, y, '+', att|FIXEDWIDTH);
lcdDrawChar(lcdNextPos, y, '0'+p, att);
}
}
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att)
{
// convertUnit(val, unit);
lcdDrawNumber(x, y, val, att & (~NO_UNIT));
if (!(att & NO_UNIT) && unit != UNIT_RAW) {
lcdDrawTextAtIndex(lcdLastRightPos/*+1*/, y, STR_VTELEMUNIT, unit, 0);
}
}
FlightModesType editFlightModes(coord_t x, coord_t y, event_t event, FlightModesType value, uint8_t attr) FlightModesType editFlightModes(coord_t x, coord_t y, event_t event, FlightModesType value, uint8_t attr)
{ {
int posHorz = menuHorizontalPosition; int posHorz = menuHorizontalPosition;
@ -233,3 +260,179 @@ void drawReceiverName(coord_t x, coord_t y, uint8_t moduleIdx, uint8_t receiverI
lcdDrawText(x, y, "External", flags); lcdDrawText(x, y, "External", flags);
} }
} }
void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags)
{
lcdDrawTextAtIndex(x, y, STR_MMMINV, 0, flags);
}
#if defined(FLIGHT_MODES)
void drawFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att)
{
if (idx==0) {
lcdDrawMMM(x, y, att);
return;
}
// TODO this code was not included in Taranis! and used with abs(...) on Horus
if (idx < 0) {
lcdDrawChar(x-2, y, '!', att);
idx = -idx;
}
#if defined(CONDENSED)
if (att & CONDENSED) {
lcdDrawNumber(x+FW*1, y, idx-1, (att & ~CONDENSED), 1);
return;
}
#endif
drawStringWithIndex(x, y, STR_FM, idx-1, att);
}
#endif
void drawCurveRef(coord_t x, coord_t y, CurveRef & curve, LcdFlags att)
{
if (curve.value != 0) {
switch (curve.type) {
case CURVE_REF_DIFF:
lcdDrawText(x, y, "D", att);
GVAR_MENU_ITEM(lcdNextPos, y, curve.value, -100, 100, LEFT|att, 0, 0);
break;
case CURVE_REF_EXPO:
lcdDrawText(x, y, "E", att);
GVAR_MENU_ITEM(lcdNextPos, y, curve.value, -100, 100, LEFT|att, 0, 0);
break;
case CURVE_REF_FUNC:
lcdDrawTextAtIndex(x, y, STR_VCURVEFUNC, curve.value, att);
break;
case CURVE_REF_CUSTOM:
drawCurveName(x, y, curve.value, att);
break;
}
}
}
void drawSensorCustomValue(coord_t x, coord_t y, uint8_t sensor, int32_t value, LcdFlags flags)
{
if (sensor >= MAX_TELEMETRY_SENSORS) {
// Lua luaLcdDrawChannel() can call us with a bad value
return;
}
TelemetryItem & telemetryItem = telemetryItems[sensor];
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[sensor];
if (telemetrySensor.unit == UNIT_DATETIME) {
drawDate(x, y, telemetryItem, flags);
}
else if (telemetrySensor.unit == UNIT_GPS) {
drawGPSSensorValue(x, y, telemetryItem, flags);
}
else if (telemetrySensor.unit == UNIT_BITFIELD) {
if (IS_FRSKY_SPORT_PROTOCOL()) {
if (telemetrySensor.id >= RBOX_STATE_FIRST_ID && telemetrySensor.id <= RBOX_STATE_LAST_ID) {
if (telemetrySensor.subId == 0) {
if (value == 0) {
lcdDrawText(x, y, "OK", flags);
}
else {
for (uint8_t i=0; i<16; i++) {
if (value & (1 << i)) {
char s[] = "CH__ KO";
strAppendUnsigned(&s[2], i+1, 2);
lcdDrawText(x, flags & DBLSIZE ? y+1 : y, s, flags & ~DBLSIZE);
break;
}
}
}
}
else {
if (value == 0) {
lcdDrawText(x, flags & DBLSIZE ? y+1 : y, "Rx OK", flags & ~DBLSIZE);
}
else {
static const char * const RXS_STATUS[] = {
"Rx1 Ovl",
"Rx2 Ovl",
"SBUS Ovl",
"Rx1 FS",
"Rx1 LF",
"Rx2 FS",
"Rx2 LF",
"Rx1 Lost",
"Rx2 Lost",
"Rx1 NS",
"Rx2 NS",
};
for (uint8_t i=0; i<DIM(RXS_STATUS); i++) {
if (value & (1<<i)) {
lcdDrawText(x, flags & DBLSIZE ? y+1 : y, RXS_STATUS[i], flags & ~DBLSIZE);
break;
}
}
}
}
}
}
}
else if (telemetrySensor.unit == UNIT_TEXT) {
lcdDrawSizedText(x, flags & DBLSIZE ? y+1 : y, telemetryItem.text, sizeof(telemetryItem.text), flags & ~DBLSIZE);
}
else {
if (telemetrySensor.prec > 0) {
flags |= (telemetrySensor.prec==1 ? PREC1 : PREC2);
}
drawValueWithUnit(x, y, value, telemetrySensor.unit == UNIT_CELLS ? UNIT_VOLTS : telemetrySensor.unit, flags);
}
}
void drawSourceCustomValue(coord_t x, coord_t y, source_t source, int32_t value, LcdFlags flags)
{
if (source >= MIXSRC_FIRST_TELEM) {
source = (source-MIXSRC_FIRST_TELEM) / 3;
drawSensorCustomValue(x, y, source, value, flags);
}
else if (source >= MIXSRC_FIRST_TIMER || source == MIXSRC_TX_TIME) {
if (value < 0) flags |= BLINK|INVERS;
drawTimer(x, y, value, flags);
}
else if (source == MIXSRC_TX_VOLTAGE) {
lcdDrawNumber(x, y, value, flags|PREC1);
}
#if defined(INTERNAL_GPS)
else if (source == MIXSRC_TX_GPS) {
if (gpsData.fix) {
drawGPSPosition(x, y, gpsData.longitude, gpsData.latitude, flags);
}
else {
lcdDrawText(x, y, "sats: ", flags);
lcdDrawNumber(lcdNextPos, y, gpsData.numSat, flags);
}
}
#endif
#if defined(GVARS)
else if (source >= MIXSRC_FIRST_GVAR && source <= MIXSRC_LAST_GVAR) {
drawGVarValue(x, y, source - MIXSRC_FIRST_GVAR, value, flags);
}
#endif
else if (source < MIXSRC_FIRST_CH) {
lcdDrawNumber(x, y, calcRESXto100(value), flags);
}
else if (source <= MIXSRC_LAST_CH) {
#if defined(PPM_UNIT_PERCENT_PREC1)
lcdDrawNumber(x, y, calcRESXto1000(value), flags|PREC1);
#else
lcdDrawNumber(x, y, calcRESXto100(value), flags);
#endif
}
else {
lcdDrawNumber(x, y, value, flags);
}
}
void drawSourceValue(coord_t x, coord_t y, source_t source, LcdFlags flags)
{
getvalue_t value = getValue(source);
drawSourceCustomValue(x, y, source, value, flags);
}

View file

@ -18,12 +18,13 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#ifndef _COMMON_DRAW_FUNCTIONS_H_ #ifndef _STDLCD_DRAW_FUNCTIONS_H_
#define _COMMON_DRAW_FUNCTIONS_H_ #define _STDLCD_DRAW_FUNCTIONS_H_
#include "lcd.h" #include "lcd.h"
void drawStringWithIndex(coord_t x, coord_t y, const char * str, uint8_t idx, LcdFlags att=0); void drawStringWithIndex(coord_t x, coord_t y, const char * str, uint8_t idx, LcdFlags att=0);
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags att=0);
void drawPower(coord_t x, coord_t y, int8_t dBm, LcdFlags att = 0); void drawPower(coord_t x, coord_t y, int8_t dBm, LcdFlags att = 0);
void drawGVarName(coord_t x, coord_t y, int8_t index, LcdFlags flags=0); void drawGVarName(coord_t x, coord_t y, int8_t index, LcdFlags flags=0);
@ -40,4 +41,7 @@ void drawStartupAnimation(uint32_t duration, uint32_t totalDuration);
void drawShutdownAnimation(uint32_t duration, uint32_t totalDuration, const char * message); void drawShutdownAnimation(uint32_t duration, uint32_t totalDuration, const char * message);
void drawSleepBitmap(); void drawSleepBitmap();
#endif // _COMMON_DRAW_FUNCTIONS_H_ void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0);
void drawTrimMode(coord_t x, coord_t y, uint8_t flightMode, uint8_t idx, LcdFlags att=0);
#endif // _STDLCD_DRAW_FUNCTIONS_H_

View file

@ -1,48 +0,0 @@
/*
* 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.
*/
#include "opentx.h"
void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags)
{
lcdDrawTextAtIndex(x, y, STR_MMMINV, 0, flags);
}
#if defined(FLIGHT_MODES)
void drawFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att)
{
if (idx==0) {
lcdDrawMMM(x, y, att);
return;
}
// TODO this code was not included in Taranis! and used with abs(...) on Horus
if (idx < 0) {
lcdDrawChar(x-2, y, '!', att);
idx = -idx;
}
#if defined(CONDENSED)
if (att & CONDENSED) {
lcdDrawNumber(x+FW*1, y, idx-1, (att & ~CONDENSED), 1);
return;
}
#endif
drawStringWithIndex(x, y, STR_FM, idx-1, att);
}
#endif

View file

@ -72,7 +72,6 @@ bool isRssiSensorAvailable(int sensor)
} }
} }
bool isSensorAvailable(int sensor) bool isSensorAvailable(int sensor)
{ {
if (sensor == 0) if (sensor == 0)

View file

@ -95,7 +95,6 @@ void drawFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att=0);
swsrc_t checkIncDecMovedSwitch(swsrc_t val); swsrc_t checkIncDecMovedSwitch(swsrc_t val);
void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags flags);
void drawCurveRef(coord_t x, coord_t y, CurveRef & curve, LcdFlags flags=0); void drawCurveRef(coord_t x, coord_t y, CurveRef & curve, LcdFlags flags=0);
void drawDate(coord_t x, coord_t y, TelemetryItem & telemetryItem, LcdFlags flags=0); void drawDate(coord_t x, coord_t y, TelemetryItem & telemetryItem, LcdFlags flags=0);
void drawTelemScreenDate(coord_t x, coord_t y, source_t sensor, LcdFlags flags=0); void drawTelemScreenDate(coord_t x, coord_t y, source_t sensor, LcdFlags flags=0);
@ -116,8 +115,6 @@ void drawFatalErrorScreen(const char * message);
void runFatalErrorScreen(const char * message); void runFatalErrorScreen(const char * message);
#endif #endif
void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0);
// model_setup Defines that are used in all uis in the same way // model_setup Defines that are used in all uis in the same way
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON((uint8_t)1) #define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON((uint8_t)1)
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((isModuleDSM2(EXTERNAL_MODULE) || isModuleCrossfire(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) || (isModuleMultimodule(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) != MODULE_SUBTYPE_MULTI_DSM2)) ? (uint8_t)0 : (uint8_t)1) #define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((isModuleDSM2(EXTERNAL_MODULE) || isModuleCrossfire(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) || (isModuleMultimodule(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) != MODULE_SUBTYPE_MULTI_DSM2)) ? (uint8_t)0 : (uint8_t)1)

View file

@ -432,6 +432,11 @@ When called without parameters, it will only return the status of the output buf
static int luaSportTelemetryPush(lua_State * L) static int luaSportTelemetryPush(lua_State * L)
{ {
if (telemetryProtocol != PROTOCOL_TELEMETRY_FRSKY_SPORT) {
lua_pushboolean(L, false);
return 1;
}
if (lua_gettop(L) == 0) { if (lua_gettop(L) == 0) {
lua_pushboolean(L, outputTelemetryBuffer.isAvailable()); lua_pushboolean(L, outputTelemetryBuffer.isAvailable());
return 1; return 1;
@ -629,6 +634,11 @@ When called without parameters, it will only return the status of the output buf
*/ */
static int luaCrossfireTelemetryPush(lua_State * L) static int luaCrossfireTelemetryPush(lua_State * L)
{ {
if (telemetryProtocol != PROTOCOL_TELEMETRY_CROSSFIRE) {
lua_pushboolean(L, false);
return 1;
}
if (lua_gettop(L) == 0) { if (lua_gettop(L) == 0) {
lua_pushboolean(L, outputTelemetryBuffer.isAvailable()); lua_pushboolean(L, outputTelemetryBuffer.isAvailable());
} }
@ -1275,7 +1285,7 @@ static int luaSetTelemetryValue(lua_State * L)
zname[3] = hex2zchar((id & 0x000f) >> 0); zname[3] = hex2zchar((id & 0x000f) >> 0);
} }
if (id | subId | instance) { if (id | subId | instance) {
int index = setTelemetryValue(TELEM_PROTO_LUA, id, subId, instance, value, unit, prec); int index = setTelemetryValue(PROTOCOL_TELEMETRY_LUA, id, subId, instance, value, unit, prec);
if (index >= 0) { if (index >= 0) {
TelemetrySensor &telemetrySensor = g_model.telemetrySensors[index]; TelemetrySensor &telemetrySensor = g_model.telemetrySensors[index];
telemetrySensor.id = id; telemetrySensor.id = id;
@ -1599,6 +1609,7 @@ const luaR_value_entry opentxConstants[] = {
{ "SHADOWED", SHADOWED }, { "SHADOWED", SHADOWED },
{ "COLOR", ZoneOption::Color }, { "COLOR", ZoneOption::Color },
{ "BOOL", ZoneOption::Bool }, { "BOOL", ZoneOption::Bool },
{ "STRING", ZoneOption::String },
{ "CUSTOM_COLOR", CUSTOM_COLOR }, { "CUSTOM_COLOR", CUSTOM_COLOR },
{ "TEXT_COLOR", TEXT_COLOR }, { "TEXT_COLOR", TEXT_COLOR },
{ "TEXT_BGCOLOR", TEXT_BGCOLOR }, { "TEXT_BGCOLOR", TEXT_BGCOLOR },

View file

@ -36,7 +36,7 @@ extern "C" {
#define MANUAL_SCRIPTS_MAX_INSTRUCTIONS (20000/100) #define MANUAL_SCRIPTS_MAX_INSTRUCTIONS (20000/100)
#define LUA_WARNING_INFO_LEN 64 #define LUA_WARNING_INFO_LEN 64
lua_State *lsScripts = NULL; lua_State *lsScripts = nullptr;
uint8_t luaState = 0; uint8_t luaState = 0;
uint8_t luaScriptsCount = 0; uint8_t luaScriptsCount = 0;
ScriptInternalData scriptInternalData[MAX_SCRIPTS]; ScriptInternalData scriptInternalData[MAX_SCRIPTS];
@ -256,7 +256,7 @@ void luaClose(lua_State ** L)
if (*L == lsScripts) luaDisable(); if (*L == lsScripts) luaDisable();
} }
UNPROTECT_LUA(); UNPROTECT_LUA();
*L = NULL; *L = nullptr;
} }
} }
@ -362,7 +362,7 @@ static void luaDumpState(lua_State * L, const char * filename, const FILINFO * f
luaU_dump(L, getproto(L->top - 1), luaDumpWriter, &D, stripDebug); luaU_dump(L, getproto(L->top - 1), luaDumpWriter, &D, stripDebug);
lua_unlock(L); lua_unlock(L);
if (f_close(&D) == FR_OK) { if (f_close(&D) == FR_OK) {
if (finfo != NULL) if (finfo != nullptr)
f_utime(filename, finfo); // set the file mod time f_utime(filename, finfo); // set the file mod time
TRACE("luaDumpState(%s): Saved bytecode to file.", filename); TRACE("luaDumpState(%s): Saved bytecode to file.", filename);
} }
@ -404,7 +404,7 @@ int luaLoadScriptFileToState(lua_State * L, const char * filename, const char *
{ {
if (luaState == INTERPRETER_PANIC) { if (luaState == INTERPRETER_PANIC) {
return SCRIPT_PANIC; return SCRIPT_PANIC;
} else if (filename == NULL) { } else if (filename == nullptr) {
return SCRIPT_NOFILE; return SCRIPT_NOFILE;
} }
@ -412,7 +412,7 @@ int luaLoadScriptFileToState(lua_State * L, const char * filename, const char *
char lmode[6] = "bt"; char lmode[6] = "bt";
uint8_t ret = SCRIPT_NOFILE; uint8_t ret = SCRIPT_NOFILE;
if (mode != NULL) { if (mode != nullptr) {
strncpy(lmode, mode, sizeof(lmode)-1); strncpy(lmode, mode, sizeof(lmode)-1);
lmode[sizeof(lmode)-1] = '\0'; lmode[sizeof(lmode)-1] = '\0';
} }
@ -432,7 +432,7 @@ int luaLoadScriptFileToState(lua_State * L, const char * filename, const char *
fnamelen = strlen(filename); fnamelen = strlen(filename);
// check if file extension is already in the file name and strip it // check if file extension is already in the file name and strip it
getFileExtension(filename, fnamelen, 0, NULL, &extlen); getFileExtension(filename, fnamelen, 0, nullptr, &extlen);
fnamelen -= extlen; fnamelen -= extlen;
if (fnamelen > sizeof(filenameFull) - sizeof(SCRIPT_BIN_EXT)) { if (fnamelen > sizeof(filenameFull) - sizeof(SCRIPT_BIN_EXT)) {
TRACE_ERROR("luaLoadScriptFileToState(%s, %s): Error loading script: filename buffer overflow.\n", filename, lmode); TRACE_ERROR("luaLoadScriptFileToState(%s, %s): Error loading script: filename buffer overflow.\n", filename, lmode);
@ -507,7 +507,7 @@ int luaLoadScriptFileToState(lua_State * L, const char * filename, const char *
TRACE("luaLoadScriptFileToState(%s, %s): loading %s", filename, lmode, filenameFull); TRACE("luaLoadScriptFileToState(%s, %s): loading %s", filename, lmode, filenameFull);
// we don't pass <mode> on to loadfilex() because we want lua to load whatever file we specify, regardless of content // we don't pass <mode> on to loadfilex() because we want lua to load whatever file we specify, regardless of content
lstatus = luaL_loadfilex(L, filenameFull, NULL); lstatus = luaL_loadfilex(L, filenameFull, nullptr);
#if defined(LUA_COMPILER) #if defined(LUA_COMPILER)
// Check for bytecode encoding problem, eg. compiled for x64. Unfortunately Lua doesn't provide a unique error code for this. See Lua/src/lundump.c. // Check for bytecode encoding problem, eg. compiled for x64. Unfortunately Lua doesn't provide a unique error code for this. See Lua/src/lundump.c.
if (lstatus == LUA_ERRSYNTAX && loadFileType == 2 && frLuaS == FR_OK && strstr(lua_tostring(L, -1), "precompiled")) { if (lstatus == LUA_ERRSYNTAX && loadFileType == 2 && frLuaS == FR_OK && strstr(lua_tostring(L, -1), "precompiled")) {
@ -515,7 +515,7 @@ int luaLoadScriptFileToState(lua_State * L, const char * filename, const char *
scriptNeedsCompile = true; scriptNeedsCompile = true;
strcpy(filenameFull + fnamelen, SCRIPT_EXT); strcpy(filenameFull + fnamelen, SCRIPT_EXT);
TRACE_ERROR("luaLoadScriptFileToState(%s, %s): Error loading script: %s\n\tRetrying with %s\n", filename, lmode, lua_tostring(L, -1), filenameFull); TRACE_ERROR("luaLoadScriptFileToState(%s, %s): Error loading script: %s\n\tRetrying with %s\n", filename, lmode, lua_tostring(L, -1), filenameFull);
lstatus = luaL_loadfilex(L, filenameFull, NULL); lstatus = luaL_loadfilex(L, filenameFull, nullptr);
} }
if (lstatus == LUA_OK) { if (lstatus == LUA_OK) {
if (scriptNeedsCompile && loadFileType == 1) { if (scriptNeedsCompile && loadFileType == 1) {
@ -545,7 +545,7 @@ int luaLoadScriptFileToState(lua_State * L, const char * filename, const char *
return ret; return ret;
} }
static int luaLoad(lua_State * L, const char * filename, ScriptInternalData & sid, ScriptInputsOutputs * sio=NULL) static int luaLoad(lua_State * L, const char * filename, ScriptInternalData & sid, ScriptInputsOutputs * sio=nullptr)
{ {
int init = 0; int init = 0;
int lstatus = 0; int lstatus = 0;
@ -910,7 +910,7 @@ bool luaDoOneRunPermanentScript(event_t evt, int i, uint32_t scriptType)
#if defined(SIMU) || defined(DEBUG) #if defined(SIMU) || defined(DEBUG)
const char *filename; const char *filename;
#endif #endif
ScriptInputsOutputs * sio = NULL; ScriptInputsOutputs * sio = nullptr;
#if SCRIPT_MIX_FIRST > 0 #if SCRIPT_MIX_FIRST > 0
if ((scriptType & RUN_MIX_SCRIPT) && (sid.reference >= SCRIPT_MIX_FIRST && sid.reference <= SCRIPT_MIX_LAST)) { if ((scriptType & RUN_MIX_SCRIPT) && (sid.reference >= SCRIPT_MIX_FIRST && sid.reference <= SCRIPT_MIX_LAST)) {
#else #else
@ -1082,13 +1082,13 @@ void luaInit()
if (luaState != INTERPRETER_PANIC) { if (luaState != INTERPRETER_PANIC) {
#if defined(USE_BIN_ALLOCATOR) #if defined(USE_BIN_ALLOCATOR)
lsScripts = lua_newstate(bin_l_alloc, NULL); //we use our own allocator! lsScripts = lua_newstate(bin_l_alloc, nullptr); //we use our own allocator!
#elif defined(LUA_ALLOCATOR_TRACER) #elif defined(LUA_ALLOCATOR_TRACER)
memset(&lsScriptsTrace, 0 , sizeof(lsScriptsTrace)); memset(&lsScriptsTrace, 0 , sizeof(lsScriptsTrace));
lsScriptsTrace.script = "lua_newstate(scripts)"; lsScriptsTrace.script = "lua_newstate(scripts)";
lsScripts = lua_newstate(tracer_alloc, &lsScriptsTrace); //we use tracer allocator lsScripts = lua_newstate(tracer_alloc, &lsScriptsTrace); //we use tracer allocator
#else #else
lsScripts = lua_newstate(l_alloc, NULL); //we use Lua default allocator lsScripts = lua_newstate(l_alloc, nullptr); //we use Lua default allocator
#endif #endif
if (lsScripts) { if (lsScripts) {
// install our panic handler // install our panic handler

View file

@ -261,19 +261,6 @@ enum ThrottleSources {
THROTTLE_SOURCE_CH1, THROTTLE_SOURCE_CH1,
}; };
enum TelemetryProtocols
{
PROTOCOL_TELEMETRY_FIRST,
PROTOCOL_TELEMETRY_FRSKY_SPORT = PROTOCOL_TELEMETRY_FIRST,
PROTOCOL_TELEMETRY_FRSKY_D,
PROTOCOL_TELEMETRY_FRSKY_D_SECONDARY,
PROTOCOL_TELEMETRY_CROSSFIRE,
PROTOCOL_TELEMETRY_SPEKTRUM,
PROTOCOL_TELEMETRY_FLYSKY_IBUS,
PROTOCOL_TELEMETRY_MULTIMODULE,
PROTOCOL_TELEMETRY_LAST=PROTOCOL_TELEMETRY_MULTIMODULE
};
enum DisplayTrims enum DisplayTrims
{ {
DISPLAY_TRIMS_NEVER, DISPLAY_TRIMS_NEVER,

View file

@ -2048,7 +2048,7 @@ uint32_t pwrPressedDuration()
uint32_t pwrCheck() uint32_t pwrCheck()
{ {
const char * message = NULL; const char * message = nullptr;
enum PwrCheckState { enum PwrCheckState {
PWR_CHECK_ON, PWR_CHECK_ON,

View file

@ -1210,7 +1210,7 @@ extern union ReusableBuffer reusableBuffer;
uint8_t zlen(const char *str, uint8_t size); uint8_t zlen(const char *str, uint8_t size);
bool zexist(const char *str, uint8_t size); bool zexist(const char *str, uint8_t size);
unsigned int effectiveLen(const char * str, unsigned int size); unsigned int effectiveLen(const char * str, unsigned int size);
char * strcat_zchar(char *dest, const char *name, uint8_t size, const char *defaultName=NULL, uint8_t defaultNameSize=0, uint8_t defaultIdx=0); char * strcat_zchar(char *dest, const char *name, uint8_t size, const char *defaultName=nullptr, uint8_t defaultNameSize=0, uint8_t defaultIdx=0);
#define strcatFlightmodeName(dest, idx) strcat_zchar(dest, g_model.flightModeData[idx].name, LEN_FLIGHT_MODE_NAME, STR_FM, PSIZE(TR_FM), idx+1) #define strcatFlightmodeName(dest, idx) strcat_zchar(dest, g_model.flightModeData[idx].name, LEN_FLIGHT_MODE_NAME, STR_FM, PSIZE(TR_FM), idx+1)
#if defined(EEPROM) #if defined(EEPROM)
#define strcat_modelname(dest, idx) strcat_zchar(dest, modelHeaders[idx].name, LEN_MODEL_NAME, STR_MODEL, PSIZE(TR_MODEL), idx+1) #define strcat_modelname(dest, idx) strcat_zchar(dest, modelHeaders[idx].name, LEN_MODEL_NAME, STR_MODEL, PSIZE(TR_MODEL), idx+1)

View file

@ -18,8 +18,8 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#ifndef _HELPERS_H_ #ifndef _OPENTX_HELPERS_H_
#define _HELPERS_H_ #define _OPENTX_HELPERS_H_
template<class t> inline t min(t a, t b) { return a<b?a:b; } template<class t> inline t min(t a, t b) { return a<b?a:b; }
template<class t> inline t max(t a, t b) { return a>b?a:b; } template<class t> inline t max(t a, t b) { return a>b?a:b; }
@ -27,4 +27,4 @@ template<class t> inline t sgn(t a) { return a>0 ? 1 : (a < 0 ? -1 : 0); }
template<class t> inline t limit(t mi, t x, t ma) { return min(max(mi,x),ma); } template<class t> inline t limit(t mi, t x, t ma) { return min(max(mi,x),ma); }
template<class t> inline void SWAP(t & a, t & b) { t tmp = b; b = a; a = tmp; } template<class t> inline void SWAP(t & a, t & b) { t tmp = b; b = a; a = tmp; }
#endif // _HELPERS_H_ #endif // _OPENTX_HELPERS_H_

View file

@ -23,7 +23,7 @@
#include "bitfield.h" #include "bitfield.h"
#include "definitions.h" #include "definitions.h"
#include "helpers.h" #include "opentx_helpers.h"
#include "telemetry/telemetry.h" #include "telemetry/telemetry.h"
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
#include "telemetry/multi.h" #include "telemetry/multi.h"

View file

@ -68,7 +68,7 @@ const char * sdCheckAndCreateDirectory(const char * path)
f_closedir(&archiveFolder); f_closedir(&archiveFolder);
} }
return NULL; return nullptr;
} }
bool isFileAvailable(const char * path, bool exclDir) bool isFileAvailable(const char * path, bool exclDir)
@ -95,7 +95,7 @@ bool isFileAvailable(const char * path, bool exclDir)
@param match Optional container to hold the matched file extension (wide enough to hold LEN_FILE_EXTENSION_MAX + 1). @param match Optional container to hold the matched file extension (wide enough to hold LEN_FILE_EXTENSION_MAX + 1).
@retval true if a file was found, false otherwise. @retval true if a file was found, false otherwise.
*/ */
bool isFilePatternAvailable(const char * path, const char * file, const char * pattern = NULL, bool exclDir = true, char * match = NULL) bool isFilePatternAvailable(const char * path, const char * file, const char * pattern = nullptr, bool exclDir = true, char * match = nullptr)
{ {
uint8_t fplen; uint8_t fplen;
char fqfp[LEN_FILE_PATH_MAX + _MAX_LFN + 1] = "\0"; char fqfp[LEN_FILE_PATH_MAX + _MAX_LFN + 1] = "\0";
@ -110,7 +110,7 @@ bool isFilePatternAvailable(const char * path, const char * file, const char * p
strcpy(fqfp + fplen, "/"); strcpy(fqfp + fplen, "/");
strncat(fqfp + (++fplen), file, _MAX_LFN); strncat(fqfp + (++fplen), file, _MAX_LFN);
if (pattern == NULL) { if (pattern == nullptr) {
// no extensions list, just check the filename as-is // no extensions list, just check the filename as-is
return isFileAvailable(fqfp, exclDir); return isFileAvailable(fqfp, exclDir);
} }
@ -129,13 +129,13 @@ bool isFilePatternAvailable(const char * path, const char * file, const char * p
while (plen > 0 && ext) { while (plen > 0 && ext) {
strncat(fqfp + len, ext, extlen); strncat(fqfp + len, ext, extlen);
if (isFileAvailable(fqfp, exclDir)) { if (isFileAvailable(fqfp, exclDir)) {
if (match != NULL) strncat(&(match[0]='\0'), ext, extlen); if (match != nullptr) strncat(&(match[0]='\0'), ext, extlen);
return true; return true;
} }
plen -= extlen; plen -= extlen;
if (plen > 0) { if (plen > 0) {
fqfp[len] = '\0'; fqfp[len] = '\0';
ext = getFileExtension(pattern, plen, 0, NULL, &extlen); ext = getFileExtension(pattern, plen, 0, nullptr, &extlen);
} }
} }
} }
@ -147,7 +147,7 @@ char * getFileIndex(char * filename, unsigned int & value)
value = 0; value = 0;
char * pos = (char *)getFileExtension(filename); char * pos = (char *)getFileExtension(filename);
if (!pos || pos == filename) if (!pos || pos == filename)
return NULL; return nullptr;
int multiplier = 1; int multiplier = 1;
while (pos > filename) { while (pos > filename) {
pos--; pos--;
@ -179,7 +179,7 @@ int findNextFileIndex(char * filename, uint8_t size, const char * directory)
uint8_t extlen; uint8_t extlen;
char * indexPos = getFileIndex(filename, index); char * indexPos = getFileIndex(filename, index);
char extension[LEN_FILE_EXTENSION_MAX+1] = "\0"; char extension[LEN_FILE_EXTENSION_MAX+1] = "\0";
char * p = (char *)getFileExtension(filename, 0, 0, NULL, &extlen); char * p = (char *)getFileExtension(filename, 0, 0, nullptr, &extlen);
if (p) strncat(extension, p, sizeof(extension)-1); if (p) strncat(extension, p, sizeof(extension)-1);
while (1) { while (1) {
index++; index++;
@ -188,7 +188,7 @@ int findNextFileIndex(char * filename, uint8_t size, const char * directory)
} }
char * pos = strAppendUnsigned(indexPos, index); char * pos = strAppendUnsigned(indexPos, index);
strAppend(pos, extension); strAppend(pos, extension);
if (!isFilePatternAvailable(directory, filename, NULL, false)) { if (!isFilePatternAvailable(directory, filename, nullptr, false)) {
return index; return index;
} }
} }
@ -249,12 +249,12 @@ bool isExtensionMatching(const char * extension, const char * pattern, char * ma
plen = (int)fnlen; plen = (int)fnlen;
while (plen > 0 && ext) { while (plen > 0 && ext) {
if (!strncasecmp(extension, ext, extlen)) { if (!strncasecmp(extension, ext, extlen)) {
if (match != NULL) strncat(&(match[0]='\0'), ext, extlen); if (match != nullptr) strncat(&(match[0]='\0'), ext, extlen);
return true; return true;
} }
plen -= extlen; plen -= extlen;
if (plen > 0) { if (plen > 0) {
ext = getFileExtension(pattern, plen, 0, NULL, &extlen); ext = getFileExtension(pattern, plen, 0, nullptr, &extlen);
} }
} }
return false; return false;
@ -275,7 +275,7 @@ bool sdListFiles(const char * path, const char * extension, const uint8_t maxlen
if (selection) { if (selection) {
s_last_flags = flags; s_last_flags = flags;
if (!isFilePatternAvailable(path, selection, ((flags & LIST_SD_FILE_EXT) ? NULL : extension))) selection = NULL; if (!isFilePatternAvailable(path, selection, ((flags & LIST_SD_FILE_EXT) ? nullptr : extension))) selection = nullptr;
} }
else { else {
flags = s_last_flags; flags = s_last_flags;
@ -475,7 +475,7 @@ const char * sdCopyFile(const char * srcPath, const char * destPath)
return SDCARD_ERROR(result); return SDCARD_ERROR(result);
} }
return NULL; return nullptr;
} }
const char * sdCopyFile(const char * srcFilename, const char * srcDir, const char * destFilename, const char * destDir) const char * sdCopyFile(const char * srcFilename, const char * srcDir, const char * destFilename, const char * destDir)

View file

@ -271,7 +271,7 @@ void convertModelData_218_to_219(ModelData &model)
for (uint8_t i=0; i<MAX_TELEMETRY_SENSORS_218; i++) { for (uint8_t i=0; i<MAX_TELEMETRY_SENSORS_218; i++) {
newModel.telemetrySensors[i].id = oldModel.telemetrySensors[i].id; newModel.telemetrySensors[i].id = oldModel.telemetrySensors[i].id;
if (oldModel.telemetrySensors[i].type == 0) if (oldModel.telemetrySensors[i].type == 0 && (oldModel.moduleData[0].type == MODULE_TYPE_XJT_PXX1 || oldModel.moduleData[1].type == MODULE_TYPE_XJT_PXX1))
newModel.telemetrySensors[i].instance = 0xE0 + (oldModel.telemetrySensors[i].instance & 0x1F) - 1; newModel.telemetrySensors[i].instance = 0xE0 + (oldModel.telemetrySensors[i].instance & 0x1F) - 1;
else else
newModel.telemetrySensors[i].instance = oldModel.telemetrySensors[i].instance; newModel.telemetrySensors[i].instance = oldModel.telemetrySensors[i].instance;

View file

@ -14,7 +14,6 @@ option(DSM2 "DSM2 TX Module" ON)
option(SBUS "SBUS TX Module" ON) option(SBUS "SBUS TX Module" ON)
option(CROSSFIRE "Crossfire TX Module" ON) option(CROSSFIRE "Crossfire TX Module" ON)
option(MULTIMODULE "DIY Multiprotocol TX Module (https://github.com/pascallanger/DIY-Multiprotocol-TX-Module)" ON) option(MULTIMODULE "DIY Multiprotocol TX Module (https://github.com/pascallanger/DIY-Multiprotocol-TX-Module)" ON)
option(MULTI_SPORT "SPORT telemetry support" OFF)
option(SUPPORT_D16_EU_ONLY "XJT module only supports D16-EU and LR12-EU" OFF) # TODO rename to XJT_EU_ONLY option(SUPPORT_D16_EU_ONLY "XJT module only supports D16-EU and LR12-EU" OFF) # TODO rename to XJT_EU_ONLY
option(DEBUG_INTERRUPTS "Count interrupts" OFF) option(DEBUG_INTERRUPTS "Count interrupts" OFF)
option(DEBUG_LATENCY "Debug latency" OFF) option(DEBUG_LATENCY "Debug latency" OFF)
@ -152,10 +151,6 @@ if(MULTIMODULE)
set(SRC ${SRC} pulses/multi.cpp telemetry/spektrum.cpp telemetry/flysky_ibus.cpp telemetry/multi.cpp) set(SRC ${SRC} pulses/multi.cpp telemetry/spektrum.cpp telemetry/flysky_ibus.cpp telemetry/multi.cpp)
endif() endif()
if(MULTI_SPORT)
add_definitions(-DMULTI_SPORT)
endif()
if(CROSSFIRE) if(CROSSFIRE)
add_definitions(-DCROSSFIRE) add_definitions(-DCROSSFIRE)
set(PULSES_SRC set(PULSES_SRC

View file

@ -378,7 +378,7 @@ void audioInit()
audioSendRiffHeader(); audioSendRiffHeader();
} }
uint8_t * currentBuffer = NULL; uint8_t * currentBuffer = nullptr;
uint32_t currentSize = 0; uint32_t currentSize = 0;
int16_t newVolume = -1; int16_t newVolume = -1;
@ -389,7 +389,7 @@ void audioSetCurrentBuffer(const AudioBuffer * buffer)
currentSize = buffer->size * 2; currentSize = buffer->size * 2;
} }
else { else {
currentBuffer = NULL; currentBuffer = nullptr;
currentSize = 0; currentSize = 0;
} }
} }
@ -413,7 +413,7 @@ void audioConsumeCurrentBuffer()
currentSize -= written; currentSize -= written;
if (currentSize == 0) { if (currentSize == 0) {
audioQueue.buffersFifo.freeNextFilledBuffer(); audioQueue.buffersFifo.freeNextFilledBuffer();
currentBuffer = NULL; currentBuffer = nullptr;
currentSize = 0; currentSize = 0;
} }
} }

View file

@ -365,7 +365,7 @@ void sdDone()
#if defined(LOG_TELEMETRY) #if defined(LOG_TELEMETRY)
f_close(&g_telemetryFile); f_close(&g_telemetryFile);
#endif #endif
f_mount(NULL, "", 0); // unmount SD f_mount(nullptr, "", 0); // unmount SD
} }
} }
#endif #endif

View file

@ -52,7 +52,7 @@ void firmwareTraceCb(const char * text)
OpenTxSimulator::OpenTxSimulator() : OpenTxSimulator::OpenTxSimulator() :
SimulatorInterface(), SimulatorInterface(),
m_timer10ms(NULL), m_timer10ms(nullptr),
m_resetOutputsData(true), m_resetOutputsData(true),
m_stopRequested(false) m_stopRequested(false)
{ {
@ -62,7 +62,7 @@ OpenTxSimulator::OpenTxSimulator() :
OpenTxSimulator::~OpenTxSimulator() OpenTxSimulator::~OpenTxSimulator()
{ {
traceCallback = NULL; traceCallback = nullptr;
tracebackDevices.clear(); tracebackDevices.clear();
if (m_timer10ms) if (m_timer10ms)

View file

@ -51,7 +51,7 @@ class DLLEXPORT OpenTxSimulator : public SimulatorInterface
public slots: public slots:
virtual void init(); virtual void init();
virtual void start(const char * filename = NULL, bool tests = true); virtual void start(const char * filename = nullptr, bool tests = true);
virtual void stop(); virtual void stop();
virtual void setSdPath(const QString & sdPath = "", const QString & settingsPath = ""); virtual void setSdPath(const QString & sdPath = "", const QString & settingsPath = "");
virtual void setVolumeGain(const int value); virtual void setVolumeGain(const int value);

View file

@ -220,8 +220,8 @@ void StopSimu()
simu_shutdown = true; simu_shutdown = true;
pthread_join(mixerTaskId, NULL); pthread_join(mixerTaskId, nullptr);
pthread_join(menusTaskId, NULL); pthread_join(menusTaskId, nullptr);
simu_running = false; simu_running = false;
} }
@ -348,7 +348,7 @@ void * audioThread(void *)
wanted.channels = 1; /* 1 = mono, 2 = stereo */ wanted.channels = 1; /* 1 = mono, 2 = stereo */
wanted.samples = AUDIO_BUFFER_SIZE*2; /* Good low-latency value for callback */ wanted.samples = AUDIO_BUFFER_SIZE*2; /* Good low-latency value for callback */
wanted.callback = fillAudioBuffer; wanted.callback = fillAudioBuffer;
wanted.userdata = NULL; wanted.userdata = nullptr;
/* /*
SDL_OpenAudio() internally calls SDL_InitSubSystem(SDL_INIT_AUDIO), SDL_OpenAudio() internally calls SDL_InitSubSystem(SDL_INIT_AUDIO),
@ -390,7 +390,7 @@ void StartAudioThread(int volumeGain)
void StopAudioThread() void StopAudioThread()
{ {
simuAudio.threadRunning = false; simuAudio.threadRunning = false;
pthread_join(simuAudio.threadPid, NULL); pthread_join(simuAudio.threadPid, nullptr);
} }
#endif // #if defined(SIMU_AUDIO) #endif // #if defined(SIMU_AUDIO)

View file

@ -361,7 +361,7 @@ TCHAR * f_gets (TCHAR* buff, int len, FIL* fil)
{ {
if (fil && fil->obj.fs) { if (fil && fil->obj.fs) {
buff = fgets(buff, len, (FILE*)fil->obj.fs); buff = fgets(buff, len, (FILE*)fil->obj.fs);
if (buff != NULL) { if (buff != nullptr) {
fil->fptr = *buff; fil->fptr = *buff;
} }
// TRACE_SIMPGMSPACE("fgets(%p) %u, %s", fil->obj.fs, len, buff); // TRACE_SIMPGMSPACE("fgets(%p) %u, %s", fil->obj.fs, len, buff);
@ -396,7 +396,7 @@ FRESULT f_close (FIL * fil)
TRACE_SIMPGMSPACE("f_close(%p) (FIL:%p)", fil->obj.fs, fil); TRACE_SIMPGMSPACE("f_close(%p) (FIL:%p)", fil->obj.fs, fil);
if (fil->obj.fs) { if (fil->obj.fs) {
fclose((FILE*)fil->obj.fs); fclose((FILE*)fil->obj.fs);
fil->obj.fs = NULL; fil->obj.fs = nullptr;
} }
return FR_OK; return FR_OK;
} }
@ -516,7 +516,7 @@ FRESULT f_rename(const TCHAR *oldname, const TCHAR *newname)
FRESULT f_utime(const TCHAR* path, const FILINFO* fno) FRESULT f_utime(const TCHAR* path, const FILINFO* fno)
{ {
if (fno == NULL) if (fno == nullptr)
return FR_INVALID_PARAMETER; return FR_INVALID_PARAMETER;
std::string simpath = convertToSimuPath(path); std::string simpath = convertToSimuPath(path);

View file

@ -1013,7 +1013,7 @@ void sdDone()
{ {
if (sdMounted()) { if (sdMounted()) {
audioQueue.stopSD(); audioQueue.stopSD();
f_mount(NULL, "", 0); // unmount SD f_mount(nullptr, "", 0); // unmount SD
} }
} }

View file

@ -171,7 +171,7 @@ void usbMassStorage()
Card_state = SD_ST_DATA; Card_state = SD_ST_DATA;
audioQueue.stopSD(); audioQueue.stopSD();
logsClose(); logsClose();
f_mount(NULL, "", 0); // unmount SD f_mount(nullptr, "", 0); // unmount SD
} }
if (!initialized) { if (!initialized) {

View file

@ -69,7 +69,7 @@ const CrossfireSensor & getCrossfireSensor(uint8_t id, uint8_t subId)
void processCrossfireTelemetryValue(uint8_t index, int32_t value) void processCrossfireTelemetryValue(uint8_t index, int32_t value)
{ {
const CrossfireSensor & sensor = crossfireSensors[index]; const CrossfireSensor & sensor = crossfireSensors[index];
setTelemetryValue(TELEM_PROTO_CROSSFIRE, sensor.id, 0, sensor.subId, value, sensor.unit, sensor.precision); setTelemetryValue(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, value, sensor.unit, sensor.precision);
} }
bool checkCrossfireTelemetryFrameCRC() bool checkCrossfireTelemetryFrameCRC()
@ -164,7 +164,7 @@ void processCrossfireTelemetryFrame()
const CrossfireSensor & sensor = crossfireSensors[FLIGHT_MODE_INDEX]; const CrossfireSensor & sensor = crossfireSensors[FLIGHT_MODE_INDEX];
for (int i=0; i<min<int>(16, telemetryRxBuffer[1]-2); i+=4) { for (int i=0; i<min<int>(16, telemetryRxBuffer[1]-2); i+=4) {
uint32_t value = *((uint32_t *)&telemetryRxBuffer[3+i]); uint32_t value = *((uint32_t *)&telemetryRxBuffer[3+i]);
setTelemetryValue(TELEM_PROTO_CROSSFIRE, sensor.id, 0, sensor.subId, value, sensor.unit, i); setTelemetryValue(PROTOCOL_TELEMETRY_CROSSFIRE, sensor.id, 0, sensor.subId, value, sensor.unit, i);
} }
break; break;
} }

View file

@ -106,17 +106,17 @@ static void processFlySkySensor(const uint8_t *packet)
else if (sensor->unit == UNIT_VOLTS) else if (sensor->unit == UNIT_VOLTS)
// Voltage types are signed 16bit integers // Voltage types are signed 16bit integers
value = (int16_t)value; value = (int16_t)value;
setTelemetryValue(TELEM_PROTO_FLYSKY_IBUS, id, 0, instance, value, sensor->unit, sensor->precision); setTelemetryValue(PROTOCOL_TELEMETRY_FLYSKY_IBUS, id, 0, instance, value, sensor->unit, sensor->precision);
return; return;
} }
} }
setTelemetryValue(TELEM_PROTO_FLYSKY_IBUS, id, 0, instance, value, UNIT_RAW, 0); setTelemetryValue(PROTOCOL_TELEMETRY_FLYSKY_IBUS, id, 0, instance, value, UNIT_RAW, 0);
} }
void processFlySkyPacket(const uint8_t *packet) void processFlySkyPacket(const uint8_t *packet)
{ {
// Set TX RSSI Value, reverse MULTIs scaling // Set TX RSSI Value, reverse MULTIs scaling
setTelemetryValue(TELEM_PROTO_FLYSKY_IBUS, TX_RSSI_ID, 0, 0, packet[0], UNIT_RAW, 0); setTelemetryValue(PROTOCOL_TELEMETRY_FLYSKY_IBUS, TX_RSSI_ID, 0, 0, packet[0], UNIT_RAW, 0);
for (int sensor = 0; sensor < 7; sensor++) { for (int sensor = 0; sensor < 7; sensor++) {
int index = 1 + (4 * sensor); int index = 1 + (4 * sensor);

View file

@ -68,9 +68,9 @@ void frskyDProcessPacket(const uint8_t *packet)
{ {
case LINKPKT: // A1/A2/RSSI values case LINKPKT: // A1/A2/RSSI values
{ {
setTelemetryValue(TELEM_PROTO_FRSKY_D, D_A1_ID, 0, 0, packet[1], UNIT_VOLTS, 0); setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, D_A1_ID, 0, 0, packet[1], UNIT_VOLTS, 0);
setTelemetryValue(TELEM_PROTO_FRSKY_D, D_A2_ID, 0, 0, packet[2], UNIT_VOLTS, 0); setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, D_A2_ID, 0, 0, packet[2], UNIT_VOLTS, 0);
setTelemetryValue(TELEM_PROTO_FRSKY_D, D_RSSI_ID, 0, 0, packet[3], UNIT_RAW, 0); setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, D_RSSI_ID, 0, 0, packet[3], UNIT_RAW, 0);
telemetryData.rssi.set(packet[3]); telemetryData.rssi.set(packet[3]);
telemetryStreaming = TELEMETRY_TIMEOUT10ms; // reset counter only if valid packets are being detected telemetryStreaming = TELEMETRY_TIMEOUT10ms; // reset counter only if valid packets are being detected
break; break;
@ -258,7 +258,7 @@ void processHubPacket(uint8_t id, int16_t value)
} }
} }
setTelemetryValue(TELEM_PROTO_FRSKY_D, id, 0, 0, data, unit, precision); setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, id, 0, 0, data, unit, precision);
} }
void frskyDSetDefault(int index, uint16_t id) void frskyDSetDefault(int index, uint16_t id)

View file

@ -128,14 +128,14 @@ void sportProcessTelemetryPacket(uint16_t id, uint8_t subId, uint8_t instance, u
uint8_t cellsCount = (data & 0xF0) >> 4; uint8_t cellsCount = (data & 0xF0) >> 4;
uint8_t cellIndex = (data & 0x0F); uint8_t cellIndex = (data & 0x0F);
uint32_t mask = (cellsCount << 24) + (cellIndex << 16); uint32_t mask = (cellsCount << 24) + (cellIndex << 16);
setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, id, subId, instance, mask + (((data & 0x000FFF00) >> 8) / 5), unit, precision); setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_SPORT, id, subId, instance, mask + (((data & 0x000FFF00) >> 8) / 5), unit, precision);
if (cellIndex+1 < cellsCount) { if (cellIndex+1 < cellsCount) {
mask += (1 << 16); mask += (1 << 16);
setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, id, subId, instance, mask + (((data & 0xFFF00000) >> 20) / 5), unit, precision); setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_SPORT, id, subId, instance, mask + (((data & 0xFFF00000) >> 20) / 5), unit, precision);
} }
} }
else { else {
setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, id, subId, instance, data, unit, precision); setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_SPORT, id, subId, instance, data, unit, precision);
} }
} }
@ -170,7 +170,7 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
data = SPORT_DATA_U8(packet); data = SPORT_DATA_U8(packet);
if (g_model.rssiSource) { if (g_model.rssiSource) {
TelemetrySensor * sensor = &g_model.telemetrySensors[g_model.rssiSource - 1]; TelemetrySensor * sensor = &g_model.telemetrySensors[g_model.rssiSource - 1];
if (sensor->isSameInstance(TELEM_PROTO_FRSKY_SPORT, instance)) { if (sensor->isSameInstance(PROTOCOL_TELEMETRY_FRSKY_SPORT, instance)) {
telemetryData.rssi.set(data); telemetryData.rssi.set(data);
} }
} }

View file

@ -138,14 +138,12 @@ static void processMultiTelemetryPaket(const uint8_t *packet)
TRACE("[MP] Received Frsky HUB telemetry len %d < 4", len); TRACE("[MP] Received Frsky HUB telemetry len %d < 4", len);
break; break;
#if defined(MULTI_SPORT)
case FrSkySportTelemtry: case FrSkySportTelemtry:
if (len >= 4) if (len >= 4)
sportProcessTelemetryPacket(data); sportProcessTelemetryPacket(data);
else else
TRACE("[MP] Received sport telemetry len %d < 4", len); TRACE("[MP] Received sport telemetry len %d < 4", len);
break; break;
#endif
case InputSync: case InputSync:
if (len >= 6) if (len >= 6)
@ -158,7 +156,7 @@ static void processMultiTelemetryPaket(const uint8_t *packet)
// Just an ack to our command, ignore for now // Just an ack to our command, ignore for now
break; break;
#if defined(MULTI_SPORT) && defined(LUA) #if defined(LUA)
case FrskySportPolling: case FrskySportPolling:
if (len >= 1 && outputTelemetryBuffer.destination == TELEMETRY_ENDPOINT_SPORT && data[0] == outputTelemetryBuffer.sport.physicalId) { if (len >= 1 && outputTelemetryBuffer.destination == TELEMETRY_ENDPOINT_SPORT && data[0] == outputTelemetryBuffer.sport.physicalId) {
TRACE("MP Sending sport data out."); TRACE("MP Sending sport data out.");

View file

@ -271,7 +271,7 @@ bool isSpektrumValidValue(int32_t value, const SpektrumDataType type)
void processSpektrumPacket(const uint8_t *packet) void processSpektrumPacket(const uint8_t *packet)
{ {
setTelemetryValue(TELEM_PROTO_SPEKTRUM, (I2C_PSEUDO_TX << 8) + 0, 0, 0, packet[1], UNIT_RAW, 0); setTelemetryValue(PROTOCOL_TELEMETRY_SPEKTRUM, (I2C_PSEUDO_TX << 8) + 0, 0, 0, packet[1], UNIT_RAW, 0);
// highest bit indicates that TM1100 is in use, ignore it // highest bit indicates that TM1100 is in use, ignore it
uint8_t i2cAddress = (packet[2] & 0x7f); uint8_t i2cAddress = (packet[2] & 0x7f);
uint8_t instance = packet[3]; uint8_t instance = packet[3];
@ -283,10 +283,10 @@ void processSpektrumPacket(const uint8_t *packet)
for (int i=5; i<SPEKTRUM_TELEMETRY_LENGTH; i++) for (int i=5; i<SPEKTRUM_TELEMETRY_LENGTH; i++)
{ {
setTelemetryValue(TELEM_PROTO_SPEKTRUM, pseudoId, 0, instance, packet[i], UNIT_TEXT, i-5); setTelemetryValue(PROTOCOL_TELEMETRY_SPEKTRUM, pseudoId, 0, instance, packet[i], UNIT_TEXT, i-5);
} }
// Set a sential \0 just for safety since we have the space there // Set a sential \0 just for safety since we have the space there
setTelemetryValue(TELEM_PROTO_SPEKTRUM, pseudoId, 0, instance, '\0', UNIT_TEXT, 13); setTelemetryValue(PROTOCOL_TELEMETRY_SPEKTRUM, pseudoId, 0, instance, '\0', UNIT_TEXT, 13);
return; return;
@ -335,7 +335,7 @@ void processSpektrumPacket(const uint8_t *packet)
} }
uint16_t pseudoId = (sensor->i2caddress << 8 | sensor->startByte); uint16_t pseudoId = (sensor->i2caddress << 8 | sensor->startByte);
setTelemetryValue(TELEM_PROTO_SPEKTRUM, pseudoId, 0, instance, value, sensor->unit, sensor->precision); setTelemetryValue(PROTOCOL_TELEMETRY_SPEKTRUM, pseudoId, 0, instance, value, sensor->unit, sensor->precision);
} }
} }
if (!handled) { if (!handled) {
@ -344,7 +344,7 @@ void processSpektrumPacket(const uint8_t *packet)
for (int startByte=0; startByte<14; startByte+=2) { for (int startByte=0; startByte<14; startByte+=2) {
int32_t value = spektrumGetValue(packet + 4, startByte, uint16); int32_t value = spektrumGetValue(packet + 4, startByte, uint16);
uint16_t pseudoId = i2cAddress << 8 | startByte; uint16_t pseudoId = i2cAddress << 8 | startByte;
setTelemetryValue(TELEM_PROTO_SPEKTRUM, pseudoId, 0, instance, value, UNIT_RAW, 0); setTelemetryValue(PROTOCOL_TELEMETRY_SPEKTRUM, pseudoId, 0, instance, value, UNIT_RAW, 0);
} }
} }
} }
@ -397,7 +397,7 @@ void processDSMBindPacket(const uint8_t *packet)
debugval = packet[7] << 24 | packet[6] << 16 | packet[5] << 8 | packet[4]; debugval = packet[7] << 24 | packet[6] << 16 | packet[5] << 8 | packet[4];
/* log the bind packet as telemetry for quick debugging */ /* log the bind packet as telemetry for quick debugging */
setTelemetryValue(TELEM_PROTO_SPEKTRUM, (I2C_PSEUDO_TX << 8) + 4, 0, 0, debugval, UNIT_RAW, 0); setTelemetryValue(PROTOCOL_TELEMETRY_SPEKTRUM, (I2C_PSEUDO_TX << 8) + 4, 0, 0, debugval, UNIT_RAW, 0);
/* Finally stop binding as the rx just told us that it is bound */ /* Finally stop binding as the rx just told us that it is bound */
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2 && moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND) { if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MODULE_SUBTYPE_MULTI_DSM2 && moduleState[EXTERNAL_MODULE].mode == MODULE_MODE_BIND) {

View file

@ -509,27 +509,27 @@ int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, ui
int index = availableTelemetryIndex(); int index = availableTelemetryIndex();
if (index >= 0) { if (index >= 0) {
switch (protocol) { switch (protocol) {
case TELEM_PROTO_FRSKY_SPORT: case PROTOCOL_TELEMETRY_FRSKY_SPORT:
frskySportSetDefault(index, id, subId, instance); frskySportSetDefault(index, id, subId, instance);
break; break;
case TELEM_PROTO_FRSKY_D: case PROTOCOL_TELEMETRY_FRSKY_D:
frskyDSetDefault(index, id); frskyDSetDefault(index, id);
break; break;
#if defined(CROSSFIRE) #if defined(CROSSFIRE)
case TELEM_PROTO_CROSSFIRE: case PROTOCOL_TELEMETRY_CROSSFIRE:
crossfireSetDefault(index, id, instance); crossfireSetDefault(index, id, instance);
break; break;
#endif #endif
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
case TELEM_PROTO_SPEKTRUM: case PROTOCOL_TELEMETRY_SPEKTRUM:
spektrumSetDefault(index, id, subId, instance); spektrumSetDefault(index, id, subId, instance);
break; break;
case TELEM_PROTO_FLYSKY_IBUS: case PROTOCOL_TELEMETRY_FLYSKY_IBUS:
flySkySetDefault(index,id, subId, instance); flySkySetDefault(index,id, subId, instance);
break; break;
#endif #endif
#if defined(LUA) #if defined(LUA)
case TELEM_PROTO_LUA: case PROTOCOL_TELEMETRY_LUA:
// Sensor will be initialized by calling function // Sensor will be initialized by calling function
// This drops the first value // This drops the first value
return index; return index;

View file

@ -86,65 +86,53 @@ def main():
maxsize = 65536 * 4 maxsize = 65536 * 4
elif board_name == "x9lite": elif board_name == "x9lite":
cmake_options["PCB"] = "X9LITE" cmake_options["PCB"] = "X9LITE"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_x9lite firmware_options = options_taranis_x9lite
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "x7": elif board_name == "x7":
cmake_options["PCB"] = "X7" cmake_options["PCB"] = "X7"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_x9dp firmware_options = options_taranis_x9dp
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "xlite": elif board_name == "xlite":
cmake_options["PCB"] = "XLITE" cmake_options["PCB"] = "XLITE"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_xlite firmware_options = options_taranis_xlite
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "xlites": elif board_name == "xlites":
cmake_options["PCB"] = "XLITES" cmake_options["PCB"] = "XLITES"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_xlites firmware_options = options_taranis_xlites
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "x9d": elif board_name == "x9d":
cmake_options["PCB"] = "X9D" cmake_options["PCB"] = "X9D"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_x9d firmware_options = options_taranis_x9d
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "x9d+": elif board_name == "x9d+":
cmake_options["PCB"] = "X9D+" cmake_options["PCB"] = "X9D+"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_x9dp firmware_options = options_taranis_x9dp
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "x9d+2019": elif board_name == "x9d+2019":
cmake_options["PCB"] = "X9D+" cmake_options["PCB"] = "X9D+"
cmake_options["PCBREV"] = "2019" cmake_options["PCBREV"] = "2019"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_x9dp firmware_options = options_taranis_x9dp
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "x9e": elif board_name == "x9e":
cmake_options["PCB"] = "X9E" cmake_options["PCB"] = "X9E"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_x9e firmware_options = options_taranis_x9e
maxsize = 65536 * 8 maxsize = 65536 * 8
elif board_name == "x10": elif board_name == "x10":
cmake_options["PCB"] = "X10" cmake_options["PCB"] = "X10"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_horus_x10 firmware_options = options_horus_x10
maxsize = 2 * 1024 * 1024 maxsize = 2 * 1024 * 1024
elif board_name == "x10express": elif board_name == "x10express":
cmake_options["PCB"] = "X10" cmake_options["PCB"] = "X10"
cmake_options["PCBREV"] = "EXPRESS" cmake_options["PCBREV"] = "EXPRESS"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_horus_x10 firmware_options = options_horus_x10
maxsize = 2 * 1024 * 1024 maxsize = 2 * 1024 * 1024
elif board_name == "x12s": elif board_name == "x12s":
cmake_options["PCB"] = "X12S" cmake_options["PCB"] = "X12S"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_horus_x12s firmware_options = options_horus_x12s
maxsize = 2 * 1024 * 1024 maxsize = 2 * 1024 * 1024
elif board_name == "t12": elif board_name == "t12":
cmake_options["PCB"] = "X7" cmake_options["PCB"] = "X7"
cmake_options["PCBREV"] = "T12" cmake_options["PCBREV"] = "T12"
cmake_options["MULTI_SPORT"] = "ON"
firmware_options = options_taranis_x9dp firmware_options = options_taranis_x9dp
maxsize = 65536 * 8 maxsize = 65536 * 8
else: else: