Subversion Repositories Projects

Rev

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

Rev Author Line No. Line
206 ligi 1
/***************************************************************
2
 *
3
 * User Interface ( Canvas ) of DUBwise
4
 *                                                          
5
 * Author:        Marcus -LiGi- Bueschleb
6
 * Mailto:        LiGi @at@ LiGi DOTT de                    
7
 *
8
 ***************************************************************/
9
 
10
import javax.microedition.lcdui.*;
11
 
12
 
13
import javax.microedition.media.*;
14
import javax.microedition.media.control.*;
15
 
16
 
17
//#if fileapi=="on"
18
import javax.microedition.io.*;
19
import javax.microedition.midlet.*;
20
import javax.microedition.io.file.*;
21
 
22
import java.io.*;
23
import java.util.*;
24
//#endif
25
 
26
public class DUBwiseCanvas
27
    extends Canvas
211 ligi 28
    implements Runnable,org.ligi.ufo.DUBwiseDefinitions , DUBwiseUIDefinitions
206 ligi 29
{
30
 
31
//#if fileapi=="on"
32
    public final static int MAX_FILELIST_LENGTH=100;
33
    public final static int MAX_PATH_DEPTH=10;
34
 
35
    byte act_path_depth=0;
36
    String[] act_path_arr;
37
 
38
 
39
    public String act_path()
40
    {
41
        String res="";
42
        for (int i=0;i<act_path_depth;i++)
43
            res+=act_path_arr[i];
44
        return res;
45
    }
46
 
47
    String[] file_list;
48
    int file_list_length=0;
49
//#endif
50
 
51
 
52
 
53
    boolean ipinput4proxy;
54
    byte ipinput_pos=0;
55
    int[] act_edit_ip;
56
 
57
    int canvas_width=100;
58
    int canvas_height=100;
59
 
60
 
61
 
62
 
63
    //    public String ip_digit_zeroes(int digit)
64
    //{ return "" + digit/100 + "" +   (digit/10)%10 + "" + (digit)%10;   }
65
 
66
 
67
 
68
    int heading_offset=0;
69
    int act_wp;
70
 
71
 
72
 
73
//#if bluetooth=="on"
74
    private BTSearcher bt_scanner;
75
//#endif
76
 
77
    public org.ligi.ufo.MKCommunicator mk=null;
78
    //    private MKStatistics mk_stat=null;
79
    private MKParamsEditor params_editor=null;
80
    public DUBwiseDebug debug=null;
81
    public DUBwiseHelper helper=null;
82
 
83
 
84
//#if voice_mode!="no_voice"
85
    private MKStatusVoice status_voice;
86
//#endif
87
 
88
 
89
    private DUBwise root;
90
    public DUBwiseSettings settings;
91
    //    public UFOProber mk.ufo_prober;
92
 
93
    private Image bg_img;
94
    private Image lcd_img;
95
    private Image symbols_img;
96
    private Image err_img;
97
 
98
 
99
    int max_lines;
100
 
101
 
102
    public byte act_motor=0;
103
    public byte act_motor_increase=0;
104
    public boolean motor_test_sel_all=false;
105
 
106
 
107
    /* Graph Vars */
108
    public final static int GRAPH_COUNT=4;
109
    public final static int[] graph_colors={0x156315,0xCC1315,0xf8ef02,0x19194d};
110
    public int[] graph_sources={0,1,2,3};
111
    public String[] graph_names={"nick int","roll int","nick acc","roll acc"};
112
    public int[][] graph_data;
113
 
114
    public int lcd_char_width=0;
115
    public int lcd_char_height=0;
116
 
117
    public int frame_pos=0;
118
 
119
    //    public byte mk.user_intent=USER_INTENT_NONE;
120
 
121
    int line_scaler=20;
122
 
123
    int rawdebug_cursor_y=0;    
124
    int rawdebug_off_y=0;
125
 
126
    public int line_middle_y;
127
 
128
    boolean quit=false;
129
 
130
    int     bg_offset=0;
131
 
132
    // variable to hold the current state
133
    public byte state=-1;
134
 
135
    int local_max=-1;
136
 
137
    int y_off=0;
138
    int spacer=0;
139
    int spacer1=0;
140
 
141
    int[] motor_test = {0,0,0,0};
142
 
143
 
144
    String[] menu_items;
145
    byte[]    menu_actions;
146
    int act_menu_select=0;
147
 
148
    String[] lcd_lines =null;
149
 
150
 
151
    public void setup_menu(String[] items , byte[] actions)
152
    {
153
        menu_items=items;
154
        menu_actions=actions;
155
        lcd_lines=new String[menu_items.length];
156
    }
157
 
158
    public void paint_menu(Graphics g)
159
    {
160
        for ( int i=0;i<menu_items.length;i++)
161
            {
162
                if ((frame_pos%3)!=0)
163
                    {
164
                        lcd_lines[i]=(act_menu_select==i?">":" ") + menu_items[i];     
165
                        for ( int ii=0;ii<(18-menu_items[i].length());ii++)
166
                            lcd_lines[i]+=" ";
167
                        if (act_menu_select==i)
168
                            lcd_lines[i]+="<";
169
                    }
170
                else
171
                    lcd_lines[i]=" " + menu_items[i];  
172
 
173
 
174
            }
175
        paint_lcd(g,true);
176
    }
177
 
178
    public void menu_keypress(int keyCode)
179
    {
180
        debug.log("Menu with KeyCode:"+keyCode);
181
        switch (getGameAction (keyCode))
182
            {
183
            case UP:
184
                if (act_menu_select!=0) act_menu_select--;
185
                else
186
                    act_menu_select=menu_items.length-1;
187
                break;
188
 
189
            case DOWN:
190
                if (act_menu_select<(menu_items.length-1)) act_menu_select++;
191
                else act_menu_select=0;
192
                break;
193
 
194
            }
195
 
196
    }
197
 
198
    public boolean cam_condition()
199
    {
200
        return (mk.stick_data.stick[5]>100);
201
    }
202
 
203
    //    int lcd_top=25;
204
 
205
    public void paint_lcd(Graphics g,boolean bottomup)
206
    {
207
 
208
        int y;
209
 
210
        int lcd_top= (state==STATEID_EDIT_PARAMS?0:25);
211
        max_lines=(canvas_height-lcd_top)/lcd_char_height;
212
 
213
        int spacer_left_right=(canvas_width-(20*(lcd_img.getWidth()/222)))/2;
214
        //      for(int i=0;i<lcd_lines.length;i++)
215
 
216
        int display_lines=(lcd_lines.length>max_lines?max_lines:lcd_lines.length);
217
 
218
 
219
        int lcd_off= (state==STATEID_EDIT_PARAMS?params_editor.act_y:act_menu_select)-display_lines+1;
220
        if ( lcd_off<0)  lcd_off=0;
221
 
222
        for(int i=0;i<display_lines;i++)
223
            for (int pos=0;pos<20;pos++)
224
            {
225
                if (bottomup)
226
                    y=canvas_height-(display_lines-i)*lcd_char_height;
227
                else
228
                    y=i*lcd_char_height;
229
                g.setClip((lcd_img.getWidth()/222)*pos+spacer_left_right,y,(lcd_img.getWidth()/222),lcd_img.getHeight());
230
                g.drawImage(lcd_img,spacer_left_right+(lcd_img.getWidth()/222)*pos-((pos<lcd_lines[i+lcd_off].length()?lcd_lines[i+lcd_off].charAt(pos):' ')-' ')*(lcd_img.getWidth()/222),y,g.TOP | g.LEFT);
231
 
232
            }
233
    }
234
 
235
    public void load_images()
236
    {
237
        try
238
            {
239
                bg_img=null;
240
                lcd_img=null;
241
 
242
                // load all needed images
243
                switch (settings.act_skin)
244
                    {
245
                    case SKINID_DARK:
246
                        lcd_img=Image.createImage("/lcd_green.png");
247
                        if (settings.do_scrollbg) bg_img=Image.createImage("/starfield.jpg");                                   break;
248
 
249
                    case SKINID_LIGHT:
250
                        lcd_img=Image.createImage("/lcd_blue.png");
251
                        if (settings.do_scrollbg) bg_img=Image.createImage("/clouds.jpg");
252
                        break;
253
                    }
254
 
255
 
256
                //              bt_img=Image.createImage("/bt.png");
257
                symbols_img=Image.createImage("/symbols.png");
258
  //            load_img=Image.createImage("/load.png");
259
 
260
                lcd_char_width=lcd_img.getWidth()/222;
261
                lcd_char_height=lcd_img.getHeight();
262
 
263
 
264
 
265
                if (bg_img!=null)
266
                    graph_data=new int[GRAPH_COUNT][bg_img.getWidth()];
267
                else
268
                    graph_data=new int[GRAPH_COUNT][this.getWidth()*2];
269
 
270
                for (int c=0;c<graph_data[0].length;c++)
271
                    for (int d=0;d<GRAPH_COUNT;d++)
272
                        graph_data[d][c]=-1;
273
                /*
274
                nick_line_pos_data=new int[graph_data[0].length];
275
                roll_line_pos_data=new int[graph_data[0].length];
276
                accnick_line_pos_data=new int[graph_data[0].length];
277
                accroll_line_pos_data=new int[graph_data[0].length];
278
 
279
                for (int c=0;c<graph_data[0].length;c++)
280
                    {
281
                        nick_line_pos_data[c]=-1;
282
                        roll_line_pos_data[c]=-1;
283
                        accnick_line_pos_data[c]=-1;
284
                        accroll_line_pos_data[c]=-1;
285
                    }
286
                */
287
                try {
288
                    err_img=null;
289
                    if (settings.do_scrollbg) err_img=Image.createImage("/preflight.jpg");         
290
                }
291
                catch (Exception e)         {    }
292
 
293
            }
294
 
295
        catch (Exception e)
296
            {
297
                debug.err(e.toString());
298
            }
299
 
300
    }
301
 
302
    public DUBwiseCanvas(DUBwise _root)
303
    {
304
 
305
//#if fileapi=="on"
306
        file_list= new String[MAX_FILELIST_LENGTH];
307
        act_path_arr=new String[MAX_PATH_DEPTH];
308
//#endif
309
 
310
        root=_root;
311
 
312
        mk      = new org.ligi.ufo.MKCommunicator();
313
        helper = new DUBwiseHelper();
314
        settings = new DUBwiseSettings();
315
        debug   = new DUBwiseDebug(this);
316
 
317
//#if bluetooth=="on"
318
        bt_scanner = new BTSearcher();
319
//#endif
320
 
321
        params_editor = new MKParamsEditor(this);
322
 
323
//#if voice_mode!="no_voice"
324
        status_voice=new MKStatusVoice(mk,this);
325
//#endif
326
 
327
 
328
        load_images();
329
 
330
        if (settings.connection_url!="")
331
            connect_mk(settings.connection_url,settings.connection_name);
211 ligi 332
 
333
        mk.gps_position.act_speed_format=settings.speed_format;
334
        mk.gps_position.act_gps_format= settings.gps_format;
206 ligi 335
 
211 ligi 336
 
206 ligi 337
        chg_state(STATEID_MAINMENU);
338
 
339
        new Thread(this).start();
340
 
341
    }
342
 
343
 
344
 
345
 
346
    /****************************** Thread ******************/
347
    // ticking runnable Section
348
    public void run()
349
    {
350
 
351
 
352
        while(true)
353
            {
354
                try {
355
 
356
 
357
                repaint();
358
                serviceRepaints();
359
 
360
                System.gc();
361
                long loopStartTime = System.currentTimeMillis();
362
                long sleeptime=0;
363
                // ticked thing
364
 
365
                frame_pos++;
366
 
367
                if (mk.ufo_prober.change_notify)
368
                    {
369
                        mk.ufo_prober.change_notify=false;
370
                        if (mk.ufo_prober.is_incompatible())
371
                            {
372
                                mk.error_str="incompatible Device";
373
                                chg_state(STATEID_NC_ERRORS);
374
                            }
375
                        else
376
                            if (state==STATEID_MAINMENU)
377
                                chg_state(STATEID_MAINMENU); // reload mainmenu ( changed content )
378
                    }
379
 
211 ligi 380
 
206 ligi 381
                switch(state)
382
                    {
383
                    case STATEID_CAMMODE:
211 ligi 384
 
385
                        try
386
                            {
387
                                if(cam_condition())
388
                                    {
206 ligi 389
                                        cam_img=null;
390
                                        debug.log("get snap\n");
391
                                        cam_raw = mVideoControl.getSnapshot(null);
211 ligi 392
 
206 ligi 393
                                        try { Thread.sleep(4000); }
394
                                        catch (Exception e)
395
                                            {
396
                                                debug.log("Problem Sleeping ");
211 ligi 397
 
206 ligi 398
                                            }
211 ligi 399
                                    }
400
                                else
401
                                    {
402
                                        if (cam_img==null)
403
                                            cam_img = Image.createImage(cam_raw, 0, cam_raw.length);
404
                                    }
405
                            }
406
                        catch ( Exception e)
407
                            {
408
                                debug.log(e.toString());
409
                            }
206 ligi 410
                        break;
411
                    case STATEID_KEYCONTROL:
412
                        mk.send_keys(keycontrol_bitfield);     
413
                        break;
211 ligi 414
 
206 ligi 415
                    case STATEID_NC_ERRORS:
416
                        lcd_lines[0]=""+mk.error_str;
417
                        break;
211 ligi 418
 
206 ligi 419
                    case STATEID_READ_PARAMS:
420
                        if (mk.watchdog.act_paramset==5)
421
                            chg_state(STATEID_SELECT_PARAMSET);
422
                        else
423
                            {
424
                                lcd_lines[0]="Reading Settings    ";
425
                                lcd_lines[1]=mk.watchdog.act_paramset+"/5 |"+ (mk.watchdog.act_paramset>0?"#":"_") + (mk.watchdog.act_paramset>1?"#":"_") + (mk.watchdog.act_paramset>2?"#":"_")+ (mk.watchdog.act_paramset>3?"#":"_")+ (mk.watchdog.act_paramset>4?"#":"_") + "|         ";
211 ligi 426
 
206 ligi 427
                                if (mk.params.found_incompatible)
428
                                    {
429
                                        mk.error_str="incompatible params";
430
                                        chg_state(STATEID_NC_ERRORS);
431
                                    }
211 ligi 432
 
206 ligi 433
                            }
434
                        break;
211 ligi 435
 
206 ligi 436
 
437
                    case STATEID_MOTORTEST:
438
 
439
                        if (motor_test_sel_all)
440
                            for (int m=0;m<4;m++)
441
                                {
442
                                    motor_test[m]+=act_motor_increase;
443
                                    if (motor_test[m]<0)motor_test[m]=0;
444
                                    if (motor_test[m]>255)motor_test[m]=255;
445
                                }
446
                        else
447
                            {
448
                                motor_test[act_motor]+=act_motor_increase;
449
                                if (motor_test[act_motor]<0) motor_test[act_motor]=0;
450
                                if (motor_test[act_motor]>255) motor_test[act_motor]=255;
451
                            }
452
 
453
                        mk.motor_test(motor_test);
454
                        break;
455
 
456
                    case STATEID_IPINPUT:
457
                        if (ipinput4proxy)
458
                            act_edit_ip=settings.act_proxy_ip;
459
                        else
460
                            act_edit_ip=settings.act_conn_ip;                      
461
 
462
                        lcd_lines[1]=helper.ip_str(act_edit_ip,true);
463
 
464
 
465
                        lcd_lines[2]="";
466
                        for(int foo=0;foo<20;foo++)
467
                            {
468
                                if (foo==ipinput_pos)
469
                                    lcd_lines[2]+="^";
470
                                else
471
                                    lcd_lines[2]+=" ";
472
                            }
473
                        break;
474
 
475
                    case STATEID_MAINMENU:
476
 
477
                        break;
478
 
479
//#if bluetooth=="on"
480
                    case STATEID_SCANNING:
211 ligi 481
 
482
                        lcd_lines[1]="Bluetooth Devices " + idle_seq[(((frame_pos/5)%idle_seq.length))];
206 ligi 483
                        lcd_lines[2]="found " + bt_scanner.remote_device_count;
484
 
485
                        if (!bt_scanner.searching)
486
                                chg_state(STATEID_DEVICESELECT);
487
 
488
                        break;
489
//#endif
490
 
491
 
492
                    }
493
 
494
                if (quit)
495
                    {
211 ligi 496
                        settings.speed_format=mk.gps_position.act_speed_format;
497
                        settings.gps_format=mk.gps_position.act_gps_format;
206 ligi 498
                        settings.save();
499
                        root.quit();
500
                    }
501
 
502
                try {
503
                    //rescan=false;
504
                    bg_offset--;
505
                    if (bg_offset==-graph_data[0].length)
506
                        bg_offset=0;
507
//#if devicecontrol=="on"
508
                    if (settings.keep_lighton) com.nokia.mid.ui.DeviceControl.setLights(0,100);
509
//#endif
510
                }
511
                catch (Exception e)   {    }
512
 
513
 
514
                sleeptime=1000/ 15 - (int) (System.currentTimeMillis()- loopStartTime);
515
 
516
                if (sleeptime<0)
517
                    sleeptime=100; // everyone has fi sleep
518
 
519
                try { Thread.sleep(sleeptime); }
520
                catch (Exception e)
521
                    {
522
                        debug.log("Problem Sleeping ");
523
                    }
524
 
525
                }
526
                catch (Exception e)
527
                    {
528
                        debug.log("E!:"+e.getMessage());
529
 
530
                    }
531
            }
532
    }
533
 
534
 
535
 
536
    boolean firstrun=true;
537
 
538
    public int skin_bg_color()
539
    {
540
 
541
        switch (settings.act_skin)
542
            {
543
            case SKINID_DARK:
544
                return 0x000000;       
545
 
546
            default:           
547
            case SKINID_LIGHT:
548
                return 0xFFFFFF;       
549
            }
550
    }
551
 
552
 
553
    public int skin_fg_color()
554
    {
555
 
556
        switch (settings.act_skin)
557
            {
558
            case SKINID_DARK:
559
                return 0xFFFFFF;       
560
 
561
            default:
562
            case SKINID_LIGHT:
563
                return 0x000000;       
564
            }
565
    }
566
 
567
    // drawing section
568
    public void paint(Graphics g) {
569
 
570
        canvas_width=this.getWidth();
571
        canvas_height=this.getHeight();
572
 
573
        if (debug.showing)
574
            {
575
                debug.paint(g);
576
                return;
577
            }
578
 
579
 
580
        if (firstrun)
581
            {
582
                if (settings.fullscreen) setFullScreenMode(settings.fullscreen);
583
                firstrun=false;
584
            }
585
        y_off=0;
586
 
587
 
588
 
589
        try {
590
 
591
            if (mk!=null)
592
                {
593
                    line_middle_y=canvas_height/2;
594
                    if (local_max<Math.abs(mk.debug_data.nick_int()))
595
                        local_max=Math.abs(mk.debug_data.nick_int());
596
                    if (local_max<Math.abs(mk.debug_data.roll_int()))
597
                        local_max=Math.abs(mk.debug_data.roll_int());
598
                    if (local_max<Math.abs(mk.debug_data.accnick()))
599
                        local_max=Math.abs(mk.debug_data.accnick());
600
                    if (local_max<Math.abs(mk.debug_data.accroll()))
601
                        local_max=Math.abs(mk.debug_data.accroll());
602
                    line_scaler= local_max/(canvas_height/2)+1;
603
                }
604
 
605
 
606
            Font f1 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);  
607
            Font f2 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);  
608
 
609
            spacer=(f1.getHeight());
610
            spacer1=(f2.getHeight());
611
 
612
            //default Font
613
            g.setFont(f1);
614
 
615
 
616
            //draw background
617
            if ((!settings.do_scrollbg) || (state==STATEID_EDIT_PARAMS))
618
                {
619
                    g.setColor(0xdedfff);
620
                    g.fillRect(0,0,canvas_width,symbols_img.getHeight());
621
 
622
                    g.setColor(skin_bg_color());
623
                    g.fillRect(0,symbols_img.getHeight(),canvas_width,canvas_height-symbols_img.getHeight());
624
 
625
 
626
                }
627
            else
628
                {
629
                    g.setColor(0xFFFFFF);
630
                    g.fillRect(0,0,canvas_width,canvas_height);
631
                    g.drawImage(bg_img,bg_offset,0, g.TOP | g.LEFT);
632
 
633
                    if (bg_offset+bg_img.getWidth()<canvas_width)
634
                        g.drawImage(bg_img,bg_offset+bg_img.getWidth(),0, g.TOP | g.LEFT);
635
                }
636
 
637
 
638
            //int bar=0;
639
            //      for ( int bar=0;bar<3;bar++)
640
            if (settings.do_scrollbg)
641
                for ( int bar=0;bar<canvas_width/(symbols_img.getWidth()/10)+1;bar++)
642
                    {
643
                        g.setClip(bar*(symbols_img.getWidth()/10),0,(symbols_img.getWidth()/10),symbols_img.getHeight());;
644
                        g.drawImage(symbols_img,bar*(symbols_img.getWidth()/10),0, g.TOP | g.LEFT);
645
                    }
646
 
647
            int symbol_left=0;
648
 
649
            g.setClip(symbol_left,0,(symbols_img.getWidth()/10),symbols_img.getHeight());;
650
            if ((mk.ufo_prober.is_navi()||mk.ufo_prober.is_mk()))
651
                {
652
 
653
                    if (((mk.stats.bytes_in>>3)&1)==1)
654
                    g.drawImage(symbols_img,(-2)*(symbols_img.getWidth()/10),0, g.TOP | g.LEFT);           
655
                    else
656
                    g.drawImage(symbols_img,(-3)*(symbols_img.getWidth()/10),0, g.TOP | g.LEFT);           
657
 
658
 
659
                    int symbol_spacer=5;
660
                    symbol_left+=symbol_spacer+(symbols_img.getWidth()/10);
661
                    g.setClip(symbol_left,0,(symbols_img.getWidth()/10),symbols_img.getHeight());;
662
 
663
                    g.drawImage(symbols_img,symbol_left+(-4)*(symbols_img.getWidth()/10),0, g.TOP | g.LEFT);                       
664
                    g.setClip(0,0,canvas_width,canvas_height);
665
                    g.setColor(0x03035a);
666
 
667
                    symbol_left+=2+(symbols_img.getWidth()/10);
668
                    g.drawString("" + (mk.UBatt()/10) + "," +(mk.UBatt()%10)+"V" , symbol_left,y_off,Graphics.TOP | Graphics.LEFT);
669
 
670
 
671
                    symbol_left+=           g.getFont().stringWidth("88,8V");//;
672
                    g.setClip(symbol_left,0,(symbols_img.getWidth()/10),symbols_img.getHeight());
673
                    g.drawImage(symbols_img,(-6)*(symbols_img.getWidth()/10) +   symbol_left,0, g.TOP | g.LEFT);                           
674
 
675
                    g.setClip(0,0,canvas_width,canvas_height);
676
 
677
                    symbol_left+=2+(symbols_img.getWidth()/10);
678
                    g.drawString(""+mk.SenderOkay() ,symbol_left,y_off,Graphics.TOP | Graphics.LEFT);
679
 
680
 
681
                    symbol_left+=           g.getFont().stringWidth("8")+symbol_spacer; //,0,(symbols_img.getWidth()/10)+2;
682
 
683
 
684
 
685
 
686
                    if (mk.ufo_prober.is_navi())
687
                        {
688
 
689
 
690
                            g.setClip(symbol_left,0,(symbols_img.getWidth()/10),symbols_img.getHeight());
691
                            g.drawImage(symbols_img,(-5)*(symbols_img.getWidth()/10) +   symbol_left,0, g.TOP | g.LEFT);                           
692
                    g.setClip(0,0,canvas_width,canvas_height);
693
                            symbol_left+=2+(symbols_img.getWidth()/10);
694
                            g.drawString(""+mk.gps_position.SatsInUse ,symbol_left,y_off,Graphics.TOP | Graphics.LEFT);
695
 
696
                        }
697
 
698
                }
699
 
700
            else
701
            g.drawImage(symbols_img,(-1)*(symbols_img.getWidth()/10),0, g.TOP | g.LEFT);           
702
 
703
            //      if (mk.connected)
704
 
705
 
706
            // unclip
707
            g.setClip(0,0,canvas_width,canvas_height);
708
 
709
            y_off+=symbols_img.getHeight();
710
            g.setColor(skin_fg_color());
711
 
712
            switch(state)
713
                {
714
 
715
 
716
                case STATEID_DATABUFF:
717
                    g.setFont(f2);
718
 
719
                    y_off=canvas_height-spacer1;
720
 
721
                    for (int pos_y=0;pos_y<(((canvas_height-spacer1)/spacer1));pos_y++)
722
                        {
723
 
724
                            g.drawString(mk.get_buff(pos_y) ,0,y_off,Graphics.TOP | Graphics.LEFT);
725
                            y_off-=spacer1;
726
                        }
727
                    break;
728
                case STATEID_NC_ERRORS:
729
                    if (settings.do_scrollbg)
730
                        {
731
                            int err_img_left=(canvas_width-err_img.getWidth()/2)/2;
732
                            int err_img_top=(canvas_height-err_img.getHeight())/2;
733
                            g.setClip(err_img_left,err_img_top,err_img.getWidth()/2,err_img.getHeight());
734
                            g.drawImage(err_img,err_img_left-err_img.getWidth()/2,err_img_top, g.TOP | g.LEFT);
735
                        }
736
                            paint_lcd(g,true);
737
 
738
                    break;
739
 
740
                case STATEID_GPSVIEW:
741
 
742
                    g.setFont(f2);
743
 
744
                    g.setStrokeStyle(Graphics.SOLID);  
745
                    g.setColor(0x0000ff);  
746
 
747
 
748
                    //              g.fillArc(0, 0, canvas_width, canvas_width, 0,45); 
749
 
750
/*
751
  int start_angle=(360+mk.gps_position.angle2wp(act_wp) - ((360+mk.debug_data.analog[26]-heading_offset)%360))%360;
752
                    //              start_angle=0;
753
                    start_angle=(360-start_angle +90 -(45/2))%360;
754
 
755
                    g.fillArc(0, 0, canvas_width, canvas_width, start_angle,45);
756
*/
757
                    //              g.drawArc(1, 1, canvas_width-2, canvas_width-2, start_angle,45); 
758
                    // g.drawArc(2, 2, canvas_width-4, canvas_width-4, start_angle  ,45); 
759
 
760
 
761
                    g.setColor(skin_fg_color());
762
 
763
                    g.drawString("Used Sats: " + mk.gps_position.SatsInUse + " | Packages: " + mk.stats.navi_data_count ,0,y_off,Graphics.TOP | Graphics.LEFT);  
764
                    y_off+=spacer1;
765
 
766
                    g.drawString("Lat: " + mk.gps_position.Latitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
767
                    y_off+=spacer1;
768
 
769
                    g.drawString("Long: " + mk.gps_position.Longitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
770
                    y_off+=spacer1;
771
 
772
                    g.drawString("Altitude: " + mk.gps_position.Altitude ,0,y_off,Graphics.TOP | Graphics.LEFT);
773
                    y_off+=spacer1;
211 ligi 774
 
775
                    g.drawString("GrSpeed: " + mk.gps_position.GroundSpeed_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
776
                    y_off+=spacer1;
777
 
778
                    g.drawString("Heading: " + mk.gps_position.Heading ,0,y_off,Graphics.TOP | Graphics.LEFT);
779
                    y_off+=spacer1;
780
 
781
                    g.drawString("CompasHeading: " + mk.gps_position.CompasHeading ,0,y_off,Graphics.TOP | Graphics.LEFT);
782
                    y_off+=spacer1;
206 ligi 783
 
784
 
785
                    g.drawString("Target-Lat: " + mk.gps_position.TargetLatitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
786
                    y_off+=spacer1;
787
                    g.drawString("Target-Long: " + mk.gps_position.TargetLongitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
788
                    y_off+=spacer1;
789
 
790
                    g.drawString("Target-Alt: " + mk.gps_position.TargetAltitude ,0,y_off,Graphics.TOP | Graphics.LEFT);
791
                    y_off+=spacer1;
792
 
793
 
794
                    g.drawString("Home-Lat: " + mk.gps_position.HomeLatitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
795
                    y_off+=spacer1;
796
 
797
                    g.drawString("Home-Long: " + mk.gps_position.HomeLongitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
798
                    y_off+=spacer1;
799
 
800
                    g.drawString("Home-Alt: " + mk.gps_position.HomeAltitude ,0,y_off,Graphics.TOP | Graphics.LEFT);
801
 
802
                    y_off+=spacer1;
803
                    g.drawString("Distance : " + mk.gps_position.Distance2Target ,0,y_off,Graphics.TOP | Graphics.LEFT);
804
                    y_off+=spacer1;
805
                    g.drawString("Angle: " + mk.gps_position.Angle2Target ,0,y_off,Graphics.TOP | Graphics.LEFT);
806
                    y_off+=spacer1;
807
 
808
                    g.drawString("WayPoints: " + mk.gps_position.WayPointNumber + "/" +  mk.gps_position.WayPointIndex ,0,y_off,Graphics.TOP | Graphics.LEFT);
809
                    y_off+=spacer;
810
 
811
 
812
 
813
                    /*
814
                      g.drawString("" +  mk.gps_position.NameWP[act_wp] ,0,y_off,Graphics.TOP | Graphics.LEFT);
815
                    y_off+=spacer;
816
 
817
                    g.drawString("Lat: " +  mk.gps_position.WP_Latitude_str(act_wp) ,0,y_off,Graphics.TOP | Graphics.LEFT);
818
                    y_off+=spacer;
819
 
820
                    g.drawString("Long: " +  mk.gps_position.WP_Longitude_str(act_wp) ,0,y_off,Graphics.TOP | Graphics.LEFT);
821
                    y_off+=spacer;
822
 
823
 
824
                    g.drawString("Distance: " +  mk.gps_position.distance2wp(act_wp) ,0,y_off,Graphics.TOP | Graphics.LEFT);
825
                    y_off+=spacer;
826
 
827
                    g.drawString("Angle: " +  mk.gps_position.angle2wp(act_wp) ,0,y_off,Graphics.TOP | Graphics.LEFT);
828
                    y_off+=spacer;
829
 
830
                    g.drawString("Compas Heading: " +  (360+mk.debug_data.analog[26]-heading_offset)%360) + "("  +mk.debug_data.analog[26] +")" ,0,y_off,Graphics.TOP | Graphics.LEFT);
831
                    y_off+=spacer;
832
                    */
833
 
834
 
835
                    break;
836
 
837
                case STATEID_FLASHING:
838
                    int msg_pos=0;
839
                    while (mk.flash_msgs[msg_pos]!=null)
840
                        {
841
                            g.drawString(mk.flash_msgs[msg_pos] ,0,y_off,Graphics.TOP | Graphics.LEFT);
842
                            y_off+=spacer;
843
                            msg_pos++;
844
                        }
845
                    break;
846
 
847
                case STATEID_CAMMODE:
848
 
849
                    if (cam_img!=null)
850
                        g.drawImage(cam_img,0,0,g.TOP | g.LEFT);
851
                        g.drawString("condition: " + cam_condition() ,0,y_off,Graphics.TOP | Graphics.LEFT);
852
                        y_off+=spacer;
853
                        g.drawString("width " + cam_img.getWidth(),0,y_off,Graphics.TOP | Graphics.LEFT);
854
                        y_off+=spacer;
855
                        g.drawString("height " + cam_img.getHeight(),0,y_off,Graphics.TOP | Graphics.LEFT);
856
                        y_off+=spacer;
857
                        break;
858
 
859
                case STATEID_STICKVIEW:
860
 
861
                    for(int tmp_y=0;tmp_y<10;tmp_y++)
862
                        {
863
                            g.drawString(""+tmp_y+"(" + mk.params.stick_names[tmp_y] + ")=>"+mk.stick_data.stick[tmp_y],0,y_off,Graphics.TOP | Graphics.LEFT);
864
                            y_off+=spacer;
865
                        }
866
                    break;
867
 
868
                case STATEID_KEYCONTROL:
869
 
870
 
871
                    y_off+=spacer;
872
                    g.drawString("UP&DOWN => nick",0,y_off,Graphics.TOP | Graphics.LEFT);
873
                    y_off+=spacer;
874
                    g.drawString("LEFT&RIGHT => roll",0,y_off,Graphics.TOP | Graphics.LEFT);
875
                    y_off+=spacer;
876
                    g.drawString("1&4 => altitude",0,y_off,Graphics.TOP | Graphics.LEFT);
877
 
878
                    y_off+=spacer;
879
                    g.drawString("2&3 => gier",0,y_off,Graphics.TOP | Graphics.LEFT);
880
 
881
                    y_off+=spacer;
882
                    g.drawString("Press # and * at once",0,y_off,Graphics.TOP | Graphics.LEFT);
883
                    y_off+=spacer;
884
                    g.drawString("to quit KeyControl",0,y_off,Graphics.TOP | Graphics.LEFT);
885
                    y_off+=spacer;
886
                    g.drawString("bf1:"+ keycontrol_bitfield[0] ,0,y_off,Graphics.TOP | Graphics.LEFT);
887
                    g.drawString("bf2:"+ keycontrol_bitfield[1] ,canvas_width/2,y_off,Graphics.TOP | Graphics.LEFT);
888
 
889
                    break;
890
 
891
                case STATEID_MOTORTEST:
892
                    for (int bar=0;bar<4;bar++)
893
 
894
                        {
895
                            g.setColor(((bar==act_motor)|motor_test_sel_all)?0x44CC44:0x4444DD);  
896
                            g.fillRect(canvas_width/(8*2)+bar*2*canvas_width/8,y_off+10,canvas_width/8,y_off+20+motor_test[bar]);
897
                            g.setColor(0x000000);
898
                            g.drawString(""+motor_test[bar] ,canvas_width/8+bar*2*canvas_width/8,y_off+10,Graphics.TOP | Graphics.HCENTER);
899
                            g.drawString(""+mk.debug_data.motor_val(bar) ,canvas_width/8+bar*2*canvas_width/8,y_off+25,Graphics.TOP | Graphics.HCENTER);
900
                        }
901
                    break;
902
 
903
                case STATEID_EDIT_PARAMS:
904
                    params_editor.paint(g);
905
                    break;
906
 
907
                case STATEID_SELECT_COMPORT:
908
                    g.drawString("ports: " + System.getProperty("microedition.commports"),0,y_off,Graphics.TOP | Graphics.LEFT);
909
                    y_off+=spacer;
910
                    paint_menu(g);
911
                    break;
912
 
913
//#if fileapi=="on"
914
                case STATEID_FILEOPEN:
915
                    y_off+=spacer;
916
                    g.drawString("act_path" + act_path() ,0,y_off,Graphics.TOP | Graphics.LEFT);
917
                    paint_menu(g);
918
                    break;
919
//#endif
920
                case STATEID_ABOUT:
921
                case STATEID_IPINPUT:
922
                    paint_lcd(g,true);
923
                    break;
924
 
925
                case STATEID_READ_PARAMS:
926
                    paint_lcd(g,true);
927
                    break;
928
 
929
 
930
//#if bluetooth=="on"
931
                case STATEID_SCANNING:
932
                    paint_lcd(g,true);
933
                    break;
934
//#endif
935
                case STATEID_RAWDEBUG: 
936
                    g.setFont(f2);
937
                    rawdebug_off_y=0;
938
                    if ((rawdebug_cursor_y+3)*spacer1>canvas_height)
939
                        rawdebug_off_y=((rawdebug_cursor_y+3)*spacer1-canvas_height)/spacer1;
940
                    for (int i=0;i<(canvas_height/spacer1)-1;i++)
941
                        {
942
                            if (i+rawdebug_off_y==rawdebug_cursor_y)
943
                                {
944
                                g.setColor(0x0000CC);
945
                                g.fillRect(0,y_off,canvas_width,spacer1);
946
 
947
                                g.setColor(skin_fg_color());
948
 
949
 
950
                                }
951
                            if (i+rawdebug_off_y<32) //todo better style
952
                                g.drawString(mk.debug_data.names[i+rawdebug_off_y] + mk.debug_data.analog[i+rawdebug_off_y] ,0,y_off,Graphics.TOP | Graphics.LEFT);
953
 
954
                            y_off+=spacer1;
955
 
956
                        }
957
 
958
 
959
 
960
                    break;
961
 
962
 
963
                case STATEID_CONN_DETAILS:     
964
                    g.setFont(f1);
965
                    g.drawString("Connection::",0,y_off,Graphics.TOP | Graphics.LEFT);
966
                    y_off+=spacer;
967
                    g.setFont(f2);
968
 
969
                    g.drawString(" URL:" + mk.mk_url,0,y_off,Graphics.TOP | Graphics.LEFT);
970
                    y_off+=spacer1;
971
 
972
                    g.drawString(" Name:" + mk.name,0,y_off,Graphics.TOP | Graphics.LEFT);
973
                    y_off+=spacer1;
974
 
975
                    g.drawString(" "+mk.ufo_prober.extended_name()+ " (" + (mk.connected?("open"+((System.currentTimeMillis()- mk.connection_start_time)/1000)+"s"):"closed")+"):",0,y_off,Graphics.TOP | Graphics.LEFT);
976
                    y_off+=spacer1;
977
                    g.drawString(" Version:" + mk.version.str ,0,y_off,Graphics.TOP | Graphics.LEFT);
978
                    y_off+=spacer1;
979
                    g.drawString(" Slave-Addr:" + mk.slave_addr,0,y_off,Graphics.TOP | Graphics.LEFT);
980
 
981
                    paint_menu(g);
982
 
983
                    break;
984
 
985
                case STATEID_TRAFFIC:
986
 
987
                    g.setFont(f1);
988
                    g.drawString("Packet Traffic (over "+mk.conn_time_in_s()+"s):",0,y_off,Graphics.TOP | Graphics.LEFT);
989
                    y_off+=spacer;
990
                    g.setFont(f2);
991
                    g.drawString( ">>in:"+mk.stats.bytes_in+ " bytes => " + mk.stats.bytes_in/mk.conn_time_in_s() + " bytes/s",0,y_off,Graphics.TOP | Graphics.LEFT);
992
                    y_off+=spacer1;
993
 
994
 
995
 
996
 
997
                    g.drawString( " debug:"+mk.stats.debug_data_count+ " LCD:" + mk.stats.lcd_data_count + " vers:" + mk.stats.version_data_count,0,y_off,Graphics.TOP | Graphics.LEFT);
998
                    y_off+=spacer1;
999
                    g.drawString( " other:"+mk.stats.other_data_count+" params:"+mk.stats.params_data_count + " GPS:"+mk.stats.navi_data_count ,0,y_off,Graphics.TOP | Graphics.LEFT);
1000
                    y_off+=spacer1;
1001
                    g.drawString( " debug_names:" + mk.stats.debug_names_count + " angles:" + mk.stats.angle_data_count ,0,y_off,Graphics.TOP | Graphics.LEFT);
1002
 
1003
 
1004
                    y_off+=spacer1+3;
1005
                    g.drawString( "<<out:"+mk.stats.bytes_out + " bytes =>" + mk.stats.bytes_out/mk.conn_time_in_s() + "bytes/s", 0,y_off,Graphics.TOP | Graphics.LEFT);
1006
                    y_off+=spacer1;
1007
                    g.drawString( " LCD:" + mk.stats.lcd_data_request_count + " vers:" + mk.stats.version_data_request_count,0,y_off,Graphics.TOP | Graphics.LEFT);
1008
                    y_off+=spacer1;
1009
                    g.drawString( " params:"+mk.stats.params_data_request_count ,0,y_off,Graphics.TOP | Graphics.LEFT);
1010
                    y_off+=spacer1;
1011
 
1012
                    paint_menu(g);
1013
                    break;
1014
 
1015
                case STATEID_PROXY:    
1016
                    g.setFont(f1);
1017
                    g.drawString("Host:",0,y_off,Graphics.TOP | Graphics.LEFT);
1018
                    y_off+=spacer;
1019
                    g.setFont(f2);
1020
                    g.drawString(" " + mk.proxy.url + "("+((mk.proxy.connected)?"open":"closed") +")",0,y_off,Graphics.TOP | Graphics.LEFT);
1021
                    y_off+=spacer1;
1022
 
1023
 
1024
 
1025
                    break;
1026
 
211 ligi 1027
                // falltru wanted
1028
                case STATEID_SELECT_SPEED_FORMAT:
1029
                case STATEID_SELECT_GPS_FORMAT:
206 ligi 1030
                case STATEID_MAINMENU: 
1031
 
1032
                case STATEID_SETTINGSMENU:
211 ligi 1033
 
206 ligi 1034
                case STATEID_SELECT_PARAMSET:
1035
                case STATEID_HANDLE_PARAMS:
1036
 
1037
                case STATEID_DEVICESELECT:
1038
 
1039
                    paint_menu(g);
1040
                    break;
1041
 
1042
 
1043
                case STATEID_GRAPH:
1044
 
1045
                    g.setClip(0,0,canvas_width,canvas_height);
1046
 
1047
                    g.setStrokeStyle(Graphics.DOTTED);  
1048
                    g.setColor(0xe1dddd);
1049
 
1050
                    for (int d=0;d<GRAPH_COUNT;d++)
1051
                        {
1052
                            g.setColor(graph_colors[d]);               
1053
                            g.fillRect(0,y_off +spacer1/2-2 ,20,4);
1054
                            g.setColor(skin_fg_color());
1055
                            g.drawString(graph_names[d],23,y_off,Graphics.TOP | Graphics.LEFT);
1056
                            y_off+=spacer1;
1057
 
1058
                        }
1059
 
1060
                    /*
1061
                    g.drawString("scale:"+scale + "line scaler" + line_scaler,0,y_off,Graphics.TOP | Graphics.LEFT);
1062
 
1063
 
1064
                    int jump=0;
1065
                    g.drawLine(0,line_middle_y,canvas_width,line_middle_y);
1066
 
1067
                    while (jump<canvas_height/2)
1068
                        {
1069
                            g.drawLine(0,line_middle_y - jump/line_scaler,canvas_width,line_middle_y - jump/line_scaler);
1070
                            g.drawLine(0,line_middle_y + jump/line_scaler,canvas_width,line_middle_y + jump/line_scaler);
1071
                            jump+=scale;
1072
                        }
1073
                    */
1074
 
1075
 
1076
 
1077
                    for (int gr=0;gr<GRAPH_COUNT;gr++)
1078
                        {
1079
 
1080
                            g.setColor(graph_colors[gr]);              
1081
                            try {
1082
                                graph_data[gr][-bg_offset]=mk.debug_data.analog[graph_sources[gr]];
1083
                            }
1084
                            catch (Exception e)
1085
                                {
1086
                                    debug.log("E!:" + e.getMessage());
1087
 
1088
                                }
1089
 
1090
 
1091
 
1092
                            for ( int x=0;x<canvas_width;x++)
1093
                                {
1094
                                    int p= (((-bg_offset+x-canvas_width-5)));
1095
                                    if (p<1)
1096
                                        p+=graph_data[0].length;
1097
                                    p%=(graph_data[0].length-1);
1098
 
1099
                                    draw_graph_part(g,x,graph_data[gr][p]/line_scaler,graph_data[gr][p+1]/line_scaler);
1100
 
1101
                                }
1102
                        }
1103
 
1104
                    break;
1105
 
1106
                case STATEID_FLIGHTVIEW:
1107
                    /*
1108
                    g.setClip(canvas_width/2-load_img.getWidth()/6+1,canvas_height/2-load_img.getHeight()/8+1, load_img.getWidth()/4,load_img.getHeight()/3);;
1109
                    if (( mk.LCD.init_state!=-1)||(mk.LCD.act_mk_page!=mk.LCD.act_user_page)) g.drawImage(load_img,canvas_width/2-load_img.getWidth()/8 - ((((frame_pos/3)%12)%4)*(load_img.getWidth()/4)) ,canvas_height/2-load_img.getHeight()/6- ((((frame_pos/3)%12)/4)*(load_img.getHeight()/3)), g.TOP | g.LEFT);            
1110
 
1111
                    */
1112
                    /*
1113
                    // !!TODO!! check exactly which version those Datas where introduced
1114
                    if (mk.version.compare(0,60)==mk.version.VERSION_PREVIOUS)
1115
                        {
1116
                            g.drawString("Voltage: " + (mk.debug_data.UBatt()/10) + "," +(mk.debug_data.UBatt()%10)+"V" ,0,y_off,Graphics.TOP | Graphics.LEFT);
1117
                            g.drawString("Sender: " + mk.debug_data.SenderOkay(),canvas_width/2,y_off,Graphics.TOP | Graphics.LEFT);
1118
                            y_off+=spacer;
1119
                        }
1120
 
1121
                    g.drawString(mk.version.str+"(d"+mk.debug_data_count+ "l" + mk.lcd_data_count+  "v" + mk.version_data_count+"o"+mk.other_data_count+"p"+mk.params_data_count+")",0,y_off,Graphics.TOP | Graphics.LEFT);
1122
 
1123
                    y_off+=spacer;
1124
 
1125
                    g.drawString("n:"+mk.debug_data.nick_int() + " r:"+mk.debug_data.roll_int() + " an:"+mk.debug_data.accnick() + " ar:"+mk.debug_data.accroll() ,0,y_off,Graphics.TOP | Graphics.LEFT);
1126
                    y_off+=spacer;
1127
 
1128
 
1129
                    g.drawString("m1:"+mk.debug_data.motor_val(0) + " m2:"+mk.debug_data.motor_val(1)+" m3:"+mk.debug_data.motor_val(2) + " m4:"+mk.debug_data.motor_val(3) ,0,y_off,Graphics.TOP | Graphics.LEFT);
1130
                    y_off+=spacer;
1131
 
1132
                    if (mk.connected)
1133
                        {
1134
                            g.drawString("time conn:" +((System.currentTimeMillis()- mk.connection_start_time)/1000)+"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
1135
                            y_off+=spacer;
1136
                            g.drawString("time motor>15:" +(mk_stat.motor_on_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
1137
                            y_off+=spacer;
1138
                            g.drawString("time motor=15:" +(mk_stat.motor_stand_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
1139
                            y_off+=spacer;
1140
                            g.drawString("lcd:" + mk.LCD.act_mk_page + "/" + mk.LCD.pages + " ( wanted: " + mk.LCD.act_user_page + "state:" + mk.LCD.init_state +")" ,0,y_off,Graphics.TOP | Graphics.LEFT);
1141
 
1142
                            y_off+=spacer;
1143
                            g.drawString("lcd-key:" + mk.LCD.act_key ,0,y_off,Graphics.TOP | Graphics.LEFT);
1144
 
1145
                        }
1146
*/
1147
 
1148
                    int spacer_left_right=(canvas_width-(20*(lcd_img.getWidth()/222)))/2;
1149
 
1150
                    y_off=canvas_height-4*lcd_img.getHeight();
1151
 
1152
                    for ( int foo=0;foo<4;foo++)
1153
                        {
1154
                            for (int x=0;x<20;x++)
1155
                                {
1156
                                    g.setClip(spacer_left_right+(lcd_img.getWidth()/222)*x,y_off,(lcd_img.getWidth()/222),lcd_img.getHeight());
1157
                                            g.drawImage(lcd_img,spacer_left_right+(lcd_img.getWidth()/222)*x-(mk.LCD.get_act_page()[foo].charAt(x)-' ')*(lcd_img.getWidth()/222),y_off, g.TOP | g.LEFT);
1158
 
1159
                                        }
1160
                                    y_off+=lcd_img.getHeight();
1161
                                }
1162
 
1163
                    g.setClip(0,0,canvas_width,canvas_height);
1164
 
1165
                }
1166
 
1167
 
1168
 
1169
        } catch (Exception e) {}
1170
 
1171
    }
1172
    Player mPlayer;
1173
    VideoControl        mVideoControl;
1174
    Image cam_img;
1175
    int cam_img_seq=0;
1176
    byte[] cam_raw;
1177
 
1178
    private void connect_mk(String url,String name)
1179
    {
1180
        //      mk.ufo_prober.bluetooth_probe(url);
1181
        settings.connection_url=url;
1182
        settings.connection_name=name;
1183
        mk.connect_to(url,name);
1184
    }
1185
 
1186
    public void draw_graph_part(Graphics g,int x,int y1,int y2)
1187
    {
1188
        if ( canvas_width>200)
1189
            {
1190
                g.fillRect(x,line_middle_y-y1,1,1 );
1191
                if (y1>y2)
1192
                    g.fillRect(x,line_middle_y-y1,1,y1-y2);
1193
                else
1194
                    g.fillRect(x,line_middle_y-y2,1,y2-y1);
1195
 
1196
            }
1197
        else
1198
            {
1199
            g.fillRect(x,line_middle_y-y1,1,1 );
1200
                if (y1>y2)
1201
                    g.fillRect(x,line_middle_y-y1,1,y1-y2);
1202
                else
1203
                    g.fillRect(x,line_middle_y-y2,1,y2-y1);
1204
            }
1205
 
1206
    }
1207
 
1208
 
1209
    /*********************************************** input Section **********************************************/
1210
 
1211
 
1212
 
1213
    //    public final String intro_str="   Digital Ufo Broadcasting with intelligent service equipment by Marcus -LiGi- Bueschleb ; Big Up Holger&Ingo for the MikroKopter Project (http://www.mikrokopter.de) ";
1214
 
1215
    //    int intro_str_pos=0;
1216
    // int intro_str_delay=3;
1217
    boolean init_bootloader=false;
1218
 
1219
    public void chg_state(byte next_state)
1220
    {
1221
        if (next_state!=state)act_menu_select=0;
1222
        // prepare next state
1223
        switch(next_state)
1224
            {
1225
 
1226
            case STATEID_FLIGHTVIEW:
1227
                mk.user_intent=USER_INTENT_LCD;
1228
                break;
1229
            case STATEID_FLASHING:
1230
                mk.bootloader_intension_flash=true;
1231
                init_bootloader=true;
1232
                break;
1233
 
1234
 //#if fileapi=="on"
1235
            case STATEID_FILEOPEN:
1236
                if (act_path_depth==0)
1237
                    {
1238
                        Enumeration drives = FileSystemRegistry.listRoots();
1239
                        int tmp_i=0;
1240
                        while(drives.hasMoreElements())
1241
                            {  
1242
                                file_list[tmp_i]= (String) drives.nextElement();
1243
                                tmp_i++;
1244
 
1245
                                if (MAX_FILELIST_LENGTH<tmp_i)
1246
                                    break;
1247
                            }                  
1248
                        menu_items=new String[tmp_i];
1249
                        lcd_lines=new String[tmp_i];
1250
                        file_list_length=tmp_i;
1251
 
1252
                        for(tmp_i=0;tmp_i<file_list_length;tmp_i++)
1253
                            menu_items[tmp_i]=file_list[tmp_i];
1254
 
1255
                    }
1256
                else
1257
                    {
1258
 
1259
                        try {
1260
                            FileConnection fc = (FileConnection) Connector.open("file:///"+act_path());
1261
                            Enumeration filelist = fc.list("*", true);
1262
                            int tmp_i=0;
1263
                            while(filelist.hasMoreElements()) {
1264
                                file_list[tmp_i] = (String) filelist.nextElement();
1265
                                tmp_i++;
1266
                                /*                              fc = (FileConnection)
1267
                                    Connector.open("file:///CFCard/" + fileName);
1268
                                if(fc.isDirectory()) {
1269
                                    System.out.println("\tDirectory Name: " + fileName);
1270
                                } else {
1271
                                    System.out.println
1272
                                        ("\tFile Name: " + fileName +
1273
                                         "\tSize: "+fc.fileSize());
1274
                                         }*/
1275
 
1276
                            }  
1277
 
1278
                            menu_items=new String[tmp_i+1];
1279
                            lcd_lines=new String[tmp_i+1];
1280
                            file_list_length=tmp_i+1;
1281
 
1282
                            menu_items[0]="..";
1283
                            for(tmp_i=1;tmp_i<file_list_length;tmp_i++)
1284
                                menu_items[tmp_i]=file_list[tmp_i-1];
1285
 
1286
 
1287
                            fc.close();
1288
                        } catch (IOException ioe) {
1289
                            System.out.println(ioe.getMessage());
1290
                        }
1291
                    }
1292
 
1293
 
1294
                break;
1295
//#endif
1296
 
1297
            case STATEID_STICKVIEW:
1298
                mk.user_intent=USER_INTENT_RCDATA;
1299
                break;
1300
            case STATEID_SELECT_COMPORT:       
1301
                menu_items=new String[6];
1302
                lcd_lines=new String[6];
1303
 
1304
                menu_items[0]="com0";
1305
                menu_items[1]="com1";
1306
                menu_items[2]="com2";
1307
                menu_items[3]="com3";
1308
                menu_items[4]="com4";
1309
 
1310
                menu_items[5]="back";
1311
                break;
1312
 
1313
 
1314
            case STATEID_NC_ERRORS:
1315
                lcd_lines=new String[1];
1316
                lcd_lines[0]=""+mk.error_str;
1317
                break;
1318
 
1319
            case STATEID_ABOUT:
1320
                lcd_lines=credits;
1321
                act_menu_select=max_lines-1;
1322
                break;
1323
            case STATEID_CONN_DETAILS: 
1324
                setup_menu(conn_details_menu_items,conn_details_menu_actions);
1325
                break;
1326
 
211 ligi 1327
            case STATEID_SELECT_GPS_FORMAT:    
1328
                setup_menu(set_gps_format_menu_items,set_gps_format_menu_actions);
1329
 
1330
                break;
1331
 
1332
 
1333
            case STATEID_SELECT_SPEED_FORMAT:  
1334
                setup_menu(set_speed_format_menu_items,set_speed_format_menu_actions);
1335
 
1336
                break;
1337
 
206 ligi 1338
            case STATEID_TRAFFIC:      
1339
                setup_menu(onlyback_menu_items,back_to_conndetails_actions);
1340
                /*
1341
                menu_items=new String[1];
1342
                lcd_lines=new String[1];
1343
                menu_items[0]="back";
1344
                */
1345
                break;
1346
            case STATEID_CAMMODE:
1347
 
1348
                if (mVideoControl==null)
1349
                    try
1350
                        {
1351
                            debug.log("creating player\n");
1352
                            mPlayer = Manager.createPlayer("capture://video?encoding=png&width=2048&height=1536");
1353
 
1354
                            debug.log("realizing player\n");
1355
                            mPlayer.realize();
1356
 
1357
                            debug.log("get_videocontrol\n");
1358
 
1359
                            mVideoControl = (VideoControl)mPlayer.getControl("VideoControl");
1360
 
1361
                            debug.log("switching Canvas\n");
1362
                            mVideoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
1363
 
1364
                            debug.log("get snap\n");
1365
                            byte[] raw = mVideoControl.getSnapshot(null);    
1366
 
1367
                        }
1368
                    catch ( Exception e)
1369
                        {
1370
                            debug.log(e.toString());
1371
                        }
1372
 
1373
 
1374
                break;
1375
            case STATEID_KEYCONTROL:
1376
                keycontrol_exit=0;
1377
                break;
1378
 
1379
            case STATEID_READ_PARAMS:
1380
                mk.user_intent=USER_INTENT_PARAMS;
1381
                lcd_lines=new String[2];
1382
                lcd_lines[0]="Reading Settings    ";
1383
                lcd_lines[1]=mk.watchdog.act_paramset+"/5 |"+ (mk.watchdog.act_paramset>0?"#":"_") + (mk.watchdog.act_paramset>1?"#":"_") + (mk.watchdog.act_paramset>2?"#":"_")+ (mk.watchdog.act_paramset>3?"#":"_")+ (mk.watchdog.act_paramset>4?"#":"_") + "|         ";
1384
 
1385
                break;
1386
 
1387
            case STATEID_IPINPUT:
1388
 
1389
                lcd_lines=new String[3];
1390
                lcd_lines[0]="Address (IP:Port):  ";
1391
                break;
1392
 
1393
//#if bluetooth=="on"
1394
            case STATEID_SCANNING:
1395
                lcd_lines=new String[3];
1396
                lcd_lines[0]="Searching for";
1397
                lcd_lines[1]="Bluetooth Devices";
1398
                lcd_lines[2]="found";
1399
 
1400
                mk.close_connections(true);
1401
                bt_scanner.search();
1402
                break;
1403
//#endif
1404
 
1405
            case STATEID_HANDLE_PARAMS:
1406
                menu_items=handle_params_menu_items;
1407
                menu_actions=handle_params_menu_actions;
1408
                lcd_lines=new String[menu_items.length];
1409
 
1410
                break;
1411
 
1412
            case STATEID_SELECT_PARAMSET:
1413
                menu_items=new String[5];
1414
                for (int i=0;i<5;i++)
1415
                    menu_items[i]=mk.params.names[i] + ((i==mk.params.active_paramset)?"*":"");
1416
 
1417
                lcd_lines=new String[5];
1418
                break;
1419
 
1420
//#if bluetooth=="on"
1421
            case STATEID_DEVICESELECT:
1422
 
1423
                menu_items=new String[bt_scanner.remote_device_count+2];
1424
                lcd_lines=new String[bt_scanner.remote_device_count+2];
1425
 
1426
                for (int i=0;i<bt_scanner.remote_device_count;i++)
1427
                    menu_items[i]=bt_scanner.remote_device_name[i];
1428
                menu_items[bt_scanner.remote_device_count]="scan again";
1429
                menu_items[bt_scanner.remote_device_count+1]="cancel";
1430
 
1431
                break;
1432
//#endif
1433
 
1434
            case STATEID_MAINMENU:
1435
                if (mk.ufo_prober.is_navi())
1436
                    setup_menu(main_menu_items_navi,main_menu_actions_navi);
1437
                else if (mk.ufo_prober.is_mk())
1438
                    setup_menu(main_menu_items_mk,main_menu_actions_mk);
1439
                else if (mk.ufo_prober.is_mk3mag())
1440
                    setup_menu(main_menu_items_mk3mag,main_menu_actions_mk3mag);
1441
                else if (mk.ufo_prober.is_incompatible())
1442
                    setup_menu(main_menu_items_incompatible,main_menu_actions_incompatible);
1443
                else // no connection
1444
                    setup_menu(main_menu_items_no_connection,main_menu_actions_no_connection);
1445
                break;
1446
 
1447
            case STATEID_SETTINGSMENU:
1448
 
1449
                menu_items=new String[settings_menu_items.length];
1450
                for(int cnt=0;cnt<settings_menu_items.length;cnt++)
1451
                    menu_items[cnt]=settings_menu_items[cnt];
1452
 
1453
                menu_items[0]+=(settings.act_skin==SKINID_DARK)?"Dark":"Light";
1454
                menu_items[1]+=(!settings.do_sound)?"Off":"On";
1455
                menu_items[2]+=(!settings.do_vibra)?"Off":"On";
1456
                menu_items[3]+=(!settings.do_scrollbg)?"Off":"On";
1457
                menu_items[4]+=(!settings.fullscreen)?"Off":"On";
211 ligi 1458
                menu_items[5]+=(mk.gps_position.act_gps_format==0)?" Decimal":" MinSec";
1459
                menu_items[6]+=(mk.gps_position.act_speed_format==0)?" KM/H":((mk.gps_position.act_speed_format==1)?" MP/H":"CM/S");
206 ligi 1460
 
1461
//#if devicecontrol=="on"
211 ligi 1462
                menu_items[7]+=(!settings.keep_lighton)?"Off":"On";
206 ligi 1463
//#endif
1464
                menu_actions=settings_menu_actions;
1465
                lcd_lines=new String[menu_items.length];
1466
                break;
1467
 
1468
            case STATEID_RAWDEBUG:
1469
                mk.user_intent=USER_INTENT_RAWDEBUG;
1470
                break;
1471
 
1472
 
1473
            case STATEID_GRAPH:
1474
                mk.user_intent=USER_INTENT_GRAPH;
1475
                break;
1476
 
1477
            }
1478
        mk.watchdog.resend_timeout=0;
1479
 
1480
        // switch state
1481
        state=next_state;
1482
    } // void chg_state
1483
 
1484
 
1485
    public void keyReleased(int keyCode)
1486
    {
1487
 
1488
        switch(state)
1489
            {
1490
            case STATEID_MOTORTEST:
1491
                act_motor_increase=0;
1492
                break;
1493
 
1494
            case STATEID_KEYCONTROL:
1495
                if (keyCode==KEY_POUND)
1496
                    keycontrol_exit &= 255^1;
1497
                else
1498
                if (keyCode==KEY_STAR)
1499
                    keycontrol_exit &= 255^2;
1500
                else
1501
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM8))
1502
                    keycontrol_bitfield[0]&=255^( 1<<(keyCode-this.KEY_NUM0));
1503
                else
1504
                    if ((keyCode >= this.KEY_NUM8) && (keyCode <= this.KEY_NUM9))
1505
                        keycontrol_bitfield[1]&=255^( 1<<(keyCode-this.KEY_NUM8));
1506
                else
1507
                    switch (getGameAction (keyCode))
1508
                            {
1509
                            case UP:
1510
                                keycontrol_bitfield[1]&=255^4;
1511
                                break;
1512
 
1513
                            case DOWN:
1514
                                keycontrol_bitfield[1]&=255^8;
1515
                                break;
1516
 
1517
 
1518
                            case LEFT:
1519
                                keycontrol_bitfield[1]&=255^16;
1520
                                break;
1521
 
1522
                            case RIGHT:
1523
                                keycontrol_bitfield[1]&=255^32;
1524
                                break;
1525
 
1526
                            case FIRE:
1527
                                keycontrol_bitfield[1]&=255^64;
1528
                                break;
1529
 
1530
 
1531
                            }
1532
                mk.send_keys(keycontrol_bitfield);
1533
                break;
1534
            }
1535
 
1536
    }
1537
 
1538
 
1539
    byte keycontrol_exit=0;
1540
 
1541
    public final static int[] keycontrol_bitfield={0,0};
1542
 
1543
 
1544
    public void pointerPressed (int pointer_x, int pointer_y)
1545
    {
1546
        if (pointer_y<lcd_img.getHeight())
1547
            keyPressed(KEY_STAR);
1548
        else
1549
            switch(state)
1550
                {
1551
                case STATEID_CONN_DETAILS:
1552
                case STATEID_SETTINGSMENU:
1553
                case STATEID_FILEOPEN:
1554
                case STATEID_TRAFFIC:
1555
                case STATEID_SELECT_COMPORT:   
1556
                case STATEID_MAINMENU:
1557
                case STATEID_SELECT_PARAMSET:
1558
                case STATEID_DEVICESELECT:
1559
 
1560
                    if (pointer_y>canvas_height-lcd_img.getHeight()*menu_items.length)
1561
                        {                      
1562
                            act_menu_select=(pointer_y-(canvas_height-lcd_img.getHeight()*menu_items.length))/lcd_img.getHeight();
1563
                            keyPressed(getKeyCode(FIRE));
1564
                        }    
1565
                    break;
1566
                }
1567
    }
1568
 
1569
    public void keyPressed(int keyCode)
1570
    {
1571
        debug.log("KeyCode:"+keyCode);
1572
        // key-actions common in all states
1573
        debug.process_key(keyCode);
1574
 
1575
        /*
1576
        if ((keyCode==KEY_NUM9))
1577
            { chg_state(STATEID_FLASHING); }
1578
        */
1579
 
1580
 
1581
 
1582
 
1583
        if ((keyCode==KEY_STAR) || (keyCode==113))
1584
            {
1585
                if (state==STATEID_EDIT_PARAMS)
1586
                    {
1587
                        chg_state(STATEID_HANDLE_PARAMS);
1588
                        return;
1589
                    }
1590
                else
1591
                    if (state!=STATEID_KEYCONTROL)
1592
                        {
1593
                        chg_state(STATEID_MAINMENU);
1594
                        return;
1595
                        }
1596
 
1597
            }
1598
        if ((keyCode==KEY_POUND)&&(state!=STATEID_KEYCONTROL))
1599
            {
1600
                settings.fullscreen=!settings.fullscreen;
1601
                setFullScreenMode(settings.fullscreen);
1602
                return;
1603
            }
1604
 
1605
        // key actions per state
1606
        switch(state)
1607
            {
1608
 
1609
            case STATEID_NC_ERRORS:
1610
                chg_state(STATEID_MAINMENU);
1611
                break;
1612
            case STATEID_IPINPUT:
1613
                if ((keyCode>=KEY_NUM0)&&(keyCode<=KEY_NUM9))
1614
                    {
1615
                        act_edit_ip[ipinput_pos/4]=helper.mod_decimal(act_edit_ip[ipinput_pos/4],(ipinput_pos<15?2:3)-(ipinput_pos%4),0,(keyCode-KEY_NUM0),9);
1616
 
1617
                        if(ipinput_pos<19)      ipinput_pos++;
1618
                        if ((ipinput_pos<18)&&(((ipinput_pos+1)%4)==0))ipinput_pos++;
1619
                    }
1620
                else
1621
                    switch (getGameAction (keyCode))
1622
                            {
1623
                            case LEFT:
1624
                                if(ipinput_pos>0) ipinput_pos--;
1625
                                if (((ipinput_pos+1)%4)==0)ipinput_pos--;
1626
                                break;
1627
 
1628
                            case RIGHT:
1629
                                if(ipinput_pos<19)      ipinput_pos++;
1630
                                if(ipinput_pos<18)if (((ipinput_pos+1)%4)==0)ipinput_pos++;
1631
                                break;
1632
 
1633
                            case UP:
1634
                                act_edit_ip[ipinput_pos/4]=helper.mod_decimal(act_edit_ip[ipinput_pos/4],(ipinput_pos<15?2:3)-(ipinput_pos%4),1,-1,9);
1635
 
1636
                                break;
1637
 
1638
                            case DOWN:
1639
                                act_edit_ip[ipinput_pos/4]=helper.mod_decimal(act_edit_ip[ipinput_pos/4],(ipinput_pos<15?2:3)-(ipinput_pos%4),-1,-1,9);
1640
 
1641
 
1642
                            case FIRE:
1643
                                if (ipinput4proxy)
1644
                                    {
1645
                                        settings.act_proxy_ip=act_edit_ip;
1646
                                        mk.do_proxy("socket://"+helper.ip_str(settings.act_proxy_ip,false));
1647
                                        chg_state(STATEID_PROXY);
1648
                                    }
1649
                                else
1650
                                    {
1651
                                        settings.act_conn_ip=act_edit_ip;
1652
                                        connect_mk("socket://"+helper.ip_str(settings.act_conn_ip,false),"TCP/IP Connection");
1653
                                        chg_state(STATEID_CONN_DETAILS);
1654
                                    }
1655
 
1656
                                break;
1657
 
1658
                            }
1659
                break;
1660
 
1661
            case STATEID_GPSVIEW:
1662
                if (keyCode == this.KEY_NUM0)
1663
                    mk.set_gps_target(mk.gps_position.Latitude,mk.gps_position.Longitude);
1664
 
1665
 
1666
 
1667
                if (keyCode == this.KEY_NUM1)
1668
                    mk.gps_position.push_wp();
1669
                if (keyCode == this.KEY_NUM2)
1670
                    chg_state(STATEID_FILEOPEN);
1671
                if (keyCode == this.KEY_NUM3)
1672
                    mk.set_gps_target(mk.gps_position.LatWP[act_wp],mk.gps_position.LongWP[act_wp]);
1673
 
1674
 
1675
                if (keyCode == this.KEY_NUM5)
1676
                    heading_offset= mk.debug_data.analog[26];
1677
 
1678
                switch (getGameAction (keyCode))
1679
                            {
1680
                            case UP:
1681
                                if (act_wp!=0) act_wp--;
1682
                                break;
1683
 
1684
                            case DOWN:
1685
                                if (act_wp<mk.gps_position.last_wp) act_wp++;
1686
 
1687
                                break;
1688
 
1689
 
1690
                            }
1691
 
1692
 
1693
                break;
1694
 
1695
            case STATEID_ABOUT:
1696
 
1697
                switch (getGameAction (keyCode))
1698
                            {
1699
                            case UP:
1700
                                if (act_menu_select>=max_lines)
1701
                                    act_menu_select--;
1702
                                break;
1703
 
1704
                            case DOWN:
1705
                                if (act_menu_select<lcd_lines.length-1)
1706
                                    act_menu_select++;
1707
 
1708
                                break;
1709
 
1710
 
1711
                            }
1712
 
1713
 
1714
                break;
1715
 
1716
 
1717
            case STATEID_RAWDEBUG:
1718
 
1719
                switch (getGameAction (keyCode))
1720
                            {
1721
                            case UP:
1722
                                if (rawdebug_cursor_y==0)
1723
                                    rawdebug_cursor_y=31;
1724
                                else
1725
                                    rawdebug_cursor_y--;
1726
                                break;
1727
 
1728
                            case DOWN:
1729
                                if (rawdebug_cursor_y==31)
1730
                                    rawdebug_cursor_y=0;
1731
                                else
1732
                                    rawdebug_cursor_y++;
1733
                                break;
1734
 
1735
 
1736
                            }
1737
                break;
1738
            case STATEID_KEYCONTROL:
1739
                if (keyCode==KEY_POUND)
1740
                    keycontrol_exit |= 1;
1741
                else
1742
                if (keyCode==KEY_STAR)
1743
                    keycontrol_exit |= 2;
1744
                else
1745
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM8))
1746
                    keycontrol_bitfield[0]|=1<<(keyCode-this.KEY_NUM0);
1747
                else
1748
                if ((keyCode >= this.KEY_NUM8) && (keyCode <= this.KEY_NUM9))
1749
                    keycontrol_bitfield[1]|=1<<(keyCode-this.KEY_NUM8);
1750
 
1751
                else
1752
                    switch (getGameAction (keyCode))
1753
                            {
1754
                            case UP:
1755
                                keycontrol_bitfield[1]|=4;
1756
                                break;
1757
 
1758
                            case DOWN:
1759
                                keycontrol_bitfield[1]|=8;
1760
                                break;
1761
 
1762
 
1763
                            case LEFT:
1764
                                keycontrol_bitfield[1]|=16;
1765
                                break;
1766
 
1767
                            case RIGHT:
1768
                                keycontrol_bitfield[1]|=32;
1769
                                break;
1770
 
1771
                            case FIRE:
1772
                                keycontrol_bitfield[1]|=64;
1773
                                break;
1774
 
1775
                            }
1776
                if (keycontrol_exit==3)
1777
                    chg_state(STATEID_MAINMENU);
1778
                else
1779
                    mk.send_keys(keycontrol_bitfield);
1780
                break;
1781
 
1782
 
1783
            case STATEID_MOTORTEST:
1784
                switch (getGameAction (keyCode))
1785
                            {
1786
                            case UP:
1787
                                act_motor_increase=-1;
1788
                                break;
1789
 
1790
                            case DOWN:
1791
                                act_motor_increase=1;
1792
                                break;
1793
 
1794
                            case FIRE:
1795
                                motor_test_sel_all=!motor_test_sel_all;
1796
                                break;
1797
 
1798
                            case LEFT:
1799
                                act_motor--;
1800
                                if (act_motor<0) {act_motor=0; chg_state(STATEID_MAINMENU); }
1801
                                break;
1802
 
1803
                            case RIGHT:
1804
                                act_motor++;
1805
                                act_motor%=4;
1806
                                break;
1807
                            }
1808
 
1809
                break;
1810
 
1811
            case STATEID_SELECT_COMPORT:       
1812
                if ( getGameAction (keyCode)==FIRE )
1813
                    {
1814
 
1815
                        if (act_menu_select<menu_items.length)
1816
                            connect_mk("comm:com"+act_menu_select+";baudrate=57600","com"+act_menu_select);
1817
 
1818
                        chg_state(STATEID_CONN_DETAILS);                           
1819
                    }
1820
                else
1821
                    menu_keypress(keyCode);
1822
                break;
1823
 
1824
                /*
1825
            case STATEID_HANDLsE_PARAMS:
1826
 
1827
                menu_keypress(keyCode);
1828
                break;
1829
                */
1830
                /*
1831
            case STATEID_TRAFFIC:
1832
                if ( getGameAction (keyCode)==FIRE )
1833
                    chg_state(STATEID_CONN_DETAILS);
1834
                else
1835
                    menu_keypress(keyCode);
1836
                break;
1837
                */
1838
//#if fileapi=="on"
1839
            case STATEID_FILEOPEN:
1840
                if ( getGameAction (keyCode)==FIRE )
1841
                    {
1842
                        if ((act_menu_select==0)&&(act_path_depth!=0))
1843
                            {
1844
                                act_path_depth--;
1845
                                //act_path=act_path.substring(0,act_path.substring(0,act_path.length()-2).indexOf('/') );
1846
 
1847
                                //act_path=last_path;
1848
                            }
1849
                        else
1850
                            {
1851
                                //last_path=act_path;
1852
                                if (act_path_depth==0)
1853
                                    act_path_arr[act_path_depth++]=file_list[act_menu_select];
1854
                                else
1855
                                    act_path_arr[act_path_depth++]=file_list[act_menu_select-1];
1856
                            }
1857
                        act_menu_select=0;
1858
                        chg_state(STATEID_FILEOPEN);
1859
 
1860
                    }
1861
                else
1862
                    menu_keypress(keyCode);
1863
                break;
1864
 
1865
//#endif
1866
 
1867
 
1868
                // handle menue
211 ligi 1869
            case STATEID_SELECT_SPEED_FORMAT:  
1870
            case STATEID_SELECT_GPS_FORMAT:
206 ligi 1871
            case STATEID_TRAFFIC:
1872
            case STATEID_CONN_DETAILS:
1873
            case STATEID_HANDLE_PARAMS:
1874
            case STATEID_SETTINGSMENU:
1875
            case STATEID_MAINMENU:
1876
 
1877
                if ( getGameAction (keyCode)==FIRE )
1878
                    {
1879
                        switch(menu_actions[act_menu_select])
1880
                            {
1881
 
211 ligi 1882
 
1883
                            case ACTIONID_SET_SPEED_FORMAT_CMS:
1884
                                mk.gps_position.act_speed_format=SPEED_FORMAT_CMS;
1885
                                chg_state(STATEID_SETTINGSMENU);
1886
                                break;
1887
 
1888
                            case ACTIONID_SET_SPEED_FORMAT_MPH:
1889
                                mk.gps_position.act_speed_format=SPEED_FORMAT_MPH;
1890
                                chg_state(STATEID_SETTINGSMENU);
1891
                                break;
1892
 
1893
                            case ACTIONID_SET_SPEED_FORMAT_KMH:
1894
                                mk.gps_position.act_speed_format=SPEED_FORMAT_KMH;
1895
                                chg_state(STATEID_SETTINGSMENU);
1896
                                break;
1897
 
1898
                            case ACTIONID_SELECT_SPEED_FORMAT:
1899
                                chg_state(STATEID_SELECT_SPEED_FORMAT);
1900
                                break;
1901
 
1902
 
1903
                            case ACTIONID_SET_GPS_FORMAT_DECIMAL:
1904
                                mk.gps_position.act_gps_format=GPS_FORMAT_DECIMAL;
1905
                                chg_state(STATEID_SETTINGSMENU);
1906
                                break;
1907
 
1908
                            case ACTIONID_SET_GPS_FORMAT_MINSEC:
1909
                                mk.gps_position.act_gps_format=GPS_FORMAT_MINSEC;
1910
                                chg_state(STATEID_SETTINGSMENU);
1911
                                break;
1912
 
1913
 
1914
                            case ACTIONID_SELECT_GPS_FORMAT:
1915
                                chg_state(STATEID_SELECT_GPS_FORMAT);
1916
                                break;
1917
 
206 ligi 1918
                            case ACTIONID_BACK_TO_CONNDETAILS:
1919
                                chg_state(STATEID_CONN_DETAILS);
1920
                                break;
1921
 
1922
                            case ACTIONID_RESET_PARAMS:
1923
                                state=STATEID_FLASHING;
1924
                                mk.bootloader_intension_flash=false;
1925
                                init_bootloader=true;
1926
                                break;
1927
 
1928
                            case ACTIONID_FLASH:
1929
 
1930
                                chg_state(STATEID_FLASHING);
1931
 
1932
                                //chg_state(STATEID_FLASHING);
1933
                                break;
1934
 
1935
                            case ACTIONID_DATABUFF:
1936
                                chg_state(STATEID_DATABUFF);
1937
                                break;
1938
 
1939
                            case ACTIONID_NC_ERRORS:
1940
                                chg_state(STATEID_NC_ERRORS);
1941
                                break;
1942
 
1943
                            case ACTIONID_ABOUT:
1944
                                chg_state(STATEID_ABOUT);
1945
                                break;
1946
 
1947
                            case ACTIONID_CONN_DETAILS:
1948
                                chg_state(STATEID_CONN_DETAILS);
1949
                                break;
1950
 
1951
                            case ACTIONID_QUIT:
1952
                                quit=true;
1953
                                break;
1954
 
1955
                            case ACTIONID_SWITCH_NC:
1956
                                  mk.switch_to_navi();
1957
                                  break;
1958
 
1959
                            case ACTIONID_SWITCH_FC:
1960
                                  mk.switch_to_fc();
1961
                                  break;
1962
 
1963
                            case ACTIONID_SWITCH_MK3MAG:
1964
                                  mk.switch_to_mk3mag();
1965
                                  break;
1966
 
1967
                            case ACTIONID_GRAPH:
1968
                                chg_state(STATEID_GRAPH);
1969
                                break;
1970
 
1971
                            case ACTIONID_KEYCONTROL:
1972
                                chg_state(STATEID_KEYCONTROL);
1973
                                break;
1974
 
1975
                            case ACTIONID_LCD :
1976
                                chg_state(STATEID_FLIGHTVIEW);
1977
                                break;
1978
 
1979
 
1980
                            case ACTIONID_PROXY:
1981
 
1982
                                chg_state(STATEID_IPINPUT);
1983
                                break;
1984
 
1985
                            case ACTIONID_DEVICESELECT:
1986
                                chg_state(STATEID_SCANNING);
1987
                                break;
1988
 
1989
                            case ACTIONID_RAWDEBUG:
1990
                                chg_state(STATEID_RAWDEBUG);
1991
                                break;
1992
 
1993
                            case ACTIONID_SETTINGS:
1994
                                chg_state(STATEID_SETTINGSMENU);
1995
                                break;
1996
 
1997
                            case ACTIONID_RCDATA:
1998
                                chg_state(STATEID_STICKVIEW);
1999
                                break;
2000
 
2001
                            case ACTIONID_CAM:
2002
                                chg_state(STATEID_CAMMODE);
2003
                                break;
2004
 
2005
                            case ACTIONID_GPSDATA:
2006
                                chg_state(STATEID_GPSVIEW);
2007
                                break;
2008
 
2009
 
2010
                            case  ACTIONID_MOTORTEST :
2011
                                chg_state(STATEID_MOTORTEST);
2012
                                break;
2013
 
2014
 
2015
                            case ACTIONID_EDIT_PARAMS:
2016
                                if (mk.watchdog.act_paramset<5)
2017
                                    chg_state(STATEID_READ_PARAMS);
2018
                                else
2019
                                    chg_state(STATEID_SELECT_PARAMSET);
2020
 
2021
                                break;
2022
 
2023
                            case ACTIONID_CHANGESKIN:
2024
                                settings.act_skin++;
2025
                                settings.act_skin=(byte)(settings.act_skin%2);
2026
                                load_images();
2027
                                chg_state(STATEID_SETTINGSMENU);
2028
                                break;
2029
                            case ACTIONID_SOUNDTOGGLE:
2030
                                settings.do_sound=!settings.do_sound;
2031
                                chg_state(STATEID_SETTINGSMENU);
2032
                                break;
2033
                            case ACTIONID_VIBRATOGGLE:
2034
                                settings.do_vibra=!settings.do_vibra;
2035
                                chg_state(STATEID_SETTINGSMENU);
2036
                                break;
2037
 
2038
                            case ACTIONID_GRAPHTOGGLE:
2039
                                settings.do_scrollbg=!settings.do_scrollbg;
2040
                                load_images();
2041
                                chg_state(STATEID_SETTINGSMENU);
2042
                                break;
2043
 
2044
 
2045
                            case ACTIONID_FULLSCREENTOGGLE:
2046
                                settings.fullscreen=!settings.fullscreen;
2047
                                setFullScreenMode(settings.fullscreen);
2048
                                chg_state(STATEID_SETTINGSMENU);
2049
                                break;
2050
 
2051
//#if devicecontrol=="on"
2052
                            case ACTIONID_LIGHTTOGGLE:
2053
                                settings.keep_lighton =!settings.keep_lighton;
2054
                                chg_state(STATEID_SETTINGSMENU);
2055
                                break;
2056
//#endif
2057
 
2058
 
2059
                            case ACTIONID_WRITE_PARAMS:
2060
                                mk.write_params();
2061
                                chg_state(STATEID_MAINMENU);
2062
                                break;
2063
 
2064
                            case ACTIONID_UNDO_PARAMS:
2065
                                mk.params.use_backup();
2066
                                chg_state(STATEID_MAINMENU);
2067
                                break;
2068
 
2069
                            case ACTIONID_MAINMENU:
2070
                                chg_state(STATEID_MAINMENU);
2071
                                break;
2072
 
2073
                            case ACTIONID_DEBUG:
2074
                                debug.showing=true;
2075
                                break;
2076
 
2077
 
2078
 
2079
 
2080
                            case ACTIONID_TRAFFIC:
2081
                                chg_state(STATEID_TRAFFIC);
2082
                                break;
2083
 
2084
                            case ACTIONID_CONNECT_TCP:
2085
                                ipinput4proxy=false;
2086
                                chg_state(STATEID_IPINPUT);
2087
                                break;
2088
 
2089
                            case ACTIONID_SCAN_BT:
2090
                                chg_state(STATEID_SCANNING);
2091
                                break;
2092
 
2093
                            case ACTIONID_SELECT_COM:
2094
                                chg_state(STATEID_SELECT_COMPORT);
2095
                                break;
2096
 
2097
                            case ACTIONID_PROXY_INPUT:
2098
                                ipinput4proxy=true;
2099
                                chg_state(STATEID_IPINPUT);
2100
                                break;                     
2101
 
2102
                            }
2103
 
2104
                    }
2105
 
2106
                else menu_keypress(keyCode);
2107
 
2108
                break;
2109
 
2110
            case STATEID_SELECT_PARAMSET:
2111
                if ( getGameAction (keyCode)==FIRE )
2112
                    {              
2113
                        if ( mk.params.field[act_menu_select]!=null)
2114
                            {
2115
                                mk.params.act_paramset=act_menu_select;
2116
                                chg_state(STATEID_EDIT_PARAMS);
2117
                            }
2118
                    }
2119
                else menu_keypress(keyCode);
2120
                break;
2121
 
2122
//#if bluetooth=="on"
2123
            case STATEID_DEVICESELECT:
2124
 
2125
                if ( getGameAction (keyCode)==FIRE )
2126
                    {              
2127
 
2128
                        if (bt_scanner.remote_device_count > act_menu_select)
2129
                            {
2130
                                connect_mk("btspp://"+bt_scanner.remote_device_mac[act_menu_select] + ":1",bt_scanner.remote_device_name[act_menu_select]);
2131
                                chg_state(STATEID_CONN_DETAILS);
2132
                            }
2133
                        else
2134
                            {
2135
                                if (bt_scanner.remote_device_count == act_menu_select)
2136
                                    chg_state(STATEID_SCANNING);
2137
                                else
2138
                                    chg_state(STATEID_CONN_DETAILS);
2139
                            }
2140
 
2141
                    }
2142
                else menu_keypress(keyCode);
2143
 
2144
                break;
2145
//#endif
2146
 
2147
 
2148
            case STATEID_EDIT_PARAMS:
2149
                params_editor.keypress(keyCode,getGameAction (keyCode)) ;
2150
                break;
2151
 
2152
            case STATEID_FLIGHTVIEW:
2153
 
2154
                if ((keyCode >= this.KEY_NUM0) && (keyCode <= this.KEY_NUM9))              
2155
                        mk.LCD.set_page(keyCode-this.KEY_NUM0);
2156
                else
2157
                switch (getGameAction (keyCode))
2158
                    {
2159
                    case LEFT:
2160
                    case UP:
2161
                        mk.LCD.LCD_PREVPAGE();
2162
                        break;
2163
 
2164
                    case RIGHT:
2165
                    case DOWN:
2166
                        mk.LCD.LCD_NEXTPAGE();
2167
                        break;
2168
 
2169
 
2170
 
2171
                    }
2172
                break;
2173
            }
2174
 
2175
 
2176
 
2177
    }
2178
 
2179
 
2180
 
2181
 
2182
 
2183
 
2184
 
2185
 
2186
}
2187
 
2188