Skip to content

Commit a791f76

Browse files
committed
add drag and drop for upload
1 parent f8a01ef commit a791f76

2 files changed

Lines changed: 66 additions & 7 deletions

File tree

bootloaderWebtool/ch55xbl.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,13 +376,65 @@ function parseIntelHex(data, bufferSize) {
376376
throw new Error("Unexpected end of input: missing or invalid EOF record.");
377377
};
378378

379+
function dropHandler(ev) {
380+
console.log('File(s) dropped');
381+
382+
// Prevent default behavior (Prevent file from being opened)
383+
ev.preventDefault();
384+
385+
hexFile = undefined;
386+
387+
if (ev.dataTransfer.items) {
388+
// Use DataTransferItemList interface to access the file(s)
389+
for (var i = 0; i < ev.dataTransfer.items.length; i++) {
390+
// If dropped items aren't files, reject them
391+
if (ev.dataTransfer.items[i].kind === 'file') {
392+
var file = ev.dataTransfer.items[i].getAsFile();
393+
if (i == 0) {
394+
hexFile = file;
395+
}
396+
}
397+
}
398+
} else {
399+
// Use DataTransfer interface to access the file(s)
400+
for (var i = 0; i < ev.dataTransfer.files.length; i++) {
401+
if (i == 0) {
402+
hexFile = ev.dataTransfer.files[i];
403+
}
404+
}
405+
}
406+
407+
if (hexFile) {
408+
var reader = new FileReader();
409+
// Closure to capture the file information.
410+
reader.onload = (function (theFile) {
411+
return function (e) {
412+
var hexContent = e.target.result
413+
uploadCH55xBootloader(parseIntelHex(hexContent, 63 * 1024).data)
414+
};
415+
})(file);
416+
reader.readAsText(file);
417+
}
418+
419+
}
420+
421+
function dragOverHandler(ev) {
422+
//console.log('File(s) in drop zone');
423+
424+
// Prevent default behavior (Prevent file from being opened)
425+
ev.preventDefault();
426+
}
379427

380428
document.addEventListener('DOMContentLoaded', function () {
381429
let connectButton = document.querySelector('#connect');
382430
let uploadButton = document.querySelector('#upload');
431+
let dropZoneDiv = document.querySelector('#drop_zone');
383432
statusDiv = document.querySelector('#status');
384433

385434
connectButton.addEventListener('click', connectCH55xBootloader);
386435
uploadButton.addEventListener('click', pressUpload);
436+
dropZoneDiv.addEventListener('drop', dropHandler, false);
437+
dropZoneDiv.addEventListener('dragover', dragOverHandler, false)
438+
387439
document.getElementById('fileid').addEventListener('change', handleFileSelect, false);
388440
}, false);

bootloaderWebtool/index.html

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
<!DOCTYPE html>
22
<html>
3-
<head>
3+
4+
<head>
45
<title>ch55x bootloader tool</title>
56
<script src="ch55xbl.js"></script>
6-
</head>
7-
<body>
7+
</head>
8+
9+
<body>
810
<p>
9-
<button id="connect">Connect</button> <span id="status"></span>
11+
<button id="connect">Connect</button> <span id="status"></span>
1012
</p>
1113
<p>
12-
<button id="upload">Upload Hex</button> <input type='file' id="fileid" accept=".hex" hidden/>
13-
</p>
14-
</body>
14+
<button id="upload">Upload Hex</button>
15+
<input type='file' id="fileid" accept=".hex" hidden/>
16+
</p>
17+
<div style="border: 1px dashed LightGrey; width: 300px; height: 100px;" id="drop_zone">
18+
<p>Or Drag hex to this Drop Zone ...</p>
19+
</div>
20+
</body>
21+
1522
</html>

0 commit comments

Comments
 (0)