Subversion Repositories FlightCtrl

Rev

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

Rev 2497 Rev 2499
Line 20... Line 20...
20
unsigned char *SPI_TX_Buffer;
20
unsigned char *SPI_TX_Buffer;
Line 21... Line 21...
21
 
21
 
22
unsigned char SPITransferCompleted, SPI_ChkSum;
22
unsigned char SPITransferCompleted, SPI_ChkSum;
Line 23... Line 23...
23
unsigned char SPI_RxDataValid,NaviDataOkay = 250;
23
unsigned char SPI_RxDataValid,NaviDataOkay = 250;
24
 
24
 
25
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_SLOW,
25
unsigned char SPI_CommandSequence[] = { SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_SLOW,SPI_FCCMD_BL_ACCU,
26
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_VERSION, SPI_FCCMD_BL_ACCU,
26
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_MISC, SPI_FCCMD_BL_ACCU,
27
                                        SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_MISC,SPI_FCCMD_SERVOS,
27
                                        SPI_FCCMD_STICK, SPI_FCCMD_USER, SPI_FCCMD_BL_ACCU,
28
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2, SPI_FCCMD_BL_ACCU
28
                                                                                SPI_FCCMD_STICK, SPI_FCCMD_PARAMETER2, SPI_FCCMD_BL_ACCU
29
                                                                                };
29
                                                                                };
30
unsigned char SPI_CommandCounter = 0;
30
unsigned char SPI_CommandCounter = 0;
Line 148... Line 148...
148
 
148
 
149
//------------------------------------------------------
149
//------------------------------------------------------
150
void UpdateSPI_Buffer(void)
150
void UpdateSPI_Buffer(void)
151
{
151
{
152
//  signed int tmp;
152
//  signed int tmp;
153
  static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION, slow_command;
153
  static unsigned char motorindex, oldcommand = SPI_NCCMD_VERSION, slow_command = 0;
154
  ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
154
  ToNaviCtrl.IntegralNick = (int) (IntegralNick / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
155
  ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
155
  ToNaviCtrl.IntegralRoll = (int) (IntegralRoll / (long)(EE_Parameter.GyroAccFaktor * 4)); // etwa in 0.1 Grad
156
  ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR;
156
  ToNaviCtrl.GyroCompass = (10 * ErsatzKompass) / GIER_GRAD_FAKTOR;
157
  ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier;
157
  ToNaviCtrl.GyroGier = (signed int) AdNeutralGier - AdWertGier;
Line 197... Line 197...
197
        break;
197
        break;
198
         case SPI_FCCMD_SLOW:
198
         case SPI_FCCMD_SLOW:
199
               switch(slow_command)
199
               switch(slow_command)
200
           {
200
           {
201
                         case 0:
201
                         case 0:
-
 
202
                                ToNaviCtrl.Command = SPI_FCCMD_VERSION;
-
 
203
                                ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR;
-
 
204
                                ToNaviCtrl.Param.Byte[1] = VERSION_MINOR;
-
 
205
                                ToNaviCtrl.Param.Byte[2] = VERSION_PATCH;
-
 
206
                                ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE;
-
 
207
                                ToNaviCtrl.Param.Byte[4] = PlatinenVersion;
-
 
208
                                ToNaviCtrl.Param.Byte[5] = EE_Parameter.LandingSpeed;
-
 
209
                                ToNaviCtrl.Param.Byte[6] = EE_Parameter.ComingHomeAltitude;
-
 
210
                                ToNaviCtrl.Param.Byte[7] = EE_Parameter.AutoPhotoAtitudes;
-
 
211
                                ToNaviCtrl.Param.Byte[8] = VersionInfo.BL_Firmware;
-
 
212
ToNaviCtrl.Param.Byte[9] = 0;
-
 
213
                                ToNaviCtrl.Param.Int[5] = FlugMinutenGesamt; // 10 & 11
-
 
214
                                slow_command++;  
-
 
215
                         break;
-
 
216
                         case 1:
202
                                ToNaviCtrl.Command = SPI_FCCMD_PARAMETER1; slow_command = 1;
217
                                ToNaviCtrl.Command = SPI_FCCMD_PARAMETER1;
203
                                ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V
218
                                ToNaviCtrl.Param.Byte[0] = (unsigned char) BattLowVoltageWarning; //0.1V
204
                                ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;           // Parameters for the Naviboard
219
                                ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviGpsGain;           // Parameters for the Naviboard
205
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
220
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviGpsP;
206
                                ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
221
                                ToNaviCtrl.Param.Byte[3] = EE_Parameter.NaviGpsI;
207
                                ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
222
                                ToNaviCtrl.Param.Byte[4] = EE_Parameter.NaviGpsD;
Line 210... Line 225...
210
                ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold;
225
                ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviStickThreshold;
211
                ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviMaxFlyingRange;
226
                ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviMaxFlyingRange;
212
                ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection;
227
                ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviWindCorrection;
213
                ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation;
228
                ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviAccCompensation;
214
                                ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation;
229
                                ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviAngleLimitation;
-
 
230
                                slow_command++;
215
                         break;
231
                         break;
-
 
232
                         case 2:
-
 
233
                                ToNaviCtrl.Command = SPI_FCCMD_SLOW2;
-
 
234
                                ToNaviCtrl.Param.Int[0] = BoatNeutralNick; // 0 & 1
-
 
235
                                ToNaviCtrl.Param.Int[1] = BoatNeutralRoll; // 2 & 3
-
 
236
                                ToNaviCtrl.Param.Int[2] = BoatNeutralGier; // 4 & 5
-
 
237
                                ToNaviCtrl.Param.Byte[6] = EE_Parameter.CamOrientation;
-
 
238
                                ToNaviCtrl.Param.Byte[7] = EE_Parameter.CompassOffset;
-
 
239
                                ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig;
-
 
240
                                ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig;
-
 
241
                                ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle;
-
 
242
                                ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3;
-
 
243
                                slow_command++;  
-
 
244
                         break;
-
 
245
                         case 3:
-
 
246
                                ToNaviCtrl.Command = SPI_FCCMD_SLOW3;
-
 
247
                                ToNaviCtrl.Param.Byte[0] = Parameter_ServoNickControl;
-
 
248
                                ToNaviCtrl.Param.Byte[1] = Parameter_ServoRollControl;
-
 
249
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.NaviDescendRange; // in 10m
-
 
250
                                ToNaviCtrl.Param.Byte[3] = Parameter_MaximumAltitude;
-
 
251
ToNaviCtrl.Param.Byte[4] = 0;
-
 
252
ToNaviCtrl.Param.Byte[5] = 0;
-
 
253
ToNaviCtrl.Param.Byte[6] = 0;
-
 
254
ToNaviCtrl.Param.Byte[7] = 0;
-
 
255
ToNaviCtrl.Param.Byte[8] = 0;
-
 
256
ToNaviCtrl.Param.Byte[9] = 0;
-
 
257
ToNaviCtrl.Param.Byte[10] = 0;
-
 
258
ToNaviCtrl.Param.Byte[11] = 0;
-
 
259
                                slow_command++;  
-
 
260
                 break;
216
                         default:
261
                         default:
217
                                ToNaviCtrl.Command = SPI_FCCMD_NEUTRAL; slow_command = 0;
262
                                ToNaviCtrl.Command = SPI_FCCMD_NEUTRAL;
218
                                ToNaviCtrl.Param.Int[0] = AdNeutralNick; // 0 & 1
263
                                ToNaviCtrl.Param.Int[0] = AdNeutralNick; // 0 & 1
219
                                ToNaviCtrl.Param.Int[1] = AdNeutralRoll; // 2 & 3
264
                                ToNaviCtrl.Param.Int[1] = AdNeutralRoll; // 2 & 3
220
                                ToNaviCtrl.Param.Int[2] = AdNeutralGier; // 4 & 5
265
                                ToNaviCtrl.Param.Int[2] = AdNeutralGier; // 4 & 5
221
                                ToNaviCtrl.Param.Byte[6] = EE_Parameter.Driftkomp;
266
                                ToNaviCtrl.Param.Byte[6] = EE_Parameter.Driftkomp;
222
                                ToNaviCtrl.Param.Byte[7] = HoverGas / 4;
267
                                ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviPH_LoginTime;
223
ToNaviCtrl.Param.Byte[8] = 0;
268
                                ToNaviCtrl.Param.Byte[8] = EE_Parameter.Receiver;
224
ToNaviCtrl.Param.Byte[9] = 0;
269
                                ToNaviCtrl.Param.Byte[9] = EE_Parameter.NaviGpsPLimit;
225
ToNaviCtrl.Param.Byte[10] = 0;
270
                                ToNaviCtrl.Param.Byte[10] = EE_Parameter.NaviGpsILimit;
226
ToNaviCtrl.Param.Byte[11] = 0;
271
                                ToNaviCtrl.Param.Byte[11] = EE_Parameter.NaviGpsDLimit;
-
 
272
                                slow_command = 0;
227
                         break;
273
                         break;
228
                        }      
274
                        }      
229
            break;
275
            break;
230
         case SPI_FCCMD_PARAMETER2:
276
         case SPI_FCCMD_PARAMETER2:
231
                                ToNaviCtrl.Param.Byte[0] = EE_Parameter.AutoPhotoDistance;     // Distance between Photo releases
277
                                ToNaviCtrl.Param.Byte[0] = EE_Parameter.AutoPhotoDistance;     // Distance between Photo releases
Line 238... Line 284...
238
                                 }
284
                                 }
239
                                ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT;
285
                                ToNaviCtrl.Param.Byte[1] = ToNC_SpeakHoTT;
240
#else
286
#else
241
                                ToNaviCtrl.Param.Byte[1] = 0;
287
                                ToNaviCtrl.Param.Byte[1] = 0;
242
#endif
288
#endif
243
                                ToNaviCtrl.Param.Byte[2] = EE_Parameter.LandingSpeed;
-
 
244
                                ToNaviCtrl.Param.Byte[3] = EE_Parameter.ComingHomeAltitude;
289
                                ToNaviCtrl.Param.Int[1] = Capacity.UsedCapacity; // mAh    // 2 & 3
245
                                ToNaviCtrl.Param.Byte[4] = LowVoltageHomeActive;
290
                                ToNaviCtrl.Param.Byte[4] = LowVoltageHomeActive;
246
                                ToNaviCtrl.Param.Byte[5] = ToNC_Load_WP_List;
291
                                ToNaviCtrl.Param.Byte[5] = ToNC_Load_WP_List;
247
                                ToNaviCtrl.Param.Byte[6] = ToNC_Load_SingePoint;
292
                                ToNaviCtrl.Param.Byte[6] = ToNC_Load_SingePoint;
248
                                ToNaviCtrl.Param.Byte[7] = ToNC_Store_SingePoint;
293
                                ToNaviCtrl.Param.Byte[7] = ToNC_Store_SingePoint;
249
                                ToNC_Load_WP_List = 0;
294
                                ToNC_Load_WP_List = 0;
250
                                ToNC_Load_SingePoint = 0;
295
                                ToNC_Load_SingePoint = 0;
251
                                ToNC_Store_SingePoint = 0;
296
                                ToNC_Store_SingePoint = 0;
252
                                if(Parameter_KompassWirkung) ToNaviCtrl.Param.sInt[4] = KompassSollWert; // Pos. 8 & 9
297
                                if(Parameter_KompassWirkung) ToNaviCtrl.Param.sInt[4] = KompassSollWert; // Pos. 8 & 9
253
                                else ToNaviCtrl.Param.sInt[4] = ErsatzKompassInGrad; // answer with the compass value if the Compass effect is zero
298
                                else ToNaviCtrl.Param.sInt[4] = ErsatzKompassInGrad; // answer with the compass value if the Compass effect is zero
254
                                ToNaviCtrl.Param.Byte[10] = EE_Parameter.AutoPhotoAtitudes;
299
                                ToNaviCtrl.Param.Byte[10] = FC_StatusFlags3;
255
                                ToNaviCtrl.Param.Byte[11] = EE_Parameter.SingleWpSpeed;
300
                                ToNaviCtrl.Param.Byte[11] = EE_Parameter.SingleWpSpeed;
256
            break;
301
            break;
257
         case SPI_FCCMD_STICK:
302
         case SPI_FCCMD_STICK:
258
/*
303
/*
259
              cli();
304
              cli();
Line 285... Line 330...
285
                        {
330
                        {
286
                                WinkelOut.CalcState = 0;
331
                                WinkelOut.CalcState = 0;
287
                                ToNaviCtrl.Param.Byte[0] = 5;
332
                                ToNaviCtrl.Param.Byte[0] = 5;
288
                        }
333
                        }
289
                        else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
334
                        else ToNaviCtrl.Param.Byte[0] = WinkelOut.CalcState;
290
                        ToNaviCtrl.Param.Byte[1] = EE_Parameter.NaviPH_LoginTime;
335
                        ToNaviCtrl.Param.Byte[1] = HoverGas / 4;
291
                        ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5);
336
                        ToNaviCtrl.Param.Int[1] = (int)(HoehenWert/5); //2 & 3
292
                        ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5);
337
                        ToNaviCtrl.Param.Int[2] = (int)(SollHoehe/5);  //4 & 5
293
                        ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviGpsPLimit;
338
                        ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[0];
294
                        ToNaviCtrl.Param.Byte[7] = EE_Parameter.NaviGpsILimit;
339
                        ToNaviCtrl.Param.Byte[7] = VersionInfo.HardwareError[1];
-
 
340
                        VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; //                         VersionInfo.HardwareError[0] = 0;
-
 
341
                        VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER;
295
                        ToNaviCtrl.Param.Byte[8] = EE_Parameter.NaviGpsDLimit;
342
                        ToNaviCtrl.Param.Byte[8] = DebugOut.Analog[28]; // I2C-Error counter
296
            ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay;
343
            ToNaviCtrl.Param.Byte[9] = (unsigned char) SenderOkay;
297
                        ToNaviCtrl.Param.Byte[10] = NC_Wait_for_LED;
344
                        ToNaviCtrl.Param.Byte[10] = NC_Wait_for_LED;
298
                        ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil
345
                        ToNaviCtrl.Param.Byte[11] = DebugOut.Analog[7] / 4; //GasMischanteil
299
                        break;
346
                        break;
300
                case SPI_FCCMD_VERSION:
-
 
301
                        ToNaviCtrl.Param.Byte[0] = VERSION_MAJOR;
-
 
302
                        ToNaviCtrl.Param.Byte[1] = VERSION_MINOR;
-
 
303
                        ToNaviCtrl.Param.Byte[2] = VERSION_PATCH;
-
 
304
                        ToNaviCtrl.Param.Byte[3] = NC_SPI_COMPATIBLE;
-
 
305
                        ToNaviCtrl.Param.Byte[4] = PlatinenVersion;
-
 
306
                        ToNaviCtrl.Param.Byte[5] = VersionInfo.HardwareError[0];
-
 
307
                        ToNaviCtrl.Param.Byte[6] = VersionInfo.HardwareError[1];
-
 
308
                        VersionInfo.HardwareError[0] &= ~FC_ERROR0_CAREFREE; //                         VersionInfo.HardwareError[0] = 0;
-
 
309
                        VersionInfo.HardwareError[1] &= FC_ERROR1_MIXER;
-
 
310
                        ToNaviCtrl.Param.Byte[7] = EE_Parameter.CompassOffset;
-
 
311
                        ToNaviCtrl.Param.Byte[8] = Parameter_GlobalConfig;
-
 
312
                        ToNaviCtrl.Param.Byte[9] = Parameter_ExtraConfig;
-
 
313
                        ToNaviCtrl.Param.Byte[10] = EE_Parameter.OrientationAngle;
-
 
314
                        ToNaviCtrl.Param.Byte[11] = EE_Parameter.GlobalConfig3;
-
 
315
                break;
-
 
316
            case SPI_FCCMD_SERVOS:
-
 
317
                        ToNaviCtrl.Param.Int[0] = Capacity.UsedCapacity; // mAh
-
 
318
                        ToNaviCtrl.Param.Byte[2] = Parameter_ServoNickControl;
-
 
319
                        ToNaviCtrl.Param.Byte[3] = Parameter_ServoRollControl;
-
 
320
                        ToNaviCtrl.Param.Byte[4] = DebugOut.Analog[28]; // I2C-Error counter
-
 
321
                        ToNaviCtrl.Param.Byte[5] = FC_StatusFlags3;
-
 
322
                        ToNaviCtrl.Param.Byte[6] = EE_Parameter.NaviDescendRange; // in 10m
-
 
323
                        ToNaviCtrl.Param.Byte[7] = Parameter_MaximumAltitude;
-
 
324
                        ToNaviCtrl.Param.Int[4] = FlugMinutenGesamt; // 8 & 9
-
 
325
                        ToNaviCtrl.Param.Byte[10] = EE_Parameter.CamOrientation;
-
 
326
                        ToNaviCtrl.Param.Byte[11] = VersionInfo.BL_Firmware;
-
 
327
                break;
-
 
328
        }
347
        }
Line 329... Line 348...
329
     
348
     
330
  if(SPI_RxDataValid)
349
  if(SPI_RxDataValid)
331
  {
350
  {