flash.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const prepareBinaries = require('./prepareBinaries');
  2. const request = require('request');
  3. const nodeFetch = require('node-fetch');
  4. const RomComm = require('rom-comm');
  5. function handleBinaryPreparer(binaryPreparer, port, onError, onProgress, onComplete) {
  6. const flashSpeedMultiplier = process.platform === 'win32' ? 2 : 4;
  7. binaryPreparer
  8. .on("error", onError)
  9. .on("progress", progress => {
  10. //For the download/extract progress.
  11. onProgress(progress.details.downloadedBytes / progress.details.downloadSize, progress.display);
  12. })
  13. .on("complete", flashSpec => {
  14. const device = RomComm.serial(port, { baudRate: 115200 * flashSpeedMultiplier }, {
  15. onProgress: progress => onProgress(progress.flashedBytes / progress.totalBytes, 'Flashing')
  16. });
  17. device.open(err => {
  18. if (err) {
  19. onError(err);
  20. } else {
  21. device.flash(flashSpec, err => {
  22. // TODO: This err doesn't come through
  23. if (err) {
  24. onError(err);
  25. } else {
  26. device.close();
  27. onComplete();
  28. }
  29. });
  30. }
  31. });
  32. });
  33. }
  34. function flash(port, manifestURL, onError, onProgress, onComplete) {
  35. nodeFetch(manifestURL)
  36. .then(response => response.json())
  37. .then(prepareBinaries)
  38. .then(binaryPreparer => handleBinaryPreparer(binaryPreparer, port, onError, onProgress, onComplete));
  39. }
  40. module.exports = flash;