()
| 147 | _("fileInput").click(); |
| 148 | } |
| 149 | function analyzeFile() { |
| 150 | const fileInput = _('fileInput'); |
| 151 | const outputDiv = _('analysisOutput'); |
| 152 | const uploadAppBtn = _('uploadApp'); |
| 153 | const uploadSpiffsBtn = _('uploadSpiffs'); |
| 154 | outputDiv.style.display = 'none'; |
| 155 | uploadAppBtn.style.display = 'none'; |
| 156 | uploadSpiffsBtn.style.display = 'none'; |
| 157 | let pass = true; |
| 158 | if (fileInput.files.length === 0) { |
| 159 | window.alert('Please, select a file.'); |
| 160 | return; |
| 161 | } |
| 162 | if (fileInput.files[0].name.split('.').pop() !== "bin") { |
| 163 | window.alert('File is not a .bin'); |
| 164 | return; |
| 165 | } |
| 166 | const file = fileInput.files[0]; |
| 167 | const reader = new FileReader(); |
| 168 | reader.onload = function (e) { |
| 169 | const data = new Uint8Array(reader.result); |
| 170 | let start_point = 0; |
| 171 | let spiffs_offset = 0; |
| 172 | let spiffs_size = 0; |
| 173 | let app_size = 0; |
| 174 | let spiffs = false; |
| 175 | const MAX_APP = 0x470000; |
| 176 | const MAX_SPIFFS = 0x100000; |
| 177 | const first_slice = data.slice(0x8000, 0x8000 + 16); |
| 178 | const byte0 = first_slice[0]; |
| 179 | const byte1 = first_slice[1]; |
| 180 | const byte2 = first_slice[2]; |
| 181 | if (byte0 === 0xaa && byte1 === 0x50 && byte2 === 0x01 && pass === true) { |
| 182 | pass = false; |
| 183 | start_point = 0x10000; |
| 184 | for (let i = 0; i < 0xA0; i += 0x20) { |
| 185 | const pos = 0x8000 + i; |
| 186 | if (pos + 16 > data.length) break; |
| 187 | const slice = data.slice(pos, pos + 16); |
| 188 | const byte3 = slice[3]; |
| 189 | const byte6 = slice[6]; |
| 190 | if ([0x00, 0x10, 0x20].includes(byte3) && byte6 === 0x01) { |
| 191 | app_size = (slice[10] << 16) | (slice[11] << 8) | 0x00; |
| 192 | if (data.length < (app_size + 0x10000)) app_size = data.length - 0x10000; |
| 193 | if (app_size > MAX_APP) app_size = MAX_APP; |
| 194 | } |
| 195 | if (byte3 === 0x82) { |
| 196 | spiffs_offset = (slice[6] << 16) | (slice[7] << 8) | slice[8]; |
| 197 | spiffs_size = (slice[10] << 16) | (slice[11] << 8); |
| 198 | if (data.length < spiffs_offset) spiffs = false; |
| 199 | else if (spiffs_size > MAX_SPIFFS) { |
| 200 | spiffs_size = MAX_SPIFFS; |
| 201 | spiffs = true; |
| 202 | } |
| 203 | if (spiffs && data.length < (spiffs_offset + spiffs_size)) spiffs_size = data.length - spiffs_offset; |
| 204 | } |
| 205 | } |
| 206 | } |
nothing calls this directly
no test coverage detected