diff --git a/radio/src/bluetooth.cpp b/radio/src/bluetooth.cpp index 147158ca4..00a22bc74 100644 --- a/radio/src/bluetooth.cpp +++ b/radio/src/bluetooth.cpp @@ -151,7 +151,7 @@ void Bluetooth::processTrainerFrame(const uint8_t * buffer) { BLUETOOTH_TRACE(CRLF); - for (uint8_t channel=0, i=1; channel<8; channel+=2, i+=3) { + for (uint8_t channel=0, i=1; channel> 4) + ((buffer[i+2] & 0x0f) << 8) - 1500; @@ -251,7 +251,7 @@ void Bluetooth::sendTrainer() int16_t PPM_range = g_model.extendedLimits ? 640*2 : 512*2; int firstCh = g_model.trainerData.channelsStart; - int lastCh = firstCh + 8; + int lastCh = firstCh + BLUETOOTH_TRAINER_CHANNELS; uint8_t * cur = buffer; bufferIndex = 0; @@ -259,7 +259,7 @@ void Bluetooth::sendTrainer() buffer[bufferIndex++] = START_STOP; // start byte pushByte(TRAINER_FRAME); - for (int channel=0; channelsetPrefix(STR_CH); channelStart->setSetValueHandler([=](int32_t newValue) { g_model.trainerData.channelsStart = newValue - 1; + g_model.trainerData.channelsCount = BLUETOOTH_TRAINER_CHANNELS - DEF_TRAINER_CHANNELS; char chend[6]; snprintf(chend, sizeof(chend), "%s%d", STR_CH, - g_model.trainerData.channelsStart + 8); + g_model.trainerData.channelsStart + BLUETOOTH_TRAINER_CHANNELS); SET_DIRTY(); btChannelEnd->setText(chend); }); @@ -606,37 +607,36 @@ class TrainerModuleWindow : public FormGroup } else #endif if (g_model.trainerData.mode == TRAINER_MODE_SLAVE) { + #define PPMCH_START_MIN 1 + #define PPMCH_START_MAX (MAX_OUTPUT_CHANNELS - g_model.trainerData.channelsCount + 1 - DEF_TRAINER_CHANNELS) + #define PPMCH_END_MIN (g_model.trainerData.channelsStart + MIN_TRAINER_CHANNELS) + #define PPMCH_END_MAX min(g_model.trainerData.channelsStart + MAX_TRAINER_CHANNELS, MAX_OUTPUT_CHANNELS) + new StaticText(this, grid.getLabelSlot(true), STR_CHANNELRANGE, 0, COLOR_THEME_PRIMARY1); channelStart = new NumberEdit( - this, grid.getFieldSlot(2, 0), 1, - MAX_OUTPUT_CHANNELS - 8 + g_model.trainerData.channelsCount + 1, + this, grid.getFieldSlot(2, 0), PPMCH_START_MIN, PPMCH_START_MAX, GET_DEFAULT(1 + g_model.trainerData.channelsStart)); - channelEnd = - new NumberEdit(this, grid.getFieldSlot(2, 1), - g_model.trainerData.channelsStart + 1, - min(MAX_TRAINER_CHANNELS, - g_model.trainerData.channelsStart + - MAX_TRAINER_CHANNELS_M8), - GET_DEFAULT(g_model.trainerData.channelsStart + 8 + - g_model.trainerData.channelsCount)); + channelEnd = new NumberEdit( + this, grid.getFieldSlot(2, 1), PPMCH_END_MIN, PPMCH_END_MAX, + GET_DEFAULT((g_model.trainerData.channelsStart + + DEF_TRAINER_CHANNELS + + g_model.trainerData.channelsCount))); channelStart->setPrefix(STR_CH); channelEnd->setPrefix(STR_CH); channelStart->setSetValueHandler([=](int32_t newValue) { g_model.trainerData.channelsStart = newValue - 1; SET_DIRTY(); - channelEnd->setMin(g_model.trainerData.channelsStart + 1); - channelEnd->setMax(min( - MAX_TRAINER_CHANNELS, - g_model.trainerData.channelsStart + MAX_TRAINER_CHANNELS_M8)); + channelEnd->setMin(PPMCH_END_MIN); + channelEnd->setMax(PPMCH_END_MAX); channelEnd->invalidate(); }); channelEnd->setSetValueHandler([=](int32_t newValue) { g_model.trainerData.channelsCount = - newValue - g_model.trainerData.channelsStart - 8; + newValue - g_model.trainerData.channelsStart - + DEF_TRAINER_CHANNELS; SET_DIRTY(); - channelStart->setMax(MAX_TRAINER_CHANNELS - 8 + - g_model.trainerData.channelsCount + 1); + channelStart->setMax(PPMCH_START_MAX); }); grid.nextLine(); diff --git a/radio/src/translations/untranslated.h b/radio/src/translations/untranslated.h index 92e54f709..45ef3232a 100644 --- a/radio/src/translations/untranslated.h +++ b/radio/src/translations/untranslated.h @@ -177,7 +177,7 @@ #define TR_AFHDS3_POWERS "25 mW\0""100 mW""500 mW""1 W\0 ""2 W\0 " #define LEN_PPM_POL "\001" -#define TR_PPM_POL "+""-" +#define TR_PPM_POL "-""+" #define LEN_SBUS_INVERSION_VALUES "\014" #define TR_SBUS_INVERSION_VALUES "normal\0 ""not inverted"