Subversion Repositories Projects

Rev

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

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