MCPcopy Create free account
hub / github.com/bmorcelli/Launcher / analyzeFile

Function analyzeFile

webUi/scripts.js:149–226  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

147 _("fileInput").click();
148}
149function 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 }

Callers

nothing calls this directly

Calls 2

_Function · 0.85
uploadSliceFunction · 0.85

Tested by

no test coverage detected