mirror of
https://github.com/mnzlmstr/N64toiQue
synced 2024-11-21 08:45:14 -05:00
add: precompiled binary for firebeetle-esp32, add: HTTPUpdate functionality
This commit is contained in:
parent
55f3a678a4
commit
14973773db
@ -33,5 +33,7 @@ Yes you will have to edit the Pins used in the file `PinMappings.h` to match the
|
||||
<br/>
|
||||
15.05.2020: <br/>
|
||||
- PCB has been tested an appears to be working just fine<br/>
|
||||
- Add: Updater to be able to upload new firmware over HTTP hosted by ESP32
|
||||
- Add: precompiled binary for firebeetle-esp32
|
||||
- TODO: redesigning PCB to incorporate LEDs for user feedback as well as Programming Header<br/>
|
||||
<br/>
|
||||
|
BIN
bin/src.ino.firebeetle32.bin
Normal file
BIN
bin/src.ino.firebeetle32.bin
Normal file
Binary file not shown.
BIN
src/.DS_Store
vendored
Normal file
BIN
src/.DS_Store
vendored
Normal file
Binary file not shown.
@ -5,26 +5,26 @@
|
||||
|
||||
#define PIN_BUTTON_A 15
|
||||
#define PIN_BUTTON_B 5
|
||||
#define PIN_BUTTON_Z 23
|
||||
#define PIN_BUTTON_S 1
|
||||
#define PIN_BUTTON_L 1
|
||||
#define PIN_BUTTON_R 1
|
||||
#define PIN_BUTTON_Z 32
|
||||
#define PIN_BUTTON_S 23
|
||||
#define PIN_BUTTON_L 33
|
||||
#define PIN_BUTTON_R 17
|
||||
|
||||
#define PIN_DPAD_UP 1
|
||||
#define PIN_DPAD_DOWN 1
|
||||
#define PIN_DPAD_LEFT 1
|
||||
#define PIN_DPAD_RIGHT 1
|
||||
#define PIN_DPAD_UP 26
|
||||
#define PIN_DPAD_DOWN 16
|
||||
#define PIN_DPAD_LEFT 25
|
||||
#define PIN_DPAD_RIGHT 18
|
||||
|
||||
#define PIN_C_UP 1
|
||||
#define PIN_C_DOWN 1
|
||||
#define PIN_C_LEFT 1
|
||||
#define PIN_C_RIGHT 1
|
||||
#define PIN_C_UP 22
|
||||
#define PIN_C_DOWN 21
|
||||
#define PIN_C_LEFT 19
|
||||
#define PIN_C_RIGHT 12
|
||||
|
||||
#define PIN_A_AXIS_X 14
|
||||
#define PIN_B_AXIS_X 27
|
||||
|
||||
#define PIN_A_AXIS_Y 2
|
||||
#define PIN_B_AXIS_Y 4
|
||||
#define PIN_A_AXIS_Y 4
|
||||
#define PIN_B_AXIS_Y 2
|
||||
|
||||
#define LINE_WRITE_HIGH pinMode(DATA_PIN,INPUT_PULLUP)
|
||||
#define LINE_WRITE_LOW pinMode(DATA_PIN,OUTPUT)
|
||||
|
184
src/Updater.cpp
Normal file
184
src/Updater.cpp
Normal file
@ -0,0 +1,184 @@
|
||||
#include "Updater.h"
|
||||
|
||||
#include <WiFi.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <WebServer.h>
|
||||
#include <ESPmDNS.h>
|
||||
#include <Update.h>
|
||||
|
||||
void handleSetup(void);
|
||||
|
||||
/** Function to check if the user wants to update the device.
|
||||
* This is signaled by pressing all C Buttons + Start
|
||||
* if so update process is initiated
|
||||
* @param controller pointer to struct containing presed buttons
|
||||
* @return none
|
||||
*/
|
||||
void checkUpdateCombo(ControllerData *controller)
|
||||
{
|
||||
// if button combi is pressed
|
||||
if(controller->CUp && controller->CDown && controller->CLeft && controller->CRight && controller->buttonStart)
|
||||
{
|
||||
handleSetup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ===== TAKEN FROM ARDUINO, slight modifications =====
|
||||
|
||||
const char* host = "n64toique";
|
||||
|
||||
WebServer server(80);
|
||||
|
||||
/*
|
||||
* Login page
|
||||
*/
|
||||
|
||||
const char* loginIndex =
|
||||
"<form name='loginForm'>"
|
||||
"<table width='20%' bgcolor='A09F9F' align='center'>"
|
||||
"<tr>"
|
||||
"<td colspan=2>"
|
||||
"<center><font size=4><b>ESP32 Login Page</b></font></center>"
|
||||
"<br>"
|
||||
"</td>"
|
||||
"<br>"
|
||||
"<br>"
|
||||
"</tr>"
|
||||
"<td>Username:</td>"
|
||||
"<td><input type='text' size=25 name='userid'><br></td>"
|
||||
"</tr>"
|
||||
"<br>"
|
||||
"<br>"
|
||||
"<tr>"
|
||||
"<td>Password:</td>"
|
||||
"<td><input type='Password' size=25 name='pwd'><br></td>"
|
||||
"<br>"
|
||||
"<br>"
|
||||
"</tr>"
|
||||
"<tr>"
|
||||
"<td><input type='submit' onclick='check(this.form)' value='Login'></td>"
|
||||
"</tr>"
|
||||
"</table>"
|
||||
"</form>"
|
||||
"<script>"
|
||||
"function check(form)"
|
||||
"{"
|
||||
"if(form.userid.value=='n64toique' && form.pwd.value=='n64toique')"
|
||||
"{"
|
||||
"window.open('/serverIndex')"
|
||||
"}"
|
||||
"else"
|
||||
"{"
|
||||
" alert('Error Password or Username')/*displays error message*/"
|
||||
"}"
|
||||
"}"
|
||||
"</script>";
|
||||
|
||||
/*
|
||||
* Server Index Page
|
||||
*/
|
||||
|
||||
const char* serverIndex =
|
||||
"<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>"
|
||||
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
|
||||
"<input type='file' name='update'>"
|
||||
"<input type='submit' value='Update'>"
|
||||
"</form>"
|
||||
"<div id='prg'>progress: 0%</div>"
|
||||
"<script>"
|
||||
"$('form').submit(function(e){"
|
||||
"e.preventDefault();"
|
||||
"var form = $('#upload_form')[0];"
|
||||
"var data = new FormData(form);"
|
||||
" $.ajax({"
|
||||
"url: '/update',"
|
||||
"type: 'POST',"
|
||||
"data: data,"
|
||||
"contentType: false,"
|
||||
"processData:false,"
|
||||
"xhr: function() {"
|
||||
"var xhr = new window.XMLHttpRequest();"
|
||||
"xhr.upload.addEventListener('progress', function(evt) {"
|
||||
"if (evt.lengthComputable) {"
|
||||
"var per = evt.loaded / evt.total;"
|
||||
"$('#prg').html('progress: ' + Math.round(per*100) + '%');"
|
||||
"}"
|
||||
"}, false);"
|
||||
"return xhr;"
|
||||
"},"
|
||||
"success:function(d, s) {"
|
||||
"console.log('success!')"
|
||||
"},"
|
||||
"error: function (a, b, c) {"
|
||||
"}"
|
||||
"});"
|
||||
"});"
|
||||
"</script>";
|
||||
|
||||
/*
|
||||
* setup function
|
||||
*/
|
||||
void handleSetup(void) {
|
||||
//Serial.begin(115200);
|
||||
|
||||
// Connect to WiFi network
|
||||
WiFi.beginSmartConfig();
|
||||
Serial.println("");
|
||||
|
||||
// Wait for connection
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
}
|
||||
|
||||
/*use mdns for host name resolution*/
|
||||
if (!MDNS.begin(host)) { //http://esp32.local
|
||||
Serial.println("Error setting up MDNS responder!");
|
||||
while (1) {
|
||||
delay(1000);
|
||||
}
|
||||
}
|
||||
Serial.println("mDNS responder started");
|
||||
/*return index page which is stored in serverIndex */
|
||||
server.on("/", HTTP_GET, []() {
|
||||
server.sendHeader("Connection", "close");
|
||||
server.send(200, "text/html", loginIndex);
|
||||
});
|
||||
server.on("/serverIndex", HTTP_GET, []() {
|
||||
server.sendHeader("Connection", "close");
|
||||
server.send(200, "text/html", serverIndex);
|
||||
});
|
||||
/*handling uploading firmware file */
|
||||
server.on("/update", HTTP_POST, []() {
|
||||
server.sendHeader("Connection", "close");
|
||||
server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
|
||||
ESP.restart();
|
||||
}, []() {
|
||||
HTTPUpload& upload = server.upload();
|
||||
if (upload.status == UPLOAD_FILE_START) {
|
||||
Serial.printf("Update: %s\n", upload.filename.c_str());
|
||||
if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size
|
||||
Update.printError(Serial);
|
||||
}
|
||||
} else if (upload.status == UPLOAD_FILE_WRITE) {
|
||||
/* flashing firmware to ESP*/
|
||||
if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) {
|
||||
Update.printError(Serial);
|
||||
}
|
||||
} else if (upload.status == UPLOAD_FILE_END) {
|
||||
if (Update.end(true)) { //true to set the size to the current progress
|
||||
Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
|
||||
} else {
|
||||
Update.printError(Serial);
|
||||
}
|
||||
}
|
||||
});
|
||||
server.begin();
|
||||
|
||||
while(true)
|
||||
{
|
||||
delay(50);
|
||||
server.handleClient();
|
||||
}
|
||||
}
|
14
src/Updater.h
Normal file
14
src/Updater.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef UPDATER_H
|
||||
#define UPDATER_H
|
||||
|
||||
#include "ControllerBuffer.h"
|
||||
|
||||
/** Function to check if the user wants to update the device.
|
||||
* This is signaled by pressing all C Buttons + Start
|
||||
* if so update process is initiated
|
||||
* @param controller pointer to struct containing presed buttons
|
||||
* @return none
|
||||
*/
|
||||
extern void checkUpdateCombo(ControllerData *controller);
|
||||
|
||||
#endif
|
@ -2,6 +2,7 @@
|
||||
#include "ControllerData.h"
|
||||
#include "ControllerBuffer.h"
|
||||
#include "Debug.h"
|
||||
#include "Updater.h"
|
||||
|
||||
ControllerData controller;
|
||||
|
||||
@ -36,4 +37,11 @@ void loop()
|
||||
|
||||
// polling must not occur faster than every 20 ms
|
||||
delay(14);
|
||||
|
||||
checkUpdateCombo(&controller);
|
||||
|
||||
//Serial.printf("DPAD: %i %i %i %i \n",controller.DPadUp,controller.DPadDown,controller.DPadLeft,controller.DPadRight);
|
||||
//Serial.printf("C: %i %i %i %i \n",controller.CUp,controller.CDown,controller.CLeft,controller.CRight);
|
||||
|
||||
//delay(5000);
|
||||
}
|
Loading…
Reference in New Issue
Block a user