@@ -29,7 +29,7 @@ static constexpr char CHECK_FILE_NAME[] = "UPDATE.OK";
29
29
30
30
FlashClass mcu_flash;
31
31
32
- NBFileUtils fileUtils;
32
+ NBFileUtils fileUtils ( true ) ;
33
33
34
34
extern " C" void __libc_init_array (void );
35
35
@@ -51,30 +51,42 @@ int main()
51
51
// Try to update only if update file
52
52
// has been download successfully.
53
53
54
- if (fileUtils.listFile (CHECK_FILE_NAME)) {
54
+ if (fileUtils.existFile (CHECK_FILE_NAME)) {
55
55
Serial1.println (" Update file exists" );
56
56
uint32_t updateSize = fileUtils.listFile (UPDATE_FILE_NAME);
57
- size_t cycles = (updateSize / blockSize) + 1 ;
57
+ uint32_t tot_bytes = 0 ;
58
+ uint32_t read_bytes = 0 ;
58
59
59
60
if (updateSize > SBU_SIZE) {
60
61
updateSize = updateSize - SBU_SIZE - SBU_START;
62
+ size_t cycles = (updateSize / blockSize);
63
+ size_t spare_bytes = (updateSize % blockSize);
61
64
/* Erase the MCU flash */
62
65
uint32_t flash_address = (uint32_t )SKETCH_START;
63
66
mcu_flash.erase ((void *)flash_address, updateSize);
64
67
65
68
for (auto i = 0 ; i < cycles; i++) {
66
69
uint8_t block[blockSize] { 0 };
67
70
digitalWrite (LED_BUILTIN, LOW);
68
- uint32_t read_bytes = fileUtils.readBlock (UPDATE_FILE_NAME, (i * blockSize) + SBU_SIZE + SBU_START, blockSize, block);
71
+ read_bytes = fileUtils.readBlock (UPDATE_FILE_NAME, (i * blockSize) + SBU_SIZE + SBU_START, blockSize, block);
72
+ digitalWrite (LED_BUILTIN, HIGH);
73
+ mcu_flash.write ((void *)flash_address, block, read_bytes);
74
+ flash_address += read_bytes;
75
+ tot_bytes += read_bytes;
76
+ }
77
+
78
+ if (spare_bytes){
79
+ uint8_t block[spare_bytes] { 0 };
80
+ digitalWrite (LED_BUILTIN, LOW);
81
+ read_bytes = fileUtils.readBlock (UPDATE_FILE_NAME, tot_bytes + SBU_SIZE + SBU_START, spare_bytes, block);
69
82
digitalWrite (LED_BUILTIN, HIGH);
70
83
mcu_flash.write ((void *)flash_address, block, read_bytes);
71
84
flash_address += read_bytes;
72
85
}
73
86
update_success = true ;
74
87
}
75
88
if (update_success) {
76
- fileUtils.deleteFile (UPDATE_FILE_NAME);
77
- fileUtils.deleteFile (CHECK_FILE_NAME);
89
+ fileUtils.deleteFiles ();
78
90
}
79
91
}
80
92
else {
0 commit comments