Subversion Repositories Projects

Rev

Rev 216 | Rev 222 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 216 Rev 219
Line 25... Line 25...
25
 
25
 
Line 26... Line 26...
26
import java.io.*;
26
import java.io.*;
27
 
27
 
28
 
28
 
-
 
29
public class MKCommunicator
-
 
30
    implements Runnable,DUBwiseDefinitions
Line 29... Line 31...
29
public class MKCommunicator
31
{
30
    implements Runnable
32
    public byte bl_retrys=0;
Line 31... Line 33...
31
{
33
    public boolean init_bootloader=false;
32
 
34
 
33
    public byte lib_version_major=0;
35
    public byte lib_version_major=0;
34
    public byte lib_version_minor=1;
36
    public byte lib_version_minor=3;
Line 52... Line 54...
52
    boolean do_log=true;
54
    boolean do_log=true;
Line 53... Line 55...
53
 
55
 
Line 54... Line 56...
54
    int data_buff_pos=0;
56
    int data_buff_pos=0;
55
 
57
 
56
    public byte user_intent=0;
58
    public byte user_intent=0;
57
public final static int[] crc16_table = {
59
    public final static int[] crc16_table = {
58
 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
60
        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
59
 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
61
        0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
60
 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
62
        0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
61
 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
63
        0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
62
 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
64
        0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
63
 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
65
        0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
64
 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
66
        0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
65
 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
67
        0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
66
 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
68
        0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
67
 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
69
        0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
68
 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
70
        0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
69
 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
71
        0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
70
 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
72
        0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
71
 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
73
        0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
72
 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
74
        0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
73
 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
75
        0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
74
 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
76
        0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
75
 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
77
        0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
76
 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
78
        0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
77
 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
79
        0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
78
 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
80
        0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
79
 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
81
        0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
80
 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
82
        0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
81
 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
83
        0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
82
 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
84
        0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
83
 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
85
        0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
84
 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
86
        0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
85
 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
87
        0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
86
 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
88
        0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
87
 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
89
        0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
88
 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
90
        0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
Line 89... Line 91...
89
 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
91
        0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
90
 };
92
    };
91
 
93
 
92
    public void log(String str)
94
    public void log(String str)
93
    {
95
    {
94
//#ifdef android
96
//#ifdef android
Line 95... Line 97...
95
if (do_log)     Log.d("MK-Comm",str);
97
        if (do_log)     Log.d("MK-Comm",str);
-
 
98
//#endif
96
//#endif
99
    }
97
    }
100
 
Line 98... Line 101...
98
 
101
    public int CRC16(int ch, int crc)
99
    public int CRC16(int ch, int crc)
102
    {
100
    { return crc16_table[((crc >> 8) ^ (ch)) & 0xFF] ^ (crc << 8);
103
        return crc16_table[((crc >> 8) ^ (ch)) & 0xFF] ^ (crc << 8);
101
    }
104
    }
102
 
105
 
103
 
106
 
104
    public int conn_time_in_s()
107
    public int conn_time_in_s()
105
    {
108
    {
106
        if (connected)
109
        if (connected)
Line 107... Line 110...
107
            return (int)((System.currentTimeMillis()-connection_start_time)/1000);
110
            return (int)((System.currentTimeMillis()-connection_start_time)/1000);
Line 108... Line 111...
108
        else
111
        else
109
            return 0;
112
            return 0;
110
    }
113
    }
Line -... Line 114...
-
 
114
    public final static byte BOOTLOADER_STAGE_NONE=0;
-
 
115
    public final static byte BOOTLOADER_STAGE_GOT_MKBL=1;
111
    public final static int BOOTLOADER_STAGE_NONE=0;
116
 
Line 112... Line 117...
112
    public final static int BOOTLOADER_STAGE_GOT_MKBL=1;
117
    byte bootloader_stage= BOOTLOADER_STAGE_NONE;
113
 
118
 
114
    int bootloader_stage= BOOTLOADER_STAGE_NONE;
119
    public MKLCD LCD;
Line 176... Line 181...
176
        //      root=root_;
181
        //      root=root_;
177
        version=new MKVersion();
182
        version=new MKVersion();
178
        debug_data=new MKDebugData();
183
        debug_data=new MKDebugData();
179
        stick_data=new MKStickData();
184
        stick_data=new MKStickData();
180
        params=new MKParamsParser();
185
        params=new MKParamsParser();
-
 
186
        extern_control=new int[EXTERN_CONTROL_LENGTH];
-
 
187
        extern_control[EXTERN_CONTROL_CONFIG]=1;
-
 
188
        extern_control[EXTERN_CONTROL_FRAME]=1;
-
 
189
       
181
        LCD= new MKLCD(this);
190
        LCD= new MKLCD(this);
182
        watchdog=new MKWatchDog(this);
191
        watchdog=new MKWatchDog(this);
183
        gps_position=new MKGPSPosition();
192
        gps_position=new MKGPSPosition();
184
        stats = new MKStatistics();
193
        stats = new MKStatistics();
185
        proxy =new MKProxy(this);
194
        proxy =new MKProxy(this);
Line 229... Line 238...
229
    public String get_buff(int age)
238
    public String get_buff(int age)
230
    {
239
    {
Line 231... Line 240...
231
 
240
 
Line 232... Line 241...
232
        age%=DATA_BUFF_LEN;
241
        age%=DATA_BUFF_LEN;
233
       
242
       
234
        if (age<=data_buff_pos)
243
        if (age<=data_buff_pos)
235
            return ""+data_buff[data_buff_pos-age];
244
            return ""+data_buff[data_buff_pos-age];
Line 353... Line 362...
353
    {
362
    {
354
        stats.motortest_request_count++;
363
        stats.motortest_request_count++;
355
        send_command(FC_SLAVE_ADDR,'t',params);
364
        send_command(FC_SLAVE_ADDR,'t',params);
356
    }
365
    }
Line -... Line 366...
-
 
366
 
357
 
367
 
358
    public void send_keys(int[] params)
368
    public void send_extern_control()
-
 
369
    {
-
 
370
 
359
    {
371
        stats.external_control_request_count++;
360
        send_command(FC_SLAVE_ADDR,'k',params);
372
        send_command(FC_SLAVE_ADDR,'b',extern_control);
Line -... Line 373...
-
 
373
    }
-
 
374
 
-
 
375
    /*    public void send_keys(int[] params)
-
 
376
          {
-
 
377
          send_command(FC_SLAVE_ADDR,'k',params);
361
    }
378
          }*/
362
 
379
   
363
    // get params
380
    // get params
364
    public void get_params(int id)
381
    public void get_params(int id)
365
    {
382
    {
Line 455... Line 472...
455
                while(bootloader_stage!= BOOTLOADER_STAGE_GOT_MKBL)
472
                while(bootloader_stage!= BOOTLOADER_STAGE_GOT_MKBL)
456
                    {
473
                    {
457
                        flash_msgs[msg_pos]="attempt "+attempt;
474
                        flash_msgs[msg_pos]="attempt "+attempt;
458
                        attempt++;
475
                        attempt++;
459
                        send_command_nocheck((byte)FC_SLAVE_ADDR,'R',new int[0]);
476
                        send_command_nocheck((byte)FC_SLAVE_ADDR,'R',new int[0]);
-
 
477
                       
-
 
478
                        try{
460
                        writer.write( 27);
479
                        writer.write( 27);
461
                        writer.flush();
480
                        writer.flush();
Line 462... Line 481...
462
 
481
 
Line 463... Line 482...
463
                        sleep(20);
482
                        sleep(20);
464
                       
483
                       
465
                        writer.write( 0xAA);
484
                        writer.write( 0xAA);
-
 
485
                        writer.flush();
466
                        writer.flush();
486
                        }
467
 
487
                        catch (Exception e)  { }
468
                        sleep((attempt%2==0)?80:800); //800
488
                        sleep((attempt%2==0)?80:800); //800
469
                    }
489
                    }
Line 561... Line 581...
561
 
581
 
562
    }
582
    }
563
    // send command to FC ( add crc and pack into pseudo Base64
583
    // send command to FC ( add crc and pack into pseudo Base64
564
    public void send_command(int modul,char cmd,int[] params)
584
    public void send_command(int modul,char cmd,int[] params)
565
    {
-
 
566
 
585
    {
567
        //      if (modul==0) return;
586
        //      if (modul==0) return;
568
        sending=true;
587
        sending=true;
569
        send_command_nocheck((byte)modul,cmd,params);
588
        send_command_nocheck((byte)modul,cmd,params);
570
        sending=false;
589
        sending=false;
Line 610... Line 629...
610
            case 'A': // debug Data Names
629
            case 'A': // debug Data Names
611
                stats.debug_names_count++;
630
                stats.debug_names_count++;
612
                debug_data.set_names_by_mk_data(Decode64(data,3,len-3));
631
                debug_data.set_names_by_mk_data(Decode64(data,3,len-3));
613
                break;
632
                break;
Line -... Line 633...
-
 
633
 
-
 
634
            case 'B': // external_control confirm frames
-
 
635
                stats.external_control_confirm_frame_count++;
-
 
636
                break;
614
 
637
 
615
            case 'L': // LCD Data
638
            case 'L': // LCD Data
616
                stats.lcd_data_count++;
639
                stats.lcd_data_count++;
Line 617... Line 640...
617
                LCD.handle_lcd_data(Decode64(data,3,len-3));
640
                LCD.handle_lcd_data(Decode64(data,3,len-3));
Line 720... Line 743...
720
//#ifdef j2me
743
//#ifdef j2me
721
//#     try{ connection.close(); }
744
//#     try{ connection.close(); }
722
//#     catch (Exception inner_ex) { }
745
//#     catch (Exception inner_ex) { }
723
//#endif
746
//#endif
724
        ufo_prober.set_to_none();
747
        ufo_prober.set_to_none();
725
        stats.reset();
748
        stats.reset();
726
        connected=false;
749
        connected=false;
727
        version=new MKVersion();
750
        version=new MKVersion();
728
    }
751
    }
Line 729... Line 752...
729
 
752
 
730
    // Thread to recieve data from Connection
753
    // Thread to recieve data from Connection
731
    public void run()
754
    public void run()
732
    {
-
 
-
 
755
    {
733
 
756
        boolean sigfail=false;
734
        if (bootloader_stage==BOOTLOADER_STAGE_GOT_MKBL)
757
        if (bootloader_stage==BOOTLOADER_STAGE_GOT_MKBL)
735
            {
758
            {
736
            try {
759
            try {
Line 737... Line 760...
737
                        flash_msgs[msg_pos++]="reading avr_sig";
760
                        flash_msgs[msg_pos++]="reading avr_sig";
738
 
761
 
Line 739... Line 762...
739
                        writer.write( 't');
762
                        writer.write( 't');
-
 
763
                        writer.flush();
-
 
764
               
-
 
765
                        int avr_sig=reader.read();
-
 
766
 
740
                        writer.flush();
767
                        while (avr_sig==63)
Line 741... Line 768...
741
               
768
                            avr_sig=reader.read();
742
                        int avr_sig=reader.read();
769
 
Line 743... Line 770...
743
                        flash_msgs[msg_pos++]="got avr sig " + avr_sig;
770
                        flash_msgs[msg_pos++]="got avr sig " + avr_sig;
-
 
771
 
-
 
772
 
744
 
773
                        if (reader.read()!=0)
-
 
774
                            throw new Exception("val after avrsig isnt 0");
Line 745... Line 775...
745
 
775
 
746
                        if (reader.read()!=0)
776
                        if ((avr_sig!=0x74)&&(avr_sig!=224)&&(avr_sig!=120))
747
                            throw new Exception("val after avrsig isnt 0");
777
                            {
748
 
778
                                sigfail=true;
Line 777... Line 807...
777
                        int send_buff_size=send_buff_size1*0x100+send_buff_size2;
807
                        int send_buff_size=send_buff_size1*0x100+send_buff_size2;
Line 778... Line 808...
778
                       
808
                       
779
                        flash_msgs[msg_pos++]="BUFF Size:" + send_buff_size;
809
                        flash_msgs[msg_pos++]="BUFF Size:" + send_buff_size;
780
                        //                      if (send_buff_size>128)
810
                        //                      if (send_buff_size>128)
781
                        //    send_buff_size=128;
811
                        //    send_buff_size=128;
782
                if (bootloader_intension_flash)
-
 
783
                    {          
-
 
784
 
-
 
785
                        byte[] flash_buff =new byte[send_buff_size]; ///!!
-
 
786
 
-
 
787
 
-
 
788
                        flash_msgs[msg_pos++]="Opening firmware ..";
-
 
789
 
-
 
790
 
-
 
791
                        InputStream in;
-
 
792
                        try {
-
 
793
                            in=this.getClass().getResourceAsStream((avr_sig==224)?"/navi.bin":((avr_sig==120)?"mk3.bin":"/fc.bin"));       
-
 
794
                        }
-
 
795
                       
-
 
796
                        catch (Exception e) {               throw new Exception(" cant open firmware");                 }
-
 
797
 
-
 
798
 
-
 
799
                        int firmware_size= ((int)in.read()<<24) |((int)in.read()<<16) | ((int)in.read()<<8) | ((int)in.read()&0xff) ;
-
 
800
                       
-
 
801
 
-
 
802
                        flash_msgs[msg_pos++]=".. open with " + firmware_size + "bytes";
-
 
803
 
-
 
804
 
-
 
805
 
-
 
806
               
-
 
807
                       
-
 
808
                        //      if (true) throw new Exception("before erasing" );               
-
 
809
 
-
 
810
                        flash_msgs[msg_pos++]="Erasing Flash ..";
-
 
811
                        writer.write('e');
-
 
812
                        writer.flush();
-
 
813
 
-
 
814
                        if (reader.read()!=0x0d)
-
 
815
                            throw new Exception("cant erase flash");
-
 
816
 
-
 
817
                        flash_msgs[msg_pos]+="OK";
-
 
818
 
-
 
819
 
-
 
820
                        writer.write('A');
-
 
821
                        writer.write(0);
-
 
822
                        writer.write(0);
-
 
823
                        writer.flush();
-
 
824
 
-
 
825
                        if (reader.read()!=0x0d)
-
 
826
                            throw new Exception("cant set addr");
-
 
827
                       
-
 
828
                        flash_msgs[msg_pos++]="addr set";
-
 
829
 
-
 
830
 
-
 
831
                        int blocks2write=((firmware_size/send_buff_size));
-
 
832
                        if ((firmware_size%send_buff_size)>0)
-
 
833
                            blocks2write++;
-
 
834
 
-
 
835
                        for ( int block=0; block<blocks2write; block ++)
812
                        if (bootloader_intension_flash)
836
                            {
-
 
Line -... Line 813...
-
 
813
                            {          
-
 
814
                               
-
 
815
                                byte[] flash_buff =new byte[send_buff_size]; ///!!
837
                                int hex_bytes_read=in.read(flash_buff,0,send_buff_size);
816
                               
-
 
817
                                String firmware_filename=(avr_sig==224)?"/navi.bin":((avr_sig==120)?"/mk3.bin":"/fc.bin");
838
                               
818
                                flash_msgs[msg_pos++]="Opening firmware " + firmware_filename + "..";
-
 
819
                               
-
 
820
                               
-
 
821
                                InputStream in;
-
 
822
                                try {
839
                                flash_msgs[msg_pos]="bl:" + block + "/" + blocks2write + " si:"+hex_bytes_read ;
823
                                    in=this.getClass().getResourceAsStream(firmware_filename);     
-
 
824
                                }
840
 
825
                               
-
 
826
                                catch (Exception e) {               throw new Exception(" .. cant open firmware");                      }
-
 
827
                                int firmware_size=-1;
-
 
828
                                try {
-
 
829
                                                                   
-
 
830
                                firmware_size= ((int)in.read()<<24) |((int)in.read()<<16) | ((int)in.read()<<8) | ((int)in.read()&0xff) ;
-
 
831
                                }
-
 
832
                                catch (Exception e) {               throw new Exception(" .. cant read size");                  }
-
 
833
                               
841
 
834
                               
-
 
835
                               
-
 
836
                                int blocks2write=((firmware_size/send_buff_size));
-
 
837
                                flash_msgs[msg_pos++]=".. open("+blocks2write+" blocks," + firmware_size + "bytes)";
-
 
838
                               
-
 
839
                               
-
 
840
                               
842
                                writer.write('B');
841
                                //                      if (true) throw new Exception("before erasing");
-
 
842
                               
-
 
843
                                //      if (true) throw new Exception("before erasing" );               
843
                                writer.write((hex_bytes_read>>8)& 0xFF);
844
                               
844
                                writer.write((hex_bytes_read)& 0xFF);
845
                                flash_msgs[msg_pos++]="Erasing Flash ..";
845
                                writer.write('F');
-
 
846
                                writer.flush();
-
 
847
 
-
 
848
                                                                       
-
 
Line -... Line 846...
-
 
846
                                writer.write('e');
-
 
847
                                writer.flush();
849
                                writer.write(flash_buff,0,hex_bytes_read);
848
                               
-
 
849
                                if (reader.read()!=0x0d)
-
 
850
                                    throw new Exception("cant erase flash");
-
 
851
                               
-
 
852
                                flash_msgs[msg_pos]+="OK";
-
 
853
                               
-
 
854
                               
-
 
855
                                writer.write('A');
-
 
856
                                writer.write(0);
850
                                writer.flush();                                
857
                                writer.write(0);
-
 
858
                                writer.flush();
-
 
859
                               
-
 
860
                                if (reader.read()!=0x0d)
-
 
861
                                    throw new Exception("cant set addr");
-
 
862
                               
-
 
863
                                flash_msgs[msg_pos++]="addr set";
-
 
864
                               
-
 
865
                               
-
 
866
                                //                      int blocks2write=((firmware_size/send_buff_size));
-
 
867
                                if ((firmware_size%send_buff_size)>0)
851
                               
868
                                    blocks2write++;
-
 
869
                               
-
 
870
                                for ( int block=0; block<blocks2write; block ++)
-
 
871
                                    {
-
 
872
                                        int hex_bytes_read=in.read(flash_buff,0,send_buff_size);
-
 
873
                                       
-
 
874
                                        flash_msgs[msg_pos]="bl:" + block + "/" + blocks2write + " si:"+hex_bytes_read ;
-
 
875
                                       
-
 
876
                                       
-
 
877
                                        writer.write('B');
-
 
878
                                        writer.write((hex_bytes_read>>8)& 0xFF);
-
 
879
                                        writer.write((hex_bytes_read)& 0xFF);
-
 
880
                                        writer.write('F');
-
 
881
                                        writer.flush();
-
 
882
                                       
-
 
883
                                       
-
 
884
                                        writer.write(flash_buff,0,hex_bytes_read);
-
 
885
                                        writer.flush();                                
-
 
886
                                       
852
 
887
                                       
853
                                if (avr_sig==224)
888
                                        if (avr_sig==224)
854
                                    {
889
                                            {
855
                                        int crc=0xFFFF;
890
                                                int crc=0xFFFF;
856
                                        for (int crc_pos=0;crc_pos<hex_bytes_read;crc_pos++)
891
                                                for (int crc_pos=0;crc_pos<hex_bytes_read;crc_pos++)
857
                                            crc=CRC16(flash_buff[crc_pos],crc);
892
                                                    crc=CRC16(flash_buff[crc_pos],crc);
858
                                        writer.write(crc>>8);
893
                                                writer.write(crc>>8);
859
                                        writer.write(crc&0xff);
894
                                                writer.write(crc&0xff);
860
                                        writer.flush();
895
                                                writer.flush();
Line 861... Line -...
861
                                    }
-
 
862
                                        //  flash_msgs[msg_pos]+="ok";
-
 
863
                                        //                              writer.flush();
-
 
864
                                       
-
 
Line -... Line 896...
-
 
896
                                            }
-
 
897
                                        //  flash_msgs[msg_pos]+="ok";
-
 
898
                                        //                              writer.flush();
865
 
899
                                       
-
 
900
                                       
866
 
901
                                       
867
                                if (reader.read()!=0x0d)
902
                                        if (reader.read()!=0x0d)
868
                                        throw new Exception("abort write at block"+block);
903
                                            throw new Exception("abort write at block"+block);
869
                                       
904
                                       
870
                                       
905
                                       
871
                               
906
                                       
872
                                //                             sleep(1000);
907
                                        //                             sleep(1000);
873
                                                    }
908
                                    }
874
                        //              flash_msgs[msg_pos]="bl:" + block + "/" + blocks2write + " si:"+hex_bytes_read ;
909
                                //              flash_msgs[msg_pos]="bl:" + block + "/" + blocks2write + " si:"+hex_bytes_read ;
875
                        /*
910
                                /*
Line 991... Line 1026...
991
            }
1026
            }
992
            catch (Exception e2)  {  
1027
            catch (Exception e2)  {  
993
                flash_msgs[msg_pos++]="cant exit bootloader" ;
1028
                flash_msgs[msg_pos++]="cant exit bootloader" ;
994
            }
1029
            }
995
            flash_msgs[msg_pos++]="Exit BL done" ;
1030
            flash_msgs[msg_pos++]="Exit BL done" ;
996
 
-
 
-
 
1031
            if (sigfail&&(bl_retrys<3))
997
 
1032
                {
-
 
1033
                    bl_retrys++;
-
 
1034
                    init_bootloader=true;
998
 
1035
                }
999
                close_connections(false);
1036
            close_connections(false);
1000
            }
1037
            }
Line 1001... Line 1038...
1001
 
1038
 
1002
 
1039