diff --git a/companion/src/wizarddata.cpp b/companion/src/wizarddata.cpp index b4da413a1..ecef809a2 100644 --- a/companion/src/wizarddata.cpp +++ b/companion/src/wizarddata.cpp @@ -22,8 +22,8 @@ Channel::Channel() void Channel::clear() { page = Page_None; - input1 = NOINPUT; - input2 = NOINPUT; + input1 = NO_INPUT; + input2 = NO_INPUT; weight1 = 0; weight2 = 0; } @@ -37,24 +37,38 @@ WizMix::WizMix(const GeneralSettings & settings, const unsigned int modelId): strcpy(name, " "); } -void WizMix::addMix(ModelData &model, Input input, int weight, int channel, int & mixerIndex) + +void WizMix::maxMixSwitch(MixData &mix, int channel, int sw, int weight) { - if (input != NOINPUT) - { - MixData & mix = model.mixData[mixerIndex++]; - mix.destCh = channel+1; - if (input >= RUDDER && input <= AILERON) - { - if (IS_TARANIS(GetEepromInterface()->getBoard())) + mix.destCh = channel; + mix.srcRaw = RawSource(SOURCE_TYPE_MAX); + mix.swtch = RawSwitch(SWITCH_TYPE_SWITCH, sw); + mix.weight = weight; +} + +void WizMix::addMix(ModelData &model, Input input, int weight, int channel, int & mixIndex) +{ + if (input != NO_INPUT) { + bool isTaranis = IS_TARANIS(GetEepromInterface()->getBoard()); + + if (input >= RUDDER_INPUT && input <= AILERONS_INPUT) { + MixData & mix = model.mixData[mixIndex++]; + mix.destCh = channel+1; + if (isTaranis) mix.srcRaw = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, input-1, &model); else mix.srcRaw = RawSource(SOURCE_TYPE_STICK, input-1); + mix.weight = weight; } - if (input==FLAP){ + else if (input==FLAPS_INPUT){ + // There must be some kind of constants for switches somewhere... + maxMixSwitch( model.mixData[mixIndex++], channel+1, isTaranis ? 1 :-3 , -100); //SA-UP or ELE-UP + maxMixSwitch( model.mixData[mixIndex++], channel+1, isTaranis ? 3 : 3 , 100); //SA-DOWN or ELE-DOWN } - if (input==AIRBREAK){ + else if (input==AIRBRAKES_INPUT){ + maxMixSwitch( model.mixData[mixIndex++], channel+1, isTaranis ? 13 :-2 , -100); //SE-UP or RUD-UP + maxMixSwitch( model.mixData[mixIndex++], channel+1, isTaranis ? 15 : 2 , 100); //SE-DOWN or RUD-DOWN } - mix.weight = weight; } } diff --git a/companion/src/wizarddata.h b/companion/src/wizarddata.h index 1fe1a4e0b..a1c4adf45 100644 --- a/companion/src/wizarddata.h +++ b/companion/src/wizarddata.h @@ -24,13 +24,13 @@ #define WIZ_MODEL_NAME_LENGTH 12 enum Input { - NOINPUT, - RUDDER, - ELEVATOR, - THROTTLE, - AILERON, - FLAP, - AIRBREAK + NO_INPUT, + RUDDER_INPUT, + ELEVATOR_INPUT, + THROTTLE_INPUT, + AILERONS_INPUT, + FLAPS_INPUT, + AIRBRAKES_INPUT }; enum Vehicle { @@ -92,6 +92,8 @@ class WizMix private: WizMix(); void addMix(ModelData & model, Input input, int weight, int channel, int & mixerIndex); + void maxMixSwitch(MixData &mix, int destCh, int sw, int weight); + }; #endif // WIZARDDATA_H diff --git a/companion/src/wizarddialog.cpp b/companion/src/wizarddialog.cpp index de3fdbed9..0e0b3665d 100644 --- a/companion/src/wizarddialog.cpp +++ b/companion/src/wizarddialog.cpp @@ -338,14 +338,14 @@ ThrottlePage::ThrottlePage(WizardDialog *dlg, QString image, QString title, QStr void ThrottlePage::initializePage() { - populateCB(throttleCB, getDefaultChannel(THROTTLE)); + populateCB(throttleCB, getDefaultChannel(THROTTLE_INPUT)); } bool ThrottlePage::validatePage() { releaseChannels(); if (motorRB->isChecked()) - return bookChannel(throttleCB, THROTTLE, 100); + return bookChannel(throttleCB, THROTTLE_INPUT, 100); else return true; } @@ -386,10 +386,10 @@ bool AileronsPage::validatePage() { return true; } if (oneAileronRB->isChecked()) { - return (bookChannel(aileron1CB, AILERON, 100 )); + return (bookChannel(aileron1CB, AILERONS_INPUT, 100 )); } - return( bookChannel(aileron1CB, AILERON, 100 ) && - bookChannel(aileron2CB, AILERON, 100 )); + return( bookChannel(aileron1CB, AILERONS_INPUT, 100 ) && + bookChannel(aileron2CB, AILERONS_INPUT, 100 )); } FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -423,10 +423,10 @@ bool FlapsPage::validatePage() { return true; } if (oneFlapRB->isChecked()) { - return (bookChannel(flap1CB, FLAP, 100 )); + return (bookChannel(flap1CB, FLAPS_INPUT, 100 )); } - return( bookChannel(flap1CB, FLAP, 100 ) && - bookChannel(flap2CB, FLAP, 100 )); + return( bookChannel(flap1CB, FLAPS_INPUT, 100 ) && + bookChannel(flap2CB, FLAPS_INPUT, 100 )); } AirbreaksPage::AirbreaksPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -460,10 +460,10 @@ bool AirbreaksPage::validatePage() { return true; } if (oneAirbreakRB->isChecked()) { - return (bookChannel(airbreak1CB, AIRBREAK, 100 )); + return (bookChannel(airbreak1CB, AIRBRAKES_INPUT, 100 )); } - return( bookChannel(airbreak1CB, AIRBREAK, 100 ) && - bookChannel(airbreak2CB, AIRBREAK, 100 )); + return( bookChannel(airbreak1CB, AIRBRAKES_INPUT, 100 ) && + bookChannel(airbreak2CB, AIRBRAKES_INPUT, 100 )); } BankPage::BankPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -492,10 +492,10 @@ void BankPage::initializePage(){ bool BankPage::validatePage() { releaseChannels(); if (oneElevonChRB->isChecked()) { - return (bookChannel(elevon1CB, AILERON, 100, ELEVATOR, 100 )); + return (bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100 )); } - return( bookChannel(elevon1CB, AILERON, 100, ELEVATOR, 100 ) && - bookChannel(elevon2CB, AILERON, 100, ELEVATOR, 100 )); + return( bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100 ) && + bookChannel(elevon2CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100 )); } RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -522,7 +522,7 @@ bool RudderPage::validatePage() { if (noRudderRB->isChecked()) return true; - return (bookChannel(rudderCB, RUDDER, 100)); + return (bookChannel(rudderCB, RUDDER_INPUT, 100)); } VTailPage::VTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -545,8 +545,8 @@ void VTailPage::initializePage(){ bool VTailPage::validatePage() { releaseChannels(); - return (bookChannel(tail1CB, ELEVATOR, 100, RUDDER, 100) && - bookChannel(tail2CB, ELEVATOR, 100, RUDDER, 100 )); + return (bookChannel(tail1CB, ELEVATOR_INPUT, 100, RUDDER_INPUT, 100) && + bookChannel(tail2CB, ELEVATOR_INPUT, 100, RUDDER_INPUT, 100 )); } TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -569,8 +569,8 @@ void TailPage::initializePage(){ bool TailPage::validatePage() { releaseChannels(); - return( bookChannel(elevatorCB, ELEVATOR, 100 ) && - bookChannel(rudderCB, RUDDER, 100 )); + return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100 ) && + bookChannel(rudderCB, RUDDER_INPUT, 100 )); } SimpleTailPage::SimpleTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -589,7 +589,7 @@ void SimpleTailPage::initializePage(){ bool SimpleTailPage::validatePage() { releaseChannels(); - return( bookChannel(elevatorCB, ELEVATOR, 100 )); + return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100 )); } CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -666,10 +666,10 @@ void FblPage::initializePage(){ bool FblPage::validatePage() { releaseChannels(); - return( bookChannel(throttleCB, THROTTLE, 100 ) && - bookChannel( yawCB, RUDDER, 100 ) && - bookChannel( pitchCB, ELEVATOR, 100 ) && - bookChannel( rollCB, AILERON, 100 )); + return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) && + bookChannel( yawCB, RUDDER_INPUT, 100 ) && + bookChannel( pitchCB, ELEVATOR_INPUT, 100 ) && + bookChannel( rollCB, AILERONS_INPUT, 100 )); } HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -700,10 +700,10 @@ void HeliPage::initializePage(){ bool HeliPage::validatePage() { releaseChannels(); - return( bookChannel(throttleCB, THROTTLE, 100 ) && - bookChannel( yawCB, RUDDER, 100 ) && - bookChannel( pitchCB, ELEVATOR, 100 ) && - bookChannel( rollCB, AILERON, 100 )); + return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) && + bookChannel( yawCB, RUDDER_INPUT, 100 ) && + bookChannel( pitchCB, ELEVATOR_INPUT, 100 ) && + bookChannel( rollCB, AILERONS_INPUT, 100 )); } MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -734,10 +734,10 @@ void MultirotorPage::initializePage(){ bool MultirotorPage::validatePage() { releaseChannels(); - return( bookChannel(throttleCB, THROTTLE, 100 ) && - bookChannel(yawCB, RUDDER, 100 ) && - bookChannel(pitchCB, ELEVATOR, 100 ) && - bookChannel(rollCB, AILERON, 100 )); + return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) && + bookChannel(yawCB, RUDDER_INPUT, 100 ) && + bookChannel(pitchCB, ELEVATOR_INPUT, 100 ) && + bookChannel(rollCB, AILERONS_INPUT, 100 )); } ConclusionPage::ConclusionPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage) @@ -766,12 +766,12 @@ bool ConclusionPage::validatePage() { QString WizardPrinter::inputName(Input input) { switch (input){ - case THROTTLE: return "THR"; - case RUDDER: return "RUD"; - case ELEVATOR: return "ELE"; - case AILERON: return "AIL"; - case FLAP: return "FLP"; - case AIRBREAK: return "AIR"; + case THROTTLE_INPUT: return "THR"; + case RUDDER_INPUT: return "RUD"; + case ELEVATOR_INPUT: return "ELE"; + case AILERONS_INPUT: return "AIL"; + case FLAPS_INPUT: return "FLP"; + case AIRBRAKES_INPUT: return "AIR"; default: return "---"; } } @@ -795,7 +795,7 @@ WizardPrinter::WizardPrinter(WizMix *wizMix) { QString str; str = QString("[%1, %2]").arg(inputName(input1)).arg(weight1); - if ( input2 != NOINPUT ) + if ( input2 != NO_INPUT ) str += QString("[%1, %2]").arg(inputName(input2)).arg(weight2); return str; } diff --git a/companion/src/wizarddialog.h b/companion/src/wizarddialog.h index 9819947b8..46b7ec20a 100644 --- a/companion/src/wizarddialog.h +++ b/companion/src/wizarddialog.h @@ -53,7 +53,7 @@ class StandardPage: public QWizardPage protected: int getDefaultChannel(const Input input); void populateCB(QComboBox * cb, int preferred=-1); - bool bookChannel(QComboBox * cb, Input input1, int weight1, Input input2=NOINPUT, int weight2=0); + bool bookChannel(QComboBox * cb, Input input1, int weight1, Input input2=NO_INPUT, int weight2=0); private: QLabel *topLabel;