esptool

Dependencies:   mbed

Committer:
TuanPM
Date:
Mon Apr 06 06:43:53 2015 +0000
Revision:
0:f6a51823dfa8
ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TuanPM 0:f6a51823dfa8 1 #include "esptool.h"
TuanPM 0:f6a51823dfa8 2
TuanPM 0:f6a51823dfa8 3 ESPTOOL::ESPTOOL(Serial& serial, PinName pinEnable, PinName pinProgram): _pinEn(pinEnable, _pinPro(pinProgram) {
TuanPM 0:f6a51823dfa8 4 _serial = serial;
TuanPM 0:f6a51823dfa8 5 _serial.baud(115200);
TuanPM 0:f6a51823dfa8 6 }
TuanPM 0:f6a51823dfa8 7 uint8_t ESPTOOL::read(){
TuanPM 0:f6a51823dfa8 8 uint8_t data = _serial.getc();
TuanPM 0:f6a51823dfa8 9 if(data == 0xDB){
TuanPM 0:f6a51823dfa8 10 data = _serial.getc();
TuanPM 0:f6a51823dfa8 11 if(data == 0xDC)
TuanPM 0:f6a51823dfa8 12 return 0xC0;
TuanPM 0:f6a51823dfa8 13 else if(data == 0xDD)
TuanPM 0:f6a51823dfa8 14 return 0xDB;
TuanPM 0:f6a51823dfa8 15 else
TuanPM 0:f6a51823dfa8 16 while(1);
TuanPM 0:f6a51823dfa8 17 } else
TuanPM 0:f6a51823dfa8 18 return data;
TuanPM 0:f6a51823dfa8 19 }
TuanPM 0:f6a51823dfa8 20 void ESPTOOL::read(uint8_t *data, uint32_t len){
TuanPM 0:f6a51823dfa8 21 while(len --)
TuanPM 0:f6a51823dfa8 22 *data ++ = read();
TuanPM 0:f6a51823dfa8 23 }
TuanPM 0:f6a51823dfa8 24
TuanPM 0:f6a51823dfa8 25 void ESPTOOL:write(uint8_t *data, uint32_t len){
TuanPM 0:f6a51823dfa8 26 uint8_t* buf_send = data, data_send;
TuanPM 0:f6a51823dfa8 27
TuanPM 0:f6a51823dfa8 28 while(len--){
TuanPM 0:f6a51823dfa8 29 data_send = *buf_send++;
TuanPM 0:f6a51823dfa8 30 if(data_send == 0xDB){
TuanPM 0:f6a51823dfa8 31 _serial.putc(0xDB);
TuanPM 0:f6a51823dfa8 32 _serial.putc(0xDD);
TuanPM 0:f6a51823dfa8 33 } else if(data_send == 0xC0) {
TuanPM 0:f6a51823dfa8 34 _serial.putc(0xDB);
TuanPM 0:f6a51823dfa8 35 _serial.putc(0xDC);
TuanPM 0:f6a51823dfa8 36 } else {
TuanPM 0:f6a51823dfa8 37 _serial.putc(data_send);
TuanPM 0:f6a51823dfa8 38 }
TuanPM 0:f6a51823dfa8 39 }
TuanPM 0:f6a51823dfa8 40
TuanPM 0:f6a51823dfa8 41 }
TuanPM 0:f6a51823dfa8 42 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) {
TuanPM 0:f6a51823dfa8 43 uint8_t header[8];
TuanPM 0:f6a51823dfa8 44 _serial.putc(0xC0);
TuanPM 0:f6a51823dfa8 45 _serial.putc(0x00);
TuanPM 0:f6a51823dfa8 46 write(&op, 1);
TuanPM 0:f6a51823dfa8 47 write((uint8_t*)&data_len, 2);
TuanPM 0:f6a51823dfa8 48 write((uint8_t*)&ck, 4);
TuanPM 0:f6a51823dfa8 49 _serial.putc(0xC0);
TuanPM 0:f6a51823dfa8 50
TuanPM 0:f6a51823dfa8 51 if(_serial.getc() != 0xC0)
TuanPM 0:f6a51823dfa8 52 return 0;
TuanPM 0:f6a51823dfa8 53 read(header, 8);
TuanPM 0:f6a51823dfa8 54
TuanPM 0:f6a51823dfa8 55 if(header[0] != 0x01 || header[1] != op)
TuanPM 0:f6a51823dfa8 56 return 0;
TuanPM 0:f6a51823dfa8 57 recv_len = (uint16_t*)&header[2];
TuanPM 0:f6a51823dfa8 58 read(recv_data, *recv_len);
TuanPM 0:f6a51823dfa8 59 if(_serial.getc() != 0xC0)
TuanPM 0:f6a51823dfa8 60 return 0;
TuanPM 0:f6a51823dfa8 61
TuanPM 0:f6a51823dfa8 62 return 1;
TuanPM 0:f6a51823dfa8 63 }
TuanPM 0:f6a51823dfa8 64
TuanPM 0:f6a51823dfa8 65 uint8_t ESPTOOL::connect() {
TuanPM 0:f6a51823dfa8 66 _pinEn = 0;
TuanPM 0:f6a51823dfa8 67 _pinPro = 0;
TuanPM 0:f6a51823dfa8 68 wait(0.2);
TuanPM 0:f6a51823dfa8 69 _pinEn = 1;
TuanPM 0:f6a51823dfa8 70 while(_serial.available())
TuanPM 0:f6a51823dfa8 71 _serial.getc();
TuanPM 0:f6a51823dfa8 72
TuanPM 0:f6a51823dfa8 73 }
TuanPM 0:f6a51823dfa8 74 uint8_t ESPTOOL::sync(){
TuanPM 0:f6a51823dfa8 75 uint8_t i;
TuanPM 0:f6a51823dfa8 76 uint8_t sync_frame[5] = {0x07, 0x07, 0x12, 0x20, 0x55*32};
TuanPM 0:f6a51823dfa8 77 uint8_t recv_frame[5];
TuanPM 0:f6a51823dfa8 78 uint8_t recv_len;
TuanPM 0:f6a51823dfa8 79 for(i=0; i<7; i++)
TuanPM 0:f6a51823dfa8 80 command(ESP_SYNC, sync_frame, 5, 0, recv_frame, &faerecv_len);
TuanPM 0:f6a51823dfa8 81 }