second commit
This commit is contained in:
233
src/updatebyme.cpp
Normal file
233
src/updatebyme.cpp
Normal file
@ -0,0 +1,233 @@
|
||||
#include "updatebyme.h"
|
||||
#include "SDmanger.h"
|
||||
void UpDateClassByme::performUpdate(Stream &updateSource, size_t updateSize)
|
||||
{
|
||||
if (Update.begin(updateSize))
|
||||
{
|
||||
Serial.println("Writes : ");
|
||||
size_t written = Update.writeStream(updateSource);
|
||||
if (written == updateSize)
|
||||
{
|
||||
Serial.println("Writes : " + String(written) + " successfully");
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("Written only : " + String(written) + "/" + String(updateSize) + ". Retry?");
|
||||
}
|
||||
if (Update.end())
|
||||
{
|
||||
Serial.println("OTA finished!");
|
||||
if (Update.isFinished())
|
||||
{
|
||||
Serial.println("Restart ESP device!");
|
||||
abort();
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("OTA not fiished");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("Error occured #: " + String(Update.getError()));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Serial.println("Cannot beggin update");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
size_t UpDateClassByme::DownloadFirmwareForurl(String version)
|
||||
{
|
||||
String url="/weather/firmware/esp32/firmware_"+version+".bin";
|
||||
int err = http->get(url.c_str());
|
||||
if (err != 0)
|
||||
{
|
||||
Serial.println(F("Date failed to connect"));
|
||||
vTaskDelay(10000);
|
||||
return 0;
|
||||
}
|
||||
int status = http->responseStatusCode();
|
||||
if (!status)
|
||||
{
|
||||
vTaskDelay(10000);
|
||||
return 0;
|
||||
}
|
||||
Serial.print(F("Response status code: "));
|
||||
Serial.println(status);
|
||||
// SerialMon.println(F("Response Headers:"));
|
||||
size_t count=0;
|
||||
while (http->headerAvailable())
|
||||
{
|
||||
String headerName = http->readHeaderName();
|
||||
String headerValue = http->readHeaderValue();
|
||||
Serial.println("Date: " + headerName + " : " + headerValue);
|
||||
if (headerName=="Content-Length")
|
||||
{
|
||||
count=headerValue.toInt();
|
||||
/* code */
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Serial.println("lenth is "+String(count));
|
||||
if (http->isResponseChunked())
|
||||
{
|
||||
Serial.println(F("Date The response is chunked"));
|
||||
}
|
||||
char *str=new char[1000];
|
||||
int lent=count/1000;
|
||||
File file;
|
||||
|
||||
file = SD_MMC.open("/update.bin", "wb");
|
||||
|
||||
for (size_t i = 0; i < lent; i++)
|
||||
{
|
||||
http->readBytes(str,1000);
|
||||
file.write((const byte *)str,1000);
|
||||
Serial.print("download ");
|
||||
Serial.println(String(i*100/lent));
|
||||
/* code */
|
||||
}
|
||||
http->readBytes(str,count%1000);
|
||||
file.write((const byte *)str,count%1000);
|
||||
file.flush();
|
||||
file.close();
|
||||
//performUpdate(*http,cout);
|
||||
|
||||
|
||||
// http->readBytes
|
||||
Serial.println("adfasdfsadfsdfsd");
|
||||
//Serial.write(str,cout);
|
||||
//Serial.println(body.length());
|
||||
http->stop();
|
||||
return count;
|
||||
// return body;
|
||||
}
|
||||
|
||||
void UpDateClassByme::initme(String Version)
|
||||
{
|
||||
CurrentVersion=Version;
|
||||
|
||||
}
|
||||
void UpDateClassByme::updateversion()
|
||||
{
|
||||
String Targetversion=GetValueFromNet("/weather/php/upVserion.php",StationID+":"+CurrentVersion);
|
||||
}
|
||||
bool UpDateClassByme::CheckAndUpdate()
|
||||
{
|
||||
|
||||
|
||||
String Targetversion=GetValueFromNet("/weather/php/GetVserion.php",StationID);
|
||||
if ( Targetversion=="0"||Targetversion==CurrentVersion||Targetversion=="")
|
||||
{
|
||||
return true;
|
||||
|
||||
}
|
||||
Serial.println("targetvesion is:"+Targetversion);
|
||||
|
||||
//size_t countdownload1=375584;
|
||||
size_t countdownload1=DownloadFirmwareForurl(Targetversion);
|
||||
if (countdownload1<10000)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Serial.println("count download is:"+String(countdownload1));
|
||||
|
||||
String MD5=GetValueFromNet("/weather/php/GetMD5Value.php",Targetversion);
|
||||
|
||||
if (MD5=="0")
|
||||
{
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
// updater.setMD5(MD5);
|
||||
MD5Builder md5my;
|
||||
|
||||
|
||||
File file;
|
||||
|
||||
file = SD_MMC.open("/update.bin", "rb");
|
||||
md5my.begin();
|
||||
md5my.addStream(file,countdownload1);
|
||||
md5my.calculate();
|
||||
String md5com=md5my.toString();
|
||||
Serial.println("md5 comput is:"+md5my.toString());
|
||||
Serial.println("md5 should is:"+MD5);
|
||||
file.close();
|
||||
if (MD5==md5com)
|
||||
{
|
||||
file = SD_MMC.open("/update.bin", "rb");
|
||||
performUpdate(file,countdownload1);
|
||||
return true;
|
||||
/* code */
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
UpDateClassByme::UpDateClassByme(HttpClient *httptm)
|
||||
{
|
||||
http=httptm;
|
||||
StationID="000";
|
||||
}
|
||||
String UpDateClassByme::GetValueFromNet(String url,String Key)
|
||||
{
|
||||
|
||||
http->beginRequest();
|
||||
http->post(url.c_str());
|
||||
|
||||
|
||||
http->sendHeader(HTTP_HEADER_CONTENT_LENGTH, Key.length());
|
||||
http->endRequest();
|
||||
int err = http->write((const byte *)Key.c_str(), Key.length());
|
||||
Serial.print("send date size");
|
||||
Serial.println(err);
|
||||
|
||||
if (err == 0)
|
||||
{
|
||||
|
||||
http->stop();
|
||||
return "-1";
|
||||
}
|
||||
int status = http->responseStatusCode();
|
||||
if (!status)
|
||||
{
|
||||
http->stop();
|
||||
return "-1";
|
||||
}
|
||||
|
||||
int length = http->contentLength();
|
||||
if (length == 0)
|
||||
{
|
||||
http->stop();
|
||||
return "-1";
|
||||
}
|
||||
|
||||
String body = http->responseBody();
|
||||
Serial.println("body:"+body);
|
||||
|
||||
http->stop();
|
||||
return body;
|
||||
}
|
Reference in New Issue
Block a user