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 |