Tuan PM / Mbed 2 deprecated esptool

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers esptool.cpp Source File

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 }