/**************************************************************************************************************************** ESP32BootROM.h - part of the Firmware Updater for the Arduino Nano-33 IoT, MKR WiFi 1010, Arduino MKR Vidor 4000, and Arduino UNO WiFi Rev.2., Adafruit's nRF52 boards Based on and modified from WiFiNINA library https://www.arduino.cc/en/Reference/WiFiNINA to support nRF52, SAMD21/SAMD51, STM32F/L/H/G/WB/MP1, Teensy, etc. boards besides Nano-33 IoT, MKRWIFI1010, MKRVIDOR400, etc. Built by Khoi Hoang https://github.com/khoih-prog/WiFiNINA_Generic Licensed under MIT license Copyright (c) 2018 Arduino SA. All rights reserved. Copyright (c) 2011-2014 Arduino LLC. All right reserved. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *****************************************************************************************************************************/ #include class ESP32BootROMClass { public: ESP32BootROMClass(HardwareSerial& hwSerial, int gpio0Pin, int resetnPin); int begin(unsigned long baudrate); void end(); int beginFlash(uint32_t offset, uint32_t size, uint32_t chunkSize); int dataFlash(const void* data, uint32_t length); int endFlash(uint32_t reboot); int md5Flash(uint32_t offset, uint32_t size, uint8_t* result); private: int sync(); int changeBaudrate(unsigned long baudrate); int spiAttach(); void command(int opcode, const void* data, uint16_t length); int response(int opcode, unsigned long timeout, void* body = NULL); void writeEscapedBytes(const uint8_t* data, uint16_t length); private: HardwareSerial* _serial; int _gpio0Pin; int _resetnPin; uint32_t _flashSequenceNumber; uint32_t _chunkSize; }; extern ESP32BootROMClass ESP32BootROM;