@@ -711,6 +711,7 @@ private int attemptPartialFlash(String filePath) {
711
711
712
712
// TODO - check size of code in file matches micro:bit
713
713
714
+ boolean endOfFile = false ;
714
715
long startTime = SystemClock .elapsedRealtime ();
715
716
while (true ) {
716
717
// Timeout if total is > 30 seconds
@@ -720,19 +721,30 @@ private int attemptPartialFlash(String filePath) {
720
721
}
721
722
722
723
// Check if EOF
723
- if (hex .getRecordTypeFromIndex ( dataPos .line + lineCount ) != 0 ) {
724
- break ;
724
+ if ( endOfFile || hex .getRecordTypeFromIndex ( dataPos .line + lineCount ) != 0 ) {
725
+ if ( count == 0 ) {
726
+ break ;
727
+ }
728
+ endOfFile = true ;
725
729
}
726
730
727
- addrLo = hex .getRecordAddressFromIndex ( dataPos .line + lineCount );
728
- addrHi = hex .getSegmentAddress (dataPos .line + lineCount );
729
- addr = (long ) addrLo + (long ) addrHi * 256 * 256 ;
730
-
731
- hexData = hex .getDataFromIndex ( dataPos .line + lineCount );
732
- if ( part + 32 > hexData .length ()) {
733
- partData = hexData .substring ( part );
731
+ if ( endOfFile ) {
732
+ // complete the batch of 4 packets with FF
733
+ char [] c32 = new char [32 ];
734
+ Arrays .fill ( c32 , 'F' );
735
+ hexData = new String ( c32 );
736
+ partData = hexData ;
734
737
} else {
735
- partData = hexData .substring (part , part + 32 );
738
+ addrLo = hex .getRecordAddressFromIndex (dataPos .line + lineCount );
739
+ addrHi = hex .getSegmentAddress (dataPos .line + lineCount );
740
+ addr = (long ) addrLo + (long ) addrHi * 256 * 256 ;
741
+
742
+ hexData = hex .getDataFromIndex (dataPos .line + lineCount );
743
+ if (part + 32 > hexData .length ()) {
744
+ partData = hexData .substring (part );
745
+ } else {
746
+ partData = hexData .substring (part , part + 32 );
747
+ }
736
748
}
737
749
738
750
int offsetToSend = 0 ;
@@ -748,7 +760,7 @@ private int attemptPartialFlash(String filePath) {
748
760
offsetToSend = addr0Hi ;
749
761
}
750
762
751
- logi ( packetNum + " " + count + " addr0 " + addr0 + " offsetToSend " + offsetToSend + " line " + lineCount + " addr " + addr + " part " + part + " data " + partData );
763
+ logi ( packetNum + " " + count + " addr0 " + addr0 + " offsetToSend " + offsetToSend + " line " + lineCount + " addr " + addr + " part " + part + " data " + partData + " endOfFile " + endOfFile );
752
764
753
765
// recordToByteArray() builds a PF command block with the data
754
766
byte [] chunk = HexUtils .recordToByteArray (partData , offsetToSend , packetNum );
@@ -792,12 +804,15 @@ private int attemptPartialFlash(String filePath) {
792
804
if (packetState == PACKET_STATE_RETRANSMIT ) {
793
805
lineCount = line0 ;
794
806
part = part0 ;
807
+ endOfFile = false ;
795
808
} else {
796
- // Next part
797
- part = part + partData .length ();
798
- if ( part >= hexData .length ()) {
799
- part = 0 ;
800
- lineCount = lineCount + 1 ;
809
+ if ( !endOfFile ) {
810
+ // Next part
811
+ part = part + partData .length ();
812
+ if (part >= hexData .length ()) {
813
+ part = 0 ;
814
+ lineCount = lineCount + 1 ;
815
+ }
801
816
}
802
817
}
803
818
0 commit comments