Subversion Repositories FlightCtrl

Rev

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

Rev 1036 Rev 1051
Line 5... Line 5...
5
//struct str_ToNaviCtrl_Version   ToNaviCtrl_Version;
5
//struct str_ToNaviCtrl_Version   ToNaviCtrl_Version;
6
//struct str_FromNaviCtrl_Version   FromNaviCtrl_Version;
6
//struct str_FromNaviCtrl_Version   FromNaviCtrl_Version;
7
struct str_ToNaviCtrl   ToNaviCtrl;
7
struct str_ToNaviCtrl   ToNaviCtrl;
8
struct str_FromNaviCtrl   FromNaviCtrl;
8
struct str_FromNaviCtrl   FromNaviCtrl;
9
struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
9
struct str_FromNaviCtrl_Value FromNaviCtrl_Value;
-
 
10
struct str_SPI_VersionInfo SPI_VersionInfo;
Line 10... Line 11...
10
 
11
 
11
unsigned char              SPI_BufferIndex;
12
unsigned char              SPI_BufferIndex;
Line 12... Line 13...
12
unsigned char              SPI_RxBufferIndex;
13
unsigned char              SPI_RxBufferIndex;
Line 23... Line 24...
23
#ifdef USE_SPI_COMMUNICATION
24
#ifdef USE_SPI_COMMUNICATION
Line 24... Line 25...
24
 
25
 
25
//------------------------------------------------------
26
//------------------------------------------------------
26
void SPI_MasterInit(void)
27
void SPI_MasterInit(void)
27
{
28
{
28
  DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK);    // Set MOSI and SCK output, all others input 
29
  DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK);    // Set MOSI and SCK output, all others input
29
  SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT);
30
  SLAVE_SELECT_DDR_PORT |= (1 << SPI_SLAVE_SELECT);
30
   
31
 
31
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE);   // Enable SPI, Master, set clock rate fck/64 
32
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(0<<SPR0)|(0<<SPIE);   // Enable SPI, Master, set clock rate fck/64
32
  SPSR = 0;//(1<<SPI2X);
33
  SPSR = 0;//(1<<SPI2X);
33
 
34
 
34
  SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);
35
  SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);
35
  SPITransferCompleted = 1;
36
  SPITransferCompleted = 1;
36
 
37
 
37
  //SPDR = 0x00;  // dummy write
38
  //SPDR = 0x00;  // dummy write
38
 
39
 
39
  ToNaviCtrl.Sync1 = 0xAA;
40
  ToNaviCtrl.Sync1 = 0xAA;
40
  ToNaviCtrl.Sync2 = 0x83;
41
  ToNaviCtrl.Sync2 = 0x83;
41
 
42
 
42
  ToNaviCtrl.Command = SPI_CMD_USER;
43
  ToNaviCtrl.Command = SPI_CMD_USER;
43
  ToNaviCtrl.IntegralNick = 0;
44
  ToNaviCtrl.IntegralNick = 0;
44
  ToNaviCtrl.IntegralRoll = 0;
45
  ToNaviCtrl.IntegralRoll = 0;
-
 
46
  SPI_RxDataValid = 0;
-
 
47
 
-
 
48
  SPI_VersionInfo.Major = VERSION_MAJOR;
-
 
49
  SPI_VersionInfo.Minor = VERSION_MINOR;
-
 
50
  SPI_VersionInfo.Patch = VERSION_PATCH;
45
  SPI_RxDataValid = 0;
51
  SPI_VersionInfo.Compatible = NC_SPI_COMPATIBLE;
Line 46... Line 52...
46
}
52
}
47
 
53
 
48
//------------------------------------------------------
54
//------------------------------------------------------
49
void SPI_StartTransmitPacket(void)
55
void SPI_StartTransmitPacket(void)
50
{
56
{
51
   //if ((SLAVE_SELECT_PORT & (1 << SPI_SLAVE_SELECT)) == 0) return;    // transfer of prev. packet not completed
57
   //if ((SLAVE_SELECT_PORT & (1 << SPI_SLAVE_SELECT)) == 0) return;    // transfer of prev. packet not completed
52
   if (!SPITransferCompleted) return;
58
   if (!SPITransferCompleted) return;
53
//   _delay_us(30); 
59
//   _delay_us(30);
54
   
60
 
55
   SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
61
   SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
56
   SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl;
62
   SPI_TX_Buffer = (unsigned char *) &ToNaviCtrl;
57
   
63
 
58
   ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++];
64
   ToNaviCtrl.Command = SPI_CommandSequence[SPI_CommandCounter++];
59
   if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0;
65
   if (SPI_CommandCounter >= sizeof(SPI_CommandSequence)) SPI_CommandCounter = 0;
60
   
66
 
Line 61... Line 67...
61
   SPITransferCompleted = 0;
67
   SPITransferCompleted = 0;
62
   UpdateSPI_Buffer();                              // update buffer
68
   UpdateSPI_Buffer();                              // update buffer
63
 
69
 
64
   SPI_BufferIndex = 1;
70
   SPI_BufferIndex = 1;
65
  //ebugOut.Analog[16]++; 
71
  //ebugOut.Analog[16]++;
66
   // -- Debug-Output ---
72
   // -- Debug-Output ---
67
   //----
73
   //----
68
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
74
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
69
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
75
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
70
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
76
   asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
Line 71... Line 77...
71
   ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
77
   ToNaviCtrl.Chksum = ToNaviCtrl.Sync1;
Line 72... Line 78...
72
   SPDR = ToNaviCtrl.Sync1;                  // Start transmission 
78
   SPDR = ToNaviCtrl.Sync1;                  // Start transmission
73
//     SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
79
//     SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
74
 
80
 
75
}
81
}
76
 
82
 
77
//------------------------------------------------------
83
//------------------------------------------------------
78
//SIGNAL(SIG_SPI)
84
//SIGNAL(SIG_SPI)
79
void SPI_TransmitByte(void)
85
void SPI_TransmitByte(void)
80
{
86
{
81
   static unsigned char SPI_RXState = 0;
87
   static unsigned char SPI_RXState = 0;
82
   unsigned char rxdata;
88
   unsigned char rxdata;
83
   static unsigned char rxchksum;
89
   static unsigned char rxchksum;
84
   
90
 
85
   if (SPITransferCompleted) return;
91
   if (SPITransferCompleted) return;
86
   if (!(SPSR & (1 << SPIF))) return;
92
   if (!(SPSR & (1 << SPIF))) return;
87
  SendSPI = 4;
93
  SendSPI = 4;
88
   
94
 
89
//   _delay_us(30); 
95
//   _delay_us(30);
90
  SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
96
  SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
91
 
97
 
92
  rxdata = SPDR;
98
  rxdata = SPDR;
93
  switch ( SPI_RXState)
99
  switch ( SPI_RXState)
94
  {
100
  {
95
  case 0:
101
  case 0:
96
           
102
 
97
                        SPI_RxBufferIndex = 0;
103
                        SPI_RxBufferIndex = 0;
Line 98... Line 104...
98
                        //DebugOut.Analog[17]++;
104
                        //DebugOut.Analog[17]++;
99
                        rxchksum = rxdata;  
105
                        rxchksum = rxdata;
100
                        if (rxdata == 0x81 )  { SPI_RXState  = 1;  }   // 1. Syncbyte ok 
106
                        if (rxdata == 0x81 )  { SPI_RXState  = 1;  }   // 1. Syncbyte ok
101
                       
107
 
102
           break;
108
           break;
103
 
109
 
104
   case 1:
110
   case 1:
105
                    if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState  = 2;  }   // 2. Syncbyte ok 
111
                    if (rxdata == 0x55) { rxchksum += rxdata; SPI_RXState  = 2;  }   // 2. Syncbyte ok
106
                 else SPI_RXState  = 0;    
112
                 else SPI_RXState  = 0;
107
                        //DebugOut.Analog[18]++;
113
                        //DebugOut.Analog[18]++;
108
           break;      
114
           break;
109
           
115
 
110
   case 2:
116
   case 2:
111
                   SPI_Buffer[SPI_RxBufferIndex++]= rxdata;             // get data
117
                   SPI_Buffer[SPI_RxBufferIndex++]= rxdata;             // get data
112
           //DebugOut.Analog[19]++;
118
           //DebugOut.Analog[19]++;
113
           if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl))
119
           if (SPI_RxBufferIndex >= sizeof(FromNaviCtrl))
114
                   {  
120
                   {
115
                         
121
 
116
                if (rxdata == rxchksum)
122
                if (rxdata == rxchksum)
117
                        {
123
                        {
118
                  unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
124
                  unsigned char *ptr = (unsigned char *)&FromNaviCtrl;
119
     
125
 
120
                          memcpy(ptr, (unsigned char *) SPI_Buffer,  sizeof(SPI_Buffer));
126
                          memcpy(ptr, (unsigned char *) SPI_Buffer,  sizeof(SPI_Buffer));
121
                         
127
 
122
                          SPI_RxDataValid = 1;
128
                          SPI_RxDataValid = 1;
123
                        }
129
                        }
124
                        else SPI_RxDataValid = 0;
130
                        else SPI_RxDataValid = 0;
125
                       
131
 
126
                        SPI_RXState  = 0;  
132
                        SPI_RXState  = 0;
127
                   }
133
                   }
128
                  else rxchksum += rxdata;
134
                  else rxchksum += rxdata;
129
        break;   
135
        break;
130
         
136
 
131
  }            
137
  }
132
 
138
 
133
   if (SPI_BufferIndex < sizeof(ToNaviCtrl))  
139
   if (SPI_BufferIndex < sizeof(ToNaviCtrl))
134
     {
140
     {
135
           SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
141
           SLAVE_SELECT_PORT &=  ~(1 << SPI_SLAVE_SELECT);  // SelectSlave
136
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
142
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
Line 137... Line 143...
137
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
143
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
138
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
144
           asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");         asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop"); asm volatile ("nop");
139
           
145
 
140
           SPDR = SPI_TX_Buffer[SPI_BufferIndex];
146
           SPDR = SPI_TX_Buffer[SPI_BufferIndex];
141
           ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex];
147
           ToNaviCtrl.Chksum += SPI_TX_Buffer[SPI_BufferIndex];
Line 142... Line 148...
142
        //   SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
148
        //   SLAVE_SELECT_PORT |=  (1 << SPI_SLAVE_SELECT);   // DeselectSlave
143
 
149
 
144
         }
150
         }
145
         else SPITransferCompleted = 1;  
151
         else SPITransferCompleted = 1;
146
       
152
 
147
         SPI_BufferIndex++;
153
         SPI_BufferIndex++;
148
}
154
}
149
 
155
 
150
 
156
 
151
//------------------------------------------------------
157
//------------------------------------------------------
152
void UpdateSPI_Buffer(void)
158
void UpdateSPI_Buffer(void)
153
{
159
{
154
  static unsigned char i =0;
160
  static unsigned char i =0;
155
  signed int tmp;
161
  signed int tmp;
156
  cli();
162
  cli();
Line 157... Line 163...
157
 
163
 
158
  ToNaviCtrl.IntegralNick = (int) (IntegralNick / 108);
164
  ToNaviCtrl.IntegralNick = (int) (IntegralNick / 108);
159
  ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / 108);
165
  ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / 108);
160
  ToNaviCtrl.GyroCompass = ErsatzKompass / GIER_GRAD_FAKTOR;
166
  ToNaviCtrl.GyroCompass = ErsatzKompass / GIER_GRAD_FAKTOR;
161
  ToNaviCtrl.AccNick = (int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc);
167
  ToNaviCtrl.AccNick = (int) ACC_AMPLIFY * (NaviAccNick / NaviCntAcc);
162
  ToNaviCtrl.AccRoll = (int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc);
168
  ToNaviCtrl.AccRoll = (int) ACC_AMPLIFY * (NaviAccRoll / NaviCntAcc);
163
  NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0;
169
  NaviCntAcc = 0; NaviAccNick = 0; NaviAccRoll = 0;
164
//  ToNaviCtrl.User8 = Parameter_UserParam8;
170
//  ToNaviCtrl.User8 = Parameter_UserParam8;
Line 179... Line 185...
179
                MikroKopterFlags &= ~(FLAG_CALIBRATE | FLAG_START);
185
                MikroKopterFlags &= ~(FLAG_CALIBRATE | FLAG_START);
180
                    ToNaviCtrl.Param.Byte[9] = (unsigned char) UBat;
186
                    ToNaviCtrl.Param.Byte[9] = (unsigned char) UBat;
181
                    ToNaviCtrl.Param.Byte[10] =(unsigned char) EE_Parameter.UnterspannungsWarnung;
187
                    ToNaviCtrl.Param.Byte[10] =(unsigned char) EE_Parameter.UnterspannungsWarnung;
182
                    ToNaviCtrl.Param.Byte[11] =(unsigned char) eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
188
                    ToNaviCtrl.Param.Byte[11] =(unsigned char) eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
183
        break;
189
        break;
184
         case SPI_CMD_PARAMETER1:
190
         case SPI_CMD_PARAMETER1:
185
                                ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviGpsModeControl;     // Parameters for the Naviboard
191
                                ToNaviCtrl.Param.Byte[0] = EE_Parameter.NaviGpsModeControl;     // Parameters for the Naviboard
186
                                ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;    
192
                                ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;
187
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;        
193
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
188
                                ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;        
194
                                ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
189
                                ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;        
195
                                ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
190
                                ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsACC;        
196
                                ToNaviCtrl.Param.Byte[5] = EE_Parameter.NaviGpsACC;
191
                                ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat;        
197
                                ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsMinSat;
192
                ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold;        
198
                ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold;
193
                ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviOperatingRadius;
199
                ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviOperatingRadius;
194
                ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection;
200
                ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection;
195
                ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviSpeedCompensation;
201
                ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviSpeedCompensation;
196
            break;
202
            break;
197
         case SPI_CMD_STICK:
203
         case SPI_CMD_STICK:
198
                tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]];  if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
204
                tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GAS]];  if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
199
                                ToNaviCtrl.Param.Byte[0] = (char) tmp;
205
                                ToNaviCtrl.Param.Byte[0] = (char) tmp;
200
                tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
206
                tmp = PPM_in[EE_Parameter.Kanalbelegung[K_GIER]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
201
                                ToNaviCtrl.Param.Byte[1] = (char) tmp;
207
                                ToNaviCtrl.Param.Byte[1] = (char) tmp;
202
                tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
208
                tmp = PPM_in[EE_Parameter.Kanalbelegung[K_ROLL]]; if(tmp > 127) tmp = 127; else if(tmp < -127) tmp = -127;
Line 208... Line 214...
208
                                ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti3;
214
                                ToNaviCtrl.Param.Byte[6] = (unsigned char) Poti3;
209
                    ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti4;
215
                    ToNaviCtrl.Param.Byte[7] = (unsigned char) Poti4;
210
                    ToNaviCtrl.Param.Byte[8] = (unsigned char) SenderOkay;
216
                    ToNaviCtrl.Param.Byte[8] = (unsigned char) SenderOkay;
211
            break;
217
            break;
212
         case SPI_CMD_MISC:
218
         case SPI_CMD_MISC:
213
                if(WinkelOut.CalcState > 5)  
219
                if(WinkelOut.CalcState > 5)
214
                  {
220
                  {
215
                    WinkelOut.CalcState = 0;    
221
                    WinkelOut.CalcState = 0;
216
                    ToNaviCtrl.Param.Byte[0] = 5;
222
                    ToNaviCtrl.Param.Byte[0] = 5;
217
                  }  
223
                  }
218
                                else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
224
                                else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
219
                                ToNaviCtrl.Param.Int[1] = HoehenWert;
225
                                ToNaviCtrl.Param.Int[1] = HoehenWert;
220
            break;
226
            break;
Line 221... Line 227...
221
 
227
 
222
         case SPI_CMD_VERSION:
228
         case SPI_CMD_VERSION:
223
                                ToNaviCtrl.Param.Byte[0] = VersionInfo.Hauptversion;
229
                                ToNaviCtrl.Param.Byte[0] = SPI_VersionInfo.Major;
224
                                ToNaviCtrl.Param.Byte[1] = VersionInfo.Nebenversion;
-
 
225
                                ToNaviCtrl.Param.Byte[2] = VersionInfo.PCKompatibel;
230
                                ToNaviCtrl.Param.Byte[1] = SPI_VersionInfo.Minor;
226
                                ToNaviCtrl.Param.Byte[3] = VersionInfo.Patch;
231
                                ToNaviCtrl.Param.Byte[2] = SPI_VersionInfo.Patch;
227
                                ToNaviCtrl.Param.Byte[4] = VersionInfo.NaviKompatibel;
232
                                ToNaviCtrl.Param.Byte[3] = SPI_VersionInfo.Compatible;
228
            break;
233
            break;
229
   }
234
   }
230
 
235
 
231
  sei();
236
  sei();
232
     
237
 
233
  if (SPI_RxDataValid)
238
  if (SPI_RxDataValid)
234
  {
239
  {
235
   if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV))
240
   if(abs(FromNaviCtrl.GPS_Nick) < 512 && abs(FromNaviCtrl.GPS_Roll) < 512 && (EE_Parameter.GlobalConfig & CFG_GPS_AKTIV))
236
   {
241
   {
237
    GPS_Nick = FromNaviCtrl.GPS_Nick;
242
    GPS_Nick = FromNaviCtrl.GPS_Nick;
238
    GPS_Roll = FromNaviCtrl.GPS_Roll;
243
    GPS_Roll = FromNaviCtrl.GPS_Roll;
239
   }
244
   }
240
    if(FromNaviCtrl.CompassValue <= 360)   KompassValue = FromNaviCtrl.CompassValue;
245
    if(FromNaviCtrl.CompassValue <= 360)   KompassValue = FromNaviCtrl.CompassValue;
241
    KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
246
    KompassRichtung = ((540 + KompassValue - KompassStartwert) % 360) - 180;
242
 
247
 
243
    if(FromNaviCtrl.BeepTime > beeptime && !WinkelOut.CalcState) beeptime = FromNaviCtrl.BeepTime;
248
    if(FromNaviCtrl.BeepTime > beeptime && !WinkelOut.CalcState) beeptime = FromNaviCtrl.BeepTime;
244
       
249
 
245
          switch (FromNaviCtrl.Command)
250
          switch (FromNaviCtrl.Command)
246
          {
251
          {
247
            case  SPI_KALMAN:
252
            case  SPI_KALMAN:
248
               FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.Byte[0];
253
               FromNaviCtrl_Value.Kalman_K = FromNaviCtrl.Param.Byte[0];
249
               FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.Byte[1];
254
               FromNaviCtrl_Value.Kalman_MaxFusion = FromNaviCtrl.Param.Byte[1];
250
               FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.Byte[2];
255
               FromNaviCtrl_Value.Kalman_MaxDrift = FromNaviCtrl.Param.Byte[2];
251
               break;
256
               break;
252
       
257
 
253
            case  SPI_CMD_OSD_DATA:
258
            case  SPI_CMD_OSD_DATA:
254
               FromNaviCtrl_Value.OsdBar = FromNaviCtrl.Param.Byte[0];
259
               FromNaviCtrl_Value.OsdBar = FromNaviCtrl.Param.Byte[0];
255
               FromNaviCtrl_Value.Distance = FromNaviCtrl.Param.Int[1];
260
               FromNaviCtrl_Value.Distance = FromNaviCtrl.Param.Int[1];
Line 271... Line 276...
271
  }
276
  }
272
  else
277
  else
273
  {
278
  {
274
//    KompassValue = 0;
279
//    KompassValue = 0;
275
//    KompassRichtung = 0;
280
//    KompassRichtung = 0;
276
       
281
 
277
        GPS_Nick = 0;
282
        GPS_Nick = 0;
278
    GPS_Roll = 0;
283
    GPS_Roll = 0;
279
  }
284
  }
280
}
285
}