Subversion Repositories Projects

Rev

Rev 82 | 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
 
17
public class DUBwiseCanvas
18
    extends Canvas
135 ligi 19
    implements Runnable,DUBwiseDefinitions
81 ligi 20
{
21
 
135 ligi 22
    int act_wp;
23
 
81 ligi 24
    // name/handle for the recordStore to memorize some stuff
25
    private final static String RECORD_STORE_NAME="DUBSETT";
26
 
27
    private BTSearcher bt_scanner;
28
    public MKCommunicator mk=null;
29
    private MKStatistics mk_stat=null;
30
    private MKParamsEditor params_editor=null;
31
    public DUBwiseDebug debug=null;
32
 
33
//#if voice_mode!="no_voice"
34
    private MKStatusVoice status_voice;
35
//#endif
36
 
37
    private String err="";
38
    private DUBwise root;
39
 
135 ligi 40
    public UFOProber ufo_prober;
81 ligi 41
 
42
    byte[] settings_arr;
43
 
44
    public boolean do_vibra=true;
45
    public boolean do_sound=true;
46
    public boolean do_graph=true;
47
    public boolean keep_lighton=false;
48
 
49
    private Image bg_img;
50
    private Image bt_img;
51
    private Image lcd_img;
52
    private Image load_img;
53
 
54
 
135 ligi 55
    public boolean fullscreen=false;
56
    public int act_motor=0;
57
    public int act_motor_increase=0;
58
    public boolean motor_test_sel_all=false;
59
 
60
 
81 ligi 61
    final static int SKINID_DARK= 0;
62
    final static int SKINID_LIGHT = 1;
63
 
64
    //holds id of actual skin
65
    byte act_skin=SKINID_DARK;
66
 
67
 
68
    public int[] nick_line_pos_data;
69
    public int[] roll_line_pos_data;
70
 
71
    public int[] accnick_line_pos_data;
72
    public int[] accroll_line_pos_data;
73
 
74
    public int lcd_char_width=0;
75
    public int lcd_char_height=0;
76
 
77
    public int frame_pos=0;
135 ligi 78
 
79
    public int user_intent=USER_INTENT_NONE;
81 ligi 80
 
81
    int line_scaler=20;
82
 
83
    int rawdebug_cursor_y=0;    
84
    int rawdebug_off_y=0;
85
 
86
    public int line_middle_y;
87
 
88
    boolean quit=false;
89
    boolean rescan=true;
90
    int bg_offset=0;
91
 
92
    // variable to hold the current state
93
    public int state=-1;
94
 
95
 
96
 
97
    int local_max=-1;
98
 
99
    int y_off=0;
100
    int spacer=0;
101
    int spacer1=0;
102
 
103
    int[] motor_test = {0,0,0,0};
104
 
105
 
106
    String[] menu_items;
107
    int act_menu_select=0;
108
 
109
    String[] lcd_lines =null;
110
 
111
    public void paint_menu(Graphics g)
112
    {
113
        for ( int i=0;i<menu_items.length;i++)
114
            {
115
                if ((frame_pos%3)!=0)
116
                    {
117
                        lcd_lines[i]=(act_menu_select==i?">":" ") + menu_items[i];     
118
                        for ( int ii=0;ii<(18-menu_items[i].length());ii++)
119
                            lcd_lines[i]+=" ";
120
                        if (act_menu_select==i)
121
                            lcd_lines[i]+="<";
122
                    }
123
                else
124
                    lcd_lines[i]=" " + menu_items[i];  
125
 
126
 
127
            }
128
        paint_lcd(g,true);
129
    }
130
 
131
    public void menu_keypress(int keyCode)
132
    {
133
        switch (getGameAction (keyCode))
134
            {
135
            case UP:
136
                if (act_menu_select!=0) act_menu_select--;
137
                else
138
                    act_menu_select=menu_items.length-1;
139
                break;
140
 
141
            case DOWN:
142
                if (act_menu_select<(menu_items.length-1)) act_menu_select++;
143
                else act_menu_select=0;
144
                break;
145
 
146
            }
147
 
148
    }
149
 
150
    public boolean cam_condition()
151
    {
152
        return (mk.stick_data.stick[5]>100);
153
 
154
    }
155
 
156
    public void paint_lcd(Graphics g,boolean bottomup)
157
    {
158
 
159
        int y;
160
 
161
        for(int i=0;i<lcd_lines.length;i++)
162
            for (int pos=0;pos<20;pos++)
163
            {
164
                if (bottomup)
165
                    y=this.getHeight()-(lcd_lines.length-i)*lcd_char_height;
166
                else
167
                    y=i*lcd_char_height;
168
                g.setClip((lcd_img.getWidth()/222)*pos,y,(lcd_img.getWidth()/222),lcd_img.getHeight());
169
                g.drawImage(lcd_img,(lcd_img.getWidth()/222)*pos-((pos<lcd_lines[i].length()?lcd_lines[i].charAt(pos):' ')-' ')*(lcd_img.getWidth()/222),y,g.TOP | g.LEFT);
170
 
171
            }
172
    }
173
 
174
    public void load_images()
175
    {
176
        try
177
            {
178
                // load all needed images
179
                switch (act_skin)
180
                    {
181
                    case SKINID_DARK:
182
                        lcd_img=Image.createImage("/lcd_green.png");
183
                        bg_img=Image.createImage("/starfield.jpg");                                     break;
184
 
185
                    case SKINID_LIGHT:
186
                        lcd_img=Image.createImage("/lcd_blue.png");
187
                        bg_img=Image.createImage("/clouds.jpg");
188
                        break;
189
                    }
190
 
191
 
192
                bt_img=Image.createImage("/bt.png");
193
 
194
                load_img=Image.createImage("/load.png");
195
            }
196
        catch (Exception e)
197
            {
198
                err+=e.toString();
199
            }
200
 
201
        lcd_char_width=lcd_img.getWidth()/222;
202
        lcd_char_height=lcd_img.getHeight();
203
 
204
 
205
        nick_line_pos_data=new int[bg_img.getWidth()];
206
        roll_line_pos_data=new int[bg_img.getWidth()];
207
        accnick_line_pos_data=new int[bg_img.getWidth()];
208
        accroll_line_pos_data=new int[bg_img.getWidth()];
209
 
210
        for (int c=0;c<bg_img.getWidth();c++)
211
            {
212
                nick_line_pos_data[c]=-1;
213
                roll_line_pos_data[c]=-1;
214
                accnick_line_pos_data[c]=-1;
215
                accroll_line_pos_data[c]=-1;
216
            }
217
 
218
    }
219
 
220
    public DUBwiseCanvas(DUBwise _root)
221
    {
222
 
223
 
224
        root=_root;
225
 
135 ligi 226
        debug   = new DUBwiseDebug(this);
81 ligi 227
 
228
        bt_scanner = new BTSearcher();
229
        params_editor = new MKParamsEditor(this);
230
        ufo_prober = new UFOProber();
231
 
232
        mk      = new MKCommunicator(root,debug);
233
        mk_stat = new MKStatistics(mk);
234
 
235
 
236
//#if voice_mode!="no_voice"
237
        status_voice=new MKStatusVoice(mk,this);
238
//#endif
239
 
240
 
241
        try
242
            {
243
                RecordStore recStore = RecordStore.openRecordStore(RECORD_STORE_NAME , true );
244
 
245
                if (recStore.getNumRecords()==3)
246
                    {
247
 
248
                        //byte[] recData = new byte[recStore.getRecordSize(1)];
249
                        //int len = recStore.getRecord(1, recData, 0);
250
 
251
                        //byte[] recData2 = new byte[recStore.getRecordSize(2)];
252
                        //int len2 = recStore.getRecord(2, recData, 0);
253
 
254
                        byte[] url_data=recStore.getRecord(1);
255
                        byte[] name_data=recStore.getRecord(2);
256
                        settings_arr=recStore.getRecord(3);
257
 
258
                        act_skin=settings_arr[0];
259
                        do_sound=(settings_arr[1]==1);
260
                        do_vibra=(settings_arr[2]==1);
261
                        do_graph=(settings_arr[3]==1);
262
                        fullscreen=(settings_arr[4]==1);
263
                        keep_lighton=(settings_arr[5]==1);
264
 
265
                        connect_mk(new String(url_data, 0, url_data.length),new String(name_data, 0, name_data.length));
266
 
267
                    }
268
                recStore.closeRecordStore();
269
            }
270
        catch (Exception e)
271
            {
272
                settings_arr=new byte[10];
273
 
274
                err+=e.toString();
275
            }
276
 
277
 
278
        load_images();
279
 
280
        chg_state((mk.force_disconnect)?STATEID_SCANNING:STATEID_MAINMENU);
281
 
282
 
283
 
284
        new Thread(this).start();
285
 
286
    }
287
 
288
 
289
 
290
 
291
    /****************************** Thread ******************/
292
    // ticking runnable Section
293
    public void run()
294
    {
295
 
296
 
297
        while(true)
298
            {
299
                try {
300
 
301
 
302
                repaint();
303
                serviceRepaints();
304
 
305
                long loopStartTime = System.currentTimeMillis();
306
                long sleeptime=0;
307
                // ticked thing
308
 
309
                frame_pos++;
310
 
311
                switch(state)
312
                    {
313
                    case STATEID_CAMMODE:
314
 
315
                            try
316
                                {
317
                                    if(cam_condition())
318
                                        {
319
                                        cam_img=null;
320
                                        debug.log("get snap\n");
321
                                        cam_raw = mVideoControl.getSnapshot(null);
322
 
323
                                        try { Thread.sleep(4000); }
324
                                        catch (Exception e)
325
                                            {
326
                                                err="Problem Sleeping ";
327
                                            }
328
                                        }
329
                                    else
330
                                        {
331
                                            if (cam_img==null)
332
                                                cam_img = Image.createImage(cam_raw, 0, cam_raw.length);
333
                                        }
334
                                }
335
                            catch ( Exception e)
336
                                {
337
                                    debug.log(e.toString());
338
                                }
339
                        break;
340
                    case STATEID_KEYCONTROL:
341
                        mk.send_keys(keycontrol_bitfield);     
342
                        break;
343
 
135 ligi 344
                    case STATEID_READ_PARAMS:
345
                        if (mk.watchdog.act_paramset==5)
346
                            chg_state(STATEID_SELECT_PARAMSET);
347
                        else
348
                            {
349
                                lcd_lines[0]="Reading Settings    ";
350
                                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?"#":"_") + "|         ";
351
                            }
352
                        break;
353
 
81 ligi 354
                    case STATEID_MOTORTEST:
355
 
356
                        if (motor_test_sel_all)
357
                            for (int m=0;m<4;m++)
358
                                {
359
                                    motor_test[m]+=act_motor_increase;
360
                                    if (motor_test[m]<0)motor_test[m]=0;
361
                                    if (motor_test[m]>255)motor_test[m]=255;
362
                                }
363
                        else
364
                            {
365
                                motor_test[act_motor]+=act_motor_increase;
366
                                if (motor_test[act_motor]<0) motor_test[act_motor]=0;
367
                                if (motor_test[act_motor]>255) motor_test[act_motor]=255;
368
                            }
369
 
370
                        mk.motor_test(motor_test);
371
                        break;
372
 
135 ligi 373
                    case STATEID_MAINMENU:
374
                        if (ufo_prober.change_notify)
375
                            {
376
                                ufo_prober.change_notify=false;
377
                                chg_state(STATEID_MAINMENU);
378
                            }
379
                        break;
380
 
81 ligi 381
                    case STATEID_SCANNING:
382
                        intro_str_delay--;
383
                        if (intro_str_delay<0)
384
                            {
385
                                intro_str_delay=1;
386
                                if (intro_str_pos>intro_str.length())
387
                                    intro_str_pos=0;
388
                                lcd_lines[3]=intro_str.substring(intro_str_pos,  (((intro_str_pos+20)>intro_str.length())?intro_str.length():intro_str_pos+20));
389
                                intro_str_pos++;
390
                            }
391
 
392
                        if (!bt_scanner.searching)
393
                                chg_state(STATEID_DEVICESELECT);
394
 
395
 
396
                        break;
397
 
398
 
399
 
400
                    }
401
 
402
                try {
403
                    nick_line_pos_data[-bg_offset] = mk.debug_data.nick_int();
404
                    roll_line_pos_data[-bg_offset] = mk.debug_data.roll_int();
405
                    accnick_line_pos_data[-bg_offset] = mk.debug_data.accnick();
406
                    accroll_line_pos_data[-bg_offset] = mk.debug_data.accroll();
407
                }
408
                catch (Exception e)
409
                    {
410
                        err+=e.toString();
411
                    }
412
 
413
 
414
 
415
 
416
                if (quit)
417
                    {
418
 
419
 
420
 
421
                        try
422
                            {
423
                                RecordStore.deleteRecordStore(RECORD_STORE_NAME);
424
                                RecordStore recStore = RecordStore.openRecordStore(RECORD_STORE_NAME, true );
425
                                recStore.addRecord(mk.mk_url.getBytes(), 0, mk.mk_url.getBytes().length);
426
                                recStore.addRecord(mk.name.getBytes(), 0, mk.name.getBytes().length);
427
                                settings_arr=new byte[10];
428
                                settings_arr[0]=(byte)act_skin;
429
                                settings_arr[1]=(byte)(do_sound?1:0);
430
                                settings_arr[2]=(byte)(do_vibra?1:0);
431
                                settings_arr[3]=(byte)(do_graph?1:0);
432
                                settings_arr[4]=(byte)(fullscreen?1:0);
433
                                settings_arr[5]=(byte)(keep_lighton?1:0);
434
 
435
                                recStore.addRecord(settings_arr, 0, settings_arr.length);
436
 
437
 
438
 
439
                                recStore.closeRecordStore();
440
 
441
                            }
442
                        catch (Exception e)
443
                            {
444
                                err+=e.toString();
445
                            }
446
 
447
                        root.quit();
448
                    }
449
                if (rescan)
450
                    {
451
 
452
                        rescan=false;
453
                    }
454
 
455
                try {
456
                    //rescan=false;
457
                    bg_offset--;
458
                    if (bg_offset==-bg_img.getWidth())
459
                        bg_offset=0;
460
                    if (keep_lighton) com.nokia.mid.ui.DeviceControl.setLights(0,100);
461
                    //bt.tick();
462
                    // every state has sth to do in tick section
463
                }
464
                catch (Exception e)
465
                    {
466
 
467
                    }
468
 
469
 
470
                //                System.gc();
471
 
472
 
473
 
474
 
475
                sleeptime=1000/ 15 - (int) (System.currentTimeMillis()- loopStartTime);
476
 
477
 
478
 
479
                if (sleeptime<0)
480
                    sleeptime=100; // everyone has fi sleep
481
 
482
                try { Thread.sleep(sleeptime); }
483
                catch (Exception e)
484
                    {
485
                        err="Problem Sleeping ";
486
                    }
487
 
488
                }
489
                catch (Exception e)
490
                    {
491
                        err+=e.toString();
492
                    }
493
            }
494
    }
495
 
496
 
497
 
498
    boolean firstrun=true;
499
 
500
 
501
    // drawing section
502
    public void paint(Graphics g) {
503
        if (debug.showing)
504
            {
505
                debug.paint(g);
506
                return;
507
            }
508
 
509
        if (firstrun)
510
            {
511
                if (fullscreen) setFullScreenMode(fullscreen);
512
                firstrun=false;
513
            }
514
        y_off=0;
515
        try {
516
 
517
            if (mk!=null)
518
                {
519
                    line_middle_y=this.getHeight()/2;
520
                    if (local_max<Math.abs(mk.debug_data.nick_int()))
521
                        local_max=Math.abs(mk.debug_data.nick_int());
522
                    if (local_max<Math.abs(mk.debug_data.roll_int()))
523
                        local_max=Math.abs(mk.debug_data.roll_int());
524
                    if (local_max<Math.abs(mk.debug_data.accnick()))
525
                        local_max=Math.abs(mk.debug_data.accnick());
526
                    if (local_max<Math.abs(mk.debug_data.accroll()))
527
                        local_max=Math.abs(mk.debug_data.accroll());
528
                    line_scaler= local_max/(this.getHeight()/2)+1;
529
                }
530
 
531
 
532
            Font f1 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);  
533
            Font f2 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);  
534
 
535
            spacer=(f1.getHeight());
536
            spacer1=(f2.getHeight());
537
 
538
            //default Font
539
            g.setFont(f1);
540
 
541
            if (state==STATEID_EDIT_PARAMS)
542
                {
543
                    g.setColor(0x000000);
544
                    g.fillRect(0,0,this.getWidth(),this.getHeight());
545
                }
546
                else
547
                {
548
                    g.setColor(0xFFFFFF);
549
                    g.fillRect(0,0,this.getWidth(),this.getHeight());
550
                    g.drawImage(bg_img,bg_offset,0, g.TOP | g.LEFT);
551
 
552
                    if (bg_offset+bg_img.getWidth()<this.getWidth())
553
                        g.drawImage(bg_img,bg_offset+bg_img.getWidth(),0, g.TOP | g.LEFT);
554
                }
555
 
556
            switch (act_skin)
557
                {
558
                case SKINID_DARK:
559
                    g.setColor(0x2dcf20);
560
 
561
                    break;
562
 
563
                case SKINID_LIGHT:
564
                    g.setColor(0x000000);
565
                    break;
566
                }
567
 
568
 
569
 
570
            switch(state)
571
                {
572
 
135 ligi 573
                case STATEID_GPSVIEW:
574
                    g.drawString("GPS-Packages: " + mk.navi_data_count ,0,y_off,Graphics.TOP | Graphics.LEFT);
575
                    y_off+=spacer;
576
                    g.drawString("Used Sats: " + mk.gps_position.Used_Sat ,0,y_off,Graphics.TOP | Graphics.LEFT);
577
                    y_off+=spacer;
578
                    g.drawString("Latitude: " + mk.gps_position.Latitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
579
                    y_off+=spacer;
580
                    g.drawString("=>: " + mk.gps_position.Latitude_min_sec() ,0,y_off,Graphics.TOP | Graphics.LEFT);
581
                    y_off+=spacer;
582
                    g.drawString("Longitude: " + mk.gps_position.Longitude_str() ,0,y_off,Graphics.TOP | Graphics.LEFT);
583
                    y_off+=spacer;
584
                    g.drawString("=> " + mk.gps_position.Longitude_min_sec() ,0,y_off,Graphics.TOP | Graphics.LEFT);
585
                    y_off+=spacer;
586
 
587
                    g.drawString("Target-Lat: " + mk.gps_position.TargetLatitude ,0,y_off,Graphics.TOP | Graphics.LEFT);
588
                    y_off+=spacer;
589
                    g.drawString("Target-Long: " + mk.gps_position.TargetLongitude ,0,y_off,Graphics.TOP | Graphics.LEFT);
590
                    y_off+=spacer;
591
                    g.drawString("Distance : " + mk.gps_position.Distance2Target ,0,y_off,Graphics.TOP | Graphics.LEFT);
592
                    y_off+=spacer;
593
                    g.drawString("Angle: " + mk.gps_position.Angle2Target ,0,y_off,Graphics.TOP | Graphics.LEFT);
594
                    y_off+=spacer;
595
 
596
                    g.drawString("WayPoints: " + act_wp + "/" + mk.gps_position.last_wp ,0,y_off,Graphics.TOP | Graphics.LEFT);
597
                    y_off+=spacer;
598
 
599
                    g.drawString(" " +  mk.gps_position.WP_Latitude_min_sec(act_wp) ,0,y_off,Graphics.TOP | Graphics.LEFT);
600
                    y_off+=spacer;
601
 
602
                    g.drawString(" " +  mk.gps_position.WP_Longitude_min_sec(act_wp) ,0,y_off,Graphics.TOP | Graphics.LEFT);
603
                    y_off+=spacer;
604
 
605
 
606
                    break;
607
 
81 ligi 608
                case STATEID_CAMMODE:
609
 
610
                    if (cam_img!=null)
611
                        g.drawImage(cam_img,0,0,g.TOP | g.LEFT);
612
                        g.drawString("condition: " + cam_condition() ,0,y_off,Graphics.TOP | Graphics.LEFT);
613
                        y_off+=spacer;
614
                        g.drawString("width " + cam_img.getWidth(),0,y_off,Graphics.TOP | Graphics.LEFT);
615
                        y_off+=spacer;
616
                        g.drawString("height " + cam_img.getHeight(),0,y_off,Graphics.TOP | Graphics.LEFT);
617
                        y_off+=spacer;
618
                        break;
619
 
620
                case STATEID_STICKVIEW:
621
                    y_off=0;
622
                    for(int tmp_y=0;tmp_y<10;tmp_y++)
623
                        {
624
                            g.drawString(""+tmp_y+"=>"+mk.stick_data.stick[tmp_y],0,y_off,Graphics.TOP | Graphics.LEFT);
625
                            y_off+=spacer;
626
                        }
627
                    break;
628
 
629
                case STATEID_KEYCONTROL:
630
 
631
 
632
                    y_off+=spacer;
633
                    g.drawString("UP&DOWN => nick",0,y_off,Graphics.TOP | Graphics.LEFT);
634
                    y_off+=spacer;
635
                    g.drawString("LEFT&RIGHT => roll",0,y_off,Graphics.TOP | Graphics.LEFT);
636
                    y_off+=spacer;
637
                    g.drawString("1&4 => altitude",0,y_off,Graphics.TOP | Graphics.LEFT);
638
 
639
                    y_off+=spacer;
640
                    g.drawString("2&3 => gier",0,y_off,Graphics.TOP | Graphics.LEFT);
641
 
642
                    y_off+=spacer;
643
                    g.drawString("Press # and * at once",0,y_off,Graphics.TOP | Graphics.LEFT);
644
                    y_off+=spacer;
645
                    g.drawString("to quit KeyControl",0,y_off,Graphics.TOP | Graphics.LEFT);
646
                    y_off+=spacer;
647
                    g.drawString("bf1:"+ keycontrol_bitfield[0] ,0,y_off,Graphics.TOP | Graphics.LEFT);
648
                    g.drawString("bf2:"+ keycontrol_bitfield[1] ,this.getWidth()/2,y_off,Graphics.TOP | Graphics.LEFT);
649
 
650
                    break;
651
 
652
                case STATEID_MOTORTEST:
653
                    for (int bar=0;bar<4;bar++)
654
 
655
                        {
656
                            g.setColor(((bar==act_motor)|motor_test_sel_all)?0x44CC44:0x4444DD);  
657
                            g.fillRect(this.getWidth()/(8*2)+bar*2*this.getWidth()/8,10,this.getWidth()/8,20+motor_test[bar]);
658
                            g.setColor(0x000000);
659
                            g.drawString(""+motor_test[bar] ,this.getWidth()/8+bar*2*this.getWidth()/8,10,Graphics.TOP | Graphics.HCENTER);
660
                            if(bar!=4)                      g.drawString(""+mk.debug_data.motor_val(bar) ,this.getWidth()/8+bar*2*this.getWidth()/8,30,Graphics.TOP | Graphics.HCENTER);
661
                        }
662
                    break;
663
 
664
                case STATEID_EDIT_PARAMS:
665
                    params_editor.paint(g);
666
                    break;
667
 
135 ligi 668
 
669
                case STATEID_READ_PARAMS:
670
                    paint_lcd(g,true);
671
 
672
                    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);;
673
                    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);
674
                    g.drawImage(bt_img,this.getWidth()/2 ,this.getHeight()/2 , g.HCENTER | g.VCENTER);
675
                    break;
676
 
677
 
81 ligi 678
                case STATEID_SCANNING:
679
                    paint_lcd(g,true);
680
 
681
                    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);;
682
                    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);
683
                    g.drawImage(bt_img,this.getWidth()/2 ,this.getHeight()/2 , g.HCENTER | g.VCENTER);
684
                    break;
685
 
686
                case STATEID_RAWDEBUG: 
687
                    g.setFont(f2);
688
                    rawdebug_off_y=0;
689
                    if ((rawdebug_cursor_y+2)*spacer1>this.getHeight())
690
                        rawdebug_off_y=((rawdebug_cursor_y+2)*spacer1-this.getHeight())/spacer1;
691
                    for (int i=0;i<(this.getHeight()/spacer1);i++)
692
                        {
693
                            if (i+rawdebug_off_y==rawdebug_cursor_y)
694
                                {
695
                                g.setColor(0x0000CC);
696
                                g.fillRect(0,y_off,this.getWidth(),spacer1);
697
 
698
                                switch (act_skin)
699
                                    {
700
                                    case SKINID_DARK:
701
                                        g.setColor(0x2dcf20);
702
 
703
                                        break;
704
 
705
                                    case SKINID_LIGHT:
706
                                        g.setColor(0x000000);
707
                                        break;
708
                                    }
709
                                }
710
                            if (i+rawdebug_off_y<32) //todo better style
711
                                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);
712
 
713
                            y_off+=spacer1;
714
 
715
                        }
716
 
717
 
718
 
719
                    break;
720
 
721
 
722
                case STATEID_MAINMENU: 
723
                    g.setFont(f2);
135 ligi 724
                    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);
725
                    y_off+=spacer1;
726
                    g.drawString(" Version:" + mk.version.str ,0,y_off,Graphics.TOP | Graphics.LEFT);
727
                    y_off+=spacer1;
728
                    /*
729
 
81 ligi 730
                    g.drawString(" Name:" + mk.name,0,y_off,Graphics.TOP | Graphics.LEFT);
731
                    y_off+=spacer1;
732
                    g.drawString(" URL:" + mk.mk_url,0,y_off,Graphics.TOP | Graphics.LEFT);
733
                    y_off+=spacer1;
135 ligi 734
 
81 ligi 735
                    g.setFont(f1);
736
                    g.drawString("Packet Traffic:",0,y_off,Graphics.TOP | Graphics.LEFT);
737
                    y_off+=spacer;
135 ligi 738
                    g.setFont(f2);*/
81 ligi 739
                    g.drawString( " debug:"+mk.debug_data_count+ " LCD:" + mk.lcd_data_count + " vers:" + mk.version_data_count,0,y_off,Graphics.TOP | Graphics.LEFT);
740
                    y_off+=spacer1;
135 ligi 741
                    g.drawString( " other:"+mk.other_data_count+" params:"+mk.params_data_count + " GPS:"+mk.navi_data_count ,0,y_off,Graphics.TOP | Graphics.LEFT);
742
                    y_off+=spacer1;
743
                    g.drawString( " debug_names:" + mk.debug_names_count + " angles:" + mk.angle_data_count ,0,y_off,Graphics.TOP | Graphics.LEFT);
81 ligi 744
 
745
 
746
 
135 ligi 747
 
81 ligi 748
                case STATEID_SETTINGSMENU:
749
                    // falltru wanted
750
                case STATEID_SELECT_PARAMSET:
751
                case STATEID_HANDLE_PARAMS:
752
 
753
                case STATEID_DEVICESELECT:
754
                    paint_menu(g);
755
                    break;
756
 
757
                case STATEID_FLIGHTVIEW:
758
 
759
 
760
                    // !!TODO!! check exactly which version those Datas where introduced
761
                    if (mk.version.compare(0,60)==mk.version.VERSION_PREVIOUS)
762
                        {
763
                            g.drawString("Voltage: " + (mk.debug_data.UBatt()/10) + "," +(mk.debug_data.UBatt()%10)+"V" ,0,y_off,Graphics.TOP | Graphics.LEFT);
764
                            g.drawString("Sender: " + mk.debug_data.SenderOkay(),this.getWidth()/2,y_off,Graphics.TOP | Graphics.LEFT);
765
                            y_off+=spacer;
766
                        }
767
 
768
                    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);
769
 
770
                    y_off+=spacer;
771
 
772
                    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);
773
                    y_off+=spacer;
774
 
775
 
776
                    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);
777
                    y_off+=spacer;
778
 
779
                    if (mk.connected)
780
                        {
781
                            g.drawString("time conn:" +((System.currentTimeMillis()- mk.connection_start_time)/1000)+"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
782
                            y_off+=spacer;
783
                            g.drawString("time motor>15:" +(mk_stat.motor_on_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
784
                            y_off+=spacer;
785
                            g.drawString("time motor=15:" +(mk_stat.motor_stand_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
135 ligi 786
                            y_off+=spacer;
787
                            g.drawString("act_lcd_page:" + mk.LCD.act_mk_page + "/" + mk.LCD.pages + " ( wanted: " + mk.LCD.act_user_page +")" ,0,y_off,Graphics.TOP | Graphics.LEFT);
788
 
81 ligi 789
                        }
135 ligi 790
 
81 ligi 791
 
792
                    y_off=this.getHeight()-4*lcd_img.getHeight();
793
 
794
                    for ( int foo=0;foo<4;foo++)
795
                        {
796
                            for (int x=0;x<20;x++)
797
                                {
798
                                    g.setClip((lcd_img.getWidth()/222)*x,y_off,(lcd_img.getWidth()/222),lcd_img.getHeight());
799
                                            g.drawImage(lcd_img,(lcd_img.getWidth()/222)*x-(mk.LCD.get_act_page()[foo].charAt(x)-' ')*(lcd_img.getWidth()/222),y_off, g.TOP | g.LEFT);
800
 
801
                                        }
802
                                    y_off+=lcd_img.getHeight();
803
                                }
804
 
805
                            g.setClip(0,0,this.getWidth(),this.getHeight());
806
 
807
 
808
 
809
 
810
 
811
                    // draw lines
812
 
813
                    if (do_graph) for ( int x=0;x<this.getWidth();x++)
814
 
815
                        {
816
 
817
                            int p= (((-bg_offset+x-this.getWidth()-5)));
818
                            if (p<1)
819
                                p+=bg_img.getWidth();
820
                            p%=(bg_img.getWidth()-1);
821
 
822
                            g.setColor(0x156315);              
823
                            draw_graph_part(g,x,nick_line_pos_data[p]/line_scaler,nick_line_pos_data[p+1]/line_scaler);
824
                            g.setColor(0xCC1315);
825
                            draw_graph_part(g,x,roll_line_pos_data[p]/line_scaler,roll_line_pos_data[p+1]/line_scaler);
826
                            g.setColor(0xf8ef02);              
827
                            draw_graph_part(g,x,accnick_line_pos_data[p]/line_scaler,accnick_line_pos_data[p+1]/line_scaler);
828
                            g.setColor(0x19194d);
829
                            draw_graph_part(g,x,accroll_line_pos_data[p]/line_scaler,accroll_line_pos_data[p+1]/line_scaler);
830
 
831
 
832
 
833
                        }
834
 
835
                }
836
 
837
 
838
 
839
        } catch (Exception e) {}
840
 
841
    }
842
    Player mPlayer;
843
    VideoControl        mVideoControl;
844
    Image cam_img;
845
    int cam_img_seq=0;
846
    byte[] cam_raw;
847
 
848
    private void connect_mk(String url,String name)
849
    {
850
        //      ufo_prober.bluetooth_probe(url);
851
        mk.connect_to(url,name);
852
 
853
 
854
    }
855
 
856
    public void draw_graph_part(Graphics g,int x,int y1,int y2)
857
    {
858
        if ( this.getWidth()>200)
859
            {
860
                g.fillRect(x,line_middle_y-y1,1,1 );
861
                if (y1>y2)
862
                    g.fillRect(x,line_middle_y-y1,1,y1-y2);
863
                else
864
                    g.fillRect(x,line_middle_y-y2,1,y2-y1);
865
 
866
            }
867
        else
868
            {
869
            g.fillRect(x,line_middle_y-y1,1,1 );
870
                if (y1>y2)
871
                    g.fillRect(x,line_middle_y-y1,1,y1-y2);
872
                else
873
                    g.fillRect(x,line_middle_y-y2,1,y2-y1);
874
            }
875
 
876
 
877
 
878
 
879
    }
880
 
881
 
882
    /*********************************************** input Section **********************************************/
883
 
884
 
885
    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) ";
886
 
887
    int intro_str_pos=0;
888
    int intro_str_delay=3;
889
 
890
    public void chg_state(int next_state)
891
    {
892
        if (next_state!=state)act_menu_select=0;
893
        // prepare next state
894
        switch(next_state)
895
            {
896
            case STATEID_CAMMODE:
897
 
898
                if (mVideoControl==null)
899
                    try
900
                        {
901
                            debug.log("creating player\n");
902
                            mPlayer = Manager.createPlayer("capture://video?encoding=png&width=2048&height=1536");
903
 
904
                            debug.log("realizing player\n");
905
                            mPlayer.realize();
906
 
907
                            debug.log("get_videocontrol\n");
908
 
909
                            mVideoControl = (VideoControl)mPlayer.getControl("VideoControl");
910
 
911
                            debug.log("switching Canvas\n");
912
                            mVideoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, this);
913
 
914
                            debug.log("get snap\n");
915
                            byte[] raw = mVideoControl.getSnapshot(null);    
916
 
917
                        }
918
                    catch ( Exception e)
919
                        {
920
                            debug.log(e.toString());
921
                        }
922
 
923
 
924
                break;
925
            case STATEID_KEYCONTROL:
926
                keycontrol_exit=0;
927
                break;
928
 
135 ligi 929
            case STATEID_READ_PARAMS:
930
                user_intent=USER_INTENT_PARAMS;
931
                lcd_lines=new String[2];
932
                lcd_lines[0]="Reading Settings    ";
933
                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?"#":"_") + "|         ";
934
 
935
                break;
936
 
937
 
81 ligi 938
            case STATEID_SCANNING:
939
                lcd_lines=new String[4];
940
                lcd_lines[0]="Scanning for Devices";
941
                lcd_lines[1]="                    ";
942
 
943
//#expand lcd_lines[2]="DUBwise v%VERSION%       ";
944
                lcd_lines[3]=intro_str.substring(0,20);
945
                mk.close_connections(true);
946
 
947
                bt_scanner.search();
948
                break;
949
 
950
            case STATEID_HANDLE_PARAMS:
951
                menu_items=new String[2];
952
                menu_items[0]="write to MK";
953
                menu_items[1]="Discard";
954
                lcd_lines=new String[2];
955
 
956
                break;
957
 
958
            case STATEID_SELECT_PARAMSET:
959
                menu_items=new String[5];
960
                for (int i=0;i<5;i++)
961
                    menu_items[i]=mk.params.names[i];
962
 
963
                lcd_lines=new String[5];
964
                break;
965
 
966
            case STATEID_DEVICESELECT:
967
                menu_items=new String[bt_scanner.remote_device_count+1];
968
                for (int i=0;i<bt_scanner.remote_device_count;i++)
969
                    menu_items[i]=bt_scanner.remote_device_name[i];
970
                menu_items[bt_scanner.remote_device_count]="scan again";
971
                lcd_lines=new String[bt_scanner.remote_device_count+1];
972
                break;
973
 
974
 
975
            case STATEID_MAINMENU:
135 ligi 976
                if (ufo_prober.is_navi())
977
                    menu_items=main_menu_items_navi;
978
                else if (ufo_prober.is_mk())
979
                    menu_items=main_menu_items_mk;
980
                else
981
                    menu_items=main_menu_items_no_connection;
982
 
81 ligi 983
                lcd_lines=new String[menu_items.length];
984
                break;
985
 
986
            case STATEID_SETTINGSMENU:
987
 
988
                menu_items=new String[settings_menu_items.length];
989
                for(int cnt=0;cnt<settings_menu_items.length;cnt++)
990
                    menu_items[cnt]=settings_menu_items[cnt];
991
 
992
                menu_items[0]+=(act_skin==SKINID_DARK)?"Dark":"Light";
993
                menu_items[1]+=(!do_sound)?"Off":"On";
994
                menu_items[2]+=(!do_vibra)?"Off":"On";
995
                menu_items[3]+=(!do_graph)?"Off":"On";
996
                menu_items[4]+=(!fullscreen)?"Off":"On";
997
                menu_items[5]+=(!keep_lighton)?"Off":"On";
998
 
999
                lcd_lines=new String[menu_items.length];
1000
                break;
1001
 
135 ligi 1002
            case STATEID_RAWDEBUG:
1003
                user_intent=USER_INTENT_RAWDEBUG;
1004
                break;
1005
 
81 ligi 1006
            }
135 ligi 1007
 
1008
 
1009
 
81 ligi 1010
 
1011
        // switch state
1012
        state=next_state;
1013
    }
1014
 
1015
 
1016
    public void keyReleased(int keyCode)
1017
    {
1018
 
1019
        switch(state)
1020
            {
1021
            case STATEID_MOTORTEST:
1022
                act_motor_increase=0;
1023
                break;
1024
 
1025
            case STATEID_KEYCONTROL:
1026
                if (keyCode==KEY_POUND)
1027
                    keycontrol_exit &= 255^1;
1028
                else
1029
                if (keyCode==KEY_STAR)
1030
                    keycontrol_exit &= 255^2;
1031
                else
1032
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM8))
1033
                    keycontrol_bitfield[0]&=255^( 1<<(keyCode-this.KEY_NUM0));
1034
                else
1035
                    if ((keyCode >= this.KEY_NUM8) && (keyCode <= this.KEY_NUM9))
1036
                        keycontrol_bitfield[1]&=255^( 1<<(keyCode-this.KEY_NUM8));
1037
                else
1038
                    switch (getGameAction (keyCode))
1039
                            {
1040
                            case UP:
1041
                                keycontrol_bitfield[1]&=255^4;
1042
                                break;
1043
 
1044
                            case DOWN:
1045
                                keycontrol_bitfield[1]&=255^8;
1046
                                break;
1047
 
1048
 
1049
                            case LEFT:
1050
                                keycontrol_bitfield[1]&=255^16;
1051
                                break;
1052
 
1053
                            case RIGHT:
1054
                                keycontrol_bitfield[1]&=255^32;
1055
                                break;
1056
 
1057
                            case FIRE:
1058
                                keycontrol_bitfield[1]&=255^64;
1059
                                break;
1060
 
1061
 
1062
                            }
1063
                mk.send_keys(keycontrol_bitfield);
1064
                break;
1065
            }
1066
 
1067
    }
1068
 
1069
 
1070
    byte keycontrol_exit=0;
1071
 
1072
    public final static int[] keycontrol_bitfield={0,0};
1073
 
1074
 
1075
    public void pointerPressed (int pointer_x, int pointer_y)
1076
    {
1077
        if (pointer_x<this.getWidth()/2)
1078
            {
1079
                if (state==STATEID_EDIT_PARAMS)
1080
                    {
1081
                        chg_state(STATEID_HANDLE_PARAMS);
1082
                        return;
1083
                    }
1084
 
1085
                else
1086
                    if (state!=STATEID_KEYCONTROL)
1087
                        {
1088
                            chg_state(STATEID_MAINMENU);
1089
                            return;
1090
                        }
1091
            }
1092
        else
1093
            {
1094
                fullscreen=!fullscreen;
1095
                setFullScreenMode(fullscreen);
1096
            }
1097
 
1098
    }
1099
 
1100
    public void keyPressed(int keyCode)
1101
    {
1102
        debug.process_key(keyCode);
1103
 
1104
 
1105
        if (keyCode==KEY_STAR)
1106
            {
1107
                if (state==STATEID_EDIT_PARAMS)
1108
                    {
1109
                        chg_state(STATEID_HANDLE_PARAMS);
1110
                        return;
1111
                    }
1112
                else
1113
                    if (state!=STATEID_KEYCONTROL)
1114
                        {
1115
                        chg_state(STATEID_MAINMENU);
1116
                        return;
1117
                        }
1118
 
1119
            }
1120
        if ((keyCode==KEY_POUND)&&(state!=STATEID_KEYCONTROL))
1121
            {
1122
                fullscreen=!fullscreen;
1123
                setFullScreenMode(fullscreen);
1124
                return;
1125
            }
1126
        switch(state)
1127
            {
135 ligi 1128
            case STATEID_GPSVIEW:
1129
                if (keyCode == this.KEY_NUM0)
1130
                    mk.set_gps_target(mk.gps_position.Latitude,mk.gps_position.Longitude);
1131
 
1132
                if (keyCode == this.KEY_NUM1)
1133
                    mk.gps_position.push_wp();
1134
 
1135
 
1136
                switch (getGameAction (keyCode))
1137
                            {
1138
                            case UP:
1139
                                if (act_wp!=0) act_wp--;
1140
                                break;
1141
 
1142
                            case DOWN:
1143
                                if (act_wp<mk.gps_position.last_wp) act_wp++;
1144
 
1145
                                break;
1146
 
1147
 
1148
                            }
1149
 
1150
 
1151
                break;
1152
 
81 ligi 1153
            case STATEID_RAWDEBUG:
1154
 
1155
                switch (getGameAction (keyCode))
1156
                            {
1157
                            case UP:
1158
                                if (rawdebug_cursor_y==0)
1159
                                    rawdebug_cursor_y=31;
1160
                                else
1161
                                    rawdebug_cursor_y--;
1162
                                break;
1163
 
1164
                            case DOWN:
1165
                                if (rawdebug_cursor_y==31)
1166
                                    rawdebug_cursor_y=0;
1167
                                else
1168
                                    rawdebug_cursor_y++;
1169
                                break;
1170
 
135 ligi 1171
 
81 ligi 1172
                            }
1173
                break;
1174
            case STATEID_KEYCONTROL:
1175
                if (keyCode==KEY_POUND)
1176
                    keycontrol_exit |= 1;
1177
                else
1178
                if (keyCode==KEY_STAR)
1179
                    keycontrol_exit |= 2;
1180
                else
1181
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM8))
1182
                    keycontrol_bitfield[0]|=1<<(keyCode-this.KEY_NUM0);
1183
                else
1184
                if ((keyCode >= this.KEY_NUM8) && (keyCode <= this.KEY_NUM9))
1185
                    keycontrol_bitfield[1]|=1<<(keyCode-this.KEY_NUM8);
1186
 
1187
                else
1188
                    switch (getGameAction (keyCode))
1189
                            {
1190
                            case UP:
1191
                                keycontrol_bitfield[1]|=4;
1192
                                break;
1193
 
1194
                            case DOWN:
1195
                                keycontrol_bitfield[1]|=8;
1196
                                break;
1197
 
1198
 
1199
                            case LEFT:
1200
                                keycontrol_bitfield[1]|=16;
1201
                                break;
1202
 
1203
                            case RIGHT:
1204
                                keycontrol_bitfield[1]|=32;
1205
                                break;
1206
 
1207
                            case FIRE:
1208
                                keycontrol_bitfield[1]|=64;
1209
                                break;
1210
 
1211
                            }
1212
                if (keycontrol_exit==3)
1213
                    chg_state(STATEID_MAINMENU);
1214
                else
1215
                    mk.send_keys(keycontrol_bitfield);
1216
                break;
1217
 
1218
 
1219
            case STATEID_MOTORTEST:
1220
                switch (getGameAction (keyCode))
1221
                            {
1222
                            case UP:
1223
                                act_motor_increase=-1;
1224
                                break;
1225
 
1226
                            case DOWN:
1227
                                act_motor_increase=1;
1228
                                break;
1229
 
1230
                            case FIRE:
1231
                                motor_test_sel_all=!motor_test_sel_all;
1232
                                break;
1233
 
1234
                            case LEFT:
1235
                                act_motor--;
1236
                                if (act_motor<0) {act_motor=0; chg_state(STATEID_MAINMENU); }
1237
                                break;
1238
 
1239
                            case RIGHT:
1240
                                act_motor++;
1241
                                act_motor%=4;
1242
                                break;
1243
                            }
1244
 
1245
                break;
1246
            case STATEID_HANDLE_PARAMS:
1247
                if ( getGameAction (keyCode)==FIRE )
1248
                    switch(act_menu_select)
1249
                        {
1250
                        case 0:
1251
                            mk.write_params();
1252
                        default:
1253
                            chg_state(STATEID_MAINMENU);
1254
                        }
1255
                else
1256
                    menu_keypress(keyCode);
1257
                break;
1258
 
1259
            case STATEID_SETTINGSMENU:
1260
                if ( getGameAction (keyCode)==FIRE )
1261
                    switch(act_menu_select)
1262
                        {
1263
                        case SETTINGSMENU_CHANGESKIN:
1264
                            act_skin++;
1265
                            act_skin=(byte)(act_skin%2);
1266
                            load_images();
1267
                            chg_state(STATEID_SETTINGSMENU);
1268
                            break;
1269
                        case SETTINGSMENU_SOUNDTOGGLE:
1270
                            do_sound=!do_sound;
1271
                            chg_state(STATEID_SETTINGSMENU);
1272
                            break;
1273
                        case SETTINGSMENU_VIBRATOGGLE:
1274
                            do_vibra=!do_vibra;
1275
                            chg_state(STATEID_SETTINGSMENU);
1276
                            break;
1277
 
1278
                        case SETTINGSMENU_GRAPHTOGGLE:
1279
                            do_graph=!do_graph;
1280
                            chg_state(STATEID_SETTINGSMENU);
1281
                            break;
1282
 
1283
 
1284
                        case SETTINGSMENU_FULLSCREENTOGGLE:
1285
                            fullscreen=!fullscreen;
1286
                            setFullScreenMode(fullscreen);
1287
                            chg_state(STATEID_SETTINGSMENU);
1288
                            break;
1289
 
1290
                        case SETTINGSMENU_LIGHTTOGGLE:
1291
                            keep_lighton =!keep_lighton;
1292
                            chg_state(STATEID_SETTINGSMENU);
1293
                            break;
1294
 
1295
                        case SETTINGSMENU_BACK:
1296
                            chg_state(STATEID_MAINMENU);
1297
                            break;
1298
 
1299
                        }
1300
                else menu_keypress(keyCode);
1301
                break;
1302
 
1303
            case STATEID_MAINMENU:
1304
                if ( getGameAction (keyCode)==FIRE )
135 ligi 1305
                    {
1306
 
1307
                    if (ufo_prober.is_mk())
81 ligi 1308
                    switch(act_menu_select)
1309
                        {
135 ligi 1310
                        case MAINMENU_MK_CAMMODE:
81 ligi 1311
                            chg_state(STATEID_CAMMODE);
1312
                            break;
1313
 
135 ligi 1314
                        case MAINMENU_MK_SETTINGSMENU:
81 ligi 1315
                            chg_state(STATEID_SETTINGSMENU);
1316
                            break;
135 ligi 1317
                        case MAINMENU_MK_STICKS:
81 ligi 1318
                            chg_state(STATEID_STICKVIEW);
1319
                            break;
1320
 
135 ligi 1321
                        case MAINMENU_MK_KEYCONTROL:
81 ligi 1322
                            chg_state(STATEID_KEYCONTROL);
1323
                            break;
1324
 
135 ligi 1325
                        case MAINMENU_MK_TELEMETRY :
81 ligi 1326
                            chg_state(STATEID_FLIGHTVIEW);
1327
                            break;
1328
 
135 ligi 1329
                        case  MAINMENU_MK_MOTORTEST :
81 ligi 1330
                            chg_state(STATEID_MOTORTEST);
1331
                            break;
1332
 
135 ligi 1333
                        case MAINMENU_MK_PARAMS :
1334
                            if (mk.watchdog.act_paramset<5)
1335
                                chg_state(STATEID_READ_PARAMS);
1336
                            else
1337
                                chg_state(STATEID_SELECT_PARAMSET);
81 ligi 1338
                            break;
1339
 
1340
 
135 ligi 1341
                        case MAINMENU_MK_PROXY:
81 ligi 1342
                            mk.do_proxy("socket://192.168.1.42:2323");
1343
                            break;
1344
 
135 ligi 1345
                        case MAINMENU_MK_DEVICESELECT:
81 ligi 1346
                            chg_state(STATEID_SCANNING);
1347
                            break;
1348
 
135 ligi 1349
                        case MAINMENU_MK_RAWDEBUG:
81 ligi 1350
                            chg_state(STATEID_RAWDEBUG);
1351
                            break;
1352
 
135 ligi 1353
                        case MAINMENU_MK_QUIT:
81 ligi 1354
                            // set quit Flag
1355
                            quit=true;
1356
                            break;
1357
 
1358
                        }
135 ligi 1359
                    else if (ufo_prober.is_navi())
1360
                        switch(act_menu_select)
1361
                            {
1362
 
1363
 
1364
 
1365
                            case MAINMENU_NAVI_SETTINGS:
1366
                                chg_state(STATEID_SETTINGSMENU);
1367
                            break;
1368
 
1369
                            case MAINMENU_NAVI_TELEMETRY :
1370
                                chg_state(STATEID_FLIGHTVIEW);
1371
                                break;
1372
 
1373
 
1374
                            case MAINMENU_NAVI_RAWDEBUG:
1375
                                chg_state(STATEID_RAWDEBUG);
1376
                                break;
1377
 
1378
                            case MAINMENU_NAVI_GPSVIEW:
1379
                                chg_state(STATEID_GPSVIEW);
1380
                                break;
1381
 
1382
                            case MAINMENU_NAVI_DEVICESELECT:
1383
                                chg_state(STATEID_SCANNING);
1384
                                break;
1385
 
1386
 
1387
                            case MAINMENU_NAVI_QUIT:
1388
                                // set quit Flag
1389
                                quit=true;
1390
                                break;
1391
                            }
1392
 
1393
                    else
1394
                        switch(act_menu_select)
1395
                            {
1396
 
1397
 
1398
 
1399
                            case MAINMENU_NO_CONN_SETTINGS:
1400
                                chg_state(STATEID_SETTINGSMENU);
1401
                            break;
1402
 
1403
                            case MAINMENU_NO_CONN_DEVICESELECT:
1404
                                chg_state(STATEID_SCANNING);
1405
                                break;
1406
 
1407
 
1408
                            case MAINMENU_NO_CONN_QUIT:
1409
                                // set quit Flag
1410
                                quit=true;
1411
                                break;
1412
 
1413
 
1414
                            }
1415
                    }
81 ligi 1416
                else menu_keypress(keyCode);
1417
                break;
1418
 
1419
            case STATEID_SELECT_PARAMSET:
1420
                if ( getGameAction (keyCode)==FIRE )
1421
                    {              
1422
                        if ( mk.params.field[act_menu_select]!=null)
1423
                            {
1424
                                mk.params.act_paramset=act_menu_select;
1425
                                chg_state(STATEID_EDIT_PARAMS);
1426
                            }
1427
                    }
1428
                else menu_keypress(keyCode);
1429
                break;
1430
            case STATEID_DEVICESELECT:
1431
                /*
1432
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM0+bt_scanner.remote_device_count))
1433
                    {
1434
                    connect_mk("btspp://"+bt_scanner.remote_device_mac[keyCode-this.KEY_NUM0] + ":1",bt_scanner.remote_device_name[keyCode-this.KEY_NUM0]);
1435
                    chg_state(STATEID_MAINMENU);
1436
                    }
1437
                else
1438
                */
1439
 
1440
                if ( getGameAction (keyCode)==FIRE )
1441
                    {              
1442
 
1443
                        if (bt_scanner.remote_device_count > act_menu_select)
1444
                            {
1445
                                connect_mk("btspp://"+bt_scanner.remote_device_mac[act_menu_select] + ":1",bt_scanner.remote_device_name[act_menu_select]);
1446
                                chg_state(STATEID_MAINMENU);
135 ligi 1447
                                //                              keyCode=-1;
81 ligi 1448
                            }
1449
                        else
1450
                            chg_state(STATEID_SCANNING);
1451
                    }
1452
                else menu_keypress(keyCode);
1453
 
1454
                break;
1455
 
1456
            case STATEID_EDIT_PARAMS:
1457
                params_editor.keypress(keyCode,getGameAction (keyCode)) ;
1458
                break;
1459
 
1460
            case STATEID_FLIGHTVIEW:
1461
 
1462
                if ((keyCode >= this.KEY_NUM0) && (keyCode <= this.KEY_NUM9))              
1463
                        mk.LCD.set_page(keyCode-this.KEY_NUM0);
1464
                else
1465
                switch (getGameAction (keyCode))
1466
                    {
1467
                    case LEFT:
1468
                    case UP:
1469
                        mk.LCD.LCD_PREVPAGE();
1470
                        break;
1471
 
1472
                    case RIGHT:
1473
                    case DOWN:
1474
                        mk.LCD.LCD_NEXTPAGE();
1475
                        break;
1476
 
1477
 
1478
 
1479
                    }
1480
                break;
1481
            }
1482
 
1483
 
1484
 
1485
    }
1486
 
1487
 
1488
 
1489
 
1490
 
1491
 
1492
 
1493
 
1494
}
1495
 
1496