17 #include <SoftwareSerial.h>
20 #ifdef USE_SOFTWARE_SERIAL
22 #define DEBUG_SERIAL_ENABLE
25 #ifdef DEBUG_SERIAL_ENABLE
26 #define dbSerialPrint(a) dbSerial.print(a)
27 #define dbSerialPrintln(a) dbSerial.println(a)
28 #define dbSerialBegin(a) dbSerial.begin(a)
30 #define dbSerialPrint(a) do{}while(0)
31 #define dbSerialPrintln(a) do{}while(0)
32 #define dbSerialBegin(a) do{}while(0)
37 _file_name = file_name;
38 _SD_chip_select = SD_chip_select;
39 _download_baudrate = download_baudrate;
44 NexUpload(file_Name.c_str(),SD_chip_select,download_baudrate);
47 void NexUpload::upload(
void)
52 dbSerialPrintln(
"the file is error");
55 if(_getBaudrate() == 0)
57 dbSerialPrintln(
"get baudrate error");
60 if(!_setDownloadBaudrate(_download_baudrate))
62 dbSerialPrintln(
"modify baudrate error");
65 if(!_downloadTftFile())
67 dbSerialPrintln(
"download file error");
70 dbSerialPrintln(
"download ok\r\n");
73 uint16_t NexUpload::_getBaudrate(
void)
75 uint32_t baudrate_array[7] = {115200,19200,9600,57600,38400,4800,2400};
76 for(uint8_t i = 0; i < 7; i++)
78 if(_searchBaudrate(baudrate_array[i]))
80 _baudrate = baudrate_array[i];
81 dbSerialPrintln(
"get baudrate");
88 bool NexUpload::_checkFile(
void)
90 dbSerialPrintln(
"start _checkFile");
91 if(!SD.begin(_SD_chip_select))
93 dbSerialPrintln(
"init sd failed");
96 if(!SD.exists(_file_name))
98 dbSerialPrintln(
"file is not exit");
100 _myFile = SD.open(_file_name);
101 _undownloadByte = _myFile.size();
102 dbSerialPrintln(
"tft file size is:");
103 dbSerialPrintln(_undownloadByte);
104 dbSerialPrintln(
"check file ok");
108 bool NexUpload::_searchBaudrate(uint32_t baudrate)
110 String
string = String(
"");
112 this->sendCommand(
"");
113 this->sendCommand(
"connect");
114 this->recvRetString(
string);
115 if(
string.indexOf(
"comok") != -1)
122 void NexUpload::sendCommand(
const char* cmd)
136 uint16_t NexUpload::recvRetString(String &
string, uint32_t timeout,
bool recv_flag)
141 bool exit_flag =
false;
143 while (millis() - start <= timeout)
155 if(
string.indexOf(0x05) != -1)
166 ret =
string.length();
170 bool NexUpload::_setDownloadBaudrate(uint32_t baudrate)
172 String
string = String(
"");
173 String cmd = String(
"");
175 String filesize_str = String(_undownloadByte,10);
176 String baudrate_str = String(baudrate,10);
177 cmd =
"whmi-wri " + filesize_str +
"," + baudrate_str +
",0";
179 dbSerialPrintln(cmd);
180 this->sendCommand(
"");
181 this->sendCommand(cmd.c_str());
184 this->recvRetString(
string,500);
185 if(
string.indexOf(0x05) != -1)
192 bool NexUpload::_downloadTftFile(
void)
195 uint16_t send_timer = 0;
196 uint16_t last_send_num = 0;
197 String
string = String(
"");
198 send_timer = _undownloadByte / 4096 + 1;
199 last_send_num = _undownloadByte % 4096;
206 for(uint16_t j = 1; j <= 4096; j++)
208 if(j <= last_send_num)
222 for(uint16_t i = 1; i <= 4096; i++)
228 this->recvRetString(
string,500,
true);
229 if(
string.indexOf(0x05) != -1)
#define nexSerial
Define nexSerial for communicate with Nextion touch panel.
NexUpload(const char *file_name, const uint8_t SD_chip_select, uint32_t download_baudrate)
Constructor.
#define dbSerial
Define dbSerial for the output of debug messages.
The definition of class NexUpload.