added support for ota and ntp
This commit is contained in:
+91
-1
@@ -73,6 +73,26 @@ void ChronoWebServer::_handleRoot() {
|
||||
.then(data => console.log(data))\
|
||||
.catch(error => console.error('Error:', error));\
|
||||
}\
|
||||
function doOta(){\
|
||||
const fileInput = document.getElementById('otaFile');\
|
||||
if (!fileInput.files.length) {\
|
||||
alert('Please select a firmware file');\
|
||||
return;\
|
||||
}\
|
||||
const formData = new FormData();\
|
||||
formData.append('otaFile', fileInput.files[0]);\
|
||||
fetch('/ota', {\
|
||||
method: 'POST',\
|
||||
body: formData\
|
||||
})\
|
||||
.then(response => response.text())\
|
||||
.then(data => {\
|
||||
console.log(data);\
|
||||
alert('OTA update in progress... Device will restart.');\
|
||||
window.location.href = '/';\
|
||||
})\
|
||||
.catch(error => console.error('Error:', error));\
|
||||
}\
|
||||
document.addEventListener('DOMContentLoaded', function() {\
|
||||
const rows = document.querySelectorAll('.clickable-row');\
|
||||
rows.forEach(row => {\
|
||||
@@ -114,6 +134,12 @@ void ChronoWebServer::_handleRoot() {
|
||||
<button onclick='reset()'>Reset</button>\
|
||||
<button onclick='format()'>Format</button>\
|
||||
<button onclick='toggleTestMode()'>Toggle Test Mode</button>\
|
||||
<button onclick='doOta()'>OTA Update</button>\
|
||||
</div>\
|
||||
<div style='margin-top:20px; padding: 10px; border: 1px solid #999;'>\
|
||||
<h3>OTA Firmware Update</h3>\
|
||||
<input type='file' id='otaFile' accept='.bin,.bin'></input>\
|
||||
<p style='font-size: 12px; color: #666;'>Select a .bin firmware file to update over-the-air</p>\
|
||||
</div>\
|
||||
<div style='margin-top:100px; position:relative;'>\
|
||||
<h3>Gun Profiles</h3>\
|
||||
@@ -430,10 +456,73 @@ void ChronoWebServer::setTestModeCallback(void (*pFunc)()){
|
||||
testModeCallback=pFunc;
|
||||
}
|
||||
void ChronoWebServer::_handleTestMode(){
|
||||
Serial.println("toggling test mode....");
|
||||
Serial.println("toggling test mode....");
|
||||
testModeCallback();
|
||||
_server.send(200, "text/html", "ok");
|
||||
}
|
||||
void ChronoWebServer::_handleOta(){
|
||||
HTTPMethod method = _server.method();
|
||||
|
||||
if (method == HTTP_GET) {
|
||||
// Serve OTA update page
|
||||
String temp = "<html>\
|
||||
<head>\
|
||||
<title>OTA Firmware Update</title>\
|
||||
<style>\
|
||||
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
|
||||
</style>\
|
||||
</head>\
|
||||
<body>\
|
||||
<h1>OTA Firmware Update</h1>\
|
||||
<p>Select a .bin firmware file to update over-the-air.</p>\
|
||||
<form method='POST' action='/ota' enctype='multipart/form-data'>\
|
||||
<div>\
|
||||
<h3>Firmware File</h3>\
|
||||
<input type='file' name='otaFile' accept='.bin'></input>\
|
||||
</div>\
|
||||
<div style='margin-top: 20px;'>\
|
||||
<button type='submit'>Upload</button>\
|
||||
</div>\
|
||||
</form>\
|
||||
</body>\
|
||||
</html>";
|
||||
_server.send(200, "text/html", temp);
|
||||
}
|
||||
else if (method == HTTP_POST) {
|
||||
// Handle firmware upload
|
||||
HTTPUpload& upload = _server.upload();
|
||||
|
||||
if (upload.status == UPLOAD_FILE_START) {
|
||||
Serial.println("OTA: Starting update...");
|
||||
// Initialize update with the size of the uploaded file
|
||||
if (!Update.begin(upload.totalSize)) {
|
||||
Serial.println("OTA: Error: Not enough space");
|
||||
_server.send(500, "text/plain", "Not enough space");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (upload.status == UPLOAD_FILE_WRITE) {
|
||||
// Write received firmware to flash
|
||||
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
|
||||
Serial.println("OTA: Error: Write failed");
|
||||
_server.send(500, "text/plain", "Write failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (upload.status == UPLOAD_FILE_END) {
|
||||
// End of upload
|
||||
if (Update.end(true)) {
|
||||
Serial.printf("OTA: Update complete: %u bytes\n", upload.totalSize);
|
||||
_server.send(200, "text/html", "<h1>OTA Update Successful!<br>Restarting...</h1>");
|
||||
delay(1000);
|
||||
ESP.restart();
|
||||
} else {
|
||||
Serial.println("OTA: Error: Update end failed");
|
||||
_server.send(500, "text/plain", "Update failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
void ChronoWebServer::init(){
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.begin(ssid, password);
|
||||
@@ -463,6 +552,7 @@ void ChronoWebServer::init(){
|
||||
_server.on("/reset", _handleReset);
|
||||
_server.on("/format", _handleFormat);
|
||||
_server.on("/testmode", _handleTestMode);
|
||||
_server.on("/ota", _handleOta);
|
||||
_server.on("/", _handleRoot);
|
||||
_server.begin();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user