diff --git a/add_CRC.py b/add_CRC.py index 2ec7ada..5b3bbd0 100644 --- a/add_CRC.py +++ b/add_CRC.py @@ -1,7 +1,8 @@ Import("env") +import sys # access to global build environment -print env +print (env) CRCTable = [ 0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241, @@ -41,18 +42,20 @@ CRCTable = [ def appendCRC(source, target, env) : - print "Adding CRC to %s" % str(target[0]) + print ("Adding CRC to %s" % str(target[0])) # read entire firmware binary file into a string f = open(str(target[0]), "rb") - bindata = f.read() + binfile = f.read() f.close() # create CRC for the firmware binary input file CRCword = 0xffff count = 0 - for val in bindata : - byte = ord(val) + for byte in binfile : + if sys.version_info[0] < 3 : + byte = ord(byte) + if(count == 0) : byte = 0xff temp = (byte ^ CRCword) & 0xff # mask to keep in bouds of lookup table @@ -60,12 +63,16 @@ def appendCRC(source, target, env) : CRCword = CRCword ^ CRCTable[temp] count = count + 1 - print "CRC result = %X from %d bytes" % (CRCword, count) + print ("CRC result = %X from %d bytes" % (CRCword, count)) # append CRC to the firmware binary file o = open(str(target[0]), "a+b") - o.write(chr(CRCword & 0xff)) - o.write(chr((CRCword >> 8) & 0xff)) + if sys.version_info[0] < 3 : + o.write(chr(CRCword & 0xff)) + o.write(chr((CRCword >> 8) & 0xff)) + else : + o.write(CRCword.to_bytes(2, byteorder='little')) + o.close() diff --git a/src/Afterburner.cpp b/src/Afterburner.cpp index a615552..aee388a 100644 --- a/src/Afterburner.cpp +++ b/src/Afterburner.cpp @@ -115,6 +115,7 @@ #include #include #include +#include "Utility/MQTTsetup.h" // SSID & password now stored in NV storage - these are still the default values. //#define AP_SSID "Afterburner" @@ -183,7 +184,9 @@ TelnetSpy DebugPort; CGPIOin GPIOin; CGPIOout GPIOout; CGPIOalg GPIOalg; -sMQTTparams MQTTsetup; + +CMQTTsetup MQTTmenu; + sRxLine PCline; @@ -1215,12 +1218,9 @@ void checkDebugCommands() bTestBTModule = Bluetooth.test(rxVal); return; } - if(bSetupMQTT) { - bSetupMQTT = HandleMQTTsetup(rxVal); - if(!bSetupMQTT) { // left MQTT setup menu + if(MQTTmenu.Handle(rxVal)) { + if(rxVal == 0) showMainmenu(); - mqttInit(); - } return; } @@ -1382,9 +1382,7 @@ void checkDebugCommands() PCline.clear(); } else if(rxVal == 'm') { - MQTTsetup = NVstore.getMQTTinfo(); - bSetupMQTT = true; - showMQTTmenu(); + MQTTmenu.setActive(); } else if(rxVal == 'o') { bReportOEMresync = !bReportOEMresync; @@ -1784,208 +1782,6 @@ void setAPpassword(const char* name) ESP.restart(); } -const char* MQTTsetupmodes[] = { - "Enter MQTT broker's IP address", - "Enter MQTT broker's port", - "Enter MQTT broker's username", - "Enter MQTT broker's password", - "Enter root topic name", - "Enter QoS level", - "Enable? (Y)es / (N)o" -}; - -bool HandleMQTTsetup(char rxVal) -{ - static int mode = 0; - static int idx = 0; - static char lclbuffer[128]; - switch(mode) { - case 0: - if(rxVal == 0x1b) { - MQTTsetup = NVstore.getMQTTinfo(); - return false; - } -// if(rxVal == '\r' || rxVal == '\n') { - if(rxVal == '\n') { - NVstore.setMQTTinfo(MQTTsetup); - NVstore.save(); - return false; - } - if(rxVal >= '1' && rxVal <= '7') { - mode = rxVal - '0'; - idx = 0; - DebugPort.print("\014"); - DebugPort.print(MQTTsetupmodes[mode-1]); - switch(mode) { - case 1: DebugPort.printf(" (%s)", MQTTsetup.host); break; - case 2: DebugPort.printf(" (%d)", MQTTsetup.port); break; - case 3: DebugPort.printf(" (%s)", MQTTsetup.username); break; - case 4: DebugPort.printf(" (%s)", MQTTsetup.password); break; - case 5: DebugPort.printf(" (%s)", MQTTsetup.topic); break; - case 6: DebugPort.printf(" (%d)", MQTTsetup.qos); break; - case 7: DebugPort.printf(" (%s)", MQTTsetup.enabled ? "YES" : "NO"); break; - } - DebugPort.print("... "); - } - else { - showMQTTmenu(); - } - return true; - case 1: // enter MQTT broker IP - if(rxVal < ' ') { - if(idx == 0) strcpy(lclbuffer, MQTTsetup.host); - if(rxVal == '\n') { - strncpy(MQTTsetup.host, lclbuffer, 127); - MQTTsetup.host[127] = 0; - mode = 0; - showMQTTmenu(); - } - if(rxVal == 0x1b) { - mode = 0; - showMQTTmenu(); - } - return true; - } - if(idx == 0) memset(lclbuffer, 0, sizeof(lclbuffer)); - DebugPort.print(rxVal); - lclbuffer[idx++] = rxVal; - if(idx == 127) { - strncpy(MQTTsetup.host, lclbuffer, 127); - MQTTsetup.host[127] = 0; - mode = 0; - showMQTTmenu(); - return true; - } - break; - case 2: // enter MQTT broker port - if(rxVal < ' ') { - if(idx == 0) sprintf(lclbuffer, "%d", MQTTsetup.port); - if(rxVal == '\n') { - int val = atoi(lclbuffer); - MQTTsetup.port = val; - mode = 0; - showMQTTmenu(); - } - if(rxVal == 0x1b) { - mode = 0; - showMQTTmenu(); - } - return true; - } - DebugPort.print(rxVal); - if(isdigit(rxVal)) { - if(idx == 0) memset(lclbuffer, 0, sizeof(lclbuffer)); - lclbuffer[idx++] = rxVal; - if(idx == 5) { - int val = atoi(lclbuffer); - MQTTsetup.port = val; - mode = 0; - showMQTTmenu(); - return true; - } - } - else { - mode = 0; - showMQTTmenu(); - return true; - } - break; - case 3: // enter MQTT broker username - if(rxVal < ' ') { - if(idx == 0) strcpy(lclbuffer, MQTTsetup.username); - if(rxVal == '\n') { - strncpy(MQTTsetup.username, lclbuffer, 31); - MQTTsetup.username[31] = 0; - mode = 0; - showMQTTmenu(); - } - if(rxVal == 0x1b) { - mode = 0; - showMQTTmenu(); - } - return true; - } - if(idx == 0) memset(lclbuffer, 0, sizeof(lclbuffer)); - DebugPort.print(rxVal); - lclbuffer[idx++] = rxVal; - if(idx == 31) { - strncpy(MQTTsetup.username, lclbuffer, 31); - MQTTsetup.username[31] = 0; - mode = 0; - showMQTTmenu(); - return true; - } - break; - case 4: // enter MQTT broker username - if(rxVal < ' ') { - if(idx == 0) strcpy(lclbuffer, MQTTsetup.password); - if(rxVal == '\n') { - strncpy(MQTTsetup.password, lclbuffer, 31); - MQTTsetup.password[31] = 0; - mode = 0; - showMQTTmenu(); - } - if(rxVal == 0x1b) { - mode = 0; - showMQTTmenu(); - } - return true; - } - if(idx == 0) memset(lclbuffer, 0, sizeof(lclbuffer)); - DebugPort.print(rxVal); - lclbuffer[idx++] = rxVal; - if(idx == 31) { - strncpy(MQTTsetup.password, lclbuffer, 31); - MQTTsetup.password[31] = 0; - mode = 0; - showMQTTmenu(); - return true; - } - break; - case 5: // enter root topic name - if(rxVal < ' ') { - if(idx == 0) strcpy(lclbuffer, MQTTsetup.topic); - if(rxVal == '\n') { - strncpy(MQTTsetup.topic, lclbuffer, 31); - MQTTsetup.topic[31] = 0; - mode = 0; - showMQTTmenu(); - } - if(rxVal == 0x1b) { - mode = 0; - showMQTTmenu(); - } - return true; - } - if(idx == 0) memset(lclbuffer, 0, sizeof(lclbuffer)); - DebugPort.print(rxVal); - lclbuffer[idx++] = rxVal; - if(idx == 31) { - strncpy(MQTTsetup.topic, lclbuffer, 31); - MQTTsetup.topic[31] = 0; - mode = 0; - showMQTTmenu(); - return true; - } - break; - case 6: - if(rxVal >= '0' && rxVal <= '2') { - MQTTsetup.qos = rxVal - '0'; - } - mode = 0; - showMQTTmenu(); - return true; - case 7: - if(tolower(rxVal) == 'y') - MQTTsetup.enabled = true; - if(tolower(rxVal) == 'n') - MQTTsetup.enabled = false; - mode = 0; - showMQTTmenu(); - return true; - } - return true; -} void showMainmenu() { @@ -2012,19 +1808,3 @@ void showMainmenu() DebugPort.println(""); } -void showMQTTmenu() -{ - DebugPort.print("\014"); - DebugPort.println("MQTT broker configuration"); - DebugPort.println(""); - DebugPort.printf(" <1> - set IP address, currently \"%s\"\r\n", MQTTsetup.host); - DebugPort.printf(" <2> - set port, currently %d\r\n", MQTTsetup.port); - DebugPort.printf(" <3> - set username, currently \"%s\"\r\n", MQTTsetup.username); - DebugPort.printf(" <4> - set password, currently \"%s\"\r\n", MQTTsetup.password); - DebugPort.printf(" <5> - set root topic, currently \"%s\"\r\n", MQTTsetup.topic); - DebugPort.printf(" <6> - set QoS, currently %d\r\n", MQTTsetup.qos); - DebugPort.printf(" <7> - set enabled, currently %s\r\n", MQTTsetup.enabled ? "ON" : "OFF"); - DebugPort.printf(" - save and exit\r\n"); - DebugPort.printf(" - abort\r\n"); -} - diff --git a/src/OLED/MQTTScreen.cpp b/src/OLED/MQTTScreen.cpp index 72a6868..74783d9 100644 --- a/src/OLED/MQTTScreen.cpp +++ b/src/OLED/MQTTScreen.cpp @@ -95,6 +95,9 @@ CMQTTScreen::show() yPos += _display.textHeight() + 2; sprintf(msg, "%s/%s", NVstore.getMQTTinfo().username, NVstore.getMQTTinfo().password); _printMenuText(border, yPos, msg); + yPos += _display.textHeight() + 2; + sprintf(msg, "%s", NVstore.getMQTTinfo().topic); + _printMenuText(border, yPos, msg); return true; } diff --git a/src/Utility/MQTTsetup.cpp b/src/Utility/MQTTsetup.cpp new file mode 100644 index 0000000..04bcee4 --- /dev/null +++ b/src/Utility/MQTTsetup.cpp @@ -0,0 +1,199 @@ +#include "NVStorage.h" +#include "DebugPort.h" +#include "MQTTsetup.h" + +#ifdef newmqttmenu + +/*const char* MQTTsetupmodes[] = { + "Enter MQTT broker's IP address", + "Enter MQTT broker's port", + "Enter MQTT broker's username", + "Enter MQTT broker's password", + "Enter root topic name", + "Enter QoS level", + "Enable? (Y)es / (N)o" +};*/ + +CMQTTsetup::CMQTTsetup() +{ + _active = false; +} + +void +CMQTTsetup::setActive() +{ + _active = true; + showMQTTmenu(true); +} + + +void +CMQTTsetup::showMQTTmenu(bool init) +{ + if(init) + _MQTTsetup = NVstore.getMQTTinfo(); + + DebugPort.print("\014"); + DebugPort.println("MQTT broker configuration"); + DebugPort.println(""); + DebugPort.printf(" <1> - set IP address, currently \"%s\"\r\n", _MQTTsetup.host); + DebugPort.printf(" <2> - set port, currently %d\r\n", _MQTTsetup.port); + DebugPort.printf(" <3> - set username, currently \"%s\"\r\n", _MQTTsetup.username); + DebugPort.printf(" <4> - set password, currently \"%s\"\r\n", _MQTTsetup.password); + DebugPort.printf(" <5> - set root topic, currently \"%s\"\r\n", _MQTTsetup.topic); + DebugPort.printf(" <6> - set QoS, currently %d\r\n", _MQTTsetup.qos); + DebugPort.printf(" <7> - set enabled, currently %s\r\n", _MQTTsetup.enabled ? "ON" : "OFF"); + DebugPort.printf(" - save and exit\r\n"); + DebugPort.printf(" - abort\r\n"); +} + +bool +CMQTTsetup::Handle(char& rxVal) +{ + if(_active) { + _active = HandleMQTTsetup(rxVal); + if(!_active) + rxVal = 0; + return true; + } + return false; +} + +bool +CMQTTsetup::HandleMQTTsetup(char rxVal) +{ + bool bJumptoMQTTmenuRoot = false; + switch(_mode) { + case 0: + if(rxVal == 0x1b) { + _MQTTsetup = NVstore.getMQTTinfo(); + return false; + } + if(rxVal == '\n') { + NVstore.setMQTTinfo(_MQTTsetup); + NVstore.save(); + return false; + } + if(rxVal >= '1' && rxVal <= '7') { + _mode = rxVal - '0'; + _idx = 0; + DebugPort.print("\014"); + switch(_mode) { + case 1: DebugPort.printf("Enter MQTT broker's IP address (%s)", _MQTTsetup.host); break; + case 2: DebugPort.printf("Enter MQTT broker's port (%d)", _MQTTsetup.port); break; + case 3: DebugPort.printf("Enter MQTT broker's username (%s)", _MQTTsetup.username); break; + case 4: DebugPort.printf("Enter MQTT broker's password (%s)", _MQTTsetup.password); break; + case 5: DebugPort.printf("Enter root topic name (%s)", _MQTTsetup.topic); break; + case 6: DebugPort.printf("Enter QoS level (%d)", _MQTTsetup.qos); break; + case 7: DebugPort.printf("Enable MQTT? (Y)es / (N)o (%s)", _MQTTsetup.enabled ? "YES" : "NO"); break; + } + DebugPort.print("... "); + } + else { + showMQTTmenu(); + } + return true; + case 1: // enter MQTT broker IP + if(getMQTTstring(rxVal, 31, _MQTTsetup.host)) { + bJumptoMQTTmenuRoot = true; + } + break; + case 2: // enter MQTT broker port + if(rxVal < ' ') { + if(_idx == 0) sprintf(_buffer, "%d", _MQTTsetup.port); + if(rxVal == '\n') { + int val = atoi(_buffer); + _MQTTsetup.port = val; + bJumptoMQTTmenuRoot = true; + } + if(rxVal == 0x1b) { + bJumptoMQTTmenuRoot = true; + } + break; + } + DebugPort.print(rxVal); + if(isdigit(rxVal)) { + if(_idx == 0) memset(_buffer, 0, sizeof(_buffer)); + _buffer[_idx++] = rxVal; + if(_idx == 5) { + int val = atoi(_buffer); + _MQTTsetup.port = val; + bJumptoMQTTmenuRoot = true; + } + } + else { + bJumptoMQTTmenuRoot = true; + } + break; + case 3: // enter MQTT broker username + if(getMQTTstring(rxVal, 31, _MQTTsetup.username)) { + bJumptoMQTTmenuRoot = true; + } + break; + case 4: // enter MQTT broker username + if(getMQTTstring(rxVal, 31, _MQTTsetup.password)) { + bJumptoMQTTmenuRoot = true; + } + break; + case 5: // enter root topic name + if(getMQTTstring(rxVal, 31, _MQTTsetup.topic)) { + bJumptoMQTTmenuRoot = true; + } + break; + case 6: + if(rxVal >= '0' && rxVal <= '2') { + _MQTTsetup.qos = rxVal - '0'; + } + bJumptoMQTTmenuRoot = true; + break; + case 7: + if(tolower(rxVal) == 'y') + _MQTTsetup.enabled = true; + if(tolower(rxVal) == 'n') + _MQTTsetup.enabled = false; + bJumptoMQTTmenuRoot = true; + break; + } + if(bJumptoMQTTmenuRoot) { + _mode = 0; + showMQTTmenu(); + } + return true; +} + +bool +CMQTTsetup::getMQTTstring(char rxVal, int maxidx, char* pTargetString) +{ + if(rxVal < ' ') { + if(_idx == 0) strcpy(_buffer, pTargetString); + if(rxVal == '\r') + return false; + if(rxVal == '\n') { + strncpy(pTargetString, _buffer, maxidx); + pTargetString[maxidx] = 0; +// _mode = 0; +// showMQTTmenu(); + return true; + } + if(rxVal == 0x1b) { +// _mode = 0; +// showMQTTmenu(); + return true; + } + } + else { + if(_idx == 0) memset(_buffer, 0, sizeof(_buffer)); + DebugPort.print(rxVal); + _buffer[_idx++] = rxVal; + if(_idx == maxidx) { + strncpy(pTargetString, _buffer, maxidx); + pTargetString[maxidx] = 0; +// _mode = 0; +// showMQTTmenu(); + return true; + } + } + return false; +} + +#endif \ No newline at end of file diff --git a/src/Utility/MQTTsetup.h b/src/Utility/MQTTsetup.h new file mode 100644 index 0000000..69ca006 --- /dev/null +++ b/src/Utility/MQTTsetup.h @@ -0,0 +1,17 @@ +#include "NVStorage.h" + + +class CMQTTsetup { + char _buffer[128]; + int _idx; + int _mode; + bool _active; + sMQTTparams _MQTTsetup; + bool HandleMQTTsetup(char rxVal); + void showMQTTmenu(bool init = false); + bool getMQTTstring(char rxVal, int maxidx, char* pTargetString); +public: + CMQTTsetup(); + bool Handle(char& rxVal); + void setActive(); +};