5 * th9x - http://code.google.com/p/th9x
6 * er9x - http://code.google.com/p/er9x
7 * gruvin9x - http://code.google.com/p/gruvin9x
9 * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
21 #include "templates.h"
23 #define CHANNEL_ORDER(x) generalSettings.getDefaultStick(x)
24 #define CC(x) (CHANNEL_ORDER(x)) //need to invert this to work with dest
25 // TODO ICC is GeneralSettings::getDefaultChannel(unsigned int stick)
27 void ModelEdit::setCurve(uint8_t c
, int8_t ar
[])
29 int len
=sizeof(ar
)/sizeof(int8_t);
31 if (firmware
->getCapability(NumCurves
)>c
) {
33 model
.curves
[c
].count
=5;
34 model
.curves
[c
].custom
=false;
35 for (int i
=0; i
< 5; i
++) {
36 model
.curves
[c
].points
[i
].y
=ar
[i
];
40 model
.curves
[c
].count
=5;
41 model
.curves
[c
].custom
=false;
42 for (int i
=0; i
< 5; i
++) {
43 model
.curves
[c
].points
[i
].y
=ar
[i
];
49 Templates::Templates(QWidget
* parent
, ModelData
& model
):
53 QGridLayout
* gridLayout
= new QGridLayout(this);
54 QListWidget
* templateList
= new QListWidget(this);
55 gridLayout
->addWidget(templateList
, 0, 0, 1, 1);
57 templateList
->addItem(tr("Simple 4-CH"));
58 templateList
->addItem(tr("T-Cut"));
59 templateList
->addItem(tr("Sticky T-Cut"));
60 templateList
->addItem(tr("V-Tail"));
61 templateList
->addItem(tr("Elevon\\Delta"));
62 templateList
->addItem(tr("Heli Setup"));
63 templateList
->addItem(tr("Heli Setup with gyro gain control"));
64 templateList
->addItem(tr("Gyro gain control"));
65 templateList
->addItem(tr("Heli Setup (Futaba's channel assignment style)"));
66 templateList
->addItem(tr("Heli Setup with gyro gain control (Futaba's channel assignment style)"));
67 templateList
->addItem(tr("Gyro gain control (Futaba's channel assignment style)"));
68 templateList
->addItem(tr("Servo Test"));
69 templateList
->addItem(tr("MultiCopter"));
70 templateList
->addItem(tr("Use Model Config Wizard"));
72 connect(templateList
, SIGNAL(doubleClicked(QModelIndex
)), this, SLOT(doubleClicked(QModelIndex
)));
75 Templates::~Templates()
79 void Templates::setSwitch(unsigned int idx
, unsigned int func
, int v1
, int v2
)
81 g_model
.logicalSw
[idx
-1].func
= func
;
82 g_model
.logicalSw
[idx
-1].val1
= v1
;
83 g_model
.logicalSw
[idx
-1].val2
= v2
;
86 void Templates::onDoubleClicked(QModelIndex index
)
88 QString text
= ui
->templateList
->item(index
.row())->text();
89 if (index
.row()==13) {
90 uint64_t result
=0xffffffff;
91 modelConfigDialog
*mcw
= new modelConfigDialog(radioData
, &result
, this);
93 if (result
!=0xffffffff) {
94 applyNumericTemplate(result
);
99 int res
= QMessageBox::question(this,tr("Apply Template?"),tr("Apply template \"%1\"?").arg(text
),QMessageBox::Yes
| QMessageBox::No
);
100 if(res
!=QMessageBox::Yes
) return;
101 applyTemplate(index
.row());
107 void Templates::applyNumericTemplate(uint64_t tpl
)
112 int8_t heli_ar1
[] = {-100, -20, 30, 70, 90};
113 int8_t heli_ar2
[] = {80, 70, 60, 70, 100};
114 int8_t heli_ar3
[] = {100, 90, 80, 90, 100};
115 int8_t heli_ar4
[] = {-30, -15, 0, 50, 100};
116 int8_t heli_ar5
[] = {-100, -50, 0, 50, 100};
118 for (int i
=0; i
<10 ; i
++) {
121 int thrsw
=firmware
->getCapability(GetThrSwitch
);
122 MixData
*md
= &model
.mixData
[0];
123 uint8_t spo2ch
=(tpl
& 0x0F);
125 uint8_t spo1ch
=(tpl
& 0x0F);
127 uint8_t fla2ch
=(tpl
& 0x0F);
129 uint8_t fla1ch
=(tpl
& 0x0F);
131 uint8_t rud2ch
=(tpl
& 0x0F);
133 uint8_t ele2ch
=(tpl
& 0x0F);
135 uint8_t ail2ch
=(tpl
& 0x0F);
137 uint8_t chstyle
=(tpl
& 0x03);
139 uint8_t gyro
=(tpl
& 0x03);
141 uint8_t tailtype
=(tpl
& 0x03);
143 uint8_t swashtype
=(tpl
& 0x07);
145 uint8_t ruddertype
=(tpl
& 0x03);
147 uint8_t spoilertype
=(tpl
& 0x3);
149 uint8_t flaptype
=(tpl
& 0x03);
151 uint8_t ailerontype
=(tpl
& 0x03);
153 uint8_t enginetype
=(tpl
& 0x03);
155 uint8_t modeltype
=(tpl
& 0x03);
157 #define ICC(x) icc[(x)-1]
158 uint8_t icc
[4] = {0};
159 for(uint8_t i
=1; i
<=4; i
++) //generate inverse array
160 for(uint8_t j
=1; j
<=4; j
++) if(CC(i
)==j
) icc
[j
-1]=i
;
172 ailerons
=ailerontype
;
187 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD").toAscii().data(),6);
189 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
194 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD").toAscii().data(),6);
196 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
199 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("THR").toAscii().data(),6);
215 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
220 for (int j
=0; j
<10 ; j
++) {
222 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL2").toAscii().data(),6);
228 md
=setDest(ail2ch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL2").toAscii().data(),6);
233 for (int j
=0; j
<10 ; j
++) {
235 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();;strncpy(md
->name
, tr("ELE2").toAscii().data(),6);
241 md
=setDest(ele2ch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();;strncpy(md
->name
, tr("ELE2").toAscii().data(),6);
245 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_AIL
);strncpy(md
->name
, tr("FLAPS").toAscii().data(),6); md
->speedUp
=4; md
->speedDown
=4;
246 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_AIL
);strncpy(md
->name
, tr("FLAPS").toAscii().data(),6); md
->speedUp
=4; md
->speedDown
=4;
249 for (uint8_t i
=0; i
< flaps
; i
++) {
258 for (int j
=0; j
<10 ; j
++) {
260 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
=100*sign
; md
->sOffset
=0; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("FLAP%1").arg(i
+1).toAscii().data(),6);
266 md
=setDest(index
); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
=100*sign
; md
->sOffset
=0; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("FLAP%1").arg(i
+1).toAscii().data(),6);
271 setCurve(CURVE5(1),heli_ar1
);
272 setCurve(CURVE5(2),heli_ar2
);
273 setCurve(CURVE5(3),heli_ar3
);
274 setCurve(CURVE5(4),heli_ar4
);
275 setCurve(CURVE5(5),heli_ar5
);
276 setCurve(CURVE5(6),heli_ar5
);
279 model
.swashRingData
.type
= HELI_SWASH_TYPE_90
;
282 model
.swashRingData
.type
= HELI_SWASH_TYPE_120
;
285 model
.swashRingData
.type
= HELI_SWASH_TYPE_120X
;
288 model
.swashRingData
.type
= HELI_SWASH_TYPE_140
;
291 model
.swashRingData
.type
= HELI_SWASH_TYPE_NONE
;
294 model
.swashRingData
.collectiveSource
= RawSource(SOURCE_TYPE_CH
, 10);
298 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
299 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
300 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 2); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("PITCH").toAscii().data(),6);
302 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
303 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
304 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("PITCH").toAscii().data(),6);
306 md
=setDest(4); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD").toAscii().data(),6);
307 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(1); md
->carryTrim
=TRIM_OFF
;
308 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(2); md
->carryTrim
=TRIM_OFF
;
309 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(3); md
->carryTrim
=TRIM_OFF
;
310 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
313 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
);strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
314 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
);strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
317 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
= 50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
); md
->sOffset
=100;strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
318 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=-50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
); md
->sOffset
=100;strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
323 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
324 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
325 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 2); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("PITCH").toAscii().data(),6);
327 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
328 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
329 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
= 100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("PITCH").toAscii().data(),6);
331 md
=setDest(4); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD").toAscii().data(),6);
332 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(1); md
->carryTrim
=TRIM_OFF
;
333 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(2); md
->carryTrim
=TRIM_OFF
;
334 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(3); md
->carryTrim
=TRIM_OFF
;
335 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
338 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
);strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
339 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
);strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
342 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
= 50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
); md
->sOffset
=100;strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
343 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=-50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
); md
->sOffset
=100;strncpy(md
->name
, tr("GYRO").toAscii().data(),6);
348 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(4); md
->carryTrim
=TRIM_OFF
;
349 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(5); md
->carryTrim
=TRIM_OFF
;
350 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(6); md
->carryTrim
=TRIM_OFF
;
353 ailerons
=ailerontype
;
355 spoilers
=spoilertype
;
370 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("THR").toAscii().data(),6);
374 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD").toAscii().data(),6);
376 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD").toAscii().data(),6);
381 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
383 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
406 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
411 for (int j
=0; j
<10 ; j
++) {
413 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL2").toAscii().data(),6);
419 md
=setDest(ail2ch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL2").toAscii().data(),6);
424 for (int j
=0; j
<10 ; j
++) {
426 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE2").toAscii().data(),6);
432 md
=setDest(ele2ch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE2").toAscii().data(),6);
436 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_AIL
);strncpy(md
->name
, tr("FLAPS").toAscii().data(),6);md
->speedUp
=4; md
->speedDown
=4;
437 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_AIL
);strncpy(md
->name
, tr("FLAPS").toAscii().data(),6);md
->speedUp
=4; md
->speedDown
=4;
440 for (uint8_t i
=0; i
< flaps
; i
++) {
449 for (int j
=0; j
<10 ; j
++) {
451 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
=100*sign
; md
->sOffset
=0; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("FLAP%1").arg(i
+1).toAscii().data(),6);
457 md
=setDest(index
); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
=100*sign
; md
->sOffset
=0; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("FLAP%1").arg(i
+1).toAscii().data(),6);
461 md
=setDest(12); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
);strncpy(md
->name
, tr("SPOIL").toAscii().data(),6); md
->speedUp
=4;;md
->speedDown
=4;
462 md
=setDest(12); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
);strncpy(md
->name
, tr("SPOIL").toAscii().data(),6);md
->speedUp
=4;md
->speedDown
=4;
465 for (uint8_t i
=0; i
< spoilers
; i
++) {
474 for (int j
=0; j
<10 ; j
++) {
476 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 11); md
->weight
=100*sign
; md
->sOffset
=0; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("SPOIL%1").arg(i
+1).toAscii().data(),6);
482 md
=setDest(index
); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 11); md
->weight
=100*sign
; md
->sOffset
=0; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("SPOIL%1").arg(i
+1).toAscii().data(),6);
492 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("THR").toAscii().data(),6);
496 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
497 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("ELE").toAscii().data(),6);
500 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
501 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("AIL").toAscii().data(),6);
505 md
=setDest(rxch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD").toAscii().data(),6);
519 for (int j
=0; j
<10 ; j
++) {
521 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD2").toAscii().data(),6);
527 md
=setDest(rud2ch
); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=-100; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("RUD2").toAscii().data(),6);
531 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_AIL
);strncpy(md
->name
, tr("FLAPS").toAscii().data(),6); md
->sOffset
=0; md
->speedUp
=4;
532 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_AIL
);strncpy(md
->name
, tr("FLAPS").toAscii().data(),6); md
->sOffset
=0; md
->speedUp
=4;
535 for (uint8_t i
=0; i
< flaps
; i
++) {
544 for (int j
=0; j
<10 ; j
++) {
546 md
=setDest(j
+1); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
=100*sign
; md
->sOffset
=0; md
->speedUp
=4; md
->speedDown
=4; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("FLAP%1").arg(i
+1).toAscii().data(),6);
552 md
=setDest(index
); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 10); md
->weight
=100*sign
; md
->sOffset
=0; md
->speedUp
=4; md
->speedDown
=4; md
->swtch
=RawSwitch();strncpy(md
->name
, tr("FLAP%1").arg(i
+1).toAscii().data(),6);
559 if (modeltype
==1 && swashtype
!=4) {
560 ui
->tabWidget
->setCurrentIndex(1);
562 ui
->tabWidget
->setCurrentIndex(4);
567 void Templates::applyTemplate(uint8_t idx
)
569 int8_t heli_ar1
[] = {-100, -20, 30, 70, 90};
570 int8_t heli_ar2
[] = {80, 70, 60, 70, 100};
571 int8_t heli_ar3
[] = {100, 90, 80, 90, 100};
572 int8_t heli_ar4
[] = {-30, -15, 0, 50, 100};
573 int8_t heli_ar5
[] = {-100, -50, 0, 50, 100};
575 int thrsw
=firmware
->getCapability(GetThrSwitch
);
576 MixData
*md
= &model
.mixData
[0];
580 #define ICC(x) icc[(x)-1]
581 uint8_t icc
[4] = {0};
582 for(uint8_t i
=1; i
<=4; i
++) //generate inverse array
583 for(uint8_t j
=1; j
<=4; j
++) if(CC(i
)==j
) icc
[j
-1]=i
;
592 md
=setDest(ICC(STK_RUD
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();
593 md
=setDest(ICC(STK_ELE
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=100; md
->swtch
=RawSwitch();
594 md
=setDest(ICC(STK_THR
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch();
595 md
=setDest(ICC(STK_AIL
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();
600 md
=setDest(ICC(STK_THR
)); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
605 md
=setDest(ICC(STK_THR
)); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_VIRTUAL
, 12); md
->mltpx
=MLTPX_REP
;
606 md
=setDest(14); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 13); md
->weight
= 100; md
->swtch
=RawSwitch();
607 md
=setDest(14); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_VIRTUAL
, 11); md
->mltpx
=MLTPX_REP
;
608 md
=setDest(14); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
609 setSwitch(0xB, LS_FN_VNEG
, RawSource(SOURCE_TYPE_STICK
, 2).toValue(), -99);
610 setSwitch(0xC, LS_FN_VPOS
, RawSource(SOURCE_TYPE_CH
, 13).toValue(), 0);
617 md
=setDest(ICC(STK_THR
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch();
618 md
=setDest(ICC(STK_AIL
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();
619 md
=setDest(ICC(STK_RUD
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();
620 md
=setDest(ICC(STK_RUD
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();
621 md
=setDest(ICC(STK_ELE
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();
622 md
=setDest(ICC(STK_ELE
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();
628 md
=setDest(ICC(STK_THR
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch();
629 md
=setDest(ICC(STK_RUD
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();
630 md
=setDest(ICC(STK_ELE
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();
631 md
=setDest(ICC(STK_ELE
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
= 100; md
->swtch
=RawSwitch();
632 md
=setDest(ICC(STK_AIL
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-100; md
->swtch
=RawSwitch();
633 md
=setDest(ICC(STK_AIL
)); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=100; md
->swtch
=RawSwitch();
638 clearMixes(); //This time we want a clean slate
643 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();
644 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();
645 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 2); md
->weight
= 100; md
->swtch
=RawSwitch();
648 md
=setDest(4); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();
651 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(1); md
->carryTrim
=TRIM_OFF
;
652 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(2); md
->carryTrim
=TRIM_OFF
;
653 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(3); md
->carryTrim
=TRIM_OFF
;
654 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
657 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
);
658 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
);
661 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(4); md
->carryTrim
=TRIM_OFF
;
662 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(5); md
->carryTrim
=TRIM_OFF
;
663 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(6); md
->carryTrim
=TRIM_OFF
;
665 model
.swashRingData
.type
= HELI_SWASH_TYPE_120
;
666 model
.swashRingData
.collectiveSource
= RawSource(SOURCE_TYPE_CH
, 10);
669 setCurve(CURVE5(1),heli_ar1
);
670 setCurve(CURVE5(2),heli_ar2
);
671 setCurve(CURVE5(3),heli_ar3
);
672 setCurve(CURVE5(4),heli_ar4
);
673 setCurve(CURVE5(5),heli_ar5
);
674 setCurve(CURVE5(6),heli_ar5
);
676 // make sure curves are redrawn
682 //Heli Setup gyro gain control
684 clearMixes(); //This time we want a clean slate
689 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();
690 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();
691 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 2); md
->weight
= 100; md
->swtch
=RawSwitch();
694 md
=setDest(4); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();
697 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(1); md
->carryTrim
=TRIM_OFF
;
698 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(2); md
->carryTrim
=TRIM_OFF
;
699 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(3); md
->carryTrim
=TRIM_OFF
;
700 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
703 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
= 50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
); md
->sOffset
=100;
704 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=-50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
); md
->sOffset
=100;
707 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(4); md
->carryTrim
=TRIM_OFF
;
708 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(5); md
->carryTrim
=TRIM_OFF
;
709 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(6); md
->carryTrim
=TRIM_OFF
;
711 model
.swashRingData
.type
= HELI_SWASH_TYPE_120
;
712 model
.swashRingData
.collectiveSource
= RawSource(SOURCE_TYPE_CH
, 10);
715 setCurve(CURVE5(1),heli_ar1
);
716 setCurve(CURVE5(2),heli_ar2
);
717 setCurve(CURVE5(3),heli_ar3
);
718 setCurve(CURVE5(4),heli_ar4
);
719 setCurve(CURVE5(5),heli_ar5
);
720 setCurve(CURVE5(6),heli_ar5
);
722 // make sure curves are redrawn
730 int res
= QMessageBox::question(this,tr("Clear Mixes?"),tr("Really clear existing mixes on CH6?"),QMessageBox::Yes
| QMessageBox::No
);
731 if(res
!=QMessageBox::Yes
) return;
732 // first clear mix on ch6
736 for (int i
=0; i
< firmware
->getCapability(Mixes
); i
++) {
737 if (model
.mixData
[i
].destCh
==6) {
744 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
= 50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
); md
->sOffset
=100;
745 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=-50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
); md
->sOffset
=100;
748 //Heli Setup futaba style
750 clearMixes(); //This time we want a clean slate
755 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();
756 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();
757 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 2); md
->weight
= 100; md
->swtch
=RawSwitch();
760 md
=setDest(4); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();
763 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(1); md
->carryTrim
=TRIM_OFF
;
764 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(2); md
->carryTrim
=TRIM_OFF
;
765 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(3); md
->carryTrim
=TRIM_OFF
;
766 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
769 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
);
770 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-30; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
);
773 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(4); md
->carryTrim
=TRIM_OFF
;
774 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(5); md
->carryTrim
=TRIM_OFF
;
775 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(6); md
->carryTrim
=TRIM_OFF
;
777 model
.swashRingData
.type
= HELI_SWASH_TYPE_120
;
778 model
.swashRingData
.collectiveSource
= RawSource(SOURCE_TYPE_CH
, 10);
781 setCurve(CURVE5(1),heli_ar1
);
782 setCurve(CURVE5(2),heli_ar2
);
783 setCurve(CURVE5(3),heli_ar3
);
784 setCurve(CURVE5(4),heli_ar4
);
785 setCurve(CURVE5(5),heli_ar5
);
786 setCurve(CURVE5(6),heli_ar5
);
788 // make sure curves are redrawn
794 // Heli setup futaba style with gyro gain control
796 clearMixes(); //This time we want a clean slate
801 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 1); md
->weight
= 100; md
->swtch
=RawSwitch();
802 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 0); md
->weight
= 100; md
->swtch
=RawSwitch();
803 md
=setDest(6); md
->srcRaw
=RawSource(SOURCE_TYPE_CYC
, 2); md
->weight
= 100; md
->swtch
=RawSwitch();
806 md
=setDest(4); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch();
809 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(1); md
->carryTrim
=TRIM_OFF
;
810 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(2); md
->carryTrim
=TRIM_OFF
;
811 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
= 100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(3); md
->carryTrim
=TRIM_OFF
;
812 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,thrsw
); md
->mltpx
=MLTPX_REP
;
815 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
= 50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
); md
->sOffset
=100;
816 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=-50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
); md
->sOffset
=100;
819 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID0
); md
->curve
=CV(4); md
->carryTrim
=TRIM_OFF
;
820 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID1
); md
->curve
=CV(5); md
->carryTrim
=TRIM_OFF
;
821 md
=setDest(11); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_ID2
); md
->curve
=CV(6); md
->carryTrim
=TRIM_OFF
;
823 model
.swashRingData
.type
= HELI_SWASH_TYPE_120
;
824 model
.swashRingData
.collectiveSource
= RawSource(SOURCE_TYPE_CH
, 10);
827 setCurve(CURVE5(1),heli_ar1
);
828 setCurve(CURVE5(2),heli_ar2
);
829 setCurve(CURVE5(3),heli_ar3
);
830 setCurve(CURVE5(4),heli_ar4
);
831 setCurve(CURVE5(5),heli_ar5
);
832 setCurve(CURVE5(6),heli_ar5
);
834 // make sure curves are redrawn
840 // gyro gain control futaba style
842 int res
= QMessageBox::question(this,tr("Clear Mixes?"),tr("Really clear existing mixes on CH5?"),QMessageBox::Yes
| QMessageBox::No
);
843 if(res
!=QMessageBox::Yes
) return;
844 // first clear mix on ch6
848 for (int i
=0; i
< firmware
->getCapability(Mixes
); i
++) {
849 if (model
.mixData
[i
].destCh
==5) {
856 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
= 50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,-Board::SWITCH_GEA
); md
->sOffset
=100;
857 md
=setDest(5); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 5); md
->weight
=-50; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_SWITCH
,Board::SWITCH_GEA
); md
->sOffset
=100;
862 md
=setDest(15); md
->srcRaw
=RawSource(SOURCE_TYPE_CH
, 15); md
->weight
= 100; md
->speedUp
= 8; md
->speedDown
= 8; md
->swtch
=RawSwitch();
863 md
=setDest(16); md
->srcRaw
=RawSource(SOURCE_TYPE_CUSTOM_SWITCH
, 0); md
->weight
= 110; md
->swtch
=RawSwitch();
864 md
=setDest(16); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
=-110; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_VIRTUAL
, 2); md
->mltpx
=MLTPX_REP
;
865 md
=setDest(16); md
->srcRaw
=RawSource(SOURCE_TYPE_MAX
); md
->weight
= 110; md
->swtch
=RawSwitch(Board::SWITCH_TYPE_VIRTUAL
, 3); md
->mltpx
=MLTPX_REP
;
866 setSwitch(1, LS_FN_LESS
, RawSource(SOURCE_TYPE_CH
, 14).toValue(), RawSource(SOURCE_TYPE_CH
, 15).toValue());
867 setSwitch(2, LS_FN_VPOS
, RawSource(SOURCE_TYPE_CH
, 14).toValue(), 105);
868 setSwitch(3, LS_FN_VNEG
, RawSource(SOURCE_TYPE_CH
, 14).toValue(), -105);
870 // redraw switches tab
878 md
=setDest(1); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 3); md
->weight
=50; md
->swtch
=RawSwitch(); //CH1 AIL
879 md
=setDest(2); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 1); md
->weight
=-50; md
->swtch
=RawSwitch(); //CH2 ELE
880 md
=setDest(3); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 2); md
->weight
=100; md
->swtch
=RawSwitch(); //CH3 THR
881 md
=setDest(4); md
->srcRaw
=RawSource(SOURCE_TYPE_STICK
, 0); md
->weight
=100; md
->swtch
=RawSwitch(); //CH4 RUD
885 MixData
* Templates::setDest(uint8_t dch
)
888 while ((g_model
.mixData
[i
].destCh
<=dch
) && (g_model
.mixData
[i
].destCh
) && (i
<firmware
->getCapability(Mixes
))) i
++;
889 if(i
==firmware
->getCapability(Mixes
)) return &g_model
.mixData
[0];
891 memmove(&g_model
.mixData
[i
+1],&g_model
.mixData
[i
],
892 (firmware
->getCapability(Mixes
)-(i
+1))*sizeof(MixData
) );
893 memset(&g_model
.mixData
[i
],0,sizeof(MixData
));
894 g_model
.mixData
[i
].destCh
= dch
;
895 return &g_model
.mixData
[i
];