Subversion Repositories NaviCtrl

Rev

Rev 933 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 ingob 1
/*#######################################################################################*/
2
/* !!! THIS IS NOT FREE SOFTWARE !!!                                                     */
3
/*#######################################################################################*/
4
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5
// + Copyright (c) 2008 Ingo Busker, Holger Buss
171 ingob 6
// + Nur für den privaten Gebrauch / NON-COMMERCIAL USE ONLY
1 ingob 7
// + FOR NON COMMERCIAL USE ONLY
8
// + www.MikroKopter.com
9
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
41 ingob 10
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
11
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
12
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
13
// + bzgl. der Nutzungsbedingungen aufzunehmen.
1 ingob 14
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
15
// + Verkauf von Luftbildaufnahmen, usw.
16
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
41 ingob 17
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
1 ingob 18
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
21
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
22
// + eindeutig als Ursprung verlinkt werden
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
24
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
25
// + Benutzung auf eigene Gefahr
26
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
27
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
171 ingob 28
// + Die Portierung oder Nutzung der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
1 ingob 29
// + mit unserer Zustimmung zulässig
30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
32
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
41 ingob 33
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
1 ingob 34
// + this list of conditions and the following disclaimer.
35
// +   * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
36
// +     from this software without specific prior written permission.
41 ingob 37
// +   * The use of this project (hardware, software, binary files, sources and documentation) is only permitted
1 ingob 38
// +     for non-commercial use (directly or indirectly)
41 ingob 39
// +     Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
1 ingob 40
// +     with our written permission
41 ingob 41
// +   * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
42
// +     clearly linked as origin
171 ingob 43
// +   * porting the sources to other systems or using the software on other systems (except hardware from www.mikrokopter.de) is not allowed
1 ingob 44
//
45
// +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
46
// +  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48
// +  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
49
// +  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
50
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
53
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
54
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 ingob 55
// +  POSSIBILITY OF SUCH DAMAGE.
1 ingob 56
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
41 ingob 57
#include <stdlib.h>
58
#include "91x_lib.h"
1 ingob 59
#include "main.h"
264 killagreg 60
#include "led.h"
41 ingob 61
#include "ubx.h"
62
#include "GPS.h"
119 killagreg 63
#include "timer1.h"
242 killagreg 64
#include "compass.h"
41 ingob 65
#include "spi_slave.h"
66
#include "menu.h"
708 holgerb 67
#include "uart0.h"
41 ingob 68
#include "uart1.h"
880 holgerb 69
#include "uart2.h"
267 holgerb 70
#include "ncmag.h"
380 holgerb 71
#include "logging.h"
426 holgerb 72
#include "settings.h"
548 holgerb 73
#include "sdc.h"
677 holgerb 74
#include "analog.h"
697 holgerb 75
#include "canbus.h"
708 holgerb 76
#include "triggerlog.h"
724 holgerb 77
#include "CamCtrl.h"
780 holgerb 78
#include "eeprom.h"
1 ingob 79
 
80
u8 DispPtr = 0;
201 killagreg 81
s8 DisplayBuff[DISPLAYBUFFSIZE];
1 ingob 82
 
201 killagreg 83
 
41 ingob 84
u8 MenuItem = 0;
880 holgerb 85
u8 MaxMenuItem = 35;
41 ingob 86
 
203 killagreg 87
void Menu_Putchar(char c)
88
{
516 holgerb 89
   if(DispPtr < DISPLAYBUFFSIZE) DisplayBuff[DispPtr++] = c; ;
203 killagreg 90
}
91
 
201 killagreg 92
void Menu_Clear(void)
1 ingob 93
{
201 killagreg 94
        u8 i;
95
        for( i = 0; i < DISPLAYBUFFSIZE; i++) DisplayBuff[i] = ' ';
1 ingob 96
}
97
 
41 ingob 98
// Display with 20 characters in 4 lines
201 killagreg 99
void Menu_Update(u8 Keys)
41 ingob 100
{
516 holgerb 101
        s32 i1,i2;
51 killagreg 102
        u8 sign;
41 ingob 103
 
201 killagreg 104
        if(Keys & KEY1) { if(MenuItem > 0) MenuItem--; else MenuItem = MaxMenuItem;}
105
        if(Keys & KEY2) { if(MenuItem == MaxMenuItem) MenuItem = 0; else MenuItem++;}
106
        if((Keys & KEY1) && (Keys & KEY2)) MenuItem = 0;
41 ingob 107
        if(MenuItem > MaxMenuItem) MenuItem = MaxMenuItem;
201 killagreg 108
        Menu_Clear();
41 ingob 109
        // print menu item number in the upper right corner
516 holgerb 110
        if(MenuItem < 10)
111
        {
41 ingob 112
                LCD_printfxy(17,0,"[%i]",MenuItem);
113
        }
201 killagreg 114
        else // Menuitem >= 10
41 ingob 115
        {
116
                LCD_printfxy(16,0,"[%i]",MenuItem);
117
        }
118
 
516 holgerb 119
        switch(MenuItem)
120
        {
41 ingob 121
                // Version Info
122
                case 0:
708 holgerb 123
                        if(IamMaster == SLAVE) LCD_printfxy(0,0,"+ Navi-Ctrl (S) +")
124
                        else
125
                        if(IamMaster == MASTER)LCD_printfxy(0,0,"+ Navi-Ctrl (M) +")
126
                        else LCD_printfxy(0,0,"++  Navi-Ctrl  ++")
127
 
530 holgerb 128
                        LCD_printfxy(0,1,"HW V%d.%d SW V%d.%02d%c", UART_VersionInfo.HWMajor/10, UART_VersionInfo.HWMajor%10, VERSION_MAJOR, VERSION_MINOR, 'a'+ VERSION_PATCH);
617 holgerb 129
                        if(FC.StatusFlags3 & FC_STATUS3_REDUNDANCE_AKTIVE) LCD_printfxy(19,1,"R");
516 holgerb 130
            if(ErrorCode)
264 killagreg 131
                        {
132
                                LCD_printfxy(0,2,"Error: %d",ErrorCode);
516 holgerb 133
                LCD_printfxy(0,3,"%s",ErrorMSG);
264 killagreg 134
                        }
489 killagreg 135
                        else
697 holgerb 136
            if(Partner.ErrorCode)
489 killagreg 137
                        {
697 holgerb 138
                                if(IamMaster == SLAVE)  LCD_printfxy(0,2,"Master Err: %d",Partner.ErrorCode)
139
                                else                                    LCD_printfxy(0,2,"Slave Err: %d",Partner.ErrorCode);
140
                                LCD_printfxy(0,3,"%s",PartnerErrorMSG);
141
                        }
142
                        else
143
                        {
693 holgerb 144
             LCD_printfxy(0,2,"Set:%d %s", Parameter.ActiveSetting,EE_Parameter.Name);
145
                         LCD_printfxy(0,3,"%s",ErrorMSG);
146
//                       LCD_printfxy(0,3,"(c) HiSystems GmbH");
321 holgerb 147
                        }
574 holgerb 148
                        if(FC.StatusFlags3 & FC_STATUS3_BOAT) LCD_printfxy(16,2,"BOAT");
785 holgerb 149
//if(NC_To_FC_Flags & NC_TO_FC_SWITCHOFF_IF_LANDED) LCD_printfxy(16,2,"Off"); 
41 ingob 150
                        break;
151
                case 1:
697 holgerb 152
                        if(IamMaster == SLAVE)  LCD_printfxy(0,0,"++ Master - NC ++")
153
                        else                                    LCD_printfxy(0,0,"++ Slave - NC  ++");
154
 
155
                        if(CanRxMessage[CAN_ID_VERSION].D.Byte[3])
156
                        {
157
                                LCD_printfxy(0,1,"HW V%d.%d SW V%d.%02d%c", CanRxMessage[CAN_ID_VERSION].D.Byte[3]/10, CanRxMessage[CAN_ID_VERSION].D.Byte[3]%10, CanRxMessage[CAN_ID_VERSION].D.Byte[7], CanRxMessage[CAN_ID_VERSION].D.Byte[6], 'a'+ CanRxMessage[CAN_ID_VERSION].D.Byte[5]);
158
                if(Partner.ErrorCode)
159
                                {
160
                                        if(IamMaster == SLAVE)  LCD_printfxy(0,2,"Master Err: %d",Partner.ErrorCode)
161
                                        else                                    LCD_printfxy(0,2,"Slave Err: %d",Partner.ErrorCode);
162
                                }
163
                                else
164
                                 {
165
                  LCD_printfxy(0,2,"Set:%d", CanRxMessage[CAN_ID_VERSION].D.Byte[1]);
166
                                 }
167
                                LCD_printfxy(0,3,"%s",PartnerErrorMSG);
168
                                if(Partner.StatusFlags3 & FC_STATUS3_BOAT) LCD_printfxy(16,2,"BOAT");
169
                        }
170
                        else
171
                  LCD_printfxy(0,2,"not connected", CanTxMessage[CAN_ID_VERSION].D.Byte[1]);
832 holgerb 172
/*
173
LCD_printfxy(0,2,"%2u",NaviData_HoTT_Text.HoTT_TextLevel);
174
LCD_printfxy(0,3,"%s",NaviData_HoTT_Text.HoTT_DisplayText);
175
if(NaviData_Home.OSDStatusFlags3 & OSD3_FLAG_MK_IS_READY) LCD_printfxy(5,2,"ready") else LCD_printfxy(5,2," --  ");
176
*/
697 holgerb 177
                        break;
178
                case 2:
41 ingob 179
                        if (GPSData.Status == INVALID)
180
                        {
181
                                LCD_printfxy(0,0,"No GPS data");
182
                                LCD_printfxy(0,1,"Lon:                ");
183
                                LCD_printfxy(0,2,"Lat:                ");
184
                                LCD_printfxy(0,3,"Alt:                ");
185
                        }
186
                        else // newdata or processed
187
                        {
883 holgerb 188
                          LCD_printfxy(0,0,"Sat:%02d Fix:%c", GPSData.NumOfSats,NMEA_In_Fix_Txt[0]);
189
                      if(ExternalGpsInUse)
190
                           {
191
                            LCD_printfxy(7,0,"Fix:%c ",NMEA_In_Fix_Txt[0]);
192
                           }
193
                           else
194
                           {
41 ingob 195
                                switch (GPSData.SatFix)
196
                                {
197
                                case SATFIX_NONE:
127 killagreg 198
                                        LCD_printfxy(7,0,"NoFix");
41 ingob 199
                                        break;
200
                                case SATFIX_2D:
127 killagreg 201
                                        LCD_printfxy(7,0,"2DFix");
41 ingob 202
                                        break;
203
                                case SATFIX_3D:
127 killagreg 204
                                        LCD_printfxy(7,0,"3DFix");
41 ingob 205
                                        break;
206
                                default:
127 killagreg 207
                                        LCD_printfxy(7,0,"??Fix");
41 ingob 208
                                        break;
209
                                }
121 killagreg 210
                                if(GPSData.Flags & FLAG_DIFFSOLN)
211
                                {
127 killagreg 212
                                        LCD_printfxy(12,0,"/DGPS");
121 killagreg 213
                                }
214
                                else
215
                                {
127 killagreg 216
                                        LCD_printfxy(12,0,"     ");
121 killagreg 217
                                }
883 holgerb 218
                           }
219
                                if(GPSData.SatFix == SATFIX_NONE) LCD_printfxy(7,0,"NoFix   ");
121 killagreg 220
 
51 killagreg 221
                                if(GPSData.Position.Longitude < 0) sign = '-';
222
                                else sign = '+';
53 killagreg 223
                                i1 = abs(GPSData.Position.Longitude)/10000000L;
224
                                i2 = abs(GPSData.Position.Longitude)%10000000L;
54 killagreg 225
                                LCD_printfxy(0,1,"Lon:%c%03ld.%07ld deg",sign, i1, i2);
51 killagreg 226
                                if(GPSData.Position.Latitude < 0) sign = '-';
227
                                else sign = '+';
53 killagreg 228
                                i1 = abs(GPSData.Position.Latitude)/10000000L;
229
                                i2 = abs(GPSData.Position.Latitude)%10000000L;
880 holgerb 230
                                LCD_printfxy(0,2,"Lat: %c%02ld.%07ld deg",sign, i1, i2);
51 killagreg 231
                                if(GPSData.Position.Altitude < 0) sign = '-';
232
                                else sign = '+';
53 killagreg 233
                                i1 = abs(GPSData.Position.Altitude)/1000L;
234
                                i2 = abs(GPSData.Position.Altitude)%1000L;
708 holgerb 235
                                LCD_printfxy(0,3,"Alt:%c%04ld.%03ldm  V%d", sign, i1, i2, GPS_Version/1000);
883 holgerb 236
                                if(ExternalGpsInUse) LCD_printfxy(15,3,"NMEA");
41 ingob 237
                        }
883 holgerb 238
 
41 ingob 239
                        break;
697 holgerb 240
                case 3:
41 ingob 241
                        if (GPSData.Status == INVALID)
242
                        {
243
                                LCD_printfxy(0,0,"No GPS data");
244
                                LCD_printfxy(0,1,"Speed N:            ");
245
                                LCD_printfxy(0,2,"Speed E:            ");
246
                                LCD_printfxy(0,3,"Speed T:            ");
247
                        }
248
                        else // newdata or processed
249
                        {
124 killagreg 250
                                LCD_printfxy(0,0,"Sat:%02d ", GPSData.NumOfSats);
41 ingob 251
                                switch (GPSData.SatFix)
252
                                {
253
                                case SATFIX_NONE:
127 killagreg 254
                                        LCD_printfxy(7,0,"NoFix");
41 ingob 255
                                        break;
256
                                case SATFIX_2D:
127 killagreg 257
                                        LCD_printfxy(7,0,"2DFix");
41 ingob 258
                                        break;
259
                                case SATFIX_3D:
127 killagreg 260
                                        LCD_printfxy(7,0,"3DFix");
41 ingob 261
                                        break;
262
                                default:
127 killagreg 263
                                        LCD_printfxy(7,0,"??Fix");
41 ingob 264
                                        break;
265
                                }
124 killagreg 266
                                if(GPSData.Flags & FLAG_DIFFSOLN)
267
                                {
127 killagreg 268
                                        LCD_printfxy(12,0,"/DGPS");
124 killagreg 269
                                }
270
                                else
271
                                {
127 killagreg 272
                                        LCD_printfxy(12,0,"     ");
124 killagreg 273
                                }
274
 
41 ingob 275
                                LCD_printfxy(0,1,"Speed N: %+4ld cm/s",GPSData.Speed_North);
276
                                LCD_printfxy(0,2,"Speed E: %+4ld cm/s",GPSData.Speed_East);
277
                                LCD_printfxy(0,3,"Speed T: %+4ld cm/s",GPSData.Speed_Top);
278
                        }
279
                        break;
697 holgerb 280
                case 4:
41 ingob 281
                        LCD_printfxy(0,0,"GPS UTC Time");
282
                        if (!SystemTime.Valid)
283
                        {
284
                                LCD_printfxy(0,1,"                    ");
285
                                LCD_printfxy(0,2,"  No time data!     ");
286
                                LCD_printfxy(0,3,"                    ");
287
                        }
288
                        else // newdata or processed
289
                        {
290
                                LCD_printfxy(0,1,"                    ");
291
                                LCD_printfxy(0,2,"Date: %02i/%02i/%04i",SystemTime.Month, SystemTime.Day, SystemTime.Year);
292
                                LCD_printfxy(0,3,"Time: %02i:%02i:%02i.%03i", SystemTime.Hour, SystemTime.Min, SystemTime.Sec, SystemTime.mSec);
293
                        }
294
                        break;
697 holgerb 295
                case 5: // Navi Params 1 from FC
41 ingob 296
                        LCD_printfxy(0,0,"NaviMode: %3i" ,  Parameter.NaviGpsModeControl);
516 holgerb 297
            LCD_printfxy(0,1,"G  :%3i P  :%3i ",Parameter.NaviGpsGain, Parameter.NaviGpsP);
298
            LCD_printfxy(0,2,"I  :%3i D  :%3i ",Parameter.NaviGpsI, Parameter.NaviGpsD);
299
                    LCD_printfxy(0,3,"ACC:%3i SAT:%3i ",Parameter.NaviGpsACC, Parameter.NaviGpsMinSat);
41 ingob 300
                        break;
697 holgerb 301
                case 6: // Navi Params 2 from FC
59 killagreg 302
                        LCD_printfxy(0,0,"Stick TS:  %3i", Parameter.NaviStickThreshold);
532 holgerb 303
            LCD_printfxy(0,1,"WP_Radius: %3im",MaxWP_Radius_in_m);
516 holgerb 304
            LCD_printfxy(0,2,"WindCorr:  %3i", Parameter.NaviWindCorrection);
305
                    LCD_printfxy(0,3,"AccComp:   %3i", Parameter.NaviSpeedCompensation);
59 killagreg 306
                        break;
697 holgerb 307
                case 7: // Navi Params 3 from FC
59 killagreg 308
                        LCD_printfxy(0,0,"Angle-Limit: %3i", Parameter.NaviAngleLimitation);
516 holgerb 309
            LCD_printfxy(0,1,"    P-Limit: %3i", Parameter.NaviGpsPLimit);
310
            LCD_printfxy(0,2,"    I-Limit: %3i", Parameter.NaviGpsILimit);
311
                    LCD_printfxy(0,3,"    D-Limit: %3i", Parameter.NaviGpsDLimit);
59 killagreg 312
                        break;
697 holgerb 313
                case 8: // Max Ranges
351 holgerb 314
                        LCD_printfxy(0,0,"Maximum flying  ");
532 holgerb 315
            LCD_printfxy(0,1,"Range:   %4im ", AbsoluteFlyingRange_m);
316
            LCD_printfxy(0,2,"Descend: %4im ", AutoDescendRange_m);
516 holgerb 317
            LCD_printfxy(0,3,"Altitude:%4im ", AbsoluteFlyingAltitude);
532 holgerb 318
                        if(!AbsoluteFlyingRange_m) LCD_printfxy(9,1,"disabled");
319
                        if(!AutoDescendRange_m)    LCD_printfxy(9,2,"disabled");
355 holgerb 320
                        if(!AbsoluteFlyingAltitude) LCD_printfxy(9,3,"disabled");
351 holgerb 321
                        break;
697 holgerb 322
                case 9:
41 ingob 323
                        LCD_printfxy(0,0,"Home Position");
215 killagreg 324
                        if(NaviData.HomePosition.Status == INVALID)
41 ingob 325
                        {
326
                                LCD_printfxy(0,1,"                     ");
327
                                LCD_printfxy(0,2,"    Is not set.      ");
328
                                LCD_printfxy(0,3,"                     ");
329
                        }
330
                        else
331
                        {
215 killagreg 332
                                if(NaviData.HomePosition.Longitude < 0) sign = '-';
51 killagreg 333
                                else sign = '+';
215 killagreg 334
                                i1 = abs(NaviData.HomePosition.Longitude)/10000000L;
335
                                i2 = abs(NaviData.HomePosition.Longitude)%10000000L;
55 killagreg 336
                                LCD_printfxy(0,1,"Lon:%c%03ld.%07ld deg",sign, i1, i2);
215 killagreg 337
                                if(NaviData.HomePosition.Latitude < 0) sign = '-';
51 killagreg 338
                                else sign = '+';
215 killagreg 339
                                i1 = abs(NaviData.HomePosition.Latitude)/10000000L;
340
                                i2 = abs(NaviData.HomePosition.Latitude)%10000000L;
880 holgerb 341
                                LCD_printfxy(0,2,"Lat: %c%02ld.%07ld deg",sign, i1, i2);
215 killagreg 342
                                if(NaviData.HomePosition.Altitude < 0) sign = '-';
51 killagreg 343
                                else sign = '+';
215 killagreg 344
                                i1 = abs(NaviData.HomePosition.Altitude)/1000L;
345
                                i2 = abs(NaviData.HomePosition.Altitude)%1000L;
589 holgerb 346
                                LCD_printfxy(0,3,"Alt:%c%04ld.%1dm",sign, i1, i2/1000);
588 holgerb 347
                                switch(Parameter.HomeYawMode)
348
                                {
349
                                        case NO_CHANGE:         LCD_printfxy(17,3,"(-)"); break;
350
                                        case FRONT_TO_HOME: LCD_printfxy(17,3,"(F)"); break;
351
                                        case REAR_TO_HOME:      LCD_printfxy(17,3,"(R)"); break;
352
                                        case LIKE_AT_START: LCD_printfxy(17,3,"(S)"); break;
353
                                }
41 ingob 354
                        }
355
                        break;
697 holgerb 356
                case 10:
318 holgerb 357
                        LCD_printfxy(0,0,"Target Position");
358
                        if(NaviData.TargetPosition.Status == INVALID)
359
                        {
360
                                LCD_printfxy(0,1,"                     ");
361
                                LCD_printfxy(0,2,"    Is not set.      ");
362
                                LCD_printfxy(0,3,"                     ");
363
                        }
364
                        else
365
                        {
366
                                if(NaviData.TargetPosition.Longitude < 0) sign = '-';
367
                                else sign = '+';
368
                                i1 = abs(NaviData.TargetPosition.Longitude)/10000000L;
369
                                i2 = abs(NaviData.TargetPosition.Longitude)%10000000L;
370
                                LCD_printfxy(0,1,"Lon:%c%03ld.%07ld deg",sign, i1, i2);
371
                                if(NaviData.TargetPosition.Latitude < 0) sign = '-';
372
                                else sign = '+';
373
                                i1 = abs(NaviData.TargetPosition.Latitude)/10000000L;
374
                                i2 = abs(NaviData.TargetPosition.Latitude)%10000000L;
375
                                LCD_printfxy(0,2,"Lat:%c%03ld.%07ld deg",sign, i1, i2);
376
                                if(NaviData.HomePosition.Altitude < 0) sign = '-';
377
                                else sign = '+';
378
                                i1 = abs(NaviData.TargetPosition.Altitude)/1000L;
379
                                i2 = abs(NaviData.TargetPosition.Altitude)%1000L;
588 holgerb 380
                                LCD_printfxy(0,3,"Alt:%c%04ld.%03ldm",sign, i1, i2);
318 holgerb 381
                        }
382
                        break;
697 holgerb 383
                case 11: // RC stick controls from FC
41 ingob 384
                        LCD_printfxy(0,0,"RC-Sticks" );
516 holgerb 385
            LCD_printfxy(0,1,"Ni:%4i  Ro:%4i ",FC.StickNick, FC.StickRoll);
386
            LCD_printfxy(0,2,"Gs:%4i  Ya:%4i ",FC.StickGas, FC.StickYaw);
387
            LCD_printfxy(0,3,"RC-Level:    %3i", FC.RC_Quality); // Remote Control Level from FC
41 ingob 388
                        break;
864 holgerb 389
                case 12: // RC stick controls from FC
865 holgerb 390
                        LCD_printfxy(0,0,"External-Ctrl" );
864 holgerb 391
 
392
                        if(!EE_Parameter.ExternalControl)
393
                         {
394
                          LCD_printfxy(0,2,"not used" );
395
                         }
396
                         else
865 holgerb 397
                         if((EE_Parameter.ExternalControl >= 248) && (FC.Poti[255 - EE_Parameter.ExternalControl] < 128))
864 holgerb 398
                         {
399
                          LCD_printfxy(0,2,"Switch is off");
400
                         }
401
                         else
402
                         {
403
                                if(FromFC_ExternalCtrlCfg)
404
                                {
865 holgerb 405
                 LCD_printfxy(0,1,"Nick:%4i  Roll:%4i ",ExternControl.Nick, ExternControl.Roll);
406
                 LCD_printfxy(0,2,"Gas: %4i  Yaw: %4i ",ExternControl.Gas, ExternControl.Gier);
407
                 LCD_printfxy(0,3,"Cfg:0x%02x    SW:0x%02x",FromFC_ExternalCtrlCfg,FromFC_ExternalCtrlSwitch);
864 holgerb 408
                            }
409
                                else
410
                             LCD_printfxy(0,2,"No Data");
411
                         }
412
                        break;
413
 
414
                case 13: // RC poti controls from FC
190 killagreg 415
                        LCD_printfxy(0,0,"RC-Potis 1" );
516 holgerb 416
            LCD_printfxy(0,1,"Po1:%3i  Po2:%3i ",FC.Poti[0], FC.Poti[1]);
417
            LCD_printfxy(0,2,"Po3:%3i  Po4:%3i ",FC.Poti[2], FC.Poti[3]);
41 ingob 418
                        break;
864 holgerb 419
                case 14: // RC poti controls from FC
190 killagreg 420
                        LCD_printfxy(0,0,"RC-Potis 2" );
516 holgerb 421
            LCD_printfxy(0,1,"Po5:%3i  Po6:%3i ",FC.Poti[4], FC.Poti[5]);
422
            LCD_printfxy(0,2,"Po7:%3i  Po8:%3i ",FC.Poti[6], FC.Poti[7]);
190 killagreg 423
                        break;
864 holgerb 424
                case 15: // attitude from FC
66 killagreg 425
                        if(FromFlightCtrl.AngleNick < 0) sign = '-';
426
                        else sign = '+';
427
                        i1 = abs(FromFlightCtrl.AngleNick)/10;
428
                        i2 = abs(FromFlightCtrl.AngleNick)%10;
201 killagreg 429
                        LCD_printfxy(0,0,"GyroNick:%c%03ld.%01ld", sign, i1, i2);
66 killagreg 430
                        if(FromFlightCtrl.AngleRoll < 0) sign = '-';
431
                        else sign = '+';
432
                        i1 = abs(FromFlightCtrl.AngleRoll)/10;
433
                        i2 = abs(FromFlightCtrl.AngleRoll)%10;
516 holgerb 434
            LCD_printfxy(0,1,"GyroRoll:%c%03ld.%01ld", sign, i1, i2);
688 holgerb 435
                        if(FromFlightCtrl_AccNick < 0) sign = '-';
67 killagreg 436
                        else sign = '+';
688 holgerb 437
                        i1 = abs(FromFlightCtrl_AccNick)/10;
438
                        i2 = abs(FromFlightCtrl_AccNick)%10;
201 killagreg 439
                        LCD_printfxy(0,2," AccNick:%c%03ld.%01ld", sign, i1, i2);
688 holgerb 440
                        if(FromFlightCtrl_AccRoll < 0) sign = '-';
67 killagreg 441
                        else sign = '+';
688 holgerb 442
                        i1 = abs(FromFlightCtrl_AccRoll)/10;
443
                        i2 = abs(FromFlightCtrl_AccRoll)%10;
516 holgerb 444
            LCD_printfxy(0,3," AccRoll:%c%03ld.%01ld", sign, i1, i2);
41 ingob 445
                        break;
864 holgerb 446
                case 16:
688 holgerb 447
                        LCD_printfxy(0,0,"Analog inputs");
448
                        LCD_printfxy(0,1,"A5:%3i  ",AnalogData.Ch5);
449
                        LCD_printfxy(0,2,"A6:%3i  ",AnalogData.Ch6);
450
                        LCD_printfxy(0,3,"A7:%3i  ",AnalogData.Ch7);
41 ingob 451
                        break;
864 holgerb 452
                case 17:
475 holgerb 453
                        LCD_printfxy(0,0,"Compass:    %3i", FromFlightCtrl.GyroHeading / 10);
454
                        LCD_printfxy(0,1,"Man.-Offset:%3i", FC.FromFC_CompassOffset / 10);
455
                        if(FC.FromFC_DisableDeclination)
516 holgerb 456
                        {
489 killagreg 457
                                LCD_printfxy(0,2,"Mag.Declinat.:disabl");
475 holgerb 458
                        }
459
                        else
460
                        {
489 killagreg 461
                                if(GeoMagDec < 0) sign = '-';
462
                                else sign = '+';
463
                                LCD_printfxy(0,2,"Mag.Declinat.:%c%i.%1i", sign, abs(GeoMagDec)/10,abs(GeoMagDec)%10);
475 holgerb 464
                        }
933 holgerb 465
                        LCD_printfxy(0,3,"True Compass: %3i", OrientationGyroCompassCorrected/10);
516 holgerb 466
            break;
864 holgerb 467
                case 18: // User Parameter
153 killagreg 468
                        LCD_printfxy(0,0,"UP1:%3i  UP2:%3i",Parameter.User1,Parameter.User2);
469
                        LCD_printfxy(0,1,"UP3:%3i  UP4:%3i",Parameter.User3,Parameter.User4);
470
                        LCD_printfxy(0,2,"UP5:%3i  UP6:%3i",Parameter.User5,Parameter.User6);
471
                        LCD_printfxy(0,3,"UP7:%3i  UP8:%3i",Parameter.User7,Parameter.User8);
41 ingob 472
                        break;
864 holgerb 473
                case 19: // User Parameter
426 holgerb 474
                        LCD_printfxy(0,0,"SD-Card Logs");
548 holgerb 475
                        if(SDCardInfo.Valid == 1)
476
                         {
708 holgerb 477
                          LCD_printfxy(0,1,"GPX: %4i (%3ims) ",Logged_GPX_Counter,LogCfg.GPX_Interval);
478
                          LCD_printfxy(0,2,"KML: %4i (%3ims) ",Logged_KML_Counter,LogCfg.KML_Interval);
479
                          LCD_printfxy(0,3,"Trig:%4i  ",Logged_TRIG_Counter);
548 holgerb 480
                         }
481
                         else
482
                          LCD_printfxy(0,1,"no card in slot ");
380 holgerb 483
                        break;
864 holgerb 484
                case 20: // magnetic field
292 killagreg 485
                        if(Compass_CalState)
254 killagreg 486
                        {
292 killagreg 487
                                LCD_printfxy(0,0,"Calibration:");
488
                                LCD_printfxy(0,1,"Step %d/", Compass_CalState);
516 holgerb 489
                                LCD_printfxy(0,2,"X %4i Y %4i Z %4i",MagVector.X,MagVector.Y,MagVector.Z);
292 killagreg 490
                                LCD_printfxy(9,3,"(ESC)(NEXT)");
491
                                switch(Compass_CalState)
254 killagreg 492
                                {
292 killagreg 493
                                        case 1:
494
                                        case 3:
495
                                                LCD_printfxy(7,1,"pause");
496
                                                break;
497
 
498
                                        case 2:
499
                                                LCD_printfxy(7,1,"horizontal");
500
                                                break;
501
 
502
                                        case 4:
503
                                                LCD_printfxy(7,1,"vertical");
504
                                                break;
505
 
506
                                        case 5:
507
                                                LCD_printfxy(7,1,"data saved");
508
                                                LCD_printfxy(8,3,"      (END) ");
509
                                                break;
489 killagreg 510
 
292 killagreg 511
                                        default:
512
                                                break;
254 killagreg 513
                                }
514
                        }
292 killagreg 515
                        else
254 killagreg 516
                        {
330 holgerb 517
                                if(GeoMagDec < 0) sign = '-';
518
                                else sign = '+';
254 killagreg 519
                                LCD_printfxy(0,0,"Magnetic Field");
516 holgerb 520
                                LCD_printfxy(0,1,"X:%5i",MagVector.X);
292 killagreg 521
                                LCD_printfxy(0,2,"Y:%5i",MagVector.Y);
522
                                LCD_printfxy(0,3,"Z:%5i",MagVector.Z);
330 holgerb 523
                                LCD_printfxy(8,1,"Field:%3i",EarthMagneticField/5);
489 killagreg 524
                                if(Compass_I2CPort == NCMAG_PORT_EXTERN)        LCD_printfxy(11,2,"Extern")
525
                                else                                                                            LCD_printfxy(11,2,"Intern");
338 holgerb 526
//                              LCD_printfxy(8,2,"Dec:%c%i.%1i", sign, abs(GeoMagDec)/10,abs(GeoMagDec)%10);
527
//                              LCD_printfxy(8,3,"Inc:%2i", EarthMagneticInclination);
292 killagreg 528
                                LCD_printfxy(15,3,"(CAL)");
529
                        }
530
                        if(Keys & KEY4) //  next step
531
                        {
532
                                if(Compass_CalState <5) Compass_SetCalState(Compass_CalState+1);
533
                                else Compass_SetCalState(0);
534
                        }
535
                        if(Keys & KEY3)Compass_SetCalState(0);  // cancel
41 ingob 536
                        break;
864 holgerb 537
                case 21:
345 holgerb 538
                        if(GeoMagDec < 0) sign = '-';
539
                        else sign = '+';
338 holgerb 540
                                LCD_printfxy(0,0,"Magnetic Field");
541
                                LCD_printfxy(0,1,"Field:%3i (Percent)",EarthMagneticField/5);
542
                                LCD_printfxy(0,2,"Declination:%c%i.%1i ", sign, abs(GeoMagDec)/10,abs(GeoMagDec)%10);
543
                                LCD_printfxy(0,3,"Inclination:%2i (%2i)", EarthMagneticInclination,     EarthMagneticInclinationTheoretic);
544
                        break;
864 holgerb 545
                case 22:
426 holgerb 546
                        LCD_printfxy(0,0,"SD-Setting      ");
547
                        LCD_printfxy(0,2,"WP-Dynamic:%4i ",WaypointAcceleration);
548
                        break;
864 holgerb 549
                case 23:
453 holgerb 550
                        LCD_printfxy(0,0,"CPU Processing  ");
659 holgerb 551
                        LCD_printfxy(0,2,"GPS-Data:  %2i.%iHz ",FreqNewGpsData/10, FreqNewGpsData%10);
663 holgerb 552
                        LCD_printfxy(0,3,"GPS-Update:%2i.%iHz ",FreqGpsNavProcessed/10, FreqGpsNavProcessed%10);
659 holgerb 553
                        if(FreqNewGpsData >= 48 && FreqNewGpsData <= 52) LCD_printfxy(18,2,"OK") else LCD_printfxy(18,2,"!!");
663 holgerb 554
                        if(FreqGpsNavProcessed >= 350) LCD_printfxy(18,3,"OK") else LCD_printfxy(18,3,"!!");
453 holgerb 555
                        break;
864 holgerb 556
                case 24:
489 killagreg 557
                        LCD_printfxy(0,0,"BL Current" );
558
                        LCD_printfxy(11,3,"(in 0.1A)" );
559
                        for(i1 = 0; i1 < 3; i1++)
560
                        {
502 killagreg 561
                                LCD_printfxy(0,i1+1,"%3d %3d %3d %3d ",BL3_Current(i1*4),BL3_Current(i1*4+1),BL3_Current(i1*4+2),BL3_Current(i1*4+3));
562
                                if(Motor[4 + i1 * 4].State == 0) break;
489 killagreg 563
                        }
471 holgerb 564
                        break;
489 killagreg 565
 
864 holgerb 566
                case 25:
489 killagreg 567
                        LCD_printfxy(0,0,"Ext. Compass" );
686 holgerb 568
                        if(NCMAG_Compass_use_Orientation)
489 killagreg 569
                        {
516 holgerb 570
                             u8 tmp;
571
                         LCD_printfxy(0,1,"ACC  X      Y      Z");
572
                         LCD_printfxy(0,2," %5d  %5d  %5d", AccVector.X/40, AccVector.Y/40, AccVector.Z/40);
573
                                 tmp = NCMAG_GetOrientationFromAcc();
574
                                 LCD_printfxy(0,3,"Orientat.: ");
575
                                 if(!tmp) LCD_printfxy(11,3,"??") else LCD_printfxy(11,3,"%2d",tmp);
576
                                 LCD_printfxy(15,3,"(%d)",NCMAG_Orientation);
489 killagreg 577
                        }
578
                        else
579
                        {
580
                                LCD_printfxy(0,1,"Not connected");
581
                        }
473 holgerb 582
                        break;
864 holgerb 583
                case 26:
498 killagreg 584
                        {
504 holgerb 585
                                static u8 index = 1;
498 killagreg 586
                                if(Keys & KEY3) //  next step
587
                                {
503 holgerb 588
                                        if(index < ToFC_MaxWpListIndex) index++;
498 killagreg 589
                                        else index = 1;
590
                                }
503 holgerb 591
                                if(Keys & KEY4) FromFC_LoadWP_List = index;
592
                                LCD_printfxy(0,0,"Load WPL (fix)" );
498 killagreg 593
                                LCD_printfxy(0,1,"Name: %s", WPL_Store.Name);
594
                                //                12345678901234567890
595
                                LCD_printfxy(0,2,"Points    Index     ");
596
                                LCD_printfxy(0,3," %3d      %3d   LOAD", PointList_GetCount(), index);
516 holgerb 597
                        }                                                
498 killagreg 598
                        break;
864 holgerb 599
                case 27:
504 holgerb 600
                        {
601
                                static u8 index = 1;
516 holgerb 602
                                if(Keys & KEY3)
504 holgerb 603
                                {
604
                                        if(index < ToFC_MaxWpListIndex) index++;
605
                                        else index = 1;
606
                                }
514 holgerb 607
                                LCD_printfxy(0,0,"Load WPL (Rel)" );
504 holgerb 608
                                LCD_printfxy(0,1,"Name: %s", WPL_Store.Name);
609
                                //                12345678901234567890
610
                                LCD_printfxy(0,2,"Points    Index     ");
516 holgerb 611
                                if(GPSData.SatFix == SATFIX_3D)
612
                                 {
613
                                   LCD_printfxy(0,3," %3d      %3d   LOAD", PointList_GetCount(), index);
614
                                   if(Keys & KEY4) FromFC_LoadWP_List = index | 0x80;
615
                                 }
616
                                 else LCD_printfxy(0,3," No Satfix !       ", index);
514 holgerb 617
 
516 holgerb 618
                        }                                                
504 holgerb 619
                        break;
864 holgerb 620
                case 28:
514 holgerb 621
                        {
622
                                static u8 index = 1;
516 holgerb 623
                                if(Keys & KEY3)
514 holgerb 624
                                {
625
                                        if(index < ToFC_MaxWpListIndex) index++;
626
                                        else index = 1;
627
                                }
628
                                if(Keys & KEY4) FromFC_Load_SinglePoint = index;
629
                                LCD_printfxy(0,0,"Load Point" );
630
                                LCD_printfxy(0,1,"Name: %s", WPL_Store.Name);
631
                                //                12345678901234567890
632
//                              LCD_printfxy(0,2,"Points    Index     ");
633
                                LCD_printfxy(0,3,"Number:  %3d (LOAD)", index);
516 holgerb 634
                        }                                                
514 holgerb 635
                        break;
864 holgerb 636
                case 29:
514 holgerb 637
                        {
638
                                static u8 index = 1;
639
                                if(Keys & KEY3)
640
                                {
641
                                        if(index < ToFC_MaxWpListIndex) index++;
642
                                        else index = 1;
643
                                }
644
                                LCD_printfxy(0,0,"Save Point" );
919 holgerb 645
                                LCD_printfxy(0,1,"Alt: %3dm", BaroAltimeter_dm/10);
514 holgerb 646
                                //                12345678901234567890
647
                                LCD_printfxy(0,2,"Dir: %3d ", CompassSetpointCorrected/10);
516 holgerb 648
                                if(GPSData.SatFix == SATFIX_3D)
514 holgerb 649
                                 {
650
                                   LCD_printfxy(0,3,"Number:   %3d (SAVE)", index);
651
                                   if(Keys & KEY4) FromFC_Save_SinglePoint = index;
652
                                 }
653
                                 else LCD_printfxy(0,3," No Satfix !       ", index);
516 holgerb 654
                        }                                                
514 holgerb 655
                        break;
677 holgerb 656
/*              case 28:
657
                        LCD_printfxy(0,0,"Analog inputs");
658
                        LCD_printfxy(0,0,"A0:%3i  A1:%3i",AnalogData.Ch0,AnalogData.Ch1);
659
                        LCD_printfxy(0,1,"A2:%3i  A3:%3i",AnalogData.Ch2,AnalogData.Ch3);
660
                        LCD_printfxy(0,2,"A4:%3i  A5:%3i",AnalogData.Ch4,AnalogData.Ch5);
661
                        LCD_printfxy(0,3,"A6:%3i  A7:%3i",AnalogData.Ch6,AnalogData.Ch7);
662
                        break;
663
*/
688 holgerb 664
 
864 holgerb 665
                case 30:
708 holgerb 666
                        LCD_printfxy(0,0,"Trigger Input");
667
                        if(UART_VersionInfo.HWMajor >= 30)
668
                         {
669
                           if(BlitzSchuhConnected) LCD_printfxy(0,1,"External")
670
                           else LCD_printfxy(0,1,"Internal");
671
                           LCD_printfxy(0,2,"Counter:%4d ",TrigLogging.Count);
672
                           LCD_printfxy(0,3,"Logfile:%4i ",Logged_TRIG_Counter);
673
                         }
674
                        else
675
                         {
676
                           LCD_printfxy(0,1,"Not Supported in ");
677
                           LCD_printfxy(0,2,"Hardware V%d ", UART_VersionInfo.HWMajor/10);
678
                           LCD_printfxy(0,3,"(V3 required)");
679
                         }
724 holgerb 680
                        break;
864 holgerb 681
                case 31:
724 holgerb 682
                        LCD_printfxy(0,0,"CamCtrl");
683
                        if(!(FromCamCtrl.CamStatus & CAM_STATE_I2C_OK))
684
                        {
685
                                LCD_printfxy(0,2,"Not connected");
729 holgerb 686
                                if(CamCtrlTimeout < 10) LCD_printfxy(14,3,"(conn)");  // connect manually
864 holgerb 687
                                if(Keys & KEY4) CamCtrlTimeout = 31000;
724 holgerb 688
                        }
689
                        else
690
                        {
729 holgerb 691
                                LCD_printfxy(8,0,"V%i.%02i",1 + FromCamCtrl.Version / 100, FromCamCtrl.Version % 100);
692
 
724 holgerb 693
                                switch(FromCamCtrl.Type)
694
                                  {
729 holgerb 695
                                        case TYPE_LANC:         LCD_printfxy(13,0,"L"); break;
696
                                        case TYPE_IR:   LCD_printfxy(13,0,"I"); break;
697
                                   case TYPE_MULTI: LCD_printfxy(13,0,"M"); break;
724 holgerb 698
                                }
699
                        LCD_printfxy(0,0,"CamCtrl");
729 holgerb 700
                        LCD_printfxy(0,1,"Stat:");
701
                        if(FromCamCtrl.CamStatus & CAM_STATE_RDY)               LCD_printfxy(5,1,"RDY")
702
                        if(FromCamCtrl.CamStatus & CAM_STATE_REC_ACTIVE) LCD_printfxy(10,1,"REC");
703
                        if(FromCamCtrl.CamStatus & CAM_STATE_PHOTO_MODE) LCD_printfxy(14,1,"PHOTO");
704
                        if(FromCamCtrl.CamStatus & CAM_STATE_ZOOM)              LCD_printfxy(5,1,"ZOOM ");
705
                        if(!(FromCamCtrl.CamStatus & CAM_STATE_RDY)) LCD_printfxy(5,1," ---");
708 holgerb 706
 
729 holgerb 707
                        LCD_printfxy(17,1,"(%c)",CamCtrlCharacter);
708
 
724 holgerb 709
                        if(FromCamCtrl.CamStatus & CAM_STATE_CAM_DISCONN)       LCD_printfxy(0,2,"Disconn.")
710
                        else
711
                         {
729 holgerb 712
                           if(FromCamCtrl.CamStatus & CAM_STATE_OFF)            LCD_printfxy(1,2,"Cam:OFF") else LCD_printfxy(1,2,"Cam:ON");
724 holgerb 713
                         }
729 holgerb 714
                        LCD_printfxy(11,2,"Pics:%3d ",FromCamCtrl.PhotoCount);
715
//LCD_printfxy(5,2,"x%2x ",FromCamCtrl.CamStatus);
724 holgerb 716
                        if(FromCamCtrl.PPM1Okay) LCD_printfxy(0,3,"Zoom:%3i",FromCamCtrl.PPM1Data);
717
                        if(!FromCamCtrl.PPM2Okay) // there is PPM Input connected to the CamCtrl 
718
                         {
719
                                LCD_printfxy(14,3,"(TRIG)");
720
                                if(EE_Parameter.CamCtrlModeChannel == 0)
721
                                 {
729 holgerb 722
                                  if(FromCamCtrl.CamStatus & CAM_STATE_REC_ACTIVE) LCD_printfxy(9,3,"(off)")
723
                                  else LCD_printfxy(9,3,"(REC)"); // Control only possible if no switch is assigned
724 holgerb 724
                                 }
729 holgerb 725
                            else LCD_printfxy(2,3,"CH:%3i",127+PPM_In[EE_Parameter.CamCtrlModeChannel]);
724 holgerb 726
 
727
                                if(Keys & KEY3)
728
                                {
729
                                        ToCamCtrl.CamCommand &= ~(CAM_CMD_REC_OFF|CAM_CMD_REC_ON);
730
                                        if(FromCamCtrl.CamStatus & CAM_STATE_REC_ACTIVE) ToCamCtrl.CamCommand |= CAM_CMD_REC_OFF;
731
                                        else ToCamCtrl.CamCommand |= CAM_CMD_REC_ON;
732
                                }
733
                        if(Keys & KEY4)  ToCamCtrl.CamCommand |= CAM_CMD_SHUTTER;
734
                        //if(Keys & KEY4)  ToCamCtrl.CamCommand |= CAM_CMD_RESET_CAM;
735
                        //if(Keys & KEY4)  ToCamCtrl.CamCommand |= CAM_CMD_SWITCH_ON;
736
                        //if(Keys & KEY4)  ToCamCtrl.CamCommand |= CAM_CMD_SWITCH_OFF;
737
                        }
738
                        else
739
                        {
740
                                if(FromCamCtrl.PPM2Okay) LCD_printfxy(10,3,"PPM:%3i",FromCamCtrl.PPM2Data);
741
                        }
742
                  }
688 holgerb 743
                        break;
864 holgerb 744
                case 32:
792 holgerb 745
                        LCD_printfxy(0,0,"LaserCtrl");
746
                        if(!(FromLaserCtrl.LaserStatus & LASER_I2C_OK))
747
                        {
748
                                LCD_printfxy(0,2,"Not connected");
827 holgerb 749
                                if(LaserCtrlTimeout < 10) LCD_printfxy(14,3,"(conn)");  // connect manually
862 holgerb 750
                                if(Keys & KEY4) LaserCtrlTimeout = 25000;
792 holgerb 751
                        }
752
                        else
753
                        {
754
                                LCD_printfxy(10,0,"V%i.%02i",1 + FromLaserCtrl.Version / 100, FromLaserCtrl.Version % 100);
755
                            LCD_printfxy(0,1,"Stat:");
756
                            if(FromLaserCtrl.LaserStatus & LASER_DATA_OK) LCD_printfxy(8,1,"OK") else   LCD_printfxy(5,1,"No Laser");
757
                                LCD_printfxy(0,2,"Dist:%5dcm",FromLaserCtrl.Distance);
758
                        }
759
                        break;
864 holgerb 760
                case 33:
827 holgerb 761
                        LCD_printfxy(0,0,"GimbalCtrl");
762
                        if(!(FromGimbalCtrl.GimbalStatus & GIMBAL_I2C_OK))
763
                        {
764
                                LCD_printfxy(0,2,"Not connected");
765
                                if(GimbalCtrlTimeout < 10) LCD_printfxy(14,3,"(conn)");  // connect manually
862 holgerb 766
                                if(Keys & KEY4) GimbalCtrlTimeout = 30000;
827 holgerb 767
                        }
768
                        else
769
                        {
859 holgerb 770
                                LCD_printfxy(11,0,"V%i.%02i",1 + FromGimbalCtrl.Version / 100, FromGimbalCtrl.Version % 100);
827 holgerb 771
                            LCD_printfxy(0,1,"Stat:");
911 holgerb 772
                            if(FromGimbalCtrl.GimbalStatus & GIMBAL_DATA_OK)
773
                                 {
774
                                  LCD_printfxy(8,1,"OK");
775
                                  if(FromGimbalCtrl.Compatible != GIMBAL_CTRL_COMPATIBLE) LCD_printfxy(0,1,"Not Compatible! %i<>%i",FromGimbalCtrl.Compatible,GIMBAL_CTRL_COMPATIBLE);
776
                                 } else LCD_printfxy(5,1,"No Gimbal");
827 holgerb 777
                                LCD_printfxy(0,2,"Nick:%3i Roll:%3i",FromGimbalCtrl.Nick,FromGimbalCtrl.Roll);
911 holgerb 778
                                LCD_printfxy(0,3,"Yaw: %3i [0,1 Deg] ",FromGimbalCtrl.Yaw);
859 holgerb 779
                                if(Keys & KEY4) { ToGimbalCtrl.BitCmd |= (GIMBAL_CMD_YW_ZERO); MenuNickGimbalOffset = 0;}
866 holgerb 780
//if(PPM_In[EE_Parameter.GimbalOut1Channel] > 10) LCD_printfxy(18,1,"1") else LCD_printfxy(18,1,"0")
781
//if(PPM_In[EE_Parameter.GimbalOut2Channel] > 10) LCD_printfxy(19,1,"1") else LCD_printfxy(19,1,"0")
782
//if(ToGimbalCtrl.BitCmd & GIMBAL_CMD_OUT_TRIGGER) LCD_printfxy(16,1,"1") else LCD_printfxy(16,1,"0")
827 holgerb 783
                        }
784
                        break;
864 holgerb 785
                case 34: // Temperaturecompensation of the Barosensor
780 holgerb 786
                {
787
                static s32 dT = 0, tAlt = 0, faktor = 0;
788
                static s32 dP = 0, pAlt = 0;
789
                static u8 stored = 0, heateroff_msg = 0;
724 holgerb 790
 
780 holgerb 791
                        if(BaroCalState)
792
                        {
919 holgerb 793
                                dP = BaroAltimeter_dm - pAlt;
780 holgerb 794
                                dT = FC_Temperatur - tAlt;
795
                                faktor = (dP * 100) / dT;
796
 
797
                                if(abs(dT) < 130)                                                       LCD_printfxy(0,0,"Warm up slowly")
798
                                else
799
                                if(FC.StatusFlags & FC_STATUS_MOTOR_RUN)        LCD_printfxy(0,0,"Motors off!   ")
800
                                else                                                                    LCD_printfxy(0,0,"Wait...       ");
801
 
802
                                if((abs(FC_Temperatur_raw/10 - tAlt) >= 250))           heateroff_msg = 1;
803
                                if((abs(FC_Temperatur_raw/10 - tAlt) <= 150))           heateroff_msg = 0;
804
                                if(heateroff_msg) LCD_printfxy(0,0,"Heater off!   ");
805
 
806
                                LCD_printfxy(0,1,"T=%4dC   dT=%3dC ",FC_Temperatur_raw/100,dT/10 );
919 holgerb 807
                                LCD_printfxy(0,2,"P=%4dm   dP=%3dm ",BaroAltimeter_dm/10,dP/10 );
780 holgerb 808
 
809
                                if(dT > 30) LCD_printfxy(0,3,"K=%4dcm/C ",faktor)
810
                                else LCD_printfxy(0,3,"       (cancel)",faktor);
811
 
812
                                if(abs(dT) > 120 && (abs(FC_Temperatur_raw/10 - FC_Temperatur) <= 5))  // kein Temperaturgradient und mehr als 12°C erwärmt
813
                                 {
814
                                  heateroff_msg = 0;
815
                                  LCD_printfxy(12,3,"(save)");
816
                                  LCD_printfxy(0,0,"Okay          ");
817
 
818
                                  if(Keys & KEY4) //  Store
819
                                  {
820
                                        LuftdruckTemperaturKompensation = faktor;
821
                                        WriteBaroCalibrationToEEprom();
822
                                BaroCalState = 0;
823
                                        stored = 1;
824
                                  }
825
                                 }
826
                                else LCD_printfxy(15,3,"(--)  ");
827
                        }
828
                        else
829
                        if(UART_VersionInfo.HWMajor >= 30)
830
                        {
831
                                LCD_printfxy(0,0,"Barometer");
832
                                LCD_printfxy(0,1,"Temperat.= %4d.%1dC ",FC_Temperatur_raw/100,abs(FC_Temperatur_raw%100)/10);
833
                                LCD_printfxy(0,2,"Faktor   = %4dcm/C ",LuftdruckTemperaturKompensation);
834
//LCD_printfxy(0,3,"Offset =%4dcm ",LuftdruckTemperaturOffset);
835
                            if(stored) LCD_printfxy(0,3,"Stored     ");
836
 
837
                                if((abs(FC_Temperatur_raw/10 - FC_Temperatur) <= 5))  // kein Temperaturgradient
838
                                 {
839
                                        LCD_printfxy(15,3,"(CAL)");
840
                                        if(Keys & KEY4) //  next step
841
                                        {
919 holgerb 842
                                                pAlt = BaroAltimeter_dm;
780 holgerb 843
                                                tAlt = FC_Temperatur_raw/10;
844
                                                FC_Temperatur = FC_Temperatur_raw/10;
845
                                                BaroCalState = 1;
846
                                                stored = 0;
847
                                        }
848
 
849
                                 }
850
                                else LCD_printfxy(15,3,"(---)");
851
                        }
852
                        else
853
                        {
854
                                LCD_printfxy(0,0,"Barometer");
855
                                LCD_printfxy(0,1,"Temperat = ??C ");
856
                                LCD_printfxy(0,2,"Faktor   = ?? cm/C");
857
                                LCD_printfxy(0,3,"Not supported");
858
                        }
859
 
860
                        if(Keys & KEY3)  BaroCalState = 0;  // cancel
861
                        }
862
                        break;
880 holgerb 863
                case 35:
864
                        LCD_printfxy(0,0,"NMEA Input");
865
                        if(!NMEA_cnt) LCD_printfxy(0,3,"No Data ")
866
                        else
867
                        {
868
                                if(NMEA_In_Fix_Txt[0] < '1') LCD_printfxy(1,3,"No Fix!  %s",NMEA_In_Fix_Txt)
881 holgerb 869
                                else  
870
                                 {
871
                                  LCD_printfxy(0,1,"Lon:%s ",NMEA_In_Lon_Txt);
872
                                  LCD_printfxy(0,2,"Lat: %s ",NMEA_In_Lat_Txt);
873
                                  LCD_printfxy(11,1,"'%s ",&NMEA_In_Lon_Txt[7]);
874
                                  LCD_printfxy(11,2,"'%s ",&NMEA_In_Lat_Txt[6]);
875
                                  LCD_printfxy(0,3,"Fix:%s  %s ",NMEA_In_Fix_Txt,NMEA_In_Alt_Txt);
876
                                 }
780 holgerb 877
 
880 holgerb 878
                                LCD_printfxy(11,0,"%3u",NMEA_cnt_gga);
879
                                if(!NMEA_cnt_gga) LCD_printfxy(0,3,"No $GPGGA Data! ");
880
                        }
881
                        break;
41 ingob 882
                default:
201 killagreg 883
                        //MaxMenuItem = MenuItem - 1;
41 ingob 884
                        MenuItem = 0;
885
                        break;
516 holgerb 886
    }
1 ingob 887
}