Subversion Repositories Projects

Rev

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