Subversion Repositories Projects

Rev

Rev 266 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 266 Rev 381
Line 27... Line 27...
27
 
27
 
28
 
28
 
29
public class MKCommunicator
29
public class MKCommunicator
30
    implements Runnable,DUBwiseDefinitions
30
    implements Runnable,DUBwiseDefinitions
31
{
31
{
-
 
32
    public byte slave_addr=-1;
-
 
33
 
-
 
34
    public int primary_abo;
-
 
35
    public int secondary_abo;
-
 
36
    public int default_abo;
32
 
37
 
33
    public int angle_nick=-4242;
38
    public int angle_nick=-4242;
34
    public int angle_roll=-4242;
39
    public int angle_roll=-4242;
35
    public byte bl_retrys=0;
40
    public byte bl_retrys=0;
36
    public boolean init_bootloader=false;
-
 
37
 
41
 
38
    public boolean disconnect_notify=false;
42
    public boolean disconnect_notify=false;
39
 
43
 
40
    public byte lib_version_major=0;
44
    public byte lib_version_major=0;
41
    public byte lib_version_minor=7;
45
    public byte lib_version_minor=9;
42
 
46
 
43
    public byte last_navi_error=0;
47
    public byte last_navi_error=0;
44
 
48
 
-
 
49
    public boolean mixer_change_notify=false;
-
 
50
    public boolean mixer_change_success=false;
-
 
51
 
-
 
52
    public boolean change_notify=false;
-
 
53
    public boolean thread_running=true;
-
 
54
 
45
    public String lib_version_str()
55
    public String lib_version_str()
46
    {
56
    {
47
        return "V"+lib_version_major+"."+lib_version_minor;
57
        return "V"+lib_version_major+"."+lib_version_minor;
48
    }
58
    }
49
   
59
   
50
 
60
 
51
    public int AngleNick()
61
    public int AngleNick()
52
    {
62
    {
53
        if (ufo_prober.is_mk())
63
        if (is_mk())
54
            return angle_nick;
64
            return angle_nick;
55
        else    if (ufo_prober.is_navi())
65
        else    if (is_navi())
56
            return debug_data.analog[0];
66
            return debug_data.analog[0];
57
        return -1;
67
        return -1;
58
 
68
 
59
    }
69
    }
60
 
70
 
61
 
71
 
62
    public int Alt() // in dm
72
    public int Alt() // in dm
63
    {
73
    {
64
        int alt=0;
74
        int alt=0;
65
        if (ufo_prober.is_mk())
75
        if (is_mk())
66
            alt=debug_data.analog[5]/3;
76
            alt=debug_data.analog[5]/3;
67
        else   
77
        else   
68
            if (ufo_prober.is_navi())
78
            if (is_navi())
69
                alt=gps_position.Altimeter/3;
79
                alt=gps_position.Altimeter/3;
70
        if ( alt<0) alt=0;  // mk
80
        if ( alt<0) alt=0;  // mk
71
        if ( alt>20000) alt=0; // navi
81
        if ( alt>20000) alt=0; // navi
72
 
82
 
73
        return alt;
83
        return alt;
Line 78... Line 88...
78
    {
88
    {
79
        return "" + Alt()/10 + "m";
89
        return "" + Alt()/10 + "m";
80
    }
90
    }
81
    public int AngleRoll()
91
    public int AngleRoll()
82
    {
92
    {
83
        if (ufo_prober.is_mk())
93
        if (is_mk())
84
            return angle_roll;
94
            return angle_roll;
-
 
95
        else   
85
        else    if (ufo_prober.is_navi())
96
            if (is_navi())
86
           
97
           
87
            return debug_data.analog[1];
98
            return debug_data.analog[1];
88
        return -1;
99
        return -1;
89
       
100
       
90
    }
101
    }
Line 108... Line 119...
108
    //    public final static int DATA_IN_BUFF_SIZE=512;
119
    //    public final static int DATA_IN_BUFF_SIZE=512;
109
    public final static int DATA_IN_BUFF_SIZE=2048;
120
    public final static int DATA_IN_BUFF_SIZE=2048;
110
    //    public final static int DATA_IN_BUFF_SIZE=4096;
121
    //    public final static int DATA_IN_BUFF_SIZE=4096;
111
 
122
 
112
    public byte user_intent=0;
123
    public byte user_intent=0;
113
    public final static int[] crc16_table = {
-
 
114
        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
-
 
115
        0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
-
 
116
        0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
-
 
117
        0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
-
 
118
        0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
-
 
119
        0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
-
 
120
        0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
-
 
121
        0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
-
 
122
        0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
-
 
123
        0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
-
 
124
        0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
-
 
125
        0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
-
 
126
        0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
-
 
127
        0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
-
 
128
        0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
-
 
129
        0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
-
 
130
        0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
-
 
131
        0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
-
 
132
        0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
-
 
133
        0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
-
 
134
        0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
-
 
135
        0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
-
 
136
        0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
-
 
137
        0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
-
 
138
        0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
-
 
139
        0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
-
 
140
        0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
-
 
141
        0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
-
 
142
        0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
-
 
143
        0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
-
 
144
        0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
-
 
145
        0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
-
 
146
    };
-
 
147
 
124
 
148
    public void log(String str)
125
    public void log(String str)
149
    {
126
    {
150
//#ifdef android
127
//#ifdef android
151
        if (do_log)     Log.d("MK-Comm",str);
128
        if (do_log)     Log.d("MK-Comm",str);
152
//#endif
129
//#endif
153
//      canvas.debug.log(str);
130
//      canvas.debug.log(str);
154
        //      System.out.println(str);
131
        //      System.out.println(str);
155
    }
132
    }
156
 
133
 
157
    public int CRC16(int ch, int crc)
-
 
158
    {
-
 
159
        return crc16_table[((crc >> 8) ^ (ch)) & 0xFF] ^ (crc << 8);
-
 
160
    }
-
 
161
 
-
 
162
 
-
 
163
    public int conn_time_in_s()
134
    public int conn_time_in_s()
164
    {
135
    {
165
        if (connected)
136
        if (connected)
166
            return (int)((System.currentTimeMillis()-connection_start_time)/1000);
137
            return (int)((System.currentTimeMillis()-connection_start_time)/1000);
167
        else
138
        else
168
            return 0;
139
            return 0;
169
    }
140
    }
170
    public final static byte BOOTLOADER_STAGE_NONE=0;
-
 
171
    public final static byte BOOTLOADER_STAGE_GOT_MKBL=1;
-
 
172
 
141
 
-
 
142
 
173
    byte bootloader_stage= BOOTLOADER_STAGE_NONE;
143
    //    byte bootloader_stage= BOOTLOADER_STAGE_NONE;
174
 
144
 
175
    public MKLCD LCD;
145
    public MKLCD LCD;
176
    public MKVersion version;
146
    public MKVersion version;
177
    public MKDebugData debug_data;
147
    public MKDebugData debug_data;
178
 
148
 
Line 185... Line 155...
185
    public MKWatchDog watchdog;
155
    public MKWatchDog watchdog;
186
    public MKProxy proxy=null;
156
    public MKProxy proxy=null;
187
    public MKStatistics stats ;
157
    public MKStatistics stats ;
188
    //    public DUBwiseDebug debug;
158
    //    public DUBwiseDebug debug;
189
 
159
 
190
    public UFOProber    ufo_prober;
160
    //    public UFOProber      ufo_prober;
191
    public long connection_start_time=-1;
161
    public long connection_start_time=-1;
192
 
162
 
193
 
163
 
194
    public String error_str = null;
164
    public String error_str = null;
195
   
165
   
196
 
166
 
197
    public final static int FC_SLAVE_ADDR              = 'a'+1;
167
    public final static byte FC_SLAVE_ADDR              = 1;
198
    public final static int NAVI_SLAVE_ADDR            = 'a'+2;
168
    public final static byte NAVI_SLAVE_ADDR            = 2;
199
    public final static int MK3MAG_SLAVE_ADDR          = 'a'+3;
169
    public final static byte MK3MAG_SLAVE_ADDR          = 3;
-
 
170
    public final static byte FOLLOWME_SLAVE_ADDR        = 10;
-
 
171
    public final static byte RE_SLAVE_ADDR              = 23;
-
 
172
 
-
 
173
 
-
 
174
 
-
 
175
 
-
 
176
    public boolean is_navi()
-
 
177
    {
-
 
178
        return (slave_addr==NAVI_SLAVE_ADDR);
-
 
179
    }
-
 
180
 
-
 
181
 
-
 
182
    public boolean is_mk()
-
 
183
    {
-
 
184
        return (slave_addr==FC_SLAVE_ADDR);
-
 
185
    }
-
 
186
 
-
 
187
    public boolean is_mk3mag()
-
 
188
    {
-
 
189
        return (slave_addr==MK3MAG_SLAVE_ADDR);
-
 
190
    }
-
 
191
 
-
 
192
    public boolean is_rangeextender()
-
 
193
    {
-
 
194
        return (slave_addr==RE_SLAVE_ADDR);
-
 
195
    }
-
 
196
 
-
 
197
    public boolean is_followme()
-
 
198
    {
-
 
199
        return (slave_addr==FOLLOWME_SLAVE_ADDR);
-
 
200
    }
-
 
201
 
-
 
202
 
-
 
203
 
-
 
204
    public boolean is_incompatible()
-
 
205
    {
-
 
206
        switch (slave_addr)
-
 
207
            {
-
 
208
            case FC_SLAVE_ADDR:
-
 
209
            case NAVI_SLAVE_ADDR:
-
 
210
            case MK3MAG_SLAVE_ADDR:
-
 
211
            case FOLLOWME_SLAVE_ADDR:
-
 
212
            case RE_SLAVE_ADDR:
-
 
213
                return false;
-
 
214
            default:
-
 
215
                return true;
-
 
216
            }
-
 
217
    }
200
 
218
 
-
 
219
    public String extended_name()
-
 
220
    {
-
 
221
        switch (slave_addr)
-
 
222
            {
-
 
223
            case -1:
-
 
224
                return "No Device";
-
 
225
 
-
 
226
            case FC_SLAVE_ADDR:
-
 
227
                return "MK-Connection";
201
 
228
 
-
 
229
            case NAVI_SLAVE_ADDR:
-
 
230
                return "Navi-Connection";
202
 
231
 
-
 
232
            case MK3MAG_SLAVE_ADDR:
-
 
233
                return "MK3MAG-Connection";
-
 
234
 
-
 
235
            case FOLLOWME_SLAVE_ADDR:
-
 
236
                return "FollowMe Connection";
-
 
237
            case RE_SLAVE_ADDR:
-
 
238
                return "RangeExtender Connection";
-
 
239
 
-
 
240
            default:
-
 
241
                return "Incompatible Device";
-
 
242
            }
-
 
243
    }
203
 
244
 
204
    /****************** Section: private Attributes **********************************************/
245
    /****************** Section: private Attributes **********************************************/
205
//#ifdef j2me
246
//#ifdef j2me
206
//#    private javax.microedition.io.StreamConnection connection;
247
//#    private javax.microedition.io.StreamConnection connection;
207
//#endif
248
//#endif
Line 246... Line 287...
246
        LCD= new MKLCD(this);
287
        LCD= new MKLCD(this);
247
        watchdog=new MKWatchDog(this);
288
        watchdog=new MKWatchDog(this);
248
        gps_position=new MKGPSPosition();
289
        gps_position=new MKGPSPosition();
249
        stats = new MKStatistics();
290
        stats = new MKStatistics();
250
        proxy =new MKProxy(this);
291
        proxy =new MKProxy(this);
251
        ufo_prober=new UFOProber();
292
        //      ufo_prober=new UFOProber();
252
        new Thread( this ).start(); // fire up main Thread 
293
        new Thread( this ).start(); // fire up main Thread 
253
    }
294
    }
254
 
295
 
255
 
296
 
256
 
297
 
Line 379... Line 420...
379
       
420
       
380
        return out_arr;
421
        return out_arr;
381
 
422
 
382
    }
423
    }
383
 
424
 
-
 
425
 
-
 
426
 
384
    public void wait4send()
427
    public void wait4send()
385
    {
428
    {
386
        while(sending) //||recieving)
429
        while(sending) //||recieving)
387
            sleep(50);
430
            sleep(50);
388
    }
431
    }
Line 418... Line 461...
418
    {
461
    {
419
        stats.motortest_request_count++;
462
        stats.motortest_request_count++;
420
        send_command(FC_SLAVE_ADDR,'t',params);
463
        send_command(FC_SLAVE_ADDR,'t',params);
421
    }
464
    }
422
 
465
 
-
 
466
    public void set_mixer_table(int[] params)
-
 
467
    {
-
 
468
       
-
 
469
        send_command(FC_SLAVE_ADDR,'m',params);
-
 
470
    }
-
 
471
 
-
 
472
 
-
 
473
    public long lon;
-
 
474
    public  long lat;
-
 
475
 
-
 
476
    public void send_follow_me(int time)
-
 
477
    {
-
 
478
        long alt=0;
-
 
479
 
-
 
480
        int[] params=new int[29];
-
 
481
 
-
 
482
 
-
 
483
        params[0]=(int)((lon)&0xFF) ;
-
 
484
        params[1]=(int)((lon>>8)&0xFF) ;
-
 
485
        params[2]=(int)((lon>>16)&0xFF) ;
-
 
486
        params[3]=(int)((lon>>24)&0xFF)         ;
-
 
487
 
-
 
488
        params[4]=(int)((lat)&0xFF) ;
-
 
489
        params[5]=(int)((lat>>8)&0xFF) ;
-
 
490
        params[6]=(int)((lat>>16)&0xFF) ;
-
 
491
        params[7]=(int)((lat>>24)&0xFF) ;
-
 
492
 
-
 
493
        params[8]=(int)((alt)&0xFF );
-
 
494
        params[9]=(int)((alt>>8)&0xFF );
-
 
495
        params[10]=(int)((alt>>16)&0xFF);
-
 
496
        params[11]=(int)((alt>>24)&0xFF );
-
 
497
 
-
 
498
        params[12]=2;  // newdata
-
 
499
 
-
 
500
        params[13]=0;  // heading
-
 
501
        params[14]=0;  // heading
-
 
502
       
-
 
503
        params[15]=1;  // tolerance
-
 
504
 
-
 
505
        params[16]=time;  // time
-
 
506
        params[17]=0;  // event
-
 
507
 
-
 
508
        send_command(NAVI_SLAVE_ADDR,'s',params);
-
 
509
    }
-
 
510
 
423
 
511
 
424
    public void send_extern_control()
512
    public void send_extern_control()
425
    {
513
    {
426
 
514
 
427
        stats.external_control_request_count++;
515
        stats.external_control_request_count++;
Line 504... Line 592...
504
       
592
       
505
        switch_todo();
593
        switch_todo();
506
 
594
 
507
    }
595
    }
508
 
596
 
509
    public String[] flash_msgs;
-
 
-
 
597
 
510
        int msg_pos=0;
598
        int msg_pos=0;
511
 
599
 
512
 
600
 
513
    public boolean bootloader_intension_flash=false;
601
    //    public boolean bootloader_intension_flash=false;
514
 
602
 
515
    public boolean bootloader_finish_ok=false;
603
    //    public boolean bootloader_finish_ok=false;
516
 
604
 
517
    public void jump_bootloader()
-
 
518
    {
-
 
519
 
605
 
-
 
606
    //    public void jump_bootloader()
-
 
607
    // {
-
 
608
        /*
520
        bootloader_finish_ok=false;
609
        bootloader_finish_ok=false;
521
        msg_pos=0;
610
        msg_pos=0;
522
        bootloader_stage= BOOTLOADER_STAGE_NONE;
611
        bootloader_stage= BOOTLOADER_STAGE_NONE;
523
        flash_msgs=new String[100];
612
        //   flash_msgs=new String[100];
524
        flash_msgs[msg_pos++]="Initiializing Bootloader";
613
        //   flash_msgs[msg_pos++]="Initiializing Bootloader";
525
        wait4send();
614
        wait4send();
526
        sending=true;
615
        sending=true;
527
       
616
       
528
        try
617
        try
529
            {
618
            {
Line 554... Line 643...
554
                flash_msgs[msg_pos++]="Exception:" +e.getMessage() ;
643
                flash_msgs[msg_pos++]="Exception:" +e.getMessage() ;
555
                flash_msgs[msg_pos++]=e.toString() ;
644
                flash_msgs[msg_pos++]=e.toString() ;
556
        }
645
        }
557
 
646
 
558
        new Thread( this ).start(); // fire up main Thread 
647
        new Thread( this ).start(); // fire up main Thread
-
 
648
        */
559
    }
649
    //    }
560
 
650
 
561
 
651
 
562
    public void get_error_str()
652
    public void get_error_str()
563
    {
653
    {
564
        send_command(NAVI_SLAVE_ADDR,'e');
654
        send_command(NAVI_SLAVE_ADDR,'e');
Line 613... Line 703...
613
    {
703
    {
614
//      char[] send_buff=new char[5 + (params.length/3 + (params.length%3==0?0:1) )*4]; // 5=1*start_char+1*addr+1*cmd+2*crc
704
//      char[] send_buff=new char[5 + (params.length/3 + (params.length%3==0?0:1) )*4]; // 5=1*start_char+1*addr+1*cmd+2*crc
615
 
705
 
616
        byte[] send_buff=new byte[3 + (params.length/3 + (params.length%3==0?0:1) )*4]; // 5=1*start_char+1*addr+1*cmd+2*crc
706
        byte[] send_buff=new byte[3 + (params.length/3 + (params.length%3==0?0:1) )*4]; // 5=1*start_char+1*addr+1*cmd+2*crc
617
        send_buff[0]='#';
707
        send_buff[0]='#';
618
        send_buff[1]=modul;
708
        send_buff[1]=(byte)(modul+'a');
619
        send_buff[2]=(byte)cmd;
709
        send_buff[2]=(byte)cmd;
620
       
710
       
621
        for(int param_pos=0;param_pos<(params.length/3 + (params.length%3==0?0:1)) ;param_pos++)
711
        for(int param_pos=0;param_pos<(params.length/3 + (params.length%3==0?0:1)) ;param_pos++)
622
            {
712
            {
623
                int a = (param_pos*3<params.length)?params[param_pos*3]:0;
713
                int a = (param_pos*3<params.length)?params[param_pos*3]:0;
Line 668... Line 758...
668
        send_command_nocheck((byte)modul,cmd,params);
758
        send_command_nocheck((byte)modul,cmd,params);
669
        sending=false;
759
        sending=false;
670
    }
760
    }
671
 
761
 
672
 
762
 
673
    public int slave_addr=-1;
-
 
-
 
763
 
674
 
764
 
675
 
765
 
676
    public int UBatt()
766
    public int UBatt()
677
    {
767
    {
-
 
768
 
-
 
769
        switch (slave_addr)
-
 
770
            {
678
        if (ufo_prober.is_mk())
771
            case FC_SLAVE_ADDR:
679
            return debug_data.UBatt();
772
                return debug_data.analog[8];
-
 
773
 
680
        else  if (ufo_prober.is_navi())
774
            case NAVI_SLAVE_ADDR:
681
            return gps_position.UBatt;
775
                return gps_position.UBatt;
-
 
776
 
-
 
777
            case FOLLOWME_SLAVE_ADDR:
-
 
778
                return debug_data.analog[8];
-
 
779
 
-
 
780
            default:
-
 
781
                return -1; // No Info
-
 
782
            }
-
 
783
 
-
 
784
    }
-
 
785
 
-
 
786
 
-
 
787
 
-
 
788
    public int SatsInUse()
-
 
789
    {
-
 
790
 
-
 
791
        switch (slave_addr)
-
 
792
            {
-
 
793
            case NAVI_SLAVE_ADDR:
-
 
794
                return gps_position.SatsInUse;
-
 
795
 
-
 
796
            case FOLLOWME_SLAVE_ADDR:
-
 
797
                return debug_data.analog[12];
682
       
798
 
-
 
799
            default:
683
        return -1;
800
                return -1; // No Info
-
 
801
            }
684
 
802
 
685
    }
803
    }
686
 
804
 
687
 
805
 
688
 
806
 
689
    public int SenderOkay()
807
    public int SenderOkay()
690
    {
808
    {
691
        if (ufo_prober.is_mk())
809
        switch (slave_addr)
692
            return debug_data.SenderOkay();
810
            {
693
        else  if (ufo_prober.is_navi())
811
            case FC_SLAVE_ADDR:
694
            return gps_position.SenderOkay;
812
                return debug_data.analog[10];
695
       
813
 
-
 
814
            case NAVI_SLAVE_ADDR:
696
        return -1;
815
                return gps_position.SenderOkay;
697
 
816
 
-
 
817
            default:
-
 
818
                return -1; // No Info
-
 
819
            }
698
    }
820
    }
699
 
821
 
700
 
822
 
701
    public    int[][] debug_buff=null;
823
    public    int[][] debug_buff=null;
702
    public    int     debug_buff_off=0;
824
    public    int     debug_buff_off=0;
Line 736... Line 858...
736
    }
858
    }
737
 
859
 
738
    public void process_data(byte[] data,int len)
860
    public void process_data(byte[] data,int len)
739
    {
861
    {
740
 
862
 
-
 
863
        // check crc
-
 
864
        int tmp_crc=0;
-
 
865
        for ( int i=0 ; i<len-2 ; i++)
-
 
866
            tmp_crc+=(int)data[i];
-
 
867
 
-
 
868
        tmp_crc%=4096;
-
 
869
       
-
 
870
        if (!((data[len-2]==(char)(tmp_crc/64 + '='))
-
 
871
            &&
-
 
872
              (data[len-1]==(char)(tmp_crc%64 + '='))))
-
 
873
            {
-
 
874
                stats.crc_fail++;
-
 
875
                return;
-
 
876
            }
-
 
877
        // end of c
-
 
878
 
741
        slave_addr=data[1];
879
        //      slave_addr=data[1];
742
        log("command " +(char)data[2] );               
880
        log("command " +(char)data[2] );               
-
 
881
 
-
 
882
 
-
 
883
        int[] decoded_data=Decode64(data,3,len-5);
-
 
884
 
743
        switch((char)data[2])
885
        switch((char)data[2])
744
            {
886
            {
745
 
887
 
746
            case 'A': // debug Data Names
888
            case 'A': // debug Data Names
747
                stats.debug_names_count++;
889
                stats.debug_names_count++;
748
                debug_data.set_names_by_mk_data(Decode64(data,3,len-3));
890
                debug_data.set_names_by_mk_data(decoded_data);
749
                break;
891
                break;
750
 
892
 
751
            case 'B': // external_control confirm frames
893
            case 'B': // external_control confirm frames
752
                stats.external_control_confirm_frame_count++;
894
                stats.external_control_confirm_frame_count++;
753
                break;
895
                break;
754
 
896
 
755
            case 'L': // LCD Data
897
            case 'L': // LCD Data
756
                stats.lcd_data_count++;
898
                stats.lcd_data_count++;
757
                LCD.handle_lcd_data(Decode64(data,3,len-3));
899
                LCD.handle_lcd_data(decoded_data);
758
 
900
 
759
                break;
901
                break;
760
 
902
 
761
            case 'D': // debug Data
903
            case 'D': // debug Data
762
                log("got debug data");
904
                log("got debug data");
763
                stats.debug_data_count++;
905
                stats.debug_data_count++;
764
                debug_data.set_by_mk_data(Decode64(data,3,len-3),version);
906
                debug_data.set_by_mk_data(decoded_data,version);
765
 
907
 
766
                if (ufo_prober.is_mk())
908
                if (is_mk())
767
                    {
909
                    {
768
                        stats.process_mkflags(debug_data.motor_val(0)); // TODO remove dirty hack
910
                        stats.process_mkflags(debug_data.motor_val(0)); // TODO remove dirty hack
769
                        stats.process_alt(Alt());
911
                        stats.process_alt(Alt());
770
                    }
912
                    }
771
                if (debug_buff_targets!=null)
913
                if (debug_buff_targets!=null)
Line 781... Line 923...
781
                log("processed debug data");
923
                log("processed debug data");
782
                break;
924
                break;
783
               
925
               
784
            case 'V': // Version Info
926
            case 'V': // Version Info
785
                stats.version_data_count++;
927
                stats.version_data_count++;
786
                slave_addr=data[1];
928
                if (slave_addr!=data[1]-'a')
-
 
929
                    {
-
 
930
                        slave_addr=(byte)(data[1]-'a');
-
 
931
                        change_notify=true;
-
 
932
                    }
787
 
933
 
-
 
934
                /*
788
                switch(slave_addr)
935
                switch(slave_addr)
789
                    {
936
                    {
790
                    case FC_SLAVE_ADDR:
937
                    case FC_SLAVE_ADDR:
791
                        ufo_prober.set_to_mk();
938
                        ufo_prober.set_to_mk();
792
                        break;
939
                        break;
Line 794... Line 941...
794
                    case NAVI_SLAVE_ADDR:
941
                    case NAVI_SLAVE_ADDR:
795
                        ufo_prober.set_to_navi();
942
                        ufo_prober.set_to_navi();
796
                        break;
943
                        break;
797
 
944
 
798
                    case MK3MAG_SLAVE_ADDR:
945
                    case MK3MAG_SLAVE_ADDR:
799
                        //                      ufo_prober.set_to_mk();
-
 
800
                        ufo_prober.set_to_mk3mag();
946
                        ufo_prober.set_to_mk3mag();
801
                        break;
947
                        break;
802
 
948
 
-
 
949
                    case RE_SLAVE_ADDR:
-
 
950
                        ufo_prober.set_to_rangeextender();
-
 
951
                        break;
-
 
952
 
803
                    default:
953
                    default:
804
                        ufo_prober.set_to_incompatible();
954
                        ufo_prober.set_to_incompatible();
805
                        break;
955
                        break;
806
                    }
956
                    }
-
 
957
                */
807
 
958
 
808
 
-
 
809
                version.set_by_mk_data(Decode64(data,3,len-3));
959
                version.set_by_mk_data(decoded_data);
810
                break;
960
                break;
811
 
961
 
812
            case 'w':
962
            case 'w':
813
                int[] dec=Decode64(data,3,len-3);
-
 
814
                angle_nick=MKHelper.parse_signed_int_2(dec[0],dec[1]);
963
                angle_nick=MKHelper.parse_signed_int_2(decoded_data[0],decoded_data[1]);
815
                angle_roll=MKHelper.parse_signed_int_2(dec[2],dec[3]);
964
                angle_roll=MKHelper.parse_signed_int_2(decoded_data[2],decoded_data[3]);
816
                stats.angle_data_count++;
965
                stats.angle_data_count++;
817
 
-
 
818
                break;
966
                break;
819
 
967
 
820
 
968
 
821
            case 'Q':
969
            case 'Q':
822
                if (ufo_prober.is_mk())
970
                if (is_mk())
823
                    {
971
                    {
824
                        stats.params_data_count++;
972
                        stats.params_data_count++;
825
                        params.set_by_mk_data(Decode64(data,3,len-3));
973
                        params.set_by_mk_data(decoded_data);
826
                    }
974
                    }
827
                break;
975
                break;
828
               
976
 
-
 
977
            case 'M':
-
 
978
                mixer_change_notify=true;
-
 
979
                mixer_change_success=(decoded_data[0]==1);
-
 
980
                break;
829
            case 'P':
981
            case 'P':
830
                stats.stick_data_count++;
982
                stats.stick_data_count++;
831
                stick_data.set_by_mk_data(Decode64(data,3,20));
983
                stick_data.set_by_mk_data(decoded_data);
832
                break;
984
                break;
833
 
985
 
834
 
986
 
835
            case 'E':
-
 
836
                int[] dec_data=Decode64(data,3,len-3);
987
            case 'E':  // Error Str from Navi
837
                error_str="";
988
                error_str="";
838
                for(int foo=0;foo<20;foo++)
989
                for(int foo=0;foo<20;foo++)
839
                    if (dec_data[foo]!=0)
990
                    if (decoded_data[foo]!=0)
840
                        error_str+=(char)dec_data[foo];
991
                        error_str+=(char)decoded_data[foo];
841
                break;
992
                break;
842
 
993
 
843
 
994
               
844
            case 'O':
995
            case 'O': // OSD Values Str from Navi
845
                stats.navi_data_count++;
996
                stats.navi_data_count++;
846
                log("got navi data(" + len +"):");
997
                log("got navi data(" + len +"):");
847
               
998
               
848
                gps_position.set_by_mk_data(Decode64(data,3,len-3),version);
999
                gps_position.set_by_mk_data(decoded_data,version);
849
 
1000
 
850
                stats.process_mkflags(gps_position.MKFlags);
1001
                stats.process_mkflags(gps_position.MKFlags);
851
                stats.process_compas(gps_position.CompasHeading);
1002
                stats.process_compas(gps_position.CompasHeading);
852
                stats.process_speed(gps_position.GroundSpeed);
1003
                stats.process_speed(gps_position.GroundSpeed);
853
                stats.process_alt(Alt());
1004
                stats.process_alt(Alt());
854
                log("long:" + gps_position.Longitude);
-
 
855
                log("lat:" + gps_position.Latitude);
-
 
856
 
1005
 
857
                break;
1006
                break;
858
 
1007
 
859
 
1008
 
860
                // Error from Navi
-
 
861
 
-
 
862
 
-
 
863
            default:
1009
            default:
864
                stats.other_data_count++;
1010
                stats.other_data_count++;
865
                break;
1011
                break;
866
 
1012
 
867
            }
1013
            }
Line 874... Line 1020...
874
 
1020
 
875
    public void close_connections(boolean force)
1021
    public void close_connections(boolean force)
876
    {
1022
    {
877
 
1023
 
878
        //      if ((!force)&&root.canvas.do_vibra) root.vibrate(500);
1024
        //      if ((!force)&&root.canvas.do_vibra) root.vibrate(500);
879
        force_disconnect=force;
1025
        force_disconnect|=force;
880
        try{ reader.close(); }
1026
        try{ reader.close(); }
881
        catch (Exception inner_ex) { }
1027
        catch (Exception inner_ex) { }
882
 
1028
 
883
        try{ writer.close(); }
1029
        try{ writer.close(); }
884
        catch (Exception inner_ex) { }
1030
        catch (Exception inner_ex) { }
885
       
1031
       
886
//#ifdef j2me
1032
//#ifdef j2me
887
//#     try{ connection.close(); }
1033
//#     try{ connection.close(); }
888
//#     catch (Exception inner_ex) { }
1034
//#     catch (Exception inner_ex) { }
889
//#endif
1035
//#endif
-
 
1036
        slave_addr=-1;
890
        ufo_prober.set_to_none();
1037
        //      ufo_prober.set_to_none();
891
        stats.reset();
1038
        stats.reset();
892
        connected=false;
1039
        connected=false;
893
        version.reset();
1040
        version.reset();
-
 
1041
        //      if (bootloader_stage==BOOTLOADER_STAGE_NONE)
894
        disconnect_notify=true;
1042
        disconnect_notify=true;
895
    }
1043
    }
896
 
1044
 
-
 
1045
 
-
 
1046
    int last_avr_sig=-1;
897
    // Thread to recieve data from Connection
1047
    // Thread to recieve data from Connection
898
    public void run()
1048
    public void run()
899
    {
1049
    {
900
        boolean sigfail=false;
1050
        //      boolean sigfail=false;
901
        if (bootloader_stage==BOOTLOADER_STAGE_GOT_MKBL)
1051
        /*      if (bootloader_stage==BOOTLOADER_STAGE_GOT_MKBL)
902
            {
1052
            {
903
            try {
1053
            try {
904
                        flash_msgs[msg_pos++]="reading avr_sig";
-
 
905
 
-
 
906
                        writer.write( 't');
-
 
907
                        writer.flush();
-
 
908
               
-
 
909
                        int avr_sig=reader.read();
-
 
910
 
1054
 
911
                        //while (avr_sig==63)
-
 
912
                        //    avr_sig=reader.read();
-
 
913
 
-
 
914
                        flash_msgs[msg_pos++]="got avr sig " + avr_sig;
-
 
915
 
-
 
916
                        int avrsig_suff=reader.read();
-
 
917
                        if (avrsig_suff!=0)
-
 
918
                            throw new Exception("val after avrsig is" +avrsig_suff +"should b 0");
-
 
919
 
-
 
920
                        if ((avr_sig!=0x74)&&(avr_sig!=224)&&(avr_sig!=120))
-
 
921
                            {
-
 
922
                                sigfail=true;
-
 
923
                                throw new Exception("avr sig" + avr_sig + " unknown");
-
 
924
                            }
-
 
925
                   
-
 
926
                        writer.write('T');
-
 
927
                        //              writer.flush();
-
 
928
                        writer.write(avr_sig);   // set devicetyp = 0x74 oder 0x76  
-
 
929
                        writer.flush();
-
 
930
 
-
 
931
                        if (reader.read()!=0x0d)
-
 
932
                            throw new Exception("cant get buffer size");
-
 
933
                       
-
 
934
                        writer.write('V');
-
 
935
                        writer.flush();
-
 
936
 
-
 
937
                        int bl_version_major=reader.read();
-
 
938
                        int bl_version_minor=reader.read();
-
 
939
 
-
 
940
                        flash_msgs[msg_pos++]="BL Version " + bl_version_major+"."+bl_version_minor;
-
 
941
                       
-
 
942
                       
-
 
943
                        writer.write('b');
-
 
944
                        writer.flush();
-
 
945
 
-
 
946
                        if (reader.read()!='Y')
-
 
947
                            throw new Exception("cant get buffer size");
-
 
948
 
-
 
949
                        int send_buff_size1=reader.read();
-
 
950
                        int send_buff_size2=reader.read();
-
 
951
                        int send_buff_size=send_buff_size1*0x100+send_buff_size2;
-
 
952
                       
-
 
953
                        flash_msgs[msg_pos++]="BUFF Size:" + send_buff_size;
-
 
954
                        //                      if (send_buff_size>128)
1055
                        //                      if (send_buff_size>128)
955
                        //    send_buff_size=128;
1056
                        //    send_buff_size=128;
956
 
1057
 
957
                        //                      if (!bootloader_intension
1058
                        //                      if (!bootloader_intension
958
                            if (bootloader_intension_flash)
1059
                        if (bootloader_intension_flash)
959
                            {          
1060
                            {          
960
                               
1061
                               
961
                                byte[] flash_buff =new byte[send_buff_size]; ///!!
1062
                                byte[] flash_buff =new byte[send_buff_size]; ///!!
962
                               
1063
                               
963
                                String firmware_filename=(avr_sig==224)?"/navi.bin":((avr_sig==120)?"/mk3.bin":"/fc.bin");
1064
                                String firmware_filename=(avr_sig==224)?"/navi.bin":((avr_sig==120)?"/mk3.bin":"/fc.bin");
Line 975... Line 1076...
975
                                                                   
1076
                                                                   
976
                                firmware_size= ((int)in.read()<<24) |((int)in.read()<<16) | ((int)in.read()<<8) | ((int)in.read()&0xff) ;
1077
                                firmware_size= ((int)in.read()<<24) |((int)in.read()<<16) | ((int)in.read()<<8) | ((int)in.read()&0xff) ;
977
                                }
1078
                                }
978
                                catch (Exception e) {               throw new Exception(" .. cant read size");                  }
1079
                                catch (Exception e) {               throw new Exception(" .. cant read size");                  }
979
                               
1080
                               
980
                               
-
 
981
                               
-
 
982
                                int blocks2write=((firmware_size/send_buff_size));
1081
                                int blocks2write=((firmware_size/send_buff_size));
983
                                flash_msgs[msg_pos++]=".. open("+blocks2write+" blocks," + firmware_size + "bytes)";
1082
                                flash_msgs[msg_pos++]=".. open("+blocks2write+" blocks," + firmware_size + "bytes)";
984
                               
1083
                               
985
                               
1084
                               
986
                               
-
 
987
                                //                      if (true) throw new Exception("before erasing");
1085
                                //                      if (true) throw new Exception("before erasing");
988
                               
1086
                               
989
                                //      if (true) throw new Exception("before erasing" );               
1087
                                //      if (true) throw new Exception("before erasing" );              
990
                               
1088
                               
991
                                flash_msgs[msg_pos++]="Erasing Flash ..";
1089
                                flash_msgs[msg_pos++]="Erasing Flash ..";
Line 1050... Line 1148...
1050
                                       
1148
                                       
1051
                                       
1149
                                       
1052
                                       
1150
                                       
1053
                                        //                             sleep(1000);
1151
                                        //                             sleep(1000);
1054
                                    }
1152
                                    }
-
 
1153
 
-
 
1154
 
-
 
1155
        */
1055
                                //              flash_msgs[msg_pos]="bl:" + block + "/" + blocks2write + " si:"+hex_bytes_read ;
1156
                                //              flash_msgs[msg_pos]="bl:" + block + "/" + blocks2write + " si:"+hex_bytes_read ;
1056
                                /*
1157
                                /*
1057
                                 
1158
                                 
1058
                        int inp=0;
1159
                        int inp=0;
1059
                        int block=0;
1160
                        int block=0;
Line 1117... Line 1218...
1117
                                       
1218
                                       
1118
                                    }
1219
                                    }
1119
 
1220
 
1120
                            }
1221
                            }
1121
                        */
1222
                        */
-
 
1223
 
-
 
1224
 
-
 
1225
 
-
 
1226
        /**
1122
                        flash_msgs[++msg_pos]="written last block ";
1227
                        flash_msgs[++msg_pos]="written last block ";
1123
                        msg_pos++;
1228
                        msg_pos++;
1124
                        flash_buff=null;
1229
                        flash_buff=null;
1125
 
1230
 
1126
                        ufo_prober.set_to_none();
1231
                        ufo_prober.set_to_none();
Line 1184... Line 1289...
1184
 
1289
 
1185
 
1290
 
1186
            sending=false;
1291
            sending=false;
1187
            }
1292
            }
1188
 
1293
 
-
 
1294
        **/
1189
 
1295
 
1190
        byte[] data_set=new byte[1024];
1296
        byte[] data_set=new byte[1024];
1191
        int data_set_pos=0;
1297
        int data_set_pos=0;
1192
 
1298
 
1193
 
-
 
1194
 
-
 
1195
 
-
 
1196
        byte[] data_in_buff=new byte[DATA_IN_BUFF_SIZE];
1299
        byte[] data_in_buff=new byte[DATA_IN_BUFF_SIZE];
1197
       
1300
       
1198
        int input;
1301
        int input;
1199
        int pos=0;
1302
        int pos=0;
1200
 
1303
 
1201
 
-
 
1202
 
-
 
1203
 
-
 
1204
 
-
 
1205
        log("Thread started");
1304
        log("Thread started");
1206
        while(true)
1305
        while(thread_running)
1207
            {
1306
            {
1208
 
1307
 
1209
                if (!connected)
1308
                if (!connected)
1210
                    {
1309
                    {
-
 
1310
                        sleep(10);
1211
                        if (!force_disconnect) connect();
1311
                        if (!force_disconnect) connect();
1212
                        sleep(100);
-
 
1213
                    }
1312
                    }
1214
                else
1313
                else
1215
                    try{
1314
                    try{
1216
                       
1315
                       
1217
                        /*             
1316
                        /*             
Line 1273... Line 1372...
1273
                                                */
1372
                                                */
1274
                                                data_set_pos=0;
1373
                                                data_set_pos=0;
1275
 
1374
 
1276
                                            }
1375
                                            }
1277
                                        else
1376
                                        else
1278
                                            {
1377
                                            // {
1279
                                                data_set[data_set_pos++]=data_in_buff[pos];
1378
                                                data_set[data_set_pos++]=data_in_buff[pos];
1280
                                               
1379
                                               
1281
                                               
1380
                                                /*
1282
 
1381
 
1283
                                                if ( (data_set_pos>4) && (data_set[data_set_pos-4]==(byte)'M') && (data_set[data_set_pos-3]==(byte)'K')  && (data_set[data_set_pos-2]==(byte)'B') && (data_set[data_set_pos-1]==(byte)'L'))
1382
                                                if ( (data_set_pos>4) && (data_set[data_set_pos-4]==(byte)'M') && (data_set[data_set_pos-3]==(byte)'K')  && (data_set[data_set_pos-2]==(byte)'B') && (data_set[data_set_pos-1]==(byte)'L'))
-
 
1383
 
1284
                                                    {
1384
                                                    {
-
 
1385
 
1285
                                                        bootloader_stage= BOOTLOADER_STAGE_GOT_MKBL;
1386
                                                        bootloader_stage= BOOTLOADER_STAGE_GOT_MKBL;
1286
                                                        return;
1387
                                                        return;
1287
                                                    }
1388
                                                    }
1288
                                               
1389
                                               
1289
                                            }
1390
                                                    }*/
1290
 
1391
 
1291
                                    }
1392
                                    }
1292
                                       
1393
                                       
1293
                       
1394
                       
1294
                            }
1395
                            }