boards.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. "use strict";
  2. const log = require("./logger");
  3. const delay = require("./utilities").delay;
  4. const FLASH_MODES = {
  5. qio: 0,
  6. qout: 1,
  7. dio: 2,
  8. dout: 3
  9. };
  10. const FLASH_FREQUENCIES = {
  11. "40m": 0,
  12. "26m": 1,
  13. "20m": 2,
  14. "80m": 0xf
  15. };
  16. const FLASH_SIZES = {
  17. "4m": 0x00,
  18. "2m": 0x10,
  19. "8m": 0x20,
  20. "16m": 0x30,
  21. "32m": 0x40,
  22. "16m-c1": 0x50,
  23. "32m-c1": 0x60,
  24. "32m-c2": 0x70
  25. };
  26. class EspBoard {
  27. constructor(port) {
  28. this.port = port;
  29. this.isInBootLoader = false;
  30. }
  31. portSet(options) {
  32. return new Promise((resolve, reject) => {
  33. log.info("Setting port", options);
  34. this.port.set(options, (err, result) => {
  35. if (err) {
  36. reject(err);
  37. }
  38. resolve(result);
  39. });
  40. });
  41. }
  42. flashInfoAsBytes() {
  43. let buffer = new ArrayBuffer(2);
  44. let dv = new DataView(buffer);
  45. dv.setUint8(0, FLASH_MODES[this.flashMode]);
  46. dv.setUint8(1, FLASH_SIZES[this.flashSize] + FLASH_FREQUENCIES[this.flashFrequency]);
  47. return new Buffer(buffer);
  48. }
  49. resetIntoBootLoader() {
  50. throw new Error("Must define bootloader reset instructions");
  51. }
  52. }
  53. /**
  54. * Tested: Adafruit Feather Huzzah
  55. * Needs testing: Adafruit Huzzah, SparkFun Thing, SparkFun Thing Dev Board
  56. */
  57. class Esp12 extends EspBoard {
  58. constructor(port) {
  59. super(port);
  60. this.flashFrequency = "80m";
  61. this.flashMode = "qio";
  62. this.flashSize = "32m";
  63. }
  64. resetIntoBootLoader() {
  65. // RTS - Request To Send
  66. // DTR - Data Terminal Ready
  67. // NOTE: Must set values at the same time.
  68. log.info("Resetting board");
  69. return this.portSet({rts: true, dtr:false})
  70. .then(() => delay(5))
  71. .then(() => this.portSet({rts: false, dtr: true}))
  72. .then(() => delay(50))
  73. .then(() => this.portSet({rts: false, dtr: false}));
  74. }
  75. }
  76. module.exports = {
  77. Esp12: Esp12
  78. };