diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..10c3979
Binary files /dev/null and b/.DS_Store differ
diff --git a/README.md b/README.md
index 7edbc49..09015fa 100644
--- a/README.md
+++ b/README.md
@@ -33,5 +33,7 @@ Yes you will have to edit the Pins used in the file `PinMappings.h` to match the
15.05.2020:
- PCB has been tested an appears to be working just fine
+ - 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
diff --git a/bin/src.ino.firebeetle32.bin b/bin/src.ino.firebeetle32.bin
new file mode 100644
index 0000000..a77afa9
Binary files /dev/null and b/bin/src.ino.firebeetle32.bin differ
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..957ced3
Binary files /dev/null and b/src/.DS_Store differ
diff --git a/src/PinMappings.h b/src/PinMappings.h
index 67746ce..e9979e3 100644
--- a/src/PinMappings.h
+++ b/src/PinMappings.h
@@ -5,29 +5,29 @@
#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)
-#endif
\ No newline at end of file
+#endif
diff --git a/src/Updater.cpp b/src/Updater.cpp
new file mode 100644
index 0000000..05b853d
--- /dev/null
+++ b/src/Updater.cpp
@@ -0,0 +1,184 @@
+#include "Updater.h"
+
+#include
+#include
+#include
+#include
+#include
+
+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 =
+ ""
+"";
+
+/*
+ * Server Index Page
+ */
+
+const char* serverIndex =
+""
+""
+ "
progress: 0%
"
+ "";
+
+/*
+ * 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();
+ }
+}
\ No newline at end of file
diff --git a/src/Updater.h b/src/Updater.h
new file mode 100644
index 0000000..7548d61
--- /dev/null
+++ b/src/Updater.h
@@ -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
\ No newline at end of file
diff --git a/src/iQue.ino b/src/src.ino
similarity index 67%
rename from src/iQue.ino
rename to src/src.ino
index e63c010..e3b0918 100644
--- a/src/iQue.ino
+++ b/src/src.ino
@@ -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);
-}
\ No newline at end of file
+
+ 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);
+}