Subversion Repositories Projects

Rev

Rev 59 | Go to most recent revision | Details | Compare with Previous | 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
 
14
 
15
public class MKMiniCanvas
16
    extends Canvas
17
    implements Runnable
18
{
19
 
20
    // name/handle for the recordStore to memorize some stuff
21
    private final static String RECORD_STORE_NAME="bluetoothurl";
22
 
23
    private BTSearcher bt_scanner;
24
    public MKCommunicator mk=null;
25
    private MKStatistics mk_stat=null;
26
    private MKParamsEditor params_editor=null;
59 ligi 27
 
28
//#if voice_mode!="no_voice"
31 ligi 29
    private MKStatusVoice status_voice;
59 ligi 30
//#endif
4 ligi 31
 
32
    private String err="";
33
    private DUBwise root;
34
 
35
 
36
 
37
    private Image bg_img;
38
    private Image bt_img;
39
    private Image lcd_img;
40
    private Image load_img;
41
 
42
 
43
    final static int SKINID_DARK= 0;
44
    final static int SKINID_LIGHT = 1;
45
 
46
    byte act_skin=SKINID_DARK;
47
 
48
 
49
    public int[] nick_line_pos_data;
50
    public int[] roll_line_pos_data;
51
 
52
    public int[] accnick_line_pos_data;
53
    public int[] accroll_line_pos_data;
54
 
55
    public int lcd_char_width=0;
56
    public int lcd_char_height=0;
57
 
58
    public int frame_pos=0;
59
 
60
    int line_scaler=20;
61
 
62
    public int line_middle_y;
63
 
64
    boolean quit=false;
65
    boolean rescan=true;
66
    int bg_offset=0;
67
 
68
    // variable to hold the current state
69
    public int state=-1;
70
 
71
    // id  for each state - must just be uniq - order isnt important
72
    public final static int STATEID_SCANNING         =0;
73
    public final static int STATEID_DEVICESELECT     =1;
74
    public final static int STATEID_MAINMENU         =2;
75
    public final static int STATEID_MOTORTEST        =3;
76
    public final static int STATEID_SELECT_PARAMSET  =4;
77
    public final static int STATEID_EDIT_PARAMS      =5;
78
    public final static int STATEID_HANDLE_PARAMS    =6;
79
    public final static int STATEID_FLIGHTVIEW       =7;
80
    public final static int STATEID_RAWDEBUG         =8;
81
    //    public final static int STATEID_RAWDEBUG         =8;
82
    public final static int STATEID_KEYCONTROL       =9;
83
 
84
 
85
    public boolean fullscreen=false;
86
    public int act_motor=0;
87
    public int act_motor_increase=0;
88
    public boolean motor_test_sel_all=false;
89
 
90
    public String[] main_menu_items={"Telemetry","Raw Debug", "MK-KeyControl", "Motor Test" , "Flight Settings","Change Skin","Proxy","Change Device" , "Quit " };
91
    public final static int MAINMENU_TELEMETRY     =0;
92
    public final static int MAINMENU_RAWDEBUG      =1+MAINMENU_TELEMETRY;
93
    public final static int MAINMENU_KEYCONTROL    =1+MAINMENU_RAWDEBUG;
94
    public final static int MAINMENU_MOTORTEST     =1+MAINMENU_KEYCONTROL;
95
    public final static int MAINMENU_PARAMS        =1+MAINMENU_MOTORTEST;
96
    public final static int MAINMENU_SETTINGS      =1+MAINMENU_PARAMS;
97
    public final static int MAINMENU_PROXY         =1+MAINMENU_SETTINGS;
98
    public final static int MAINMENU_DEVICESELECT  =1+MAINMENU_PROXY;
99
    public final static int MAINMENU_QUIT          =1+MAINMENU_DEVICESELECT;
100
 
101
    int local_max=-1;
102
 
103
    int y_off=0;
104
    int spacer=0;
105
    int spacer1=0;
106
 
107
    int[] motor_test = {0,0,0,0};
108
 
109
 
110
    String[] menu_items;
111
    int act_menu_select=0;
112
 
113
    String[] lcd_lines =null;
114
 
115
    public void paint_menu(Graphics g)
116
    {
117
        for ( int i=0;i<menu_items.length;i++)
118
            lcd_lines[i]=(act_menu_select==i?"# ":"  ") + menu_items[i];       
119
        paint_lcd(g,true);
120
    }
121
 
122
    public void menu_keypress(int keyCode)
123
    {
124
        switch (getGameAction (keyCode))
125
            {
126
            case UP:
127
                if (act_menu_select!=0) act_menu_select--;
128
                else
129
                    act_menu_select=menu_items.length-1;
130
                break;
131
 
132
            case DOWN:
133
                if (act_menu_select<(menu_items.length-1)) act_menu_select++;
134
                else act_menu_select=0;
135
                break;
136
 
137
            }
138
 
139
    }
140
 
141
    public void paint_lcd(Graphics g,boolean bottomup)
142
    {
143
 
144
        int y;
145
 
146
        for(int i=0;i<lcd_lines.length;i++)
147
            for (int pos=0;pos<20;pos++)
148
            {
149
                if (bottomup)
150
                    y=this.getHeight()-(lcd_lines.length-i)*lcd_char_height;
151
                else
152
                    y=i*lcd_char_height;
153
                g.setClip((lcd_img.getWidth()/222)*pos,y,(lcd_img.getWidth()/222),lcd_img.getHeight());
154
                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);
155
 
156
            }
157
    }
158
 
159
    public void load_images()
160
    {
161
        try
162
            {
163
                // load all needed images
164
                switch (act_skin)
165
                    {
166
                    case SKINID_DARK:
167
                        lcd_img=Image.createImage("/lcd_green.png");
168
                        bg_img=Image.createImage("/starfield.jpg");                                     break;
169
 
170
                    case SKINID_LIGHT:
171
                        lcd_img=Image.createImage("/lcd_blue.png");
172
                        bg_img=Image.createImage("/clouds.jpg");
173
                        break;
174
                    }
175
 
176
 
177
                bt_img=Image.createImage("/bt.png");
178
 
179
                load_img=Image.createImage("/load.png");
180
            }
181
        catch (Exception e)
182
            {
183
                err+=e.toString();
184
            }
185
 
186
        lcd_char_width=lcd_img.getWidth()/222;
187
        lcd_char_height=lcd_img.getHeight();
188
 
189
 
190
        nick_line_pos_data=new int[bg_img.getWidth()];
191
        roll_line_pos_data=new int[bg_img.getWidth()];
192
        accnick_line_pos_data=new int[bg_img.getWidth()];
193
        accroll_line_pos_data=new int[bg_img.getWidth()];
194
 
195
        for (int c=0;c<bg_img.getWidth();c++)
196
            {
197
                nick_line_pos_data[c]=-1;
198
                roll_line_pos_data[c]=-1;
199
                accnick_line_pos_data[c]=-1;
200
                accroll_line_pos_data[c]=-1;
201
            }
202
 
203
    }
204
 
205
    public MKMiniCanvas(DUBwise _root)
206
    {
207
 
208
        root=_root;
209
 
210
        bt_scanner = new BTSearcher();
211
        params_editor = new MKParamsEditor(this);
31 ligi 212
 
213
 
4 ligi 214
        mk = new MKCommunicator(root);
215
        mk_stat= new MKStatistics(mk);
59 ligi 216
 
217
//#if voice_mode!="no_voice"
31 ligi 218
        status_voice=new MKStatusVoice(mk);
59 ligi 219
//#endif
4 ligi 220
        load_images();
221
 
222
 
223
        try
224
            {
225
                RecordStore recStore = RecordStore.openRecordStore(RECORD_STORE_NAME , true );
226
 
227
                if (recStore.getNumRecords()==2)
228
                    {
229
 
230
                        //byte[] recData = new byte[recStore.getRecordSize(1)];
231
                        //int len = recStore.getRecord(1, recData, 0);
232
 
233
                        //byte[] recData2 = new byte[recStore.getRecordSize(2)];
234
                        //int len2 = recStore.getRecord(2, recData, 0);
235
 
236
                        byte[] url_data=recStore.getRecord(1);
237
                        byte[] name_data=recStore.getRecord(2);
238
 
239
                        connect_mk(new String(url_data, 0, url_data.length),new String(name_data, 0, name_data.length));
240
 
241
                    }
242
                recStore.closeRecordStore();
243
            }
244
        catch (Exception e)
245
            {
246
                err+=e.toString();
247
            }
248
 
249
        chg_state((mk.force_disconnect)?STATEID_SCANNING:STATEID_MAINMENU);
250
 
251
 
252
 
253
        new Thread(this).start();
254
 
255
    }
256
 
257
 
258
 
259
    /****************************** Thread ******************/
260
    // ticking runnable Section
261
    public void run()
262
    {
263
 
264
 
265
        while(true)
266
            {
267
                try {
268
 
269
                repaint();
270
                serviceRepaints();
271
 
272
                long loopStartTime = System.currentTimeMillis();
273
                long sleeptime=0;
274
                // ticked thing
275
 
276
                frame_pos++;
277
 
278
                switch(state)
279
                    {
280
                    case STATEID_KEYCONTROL:
281
                        mk.send_keys(keycontrol_bitfield);     
282
                        break;
283
 
284
                    case STATEID_MOTORTEST:
285
 
286
                        if (motor_test_sel_all)
287
                            for (int m=0;m<4;m++)
288
                                {
289
                                    motor_test[m]+=act_motor_increase;
290
                                    if (motor_test[m]<0)motor_test[m]=0;
291
                                    if (motor_test[m]>255)motor_test[m]=255;
292
                                }
293
                        else
294
                            {
295
                                motor_test[act_motor]+=act_motor_increase;
296
                                if (motor_test[act_motor]<0) motor_test[act_motor]=0;
297
                                if (motor_test[act_motor]>255) motor_test[act_motor]=255;
298
                            }
299
 
300
                        mk.motor_test(motor_test);
301
                        break;
302
 
303
                    case STATEID_SCANNING:
304
                        intro_str_delay--;
305
                        if (intro_str_delay<0)
306
                            {
307
                                intro_str_delay=1;
308
                                if (intro_str_pos>intro_str.length())
309
                                    intro_str_pos=0;
310
                                lcd_lines[3]=intro_str.substring(intro_str_pos,  (((intro_str_pos+20)>intro_str.length())?intro_str.length():intro_str_pos+20));
311
                                intro_str_pos++;
312
                            }
313
 
314
                        if (!bt_scanner.searching)
315
                                chg_state(STATEID_DEVICESELECT);
316
 
317
 
318
                        break;
319
 
320
 
321
 
322
                    }
323
 
324
                try {
325
                    nick_line_pos_data[-bg_offset] = mk.debug_data.nick_int();
326
                    roll_line_pos_data[-bg_offset] = mk.debug_data.roll_int();
327
                    accnick_line_pos_data[-bg_offset] = mk.debug_data.accnick();
328
                    accroll_line_pos_data[-bg_offset] = mk.debug_data.accroll();
329
                }
330
                catch (Exception e)
331
                    {
332
                        err+=e.toString();
333
                    }
334
 
335
 
336
 
337
 
338
                if (quit)
339
                    {
340
 
341
 
342
 
343
                        try
344
                            {
345
                                RecordStore.deleteRecordStore(RECORD_STORE_NAME);
346
                                RecordStore recStore = RecordStore.openRecordStore(RECORD_STORE_NAME, true );
347
                                recStore.addRecord(mk.mk_url.getBytes(), 0, mk.mk_url.getBytes().length);
348
                                recStore.addRecord(mk.name.getBytes(), 0, mk.name.getBytes().length);
349
                                recStore.closeRecordStore();
350
 
351
                            }
352
                        catch (Exception e)
353
                            {
354
                                err+=e.toString();
355
                            }
356
 
357
                        root.quit();
358
                    }
359
                if (rescan)
360
                    {
361
 
362
                        rescan=false;
363
                    }
364
 
365
                try {
366
                    //rescan=false;
367
                    bg_offset--;
368
                    if (bg_offset==-bg_img.getWidth())
369
                        bg_offset=0;
31 ligi 370
                    //com.nokia.mid.ui.DeviceControl.setLights(0,100);
4 ligi 371
                    //bt.tick();
372
                    // every state has sth to do in tick section
373
                }
374
                catch (Exception e)
375
                    {
376
 
377
                    }
378
 
379
 
380
                //                System.gc();
381
 
382
 
383
 
384
 
385
                sleeptime=1000/ 15 - (int) (System.currentTimeMillis()- loopStartTime);
386
 
387
 
388
 
389
                if (sleeptime<0)
390
                    sleeptime=100; // everyone has fi sleep
391
 
392
                try { Thread.sleep(sleeptime); }
393
                catch (Exception e)
394
                    {
395
                        err="Problem Sleeping ";
396
                    }
397
 
398
                }
399
                catch (Exception e)
400
                    {
401
                        err+=e.toString();
402
                    }
403
            }
404
    }
405
 
406
 
407
 
408
 
409
 
410
    // drawing section
411
    public void paint(Graphics g) {
412
        y_off=0;
413
        try {
414
 
415
            if (mk!=null)
416
                {
417
                    line_middle_y=this.getHeight()/2;
418
                    if (local_max<Math.abs(mk.debug_data.nick_int()))
419
                        local_max=Math.abs(mk.debug_data.nick_int());
420
                    if (local_max<Math.abs(mk.debug_data.roll_int()))
421
                        local_max=Math.abs(mk.debug_data.roll_int());
422
                    if (local_max<Math.abs(mk.debug_data.accnick()))
423
                        local_max=Math.abs(mk.debug_data.accnick());
424
                    if (local_max<Math.abs(mk.debug_data.accroll()))
425
                        local_max=Math.abs(mk.debug_data.accroll());
426
                    line_scaler= local_max/(this.getHeight()/2)+1;
427
                }
428
 
429
 
430
            Font f1 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);  
431
            Font f2 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);  
432
 
433
            spacer=(f1.getHeight());
434
            spacer1=(f2.getHeight());
435
 
436
            //default Font
437
            g.setFont(f1);
438
 
439
            if (state==STATEID_EDIT_PARAMS)
440
                {
441
                    g.setColor(0x000000);
442
                    g.fillRect(0,0,this.getWidth(),this.getHeight());
443
                }
444
                else
445
                {
446
                    g.setColor(0xFFFFFF);
447
                    g.fillRect(0,0,this.getWidth(),this.getHeight());
448
                    g.drawImage(bg_img,bg_offset,0, g.TOP | g.LEFT);
449
 
450
                    if (bg_offset+bg_img.getWidth()<this.getWidth())
451
                        g.drawImage(bg_img,bg_offset+bg_img.getWidth(),0, g.TOP | g.LEFT);
452
                }
453
 
454
            switch (act_skin)
455
                {
456
                case SKINID_DARK:
457
                    g.setColor(0x2dcf20);
458
 
459
                    break;
460
 
461
                case SKINID_LIGHT:
462
                    g.setColor(0x000000);
463
                    break;
464
                }
465
 
466
 
467
 
468
            switch(state)
469
                {
470
                case STATEID_KEYCONTROL:
471
 
472
 
473
                    y_off+=spacer;
474
                    g.drawString("UP&DOWN => nick",0,y_off,Graphics.TOP | Graphics.LEFT);
475
                    y_off+=spacer;
476
                    g.drawString("LEFT&RIGHT => roll",0,y_off,Graphics.TOP | Graphics.LEFT);
477
                    y_off+=spacer;
478
                    g.drawString("1&4 => altitude",0,y_off,Graphics.TOP | Graphics.LEFT);
479
 
480
                    y_off+=spacer;
481
                    g.drawString("2&3 => gier",0,y_off,Graphics.TOP | Graphics.LEFT);
482
 
483
                    y_off+=spacer;
484
                    g.drawString("Press # and * at once",0,y_off,Graphics.TOP | Graphics.LEFT);
485
                    y_off+=spacer;
486
                    g.drawString("to quit KeyControl",0,y_off,Graphics.TOP | Graphics.LEFT);
487
                    y_off+=spacer;
488
                    g.drawString("bf1:"+ keycontrol_bitfield[0] ,0,y_off,Graphics.TOP | Graphics.LEFT);
489
                    g.drawString("bf2:"+ keycontrol_bitfield[1] ,this.getWidth()/2,y_off,Graphics.TOP | Graphics.LEFT);
490
 
491
                    break;
492
 
493
                case STATEID_MOTORTEST:
494
                    for (int bar=0;bar<4;bar++)
495
 
496
                        {
497
                            g.setColor(((bar==act_motor)|motor_test_sel_all)?0x44CC44:0x4444DD);  
498
                            g.fillRect(this.getWidth()/(8*2)+bar*2*this.getWidth()/8,10,this.getWidth()/8,20+motor_test[bar]);
499
                            g.setColor(0x000000);
500
                            g.drawString(""+motor_test[bar] ,this.getWidth()/8+bar*2*this.getWidth()/8,10,Graphics.TOP | Graphics.HCENTER);
501
                            if(bar!=4)                      g.drawString(""+mk.debug_data.motor_val(bar) ,this.getWidth()/8+bar*2*this.getWidth()/8,30,Graphics.TOP | Graphics.HCENTER);
502
                        }
503
                    break;
504
 
505
                case STATEID_EDIT_PARAMS:
506
                    params_editor.paint(g);
507
                    break;
508
 
509
                case STATEID_SCANNING:
510
                    paint_lcd(g,true);
511
 
512
                    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);;
513
                    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);
514
                    g.drawImage(bt_img,this.getWidth()/2 ,this.getHeight()/2 , g.HCENTER | g.VCENTER);
515
                    break;
516
 
517
                case STATEID_RAWDEBUG: 
518
                    g.setFont(f2);
519
                    for (int i=0;i<16;i++)
520
                        {
521
                            g.drawString(mk.debug_data.names[i] + mk.debug_data.analog[i] ,0,y_off,Graphics.TOP | Graphics.LEFT);
522
                            g.drawString(mk.debug_data.names[16+i]  + mk.debug_data.analog[16+i] ,this.getWidth()/2,y_off,Graphics.TOP | Graphics.LEFT);
523
                            y_off+=spacer1;
524
                        }
525
 
526
 
527
 
528
                    break;
529
 
530
 
531
                case STATEID_MAINMENU: 
532
                    g.drawString("MK-Connection(" + (mk.connected?("open"+((System.currentTimeMillis()- mk.connection_start_time)/1000)+"s"):"close")+"):",0,y_off,Graphics.TOP | Graphics.LEFT);
533
                    y_off+=spacer;
534
                    g.setFont(f2);
535
                    g.drawString(" Name:" + mk.name,0,y_off,Graphics.TOP | Graphics.LEFT);
536
                    y_off+=spacer1;
537
                    g.drawString(" URL:" + mk.mk_url,0,y_off,Graphics.TOP | Graphics.LEFT);
538
                    y_off+=spacer1;
539
                    g.drawString(" Version:" + mk.version.str,0,y_off,Graphics.TOP | Graphics.LEFT);
540
                    y_off+=spacer1;
541
 
542
                    g.setFont(f1);
543
                    g.drawString("Packet Traffic:",0,y_off,Graphics.TOP | Graphics.LEFT);
544
                    y_off+=spacer;
545
                    g.setFont(f2);
546
                    g.drawString( " debug:"+mk.debug_data_count+ " LCD:" + mk.lcd_data_count + " vers:" + mk.version_data_count,0,y_off,Graphics.TOP | Graphics.LEFT);
547
                    y_off+=spacer1;
548
                    g.drawString( " other:"+mk.other_data_count+" params:"+mk.params_data_count,0,y_off,Graphics.TOP | Graphics.LEFT);
549
 
550
 
551
 
552
 
553
                    // falltru wanted
554
                case STATEID_SELECT_PARAMSET:
555
                case STATEID_HANDLE_PARAMS:
556
 
557
                case STATEID_DEVICESELECT:
558
                    paint_menu(g);
559
                    break;
560
 
561
                case STATEID_FLIGHTVIEW:
562
 
563
 
564
                    // !!TODO!! check exactly which version those Datas where introduced
565
                    if (mk.version.compare(0,60)==mk.version.VERSION_PREVIOUS)
566
                        {
567
                            g.drawString("Power: " + (mk.debug_data.UBatt()/10) + "," +(mk.debug_data.UBatt()%10)+"V" ,0,y_off,Graphics.TOP | Graphics.LEFT);
568
                            g.drawString("Sender: " + mk.debug_data.SenderOkay(),this.getWidth()/2,y_off,Graphics.TOP | Graphics.LEFT);
569
                            y_off+=spacer;
570
                        }
571
 
572
                    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);
573
 
574
                    y_off+=spacer;
575
 
576
                    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);
577
                    y_off+=spacer;
578
 
579
 
580
                    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);
581
                    y_off+=spacer;
582
 
583
                    if (mk.connected)
584
                        {
585
                            g.drawString("time conn:" +((System.currentTimeMillis()- mk.connection_start_time)/1000)+"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
586
                            y_off+=spacer;
587
                            g.drawString("time motor>15:" +(mk_stat.motor_on_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
588
                            y_off+=spacer;
589
                            g.drawString("time motor=15:" +(mk_stat.motor_stand_time/1000) +"s" ,0,y_off,Graphics.TOP | Graphics.LEFT);
590
                        }
591
 
592
 
593
                    y_off=this.getHeight()-4*lcd_img.getHeight();
594
 
595
                    for ( int foo=0;foo<4;foo++)
596
                        {
597
                            for (int x=0;x<20;x++)
598
                                {
599
                                    g.setClip((lcd_img.getWidth()/222)*x,y_off,(lcd_img.getWidth()/222),lcd_img.getHeight());
600
                                            g.drawImage(lcd_img,(lcd_img.getWidth()/222)*x-(mk.LCD.LCD_str[foo].charAt(x)-' ')*(lcd_img.getWidth()/222),y_off, g.TOP | g.LEFT);
601
 
602
                                        }
603
                                    y_off+=lcd_img.getHeight();
604
                                }
605
 
606
                            g.setClip(0,0,this.getWidth(),this.getHeight());
607
 
608
 
609
 
610
 
611
 
612
                    // draw lines
613
 
614
                    for ( int x=0;x<this.getWidth();x++)
615
 
616
                        {
617
 
618
                            int p= (((-bg_offset+x-this.getWidth()-5)));
619
                            if (p<1)
620
                                p+=bg_img.getWidth();
621
                            p%=(bg_img.getWidth()-1);
622
 
623
                            g.setColor(0x156315);              
624
                            draw_graph_part(g,x,nick_line_pos_data[p]/line_scaler,nick_line_pos_data[p+1]/line_scaler);
625
                            g.setColor(0xCC1315);
626
                            draw_graph_part(g,x,roll_line_pos_data[p]/line_scaler,roll_line_pos_data[p+1]/line_scaler);
627
                            g.setColor(0xf8ef02);              
628
                            draw_graph_part(g,x,accnick_line_pos_data[p]/line_scaler,accnick_line_pos_data[p+1]/line_scaler);
629
                            g.setColor(0x19194d);
630
                            draw_graph_part(g,x,accroll_line_pos_data[p]/line_scaler,accroll_line_pos_data[p+1]/line_scaler);
631
 
632
 
633
 
634
                        }
635
 
636
                }
637
 
638
 
639
 
640
        } catch (Exception e) {}
641
    }
642
 
643
    private void connect_mk(String url,String name)
644
    {
645
        mk.connect_to(url,name);
646
 
647
    }
648
 
649
    public void draw_graph_part(Graphics g,int x,int y1,int y2)
650
    {
651
        if ( this.getWidth()>200)
652
            {
653
                g.fillRect(x,line_middle_y-y1,1,1 );
654
                if (y1>y2)
655
                    g.fillRect(x,line_middle_y-y1,1,y1-y2);
656
                else
657
                    g.fillRect(x,line_middle_y-y2,1,y2-y1);
658
 
659
            }
660
        else
661
            {
662
            g.fillRect(x,line_middle_y-y1,1,1 );
663
                if (y1>y2)
664
                    g.fillRect(x,line_middle_y-y1,1,y1-y2);
665
                else
666
                    g.fillRect(x,line_middle_y-y2,1,y2-y1);
667
            }
668
 
669
    }
670
 
671
 
672
    /*********************************************** input Section **********************************************/
673
 
674
 
675
    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) ";
676
 
677
    int intro_str_pos=0;
678
    int intro_str_delay=3;
679
 
680
    public void chg_state(int next_state)
681
    {
682
        act_menu_select=0;
683
        // prepare next state
684
        switch(next_state)
685
            {
686
            case STATEID_KEYCONTROL:
687
                keycontrol_exit=0;
688
                break;
689
 
690
            case STATEID_SCANNING:
691
                lcd_lines=new String[4];
692
                lcd_lines[0]="Scanning for Devices";
693
                lcd_lines[1]="                    ";
694
 
695
//#expand lcd_lines[2]="DUBwise v%VERSION%       ";
696
                lcd_lines[3]=intro_str.substring(0,20);
697
                mk.close_connections(true);
698
 
699
                bt_scanner.search();
700
                break;
701
 
702
            case STATEID_HANDLE_PARAMS:
703
                menu_items=new String[2];
704
                menu_items[0]="write to MK";
705
                menu_items[1]="Discard";
706
                lcd_lines=new String[2];
707
 
708
                break;
709
 
710
            case STATEID_SELECT_PARAMSET:
711
                menu_items=new String[5];
712
                for (int i=0;i<5;i++)
713
                    menu_items[i]=mk.params.names[i];
714
 
715
                lcd_lines=new String[5];
716
                break;
717
 
718
            case STATEID_DEVICESELECT:
719
                menu_items=new String[bt_scanner.remote_device_count+1];
720
                for (int i=0;i<bt_scanner.remote_device_count;i++)
721
                    menu_items[i]=bt_scanner.remote_device_name[i];
722
                menu_items[bt_scanner.remote_device_count]="scan again";
723
                lcd_lines=new String[bt_scanner.remote_device_count+1];
724
                break;
725
 
726
            case STATEID_MAINMENU:
727
                menu_items=main_menu_items;
728
                lcd_lines=new String[menu_items.length];
729
                break;
730
 
731
            }
732
 
733
        // switch state
734
        state=next_state;
735
    }
736
 
737
 
738
    public void keyReleased(int keyCode)
739
    {
740
 
741
        switch(state)
742
            {
743
            case STATEID_MOTORTEST:
744
                act_motor_increase=0;
745
                break;
746
 
747
            case STATEID_KEYCONTROL:
748
                if (keyCode==KEY_POUND)
749
                    keycontrol_exit &= 255^1;
750
                else
751
                if (keyCode==KEY_STAR)
752
                    keycontrol_exit &= 255^2;
753
                else
754
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM8))
755
                    keycontrol_bitfield[0]&=255^( 1<<(keyCode-this.KEY_NUM0));
756
                else
757
                    if ((keyCode >= this.KEY_NUM8) && (keyCode <= this.KEY_NUM9))
758
                        keycontrol_bitfield[1]&=255^( 1<<(keyCode-this.KEY_NUM8));
759
                else
760
                    switch (getGameAction (keyCode))
761
                            {
762
                            case UP:
763
                                keycontrol_bitfield[1]&=255^4;
764
                                break;
765
 
766
                            case DOWN:
767
                                keycontrol_bitfield[1]&=255^8;
768
                                break;
769
 
770
 
771
                            case LEFT:
772
                                keycontrol_bitfield[1]&=255^16;
773
                                break;
774
 
775
                            case RIGHT:
776
                                keycontrol_bitfield[1]&=255^32;
777
                                break;
778
 
779
                            case FIRE:
780
                                keycontrol_bitfield[1]&=255^64;
781
                                break;
782
 
783
 
784
                            }
785
                mk.send_keys(keycontrol_bitfield);
786
                break;
787
            }
788
 
789
    }
790
 
791
 
792
    byte keycontrol_exit=0;
793
 
794
    public final static int[] keycontrol_bitfield={0,0};
795
 
59 ligi 796
 
797
    public void pointerPressed (int pointer_x, int pointer_y)
798
    {
799
        if (pointer_x<this.getWidth()/2)
800
            {
801
                if (state==STATEID_EDIT_PARAMS)
802
                    {
803
                        chg_state(STATEID_HANDLE_PARAMS);
804
                        return;
805
                    }
806
 
807
                else
808
                    if (state!=STATEID_KEYCONTROL)
809
                        {
810
                            chg_state(STATEID_MAINMENU);
811
                            return;
812
                        }
813
            }
814
        else
815
            {
816
                fullscreen=!fullscreen;
817
                setFullScreenMode(fullscreen);
818
            }
819
 
820
    }
821
 
4 ligi 822
    public void keyPressed(int keyCode)
823
    {
824
 
825
        if (keyCode==KEY_STAR)
826
            {
827
                if (state==STATEID_EDIT_PARAMS)
828
                    {
829
                        chg_state(STATEID_HANDLE_PARAMS);
830
                        return;
831
                    }
832
                else
833
                    if (state!=STATEID_KEYCONTROL)
834
                        {
835
                        chg_state(STATEID_MAINMENU);
836
                        return;
837
                        }
838
 
839
            }
840
        if ((keyCode==KEY_POUND)&&(state!=STATEID_KEYCONTROL))
841
            {
842
                fullscreen=!fullscreen;
843
                setFullScreenMode(fullscreen);
844
                return;
845
            }
846
        switch(state)
847
            {
848
            case STATEID_KEYCONTROL:
849
                if (keyCode==KEY_POUND)
850
                    keycontrol_exit |= 1;
851
                else
852
                if (keyCode==KEY_STAR)
853
                    keycontrol_exit |= 2;
854
                else
855
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM8))
856
                    keycontrol_bitfield[0]|=1<<(keyCode-this.KEY_NUM0);
857
                else
858
                if ((keyCode >= this.KEY_NUM8) && (keyCode <= this.KEY_NUM9))
859
                    keycontrol_bitfield[1]|=1<<(keyCode-this.KEY_NUM8);
860
 
861
                else
862
                    switch (getGameAction (keyCode))
863
                            {
864
                            case UP:
865
                                keycontrol_bitfield[1]|=4;
866
                                break;
867
 
868
                            case DOWN:
869
                                keycontrol_bitfield[1]|=8;
870
                                break;
871
 
872
 
873
                            case LEFT:
874
                                keycontrol_bitfield[1]|=16;
875
                                break;
876
 
877
                            case RIGHT:
878
                                keycontrol_bitfield[1]|=32;
879
                                break;
880
 
881
                            case FIRE:
882
                                keycontrol_bitfield[1]|=64;
883
                                break;
884
 
885
                            }
886
                if (keycontrol_exit==3)
887
                    chg_state(STATEID_MAINMENU);
888
                else
889
                    mk.send_keys(keycontrol_bitfield);
890
                break;
891
 
892
 
893
            case STATEID_MOTORTEST:
894
                switch (getGameAction (keyCode))
895
                            {
896
                            case UP:
897
                                act_motor_increase=-1;
898
                                break;
899
 
900
                            case DOWN:
901
                                act_motor_increase=1;
902
                                break;
903
 
904
                            case FIRE:
905
                                motor_test_sel_all=!motor_test_sel_all;
906
                                break;
907
 
908
                            case LEFT:
909
                                act_motor--;
910
                                if (act_motor<0) {act_motor=0; chg_state(STATEID_MAINMENU); }
911
                                break;
912
 
913
                            case RIGHT:
914
                                act_motor++;
915
                                act_motor%=4;
916
                                break;
917
                            }
918
 
919
                break;
920
            case STATEID_HANDLE_PARAMS:
921
                if ( getGameAction (keyCode)==FIRE )
922
                    switch(act_menu_select)
923
                        {
924
                        case 0:
925
                            mk.write_params();
926
                        default:
927
                            chg_state(STATEID_MAINMENU);
928
                        }
929
                else
930
                    menu_keypress(keyCode);
931
                break;
932
            case STATEID_MAINMENU:
933
                if ( getGameAction (keyCode)==FIRE )
934
                    switch(act_menu_select)
935
                        {
936
                        case MAINMENU_SETTINGS:
937
                            act_skin++;
938
                            act_skin=(byte)(act_skin%2);
939
                            load_images();
940
                            break;
941
 
942
                        case MAINMENU_KEYCONTROL:
943
                            chg_state(STATEID_KEYCONTROL);
944
                            break;
945
 
946
                        case MAINMENU_TELEMETRY :
947
                            chg_state(STATEID_FLIGHTVIEW);
948
                            break;
949
 
950
                        case  MAINMENU_MOTORTEST :
951
                            chg_state(STATEID_MOTORTEST);
952
                            break;
953
 
954
                        case MAINMENU_PARAMS :
955
                            chg_state(STATEID_SELECT_PARAMSET);
956
                            break;
957
 
958
 
959
                        case MAINMENU_PROXY:
960
                            mk.do_proxy("socket://192.168.1.42:2323");
961
                            break;
962
 
963
                        case MAINMENU_DEVICESELECT:
964
                            chg_state(STATEID_SCANNING);
965
                            break;
966
 
967
                        case MAINMENU_RAWDEBUG:
968
                            chg_state(STATEID_RAWDEBUG);
969
                            break;
970
 
971
                        case MAINMENU_QUIT:
972
                            // set quit Flag
973
                            quit=true;
974
                            break;
975
 
976
                        }
977
                else menu_keypress(keyCode);
978
                break;
979
 
980
            case STATEID_SELECT_PARAMSET:
981
                if ( getGameAction (keyCode)==FIRE )
982
                    {              
62 ligi 983
                        if ( mk.params.field[act_menu_select]!=null)
984
                            {
985
                                mk.params.act_paramset=act_menu_select;
986
                                chg_state(STATEID_EDIT_PARAMS);
987
                            }
4 ligi 988
                    }
989
                else menu_keypress(keyCode);
990
                break;
991
            case STATEID_DEVICESELECT:
992
                /*
993
                if ((keyCode >= this.KEY_NUM0) && (keyCode < this.KEY_NUM0+bt_scanner.remote_device_count))
994
                    {
995
                    connect_mk("btspp://"+bt_scanner.remote_device_mac[keyCode-this.KEY_NUM0] + ":1",bt_scanner.remote_device_name[keyCode-this.KEY_NUM0]);
996
                    chg_state(STATEID_MAINMENU);
997
                    }
998
                else
999
                */
1000
 
1001
                if ( getGameAction (keyCode)==FIRE )
1002
                    {              
1003
 
1004
                        if (bt_scanner.remote_device_count > act_menu_select)
1005
                            {
1006
                                connect_mk("btspp://"+bt_scanner.remote_device_mac[act_menu_select] + ":1",bt_scanner.remote_device_name[act_menu_select]);
1007
                                chg_state(STATEID_MAINMENU);
1008
                            }
1009
                        else
1010
                            chg_state(STATEID_SCANNING);
1011
                    }
1012
                else menu_keypress(keyCode);
1013
 
1014
                break;
1015
 
1016
            case STATEID_EDIT_PARAMS:
1017
                params_editor.keypress(keyCode,getGameAction (keyCode)) ;
1018
                break;
1019
 
1020
            case STATEID_FLIGHTVIEW:
1021
 
1022
                switch (getGameAction (keyCode))
1023
                    {
1024
                    case UP:
1025
                        mk.LCD.LCD_PREVPAGE();
1026
                        break;
1027
 
1028
                    case DOWN:
1029
                        mk.LCD.LCD_NEXTPAGE();
1030
                        break;
1031
 
1032
                    case LEFT:
1033
                        chg_state(STATEID_MAINMENU);
1034
                        break;
1035
 
1036
                    }
1037
                break;
1038
            }
1039
 
1040
 
1041
 
1042
    }
1043
 
1044
 
1045
 
1046
 
1047
 
1048
 
1049
 
1050
 
1051
}
1052
 
1053