Subversion Repositories Projects

Rev

Rev 442 | Rev 450 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
307 KeyOz 1
/***************************************************************************
2
 *   Copyright (C) 2009 by Manuel Schrape                                  *
3
 *   manuel.schrape@gmx.de                                                 *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation; either version 2 of the License.        *
8
 *                                                                         *
9
 *   This program is distributed in the hope that it will be useful,       *
10
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
11
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
12
 *   GNU General Public License for more details.                          *
13
 *                                                                         *
14
 *   You should have received a copy of the GNU General Public License     *
15
 *   along with this program; if not, write to the                         *
16
 *   Free Software Foundation, Inc.,                                       *
17
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
18
 ***************************************************************************/
19
#include "dlg_MotorMixer.h"
20
 
21
dlg_MotorMixer::dlg_MotorMixer(QWidget *parent) : QDialog(parent)
22
{
23
    setupUi(this);
24
    connect(pb_READ, SIGNAL(clicked()), this, SLOT(slot_pb_READ()));
25
    connect(pb_LOAD, SIGNAL(clicked()), this, SLOT(slot_pb_LOAD()));
26
    connect(pb_SAVE, SIGNAL(clicked()), this, SLOT(slot_pb_SAVE()));
27
    connect(pb_WRITE, SIGNAL(clicked()), this, SLOT(slot_pb_WRITE()));
28
 
29
    connect(sb_NICK_1, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
30
    connect(sb_NICK_2, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
31
    connect(sb_NICK_3, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
32
    connect(sb_NICK_4, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
33
    connect(sb_NICK_5, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
34
    connect(sb_NICK_6, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
35
    connect(sb_NICK_7, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
36
    connect(sb_NICK_8, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
37
    connect(sb_NICK_9, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
38
    connect(sb_NICK_10, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
39
    connect(sb_NICK_11, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
40
    connect(sb_NICK_12, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
41
 
42
    connect(sb_ROLL_1, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
43
    connect(sb_ROLL_2, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
44
    connect(sb_ROLL_3, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
45
    connect(sb_ROLL_4, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
46
    connect(sb_ROLL_5, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
47
    connect(sb_ROLL_6, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
48
    connect(sb_ROLL_7, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
49
    connect(sb_ROLL_8, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
50
    connect(sb_ROLL_9, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
51
    connect(sb_ROLL_10, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
52
    connect(sb_ROLL_11, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
53
    connect(sb_ROLL_12, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
54
 
55
    connect(sb_GIER_1, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
56
    connect(sb_GIER_2, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
57
    connect(sb_GIER_3, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
58
    connect(sb_GIER_4, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
59
    connect(sb_GIER_5, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
60
    connect(sb_GIER_6, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
61
    connect(sb_GIER_7, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
62
    connect(sb_GIER_8, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
63
    connect(sb_GIER_9, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
64
    connect(sb_GIER_10, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
65
    connect(sb_GIER_11, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
66
    connect(sb_GIER_12, SIGNAL(valueChanged(int)), this, SLOT(slot_CheckValue(int)));
67
 
68
}
69
 
70
// Connection-Object übergeben.
396 Brean 71
void dlg_MotorMixer::set_Objects(Handler *handler, cSettings *t_Settings)
307 KeyOz 72
{
396 Brean 73
    this->handler = handler;
442 Brean 74
    this->data = handler->data;
307 KeyOz 75
    o_Settings   = t_Settings;
76
}
77
 
78
// Motordaten übernehmen.
449 Brean 79
//FIXME: put this in libMK/Handler.cpp and fill motor values in KopterData
80
/*
307 KeyOz 81
void dlg_MotorMixer::set_MotorConfig(sRxData RX)
82
{
83
    int Pos = 0;
84
 
396 Brean 85
    MixerName = ToolBox::dataToQString(RX.decode, 1, 12);
307 KeyOz 86
 
87
    Pos = 13;
88
 
89
    for (int z = 0; z < 16; z++)
90
    {
91
        for (int y = 0; y < 4; y++)
92
        {
396 Brean 93
            Motor[z][y] = Parser::dataToChar(RX.decode,Pos);
307 KeyOz 94
            Pos++;
95
        }
96
    }
97
 
98
    set_MotorData();
449 Brean 99
}
440 Brean 100
*/
307 KeyOz 101
 
102
// Motordaten aus GUI übernehmen
103
void dlg_MotorMixer::get_MotorData()
104
{
442 Brean 105
    sMotorData motorData;
106
 
449 Brean 107
    motorData.mixer_name = le_NAME->text().toAscii().data();
307 KeyOz 108
 
442 Brean 109
    int gas[MAX_MOTORS] = {
110
        sb_GAS_1->value(), sb_GAS_2->value(), sb_GAS_3->value(), sb_GAS_4->value(),
111
        sb_GAS_5->value(), sb_GAS_6->value(), sb_GAS_7->value(), sb_GAS_8->value(),
112
        sb_GAS_9->value(), sb_GAS_10->value(), sb_GAS_11->value(), sb_GAS_12->value()
440 Brean 113
    };
442 Brean 114
    int nick[MAX_MOTORS] = {
115
        sb_NICK_1->value(), sb_NICK_2->value(), sb_NICK_3->value(), sb_NICK_4->value(),
116
        sb_NICK_5->value(), sb_NICK_6->value(), sb_NICK_7->value(), sb_NICK_8->value(),
117
        sb_NICK_9->value(), sb_NICK_10->value(), sb_NICK_11->value(), sb_NICK_12->value()
118
    };
119
    int roll[MAX_MOTORS] = {
120
        sb_ROLL_1->value(), sb_ROLL_2->value(), sb_ROLL_3->value(), sb_ROLL_4->value(),
121
        sb_ROLL_5->value(), sb_ROLL_6->value(), sb_ROLL_7->value(), sb_ROLL_8->value(),
122
        sb_ROLL_9->value(), sb_ROLL_10->value(), sb_ROLL_11->value(), sb_ROLL_12->value()
123
    };
124
    int yaw[MAX_MOTORS] = {
125
        sb_GIER_1->value(), sb_GIER_2->value(), sb_GIER_3->value(), sb_GIER_4->value(),
126
        sb_GIER_5->value(), sb_GIER_6->value(), sb_GIER_7->value(), sb_GIER_8->value(),
127
        sb_GIER_9->value(), sb_GIER_10->value(), sb_GIER_11->value(), sb_GIER_12->value()
128
    };
129
    for (int i = 0; i < MAX_MOTORS; i++) {
130
        motorData.mixer_gas[i] = gas[i];
131
        motorData.mixer_nick[i] = nick[i];
132
        motorData.mixer_roll[i] = roll[i];
133
        motorData.mixer_yaw[i] = yaw[i];
134
    }
135
    //FIXME: add Function in handler to send data
307 KeyOz 136
}
137
 
138
// Motordaten anzeigen
139
void dlg_MotorMixer::set_MotorData()
140
{
442 Brean 141
    sMotorData motorData = handler->data->motor;
449 Brean 142
    le_NAME->setText(motorData.mixer_name);
307 KeyOz 143
 
442 Brean 144
    sb_GAS_1->setValue(motorData.mixer_gas[0]);
145
    sb_GAS_2->setValue(motorData.mixer_gas[1]);
146
    sb_GAS_3->setValue(motorData.mixer_gas[2]);
147
    sb_GAS_4->setValue(motorData.mixer_gas[3]);
148
    sb_GAS_5->setValue(motorData.mixer_gas[4]);
149
    sb_GAS_6->setValue(motorData.mixer_gas[5]);
150
    sb_GAS_7->setValue(motorData.mixer_gas[6]);
151
    sb_GAS_8->setValue(motorData.mixer_gas[7]);
152
    sb_GAS_9->setValue(motorData.mixer_gas[8]);
153
    sb_GAS_10->setValue(motorData.mixer_gas[9]);
154
    sb_GAS_11->setValue(motorData.mixer_gas[10]);
155
    sb_GAS_12->setValue(motorData.mixer_gas[11]);
307 KeyOz 156
 
442 Brean 157
    sb_NICK_1->setValue(motorData.mixer_nick[0]);
158
    sb_NICK_2->setValue(motorData.mixer_nick[1]);
159
    sb_NICK_3->setValue(motorData.mixer_nick[2]);
160
    sb_NICK_4->setValue(motorData.mixer_nick[3]);
161
    sb_NICK_5->setValue(motorData.mixer_nick[4]);
162
    sb_NICK_6->setValue(motorData.mixer_nick[5]);
163
    sb_NICK_7->setValue(motorData.mixer_nick[6]);
164
    sb_NICK_8->setValue(motorData.mixer_nick[7]);
165
    sb_NICK_9->setValue(motorData.mixer_nick[8]);
166
    sb_NICK_10->setValue(motorData.mixer_nick[9]);
167
    sb_NICK_11->setValue(motorData.mixer_nick[10]);
168
    sb_NICK_12->setValue(motorData.mixer_nick[11]);
307 KeyOz 169
 
442 Brean 170
    sb_ROLL_1->setValue(motorData.mixer_roll[0]);
171
    sb_ROLL_2->setValue(motorData.mixer_roll[1]);
172
    sb_ROLL_3->setValue(motorData.mixer_roll[2]);
173
    sb_ROLL_4->setValue(motorData.mixer_roll[3]);
174
    sb_ROLL_5->setValue(motorData.mixer_roll[4]);
175
    sb_ROLL_6->setValue(motorData.mixer_roll[5]);
176
    sb_ROLL_7->setValue(motorData.mixer_roll[6]);
177
    sb_ROLL_8->setValue(motorData.mixer_roll[7]);
178
    sb_ROLL_9->setValue(motorData.mixer_roll[8]);
179
    sb_ROLL_10->setValue(motorData.mixer_roll[9]);
180
    sb_ROLL_11->setValue(motorData.mixer_roll[10]);
181
    sb_ROLL_12->setValue(motorData.mixer_roll[11]);
307 KeyOz 182
 
442 Brean 183
    sb_GIER_1->setValue(motorData.mixer_yaw[0]);
184
    sb_GIER_2->setValue(motorData.mixer_yaw[1]);
185
    sb_GIER_3->setValue(motorData.mixer_yaw[2]);
186
    sb_GIER_4->setValue(motorData.mixer_yaw[3]);
187
    sb_GIER_5->setValue(motorData.mixer_yaw[4]);
188
    sb_GIER_6->setValue(motorData.mixer_yaw[5]);
189
    sb_GIER_7->setValue(motorData.mixer_yaw[6]);
190
    sb_GIER_8->setValue(motorData.mixer_yaw[7]);
191
    sb_GIER_9->setValue(motorData.mixer_yaw[8]);
192
    sb_GIER_10->setValue(motorData.mixer_yaw[9]);
193
    sb_GIER_11->setValue(motorData.mixer_yaw[10]);
194
    sb_GIER_12->setValue(motorData.mixer_yaw[11]);
307 KeyOz 195
}
196
 
197
// Prüfen auf vollstaändigkeit
198
void dlg_MotorMixer::slot_CheckValue(int Wert)
199
{
200
    Wert = Wert;
201
 
442 Brean 202
    int NICK = sb_NICK_1->value()  + sb_NICK_2->value()  + sb_NICK_3->value() +
203
               sb_NICK_4->value()  + sb_NICK_5->value()  + sb_NICK_6->value() +
204
               sb_NICK_7->value()  + sb_NICK_8->value()  + sb_NICK_9->value() +
205
               sb_NICK_10->value() + sb_NICK_11->value() + sb_NICK_12->value();
307 KeyOz 206
 
442 Brean 207
    int ROLL = sb_ROLL_1->value()  + sb_ROLL_2->value()  + sb_ROLL_3->value() +
208
               sb_ROLL_4->value()  + sb_ROLL_5->value()  + sb_ROLL_6->value() +
209
               sb_ROLL_7->value()  + sb_ROLL_8->value()  + sb_ROLL_9->value() +
210
               sb_ROLL_10->value() + sb_ROLL_11->value() + sb_ROLL_12->value();
307 KeyOz 211
 
442 Brean 212
    int GIER = sb_GIER_1->value()  + sb_GIER_2->value()  + sb_GIER_3->value() +
213
               sb_GIER_4->value()  + sb_GIER_5->value()  + sb_GIER_6->value() +
214
               sb_GIER_7->value()  + sb_GIER_8->value()  + sb_GIER_9->value() +
215
               sb_GIER_10->value() + sb_GIER_11->value() + sb_GIER_12->value();
307 KeyOz 216
 
217
    if (NICK == 0)
218
    {
219
        lb_NICK->setEnabled(true);
220
    }
221
    else
222
    {
223
        lb_NICK->setEnabled(false);
224
    }
225
 
226
    if (ROLL == 0)
227
    {
228
        lb_ROLL->setEnabled(true);
229
    }
230
    else
231
    {
232
        lb_ROLL->setEnabled(false);
233
    }
234
 
235
    if (GIER == 0)
236
    {
237
        lb_GIER->setEnabled(true);
238
    }
239
    else
240
    {
241
        lb_GIER->setEnabled(false);
242
    }
243
}
244
 
440 Brean 245
//FIXME: put this in libMK/Handler.cpp
396 Brean 246
/*
307 KeyOz 247
int dlg_MotorMixer::get_MotorConfig()
248
{
249
    get_MotorData();
250
 
251
    TX_Data[0] = VERSION_MIXER;
252
 
253
    char *Name = MixerName.toLatin1().data();
254
 
255
    int a;
256
 
257
    for (a = 0; a < MixerName.length(); a++)
258
    {
259
        TX_Data[1+a] = Name[a];
260
    }
261
 
262
    while(a < 12)
263
    {
264
        TX_Data[1+a] = 0;
265
        a++;
266
    }
267
 
268
    int Pos = 13;
269
 
270
    for (int z = 0; z < 16; z++)
271
    {
272
        for (int y = 0; y < 4; y++)
273
        {
396 Brean 274
            TX_Data[Pos] = Parser::charToData(Motor[z][y]);
307 KeyOz 275
            Pos++;
276
        }
277
    }
278
 
279
    return Pos - 1;
280
}
440 Brean 281
*/
307 KeyOz 282
 
396 Brean 283
// read motor values
307 KeyOz 284
void dlg_MotorMixer::slot_pb_READ()
285
{
396 Brean 286
    //send command to get mixer values
440 Brean 287
    handler->read_motor_mixer();
307 KeyOz 288
}
289
 
396 Brean 290
//write motor values
440 Brean 291
//FIXME: put this in libMK/Handler.cpp
307 KeyOz 292
void dlg_MotorMixer::slot_pb_WRITE()
293
{
440 Brean 294
    char tx_data[150];
295
    int length = handler->get_motor_config(tx_data);
296
    handler->write_motor_mixer(tx_data, length);
307 KeyOz 297
}
298
 
299
void dlg_MotorMixer::slot_pb_LOAD()
300
{
358 KeyOz 301
    QString Filename = QFileDialog::getOpenFileName(this, tr("Mikrokopter MotorMixer laden"),  o_Settings->DIR.Parameter + "", tr("MK MotorMixer(*.mkm);;Alle Dateien (*)"));
307 KeyOz 302
 
303
    if (!Filename.isEmpty())
304
    {
305
        QSettings Setting(Filename, QSettings::IniFormat);
306
 
307
        Setting.beginGroup("Info");
442 Brean 308
            data->motor.mixer_name = Setting.value("Name", QString("--noname--")).toString().toAscii().data();
309
            data->motor.mixer_version = Setting.value("Version", 0).toInt();
307 KeyOz 310
        Setting.endGroup();
311
 
312
        Setting.beginGroup("Gas");
313
            for (int z = 0; z < MAXMOTOR; z++)
314
            {
442 Brean 315
                data->motor.mixer_gas[z] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
307 KeyOz 316
            }
317
        Setting.endGroup();
318
 
319
        Setting.beginGroup("Nick");
320
            for (int z = 0; z < MAXMOTOR; z++)
321
            {
442 Brean 322
                data->motor.mixer_nick[z] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
307 KeyOz 323
            }
324
        Setting.endGroup();
325
 
326
        Setting.beginGroup("Roll");
327
            for (int z = 0; z < MAXMOTOR; z++)
328
            {
442 Brean 329
                data->motor.mixer_roll[z] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
307 KeyOz 330
            }
331
        Setting.endGroup();
332
 
333
        Setting.beginGroup("Yaw");
334
            for (int z = 0; z < MAXMOTOR; z++)
335
            {
442 Brean 336
                data->motor.mixer_yaw[z] = Setting.value(QString("Motor%1").arg(z+1), 0).toInt();
307 KeyOz 337
            }
338
        Setting.endGroup();
442 Brean 339
 
340
        if (data->motor.mixer_version == VERSION_MIXER)
307 KeyOz 341
        {
342
            set_MotorData();
343
        }
344
    }
345
}
346
 
347
void dlg_MotorMixer::slot_pb_SAVE()
348
{
358 KeyOz 349
    QString Filename = QFileDialog::getSaveFileName(this, tr("Mikrokopter MotorMixer speichern"), o_Settings->DIR.Parameter + "/" + le_NAME->text(), tr("MK MotorMixer(*.mkm);;Alle Dateien (*)"));
307 KeyOz 350
 
351
    if (!Filename.isEmpty())
352
    {
353
        if (!(Filename.endsWith(".mkm", Qt::CaseInsensitive)))
354
        {
355
            Filename = Filename + QString(".mkm");
356
        }
357
 
358
        get_MotorData();
359
 
360
        QSettings Setting(Filename, QSettings::IniFormat);
361
 
362
        Setting.beginGroup("Info");
449 Brean 363
            Setting.setValue("Name",         data->motor.mixer_name);
442 Brean 364
            Setting.setValue("Version",      data->motor.mixer_version);
307 KeyOz 365
        Setting.endGroup();
366
 
367
        Setting.beginGroup("Gas");
368
            for (int z = 0; z < MAXMOTOR; z++)
369
            {
442 Brean 370
                Setting.setValue(QString("Motor%1").arg(z+1), data->motor.mixer_gas[z]);
307 KeyOz 371
            }
372
        Setting.endGroup();
373
 
374
        Setting.beginGroup("Nick");
375
            for (int z = 0; z < MAXMOTOR; z++)
376
            {
442 Brean 377
                 Setting.setValue(QString("Motor%1").arg(z+1), data->motor.mixer_nick[z]);
307 KeyOz 378
            }
379
        Setting.endGroup();
380
 
381
        Setting.beginGroup("Roll");
382
            for (int z = 0; z < MAXMOTOR; z++)
383
            {
442 Brean 384
                Setting.setValue(QString("Motor%1").arg(z+1), data->motor.mixer_roll[z]);
307 KeyOz 385
            }
386
        Setting.endGroup();
387
 
388
        Setting.beginGroup("Yaw");
389
            for (int z = 0; z < MAXMOTOR; z++)
390
            {
442 Brean 391
                Setting.setValue(QString("Motor%1").arg(z+1), data->motor.mixer_yaw[z]);
307 KeyOz 392
            }
393
        Setting.endGroup();
394
    }
395
}