Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
esptool.cpp
00001 #include "esptool.h" 00002 00003 ESPTOOL::ESPTOOL(Serial& serial, PinName pinEnable, PinName pinProgram): _pinEn(pinEnable, _pinPro(pinProgram) { 00004 _serial = serial; 00005 _serial.baud(115200); 00006 } 00007 uint8_t ESPTOOL::read(){ 00008 uint8_t data = _serial.getc(); 00009 if(data == 0xDB){ 00010 data = _serial.getc(); 00011 if(data == 0xDC) 00012 return 0xC0; 00013 else if(data == 0xDD) 00014 return 0xDB; 00015 else 00016 while(1); 00017 } else 00018 return data; 00019 } 00020 void ESPTOOL::read(uint8_t *data, uint32_t len){ 00021 while(len --) 00022 *data ++ = read(); 00023 } 00024 00025 void ESPTOOL:write(uint8_t *data, uint32_t len){ 00026 uint8_t* buf_send = data, data_send; 00027 00028 while(len--){ 00029 data_send = *buf_send++; 00030 if(data_send == 0xDB){ 00031 _serial.putc(0xDB); 00032 _serial.putc(0xDD); 00033 } else if(data_send == 0xC0) { 00034 _serial.putc(0xDB); 00035 _serial.putc(0xDC); 00036 } else { 00037 _serial.putc(data_send); 00038 } 00039 } 00040 00041 } 00042 uint8_t ESPTOOL::command(uint8_t op, uint8_t *data, uint16_t data_len, uint32_t ck, uint8_t *recv_data, uint16_t *recv_len) { 00043 uint8_t header[8]; 00044 _serial.putc(0xC0); 00045 _serial.putc(0x00); 00046 write(&op, 1); 00047 write((uint8_t*)&data_len, 2); 00048 write((uint8_t*)&ck, 4); 00049 _serial.putc(0xC0); 00050 00051 if(_serial.getc() != 0xC0) 00052 return 0; 00053 read(header, 8); 00054 00055 if(header[0] != 0x01 || header[1] != op) 00056 return 0; 00057 recv_len = (uint16_t*)&header[2]; 00058 read(recv_data, *recv_len); 00059 if(_serial.getc() != 0xC0) 00060 return 0; 00061 00062 return 1; 00063 } 00064 00065 uint8_t ESPTOOL::connect() { 00066 _pinEn = 0; 00067 _pinPro = 0; 00068 wait(0.2); 00069 _pinEn = 1; 00070 while(_serial.available()) 00071 _serial.getc(); 00072 00073 } 00074 uint8_t ESPTOOL::sync(){ 00075 uint8_t i; 00076 uint8_t sync_frame[5] = {0x07, 0x07, 0x12, 0x20, 0x55*32}; 00077 uint8_t recv_frame[5]; 00078 uint8_t recv_len; 00079 for(i=0; i<7; i++) 00080 command(ESP_SYNC, sync_frame, 5, 0, recv_frame, &faerecv_len); 00081 }
Generated on Sat Jul 16 2022 22:09:12 by
1.7.2