Shifted MQTT telnet setup into a separate module.

Fixed addCRC script for > V3 python
This commit is contained in:
Ray Jones 2019-09-07 18:28:21 +10:00
parent 77dada9d6b
commit 9fbb6e8dfc
5 changed files with 241 additions and 235 deletions

View File

@ -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()

View File

@ -115,6 +115,7 @@
#include <esp_spiffs.h>
#include <SPIFFS.h>
#include <nvs.h>
#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(" <ENTER> - save and exit\r\n");
DebugPort.printf(" <ESC> - abort\r\n");
}

View File

@ -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;
}

199
src/Utility/MQTTsetup.cpp Normal file
View File

@ -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(" <ENTER> - save and exit\r\n");
DebugPort.printf(" <ESC> - 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

17
src/Utility/MQTTsetup.h Normal file
View File

@ -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();
};