Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

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