esptool
esptool.cpp
- Committer:
- TuanPM
- Date:
- 2015-04-06
- Revision:
- 0:f6a51823dfa8
File content as of revision 0:f6a51823dfa8:
#include "esptool.h"
ESPTOOL::ESPTOOL(Serial& serial, PinName pinEnable, PinName pinProgram): _pinEn(pinEnable, _pinPro(pinProgram) {
_serial = serial;
_serial.baud(115200);
}
uint8_t ESPTOOL::read(){
uint8_t data = _serial.getc();
if(data == 0xDB){
data = _serial.getc();
if(data == 0xDC)
return 0xC0;
else if(data == 0xDD)
return 0xDB;
else
while(1);
} else
return data;
}
void ESPTOOL::read(uint8_t *data, uint32_t len){
while(len --)
*data ++ = read();
}
void ESPTOOL:write(uint8_t *data, uint32_t len){
uint8_t* buf_send = data, data_send;
while(len--){
data_send = *buf_send++;
if(data_send == 0xDB){
_serial.putc(0xDB);
_serial.putc(0xDD);
} else if(data_send == 0xC0) {
_serial.putc(0xDB);
_serial.putc(0xDC);
} else {
_serial.putc(data_send);
}
}
}
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) {
uint8_t header[8];
_serial.putc(0xC0);
_serial.putc(0x00);
write(&op, 1);
write((uint8_t*)&data_len, 2);
write((uint8_t*)&ck, 4);
_serial.putc(0xC0);
if(_serial.getc() != 0xC0)
return 0;
read(header, 8);
if(header[0] != 0x01 || header[1] != op)
return 0;
recv_len = (uint16_t*)&header[2];
read(recv_data, *recv_len);
if(_serial.getc() != 0xC0)
return 0;
return 1;
}
uint8_t ESPTOOL::connect() {
_pinEn = 0;
_pinPro = 0;
wait(0.2);
_pinEn = 1;
while(_serial.available())
_serial.getc();
}
uint8_t ESPTOOL::sync(){
uint8_t i;
uint8_t sync_frame[5] = {0x07, 0x07, 0x12, 0x20, 0x55*32};
uint8_t recv_frame[5];
uint8_t recv_len;
for(i=0; i<7; i++)
command(ESP_SYNC, sync_frame, 5, 0, recv_frame, &faerecv_len);
}