Subversion Repositories FlightCtrl

Rev

Rev 1619 | Rev 1626 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1619 Rev 1622
Line 8... Line 8...
8
#include <string.h>
8
#include <string.h>
9
#include <avr/pgmspace.h>
9
#include <avr/pgmspace.h>
10
#include "main.h"
10
#include "main.h"
11
#include "uart.h"
11
#include "uart.h"
12
#include "libfc.h"
12
#include "libfc.h"
-
 
13
#include "eeprom.h"
Line 13... Line 14...
13
 
14
 
14
 
15
 
15
#define FC_ADDRESS 1
16
#define FC_ADDRESS 1
-
 
17
#define NC_ADDRESS 2
Line 16... Line 18...
16
#define NC_ADDRESS 2
18
#define MK3MAG_ADDRESS 3
17
#define MK3MAG_ADDRESS 3
19
#define BL_CTRL_ADDRESS 5
18
 
20
 
19
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds
21
#define ABO_TIMEOUT 4000 // disable abo after 4 seconds
Line 295... Line 297...
295
// --------------------------------------------------------------------------
297
// --------------------------------------------------------------------------
296
void BearbeiteRxDaten(void)
298
void BearbeiteRxDaten(void)
297
{
299
{
298
 if(!NeuerDatensatzEmpfangen) return;
300
 if(!NeuerDatensatzEmpfangen) return;
Line 299... Line 301...
299
 
301
 
300
        unsigned char tempchar1, tempchar2;
302
        unsigned char tempchar1;
301
        Decode64(); // dekodiere datenblock im Empfangsbuffer
303
        Decode64(); // dekodiere datenblock im Empfangsbuffer
302
        switch(RxdBuffer[1]-'a') // check for Slave Address
304
        switch(RxdBuffer[1]-'a') // check for Slave Address
303
        {
305
        {
304
                case FC_ADDRESS: // FC special commands
306
                case FC_ADDRESS: // FC special commands
Line 317... Line 319...
317
                                        PcZugriff = 255;
319
                                        PcZugriff = 255;
318
                                        break;
320
                                        break;
Line 319... Line 321...
319
 
321
 
320
                        case 'n':// "Get Mixer
322
                        case 'n':// "Get Mixer
321
                                        while(!UebertragungAbgeschlossen);
323
                                        while(!UebertragungAbgeschlossen);
322
                    SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer,sizeof(Mixer));
324
                    SendOutData('N', FC_ADDRESS, 1, (unsigned char *) &Mixer, sizeof(Mixer) - 1);
Line 323... Line 325...
323
                                        break;
325
                                        break;
324
 
-
 
325
                        case 'm':// "Write Mixer
326
 
326
                                        while(!UebertragungAbgeschlossen);
327
                        case 'm':// "Write Mixer
327
                    if(pRxData[0] == MIXER_REVISION)
328
                    if(pRxData[0] == EEMIXER_REVISION)
328
                                        {
329
                                        {
329
                       memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer));
330
                       memcpy(&Mixer, (unsigned char *)pRxData, sizeof(Mixer) - 1);
330
                       eeprom_write_block(&Mixer, (void*)(EEPROM_ADR_MIXER_TABLE), sizeof(Mixer));
331
                       MixerTable_WriteToEEProm();
331
                                           tempchar1 = 1;
332
                                           tempchar1 = 1;
-
 
333
                                        }
-
 
334
                    else
-
 
335
                    {
-
 
336
                                                tempchar1 = 0;
332
                                        }
337
                                        }
333
                    else  tempchar1 = 0;
338
                                        while(!UebertragungAbgeschlossen);
Line 334... Line 339...
334
                                        SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
339
                                        SendOutData('M', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
335
                                        break;
340
                                        break;
Line 341... Line 346...
341
 
346
 
342
                        case 'q':// "Get"-Anforderung für Settings
347
                        case 'q':// "Get"-Anforderung für Settings
343
                                        // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
348
                                        // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
344
                                        if(pRxData[0] == 0xFF)
349
                                        if(pRxData[0] == 0xFF)
345
                                        {
350
                                        {
346
                                                pRxData[0] = GetActiveParamSetNumber();
351
                                                pRxData[0] = GetActiveParamSet();
347
                                        }
352
                                        }
348
                                        // limit settings range
353
                                        // limit settings range
349
                                        if(pRxData[0] < 1) pRxData[0] = 1; // limit to 5
354
                                        if(pRxData[0] < 1) pRxData[0] = 1; // limit to 5
350
                                        else if(pRxData[0] > 5) pRxData[0] = 5; // limit to 5
355
                                        else if(pRxData[0] > 5) pRxData[0] = 5; // limit to 5
351
                                        // load requested parameter set
-
 
352
                                        ReadParameterSet(pRxData[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
-
 
353
 
356
                                        // load requested parameter set
354
                                        while(!UebertragungAbgeschlossen);
357
                                        ParamSet_ReadFromEEProm(pRxData[0]);
355
                                        tempchar1 = pRxData[0];
358
                                        tempchar1 = pRxData[0];
356
                                        tempchar2 = EE_DATENREVISION;
359
                                        while(!UebertragungAbgeschlossen);
357
                                        SendOutData('Q', FC_ADDRESS, 3, &tempchar1, sizeof(tempchar1), &tempchar2, sizeof(tempchar2), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
360
                                        SendOutData('Q', FC_ADDRESS, 2, &tempchar1, sizeof(tempchar1), (unsigned char *) &EE_Parameter, sizeof(EE_Parameter) - 1);
Line 358... Line 361...
358
                                        break;
361
                                        break;
359
 
362
 
360
                        case 's': // Parametersatz speichern
363
                        case 's': // Parametersatz speichern
361
                                        if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EE_DATENREVISION)) // check for setting to be in range
364
                                        if((1 <= pRxData[0]) && (pRxData[0] <= 5) && (pRxData[1] == EEPARAM_REVISION)) // check for setting to be in range
362
                                        {
365
                                        {
363
                                                memcpy((unsigned char *) &EE_Parameter.Kanalbelegung[0], (unsigned char *)&pRxData[2], STRUCT_PARAM_LAENGE);
366
                                                memcpy(&EE_Parameter, (uint8_t*)&pRxData[1], sizeof(EE_Parameter) - 1);
364
                                                WriteParameterSet(pRxData[0], (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
367
                                                ParamSet_WriteToEEProm(pRxData[0]);
365
                                                Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
-
 
366
                                                Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
368
                                                Umschlag180Nick = (long) EE_Parameter.WinkelUmschlagNick * 2500L;
367
                                                SetActiveParamSetNumber(pRxData[0]);
369
                                                Umschlag180Roll = (long) EE_Parameter.WinkelUmschlagRoll * 2500L;
368
                                                tempchar1 = GetActiveParamSetNumber();
370
                                                tempchar1 = GetActiveParamSet();
369
                                        }
371
                                        }
370
                                        else
372
                                        else
371
                                        {
373
                                        {
Line 376... Line 378...
376
                                        if(!MotorenEin) Piep(tempchar1,110);
378
                                        if(!MotorenEin) Piep(tempchar1,110);
377
                                        LipoDetection(0);
379
                                        LipoDetection(0);
378
                                        LIBFC_ReceiverInit();
380
                                        LIBFC_ReceiverInit();
379
                                        break;
381
                                        break;
380
                        case 'f': // auf anderen Parametersatz umschalten
382
                        case 'f': // auf anderen Parametersatz umschalten
381
                                if((1 <= pRxData[0]) && (pRxData[0] <= 5)) SetActiveParamSetNumber(pRxData[0]);
383
                                if((1 <= pRxData[0]) && (pRxData[0] <= 5)) ParamSet_ReadFromEEProm(pRxData[0]);
382
                                        tempchar1 = pRxData[0];
384
                                        tempchar1 = GetActiveParamSet();
383
                        ReadParameterSet(tempchar1, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
-
 
384
                                        while(!UebertragungAbgeschlossen);
385
                                        while(!UebertragungAbgeschlossen);
385
                                        SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
386
                                        SendOutData('F', FC_ADDRESS, 1, &tempchar1, sizeof(tempchar1));
386
                                        if(!MotorenEin) Piep(tempchar1,110);
387
                                        if(!MotorenEin) Piep(tempchar1,110);
387
                                        LipoDetection(0);
388
                                        LipoDetection(0);
388
                                        LIBFC_ReceiverInit();
389
                                        LIBFC_ReceiverInit();