freeRam stub removed. debugSerial + small refactoring and code format

This commit is contained in:
livello
2018-11-09 02:12:53 +03:00
parent 23f2e60079
commit 979349a38e
2 changed files with 93 additions and 174 deletions

View File

@@ -84,7 +84,7 @@ void Item::Parse() {
itemType = aJson.getArrayItem(itemArr, I_TYPE)->valueint; itemType = aJson.getArrayItem(itemArr, I_TYPE)->valueint;
itemArg = aJson.getArrayItem(itemArr, I_ARG); itemArg = aJson.getArrayItem(itemArr, I_ARG);
itemVal = aJson.getArrayItem(itemArr, I_VAL); itemVal = aJson.getArrayItem(itemArr, I_VAL);
debugSerial << (F(" Item:") << itemArr->name << F(" T:") << itemType << F(" =") << getArg() << eol; debugSerial << F(" Item:") << itemArr->name << F(" T:") << itemType << F(" =") << getArg() << eol;
} }
} }
@@ -154,7 +154,7 @@ long int Item::getVal() //Return Val if val is int or first elem of Value array
void Item::setVal(short n, int par) // Only store if VAL is array defined in config to avoid waste of RAM void Item::setVal(short n, int par) // Only store if VAL is array defined in config to avoid waste of RAM
{ {
if (!itemVal || itemVal->type!=aJson_Array) return; if (!itemVal || itemVal->type!=aJson_Array) return;
Serial.print(F(" Store p="));Serial.print(n);Serial.print(F(" Val="));Serial.println(par); debugSerial<<F(" Store p="));debugSerial<<n);debugSerial<<F(" Val="));debugSerial<<par);
for (int i=aJson.getArraySize(itemVal);i<=n;i++) aJson.addItemToArray(itemVal,aJson.createItem(int(0))); //Enlarge array of Values for (int i=aJson.getArraySize(itemVal);i<=n;i++) aJson.addItemToArray(itemVal,aJson.createItem(int(0))); //Enlarge array of Values
aJsonObject *t = aJson.getArrayItem(itemVal,n); aJsonObject *t = aJson.getArrayItem(itemVal,n);
@@ -236,7 +236,7 @@ int Item::Ctrl(char * payload, boolean send){
// if (item.getEnableCMD(500) || lanStatus == 4) // if (item.getEnableCMD(500) || lanStatus == 4)
Ctrl(cmd, 0, NULL, Ctrl(cmd, 0, NULL,
send); //Accept ON command not earlier then 500 ms after set settings (Homekit hack) send); //Accept ON command not earlier then 500 ms after set settings (Homekit hack)
// else Serial.println(F("on Skipped")); // else debugSerial<<F("on Skipped"));
break; break;
default: //some known command default: //some known command
@@ -268,29 +268,26 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
if (itemType != CH_GROUP) //individual threating of channels. Ignore restore command for groups if (itemType != CH_GROUP) //individual threating of channels. Ignore restore command for groups
switch (t = getCmd()) { switch (t = getCmd()) {
case CMD_HALT: //previous command was HALT ? case CMD_HALT: //previous command was HALT ?
Serial.print(F("Restored from:")); debugSerial << F("Restored from:") << t << eol;
Serial.println(t);
cmd = CMD_ON; //turning on cmd = CMD_ON; //turning on
break; break;
default: default:
return -3; return -3;
}//switch old cmd }
break; break;
case CMD_XOFF: case CMD_XOFF:
if (itemType != CH_GROUP) //individual threating of channels. Ignore restore command for groups if (itemType != CH_GROUP) //individual threating of channels. Ignore restore command for groups
switch (t = getCmd()) { switch (t = getCmd()) {
case CMD_XON: //previous command was CMD_XON ? case CMD_XON: //previous command was CMD_XON ?
Serial.print(F("Turned off from:")); debugSerial << F("Turned off from:") << t << eol;
Serial.println(t); cmd = CMD_OFF; //turning Off
cmd = CMD_OFF; //turning Off break;
break; default:
default: debugSerial<<F("XOFF skipped. Prev cmd:")<<t<<eol;
Serial.print(F("XOFF skipped. Prev cmd:"));
Serial.println(t);
return -3; return -3;
}//switch old cmd }
break; break;
} //switch cmd }
switch (cmd) { switch (cmd) {
case 0: //no command case 0: //no command
@@ -340,18 +337,18 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
case CMD_XON: case CMD_XON:
if (!isActive()) //if channel was'nt active before CMD_XON if (!isActive()) //if channel was'nt active before CMD_XON
{ {
Serial.println(F("Turning XON")); debugSerial<<F("Turning XON\n");
// setCmd(cmd); // setCmd(cmd);
} }
else else
{ //cmd = CMD_ON; { //cmd = CMD_ON;
Serial.println(F("Already Active")); debugSerial<<F("Already Active\n");
if (itemType != CH_GROUP) return -3; if (itemType != CH_GROUP) return -3;
} }
case CMD_ON: case CMD_ON:
if (itemType==CH_RGBW && getCmd() == CMD_ON && getEnableCMD(500)) { if (itemType==CH_RGBW && getCmd() == CMD_ON && getEnableCMD(500)) {
Serial.println(F("Force White")); debugSerial<<F("Force White\n");
itemType = CH_WHITE; itemType = CH_WHITE;
Par[1] = 0; //Zero saturation Par[1] = 0; //Zero saturation
Par[2] = 100; //Full power Par[2] = 100; //Full power
@@ -416,9 +413,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
if (send) SendStatus(cmd); // Just send ON if (send) SendStatus(cmd); // Just send ON
}//itemtype switch }//itemtype switch
else {// Default settings, values not stored yet else {// Default settings, values not stored yet
Serial.print(st.aslong); debugSerial<<st.aslong<<F(": No stored values - default\n");
Serial.println(F(": No stored values - default"));
switch (itemType) { switch (itemType) {
case CH_VCTEMP: case CH_VCTEMP:
case CH_THERMO: case CH_THERMO:
@@ -454,16 +449,13 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
} }
} // default handler } // default handler
for (short i = 0; i < params; i++) { for (short i = 0; i < params; i++) {
Serial.print(F("Restored: ")); debugSerial<<F("Restored: ")<<i<<F("=")<<Par[i]<<eol;
Serial.print(i);
Serial.print(F("="));
Serial.println(Par[i]);
} }
/* /*
} else { //Double ON - apply special preset - clean white full power } else { //Double ON - apply special preset - clean white full power
if (getEnableCMD(500)) switch (itemType) { if (getEnableCMD(500)) switch (itemType) {
case CH_RGBW: case CH_RGBW:
Serial.println(F("Force White")); debugSerial<<F("Force White"));
itemType = CH_WHITE; itemType = CH_WHITE;
Par[1] = 0; //Zero saturation Par[1] = 0; //Zero saturation
Par[2] = 100; //Full power Par[2] = 100; //Full power
@@ -480,7 +472,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
} //itemtype } //itemtype
} //else } //else
*/ */
//Serial.print("Sa:");Serial.println(Par[1]); //debugSerial<<"Sa:");debugSerial<<Par[1]);
if ((itemType == CH_RGBW) && (Par[1] == 0)) itemType = CH_WHITE; if ((itemType == CH_RGBW) && (Par[1] == 0)) itemType = CH_WHITE;
} }
@@ -506,7 +498,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
if (getCmd() == CMD_XON) setCmd(CMD_OFF); //Prevent restoring temporary turned on channels (by XON) if (getCmd() == CMD_XON) setCmd(CMD_OFF); //Prevent restoring temporary turned on channels (by XON)
else setCmd(cmd); else setCmd(cmd);
SendStatus(CMD_OFF); //HALT to OFF mapping - send in any cases SendStatus(CMD_OFF); //HALT to OFF mapping - send in any cases
Serial.println(F(" Halted")); debugSerial<<F(" Halted\n");
} }
@@ -519,37 +511,22 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
#ifdef _dmxout #ifdef _dmxout
case CH_DIMMER: //Dimmed light case CH_DIMMER: //Dimmed light
DmxWrite(iaddr, map(Par[0], 0, 100, 0, 255)); DmxWrite(iaddr, map(Par[0], 0, 100, 0, 255));
break; break;
case CH_RGBW: //Colour RGBW case CH_RGBW: //Colour RGBW
{ {
int k; int k;
DmxWrite(iaddr + 3, k = map((100 - Par[1]) * Par[2], 0, 10000, 0, 255)); DmxWrite(iaddr + 3, k = map((100 - Par[1]) * Par[2], 0, 10000, 0, 255));
Serial.print(F("W:")); debugSerial<<F("W:")<<k<<eol;
Serial.println(k);
} }
case CH_RGB: // RGB case CH_RGB: // RGB
{ {
CRGB rgb = CHSV(map(Par[0], 0, 365, 0, 255), map(Par[1], 0, 100, 0, 255), map(Par[2], 0, 100, 0, 255)); CRGB rgb = CHSV(map(Par[0], 0, 365, 0, 255), map(Par[1], 0, 100, 0, 255), map(Par[2], 0, 100, 0, 255));
DmxWrite(iaddr, rgb.r); DmxWrite(iaddr, rgb.r);
DmxWrite(iaddr + 1, rgb.g); DmxWrite(iaddr + 1, rgb.g);
DmxWrite(iaddr + 2, rgb.b); DmxWrite(iaddr + 2, rgb.b);
break; break;
} }
case CH_WHITE: case CH_WHITE:
DmxWrite(iaddr, 0); DmxWrite(iaddr, 0);
DmxWrite(iaddr + 1, 0); DmxWrite(iaddr + 1, 0);
@@ -595,10 +572,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
int k; int k;
pinMode(iaddr, OUTPUT); pinMode(iaddr, OUTPUT);
digitalWrite(iaddr, k = ((cmd == CMD_ON || cmd == CMD_XON) ? HIGH : LOW)); digitalWrite(iaddr, k = ((cmd == CMD_ON || cmd == CMD_XON) ? HIGH : LOW));
Serial.print(F("Pin:")); debugSerial<<F("Pin:")<<iaddr<<F("=")<<k<<eol;
Serial.print(iaddr);
Serial.print(F("="));
Serial.println(k);
break; break;
case CH_THERMO: case CH_THERMO:
///thermoSet(name,cmd,Par1); all cativities done - update temp & cmd ///thermoSet(name,cmd,Par1); all cativities done - update temp & cmd
@@ -634,19 +608,13 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
if (inverse) k = map(Par[0], 100, 0, 0, 255); if (inverse) k = map(Par[0], 100, 0, 0, 255);
else k = map(Par[0], 0, 100, 0, 255); else k = map(Par[0], 0, 100, 0, 255);
analogWrite(iaddr, k); analogWrite(iaddr, k);
Serial.print(F("Pin:")); debugSerial<<F("Pin:")<<iaddr<<F("=")<<k<<eol;
Serial.print(iaddr);
Serial.print(F("="));
Serial.println(k);
break; break;
} }
#ifdef _modbus #ifdef _modbus
case CH_VC: case CH_VC:
VacomSetFan(Par[0], cmd); VacomSetFan(Par[0], cmd);
break; break;
case CH_VCTEMP: { case CH_VCTEMP: {
Item it(itemArg->valuestring); Item it(itemArg->valuestring);
if (it.isValid() && it.itemType == CH_VC) if (it.isValid() && it.itemType == CH_VC)
@@ -654,12 +622,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send) {
break; break;
} }
#endif #endif
}
} // switch itemtype
// break;
} }
int Item::isActive() { int Item::isActive() {
@@ -667,7 +630,7 @@ int Item::isActive() {
int val = 0; int val = 0;
if (!isValid()) return -1; if (!isValid()) return -1;
//Serial.print(itemArr->name); //debugSerial<<itemArr->name);
int cmd = getCmd(); int cmd = getCmd();
@@ -677,12 +640,12 @@ int Item::isActive() {
switch (cmd) { switch (cmd) {
case CMD_ON: case CMD_ON:
case CMD_XON: case CMD_XON:
//Serial.println(" active"); //debugSerial<<" active");
return 1; return 1;
case CMD_OFF: case CMD_OFF:
case CMD_HALT: case CMD_HALT:
case -1: ///// No last command case -1: ///// No last command
//Serial.println(" inactive"); //debugSerial<<" inactive");
return 0; return 0;
} }
@@ -692,13 +655,13 @@ int Item::isActive() {
switch (itemType) { switch (itemType) {
case CH_GROUP: //make recursive calculation - is it some active in group case CH_GROUP: //make recursive calculation - is it some active in group
if (itemArg->type == aJson_Array) { if (itemArg->type == aJson_Array) {
Serial.println(F("Grp check: ")); debugSerial<<F("Grp check:\n");
aJsonObject *i = itemArg->child; aJsonObject *i = itemArg->child;
while (i) { while (i) {
Item it(i->valuestring); Item it(i->valuestring);
if (it.isValid() && it.isActive()) { if (it.isValid() && it.isActive()) {
Serial.println(F("Active")); debugSerial<<F("Active\n");
return 1; return 1;
} }
i = i->next; i = i->next;
@@ -723,8 +686,8 @@ int Item::isActive() {
case CH_PWM: case CH_PWM:
val = st.aslong; val = st.aslong;
} //switch } //switch
//Serial.print(F(":=")); //debugSerial<<F(":="));
//Serial.println(val); //debugSerial<<val);
if (val) return 1; else return 0; if (val) return 1; else return 0;
} }
@@ -796,7 +759,7 @@ POLL 2101x10
*/ */
void Item::mb_fail(short addr, short op, int val, int cmd) { void Item::mb_fail(short addr, short op, int val, int cmd) {
Serial.println(F("Modbus op failed")); debugSerial<<F("Modbus op failed\n");
// int cmd = getCmd(); // int cmd = getCmd();
// if (cmd<0) return; // if (cmd<0) return;
setCmd(cmd | CMD_RETRY); setCmd(cmd | CMD_RETRY);
@@ -810,18 +773,12 @@ extern ModbusMaster node;
int Item::VacomSetFan(int8_t val, int8_t cmd) { int Item::VacomSetFan(int8_t val, int8_t cmd) {
int addr = getArg(); int addr = getArg();
Serial.print(F("VC#")); debugSerial<<F("VC#")<<addr<<F("=")<<val<<eol;
Serial.print(addr);
Serial.print(F("="));
Serial.println(val);
if (modbusBusy) { if (modbusBusy) {
mb_fail(1, addr, val, cmd); mb_fail(1, addr, val, cmd);
return -1; return -1;
} }
modbusBusy = 1; modbusBusy = 1;
uint8_t j;//, result; uint8_t j;//, result;
//uint16_t data[1]; //uint16_t data[1];
@@ -834,22 +791,15 @@ int Item::VacomSetFan(int8_t val, int8_t cmd) {
} else node.writeSingleRegister(2001 - 1, 0); } else node.writeSingleRegister(2001 - 1, 0);
delay(50); delay(50);
node.writeSingleRegister(2003 - 1, val * 100); node.writeSingleRegister(2003 - 1, val * 100);
modbusBusy = 0; modbusBusy = 0;
} }
#define a 0.1842 #define a 0.1842f
#define b -36.68 #define b -36.68f
int Item::VacomSetHeat(int addr, int8_t val, int8_t cmd) { int Item::VacomSetHeat(int addr, int8_t val, int8_t cmd) {
Serial.print(F("VC_heat#")); debugSerial<<F("VC_heat#")<<addr<<F("=")<<val<<F(" cmd=")<<cmd<<eol;
Serial.print(addr);
Serial.print(F("="));
Serial.print(val);
Serial.print(F(" cmd="));
Serial.println(cmd);
if (modbusBusy) { if (modbusBusy) {
mb_fail(2, addr, val, cmd); mb_fail(2, addr, val, cmd);
return -1; return -1;
@@ -871,7 +821,7 @@ int Item::VacomSetHeat(int addr, int8_t val, int8_t cmd) {
regval = round(((float) val - b) * 10 / a); regval = round(((float) val - b) * 10 / a);
} }
//Serial.println(regval); //debugSerial<<regval);
node.writeSingleRegister(2004 - 1, regval); node.writeSingleRegister(2004 - 1, regval);
modbusBusy = 0; modbusBusy = 0;
} }
@@ -891,8 +841,6 @@ int Item::modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint
modbusSerial.begin(MODBUS_SERIAL_BAUD, dimPar); modbusSerial.begin(MODBUS_SERIAL_BAUD, dimPar);
node.begin(addr, modbusSerial); node.begin(addr, modbusSerial);
switch (_mask) { switch (_mask) {
case 1: case 1:
value <<= 8; value <<= 8;
@@ -902,15 +850,7 @@ int Item::modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint
value &= 0xff; value &= 0xff;
value |= (0xff00); value |= (0xff00);
} }
debugSerial<<addr<<F("=>")<<_HEX(_reg)<<F("(T:")<<_regType<<F("):")<<_HEX(value)<<eol;
Serial.print(addr);
Serial.print(F("=>"));
Serial.print(_reg, HEX);
Serial.print(F("(T:"));
Serial.print(_regType);
Serial.print(F("):"));
Serial.println(value, HEX);
switch (_regType) { switch (_regType) {
case MODBUS_HOLDING_REG_TYPE: case MODBUS_HOLDING_REG_TYPE:
node.writeSingleRegister(_reg, value); node.writeSingleRegister(_reg, value);
@@ -919,9 +859,8 @@ int Item::modbusDimmerSet(int addr, uint16_t _reg, int _regType, int _mask, uint
node.writeSingleCoil(_reg, value); node.writeSingleCoil(_reg, value);
break; break;
default: default:
Serial.println(F("Not supported reg type")); debugSerial<<F("Not supported reg type\n");
} }
modbusBusy = 0; modbusBusy = 0;
} }
@@ -953,13 +892,12 @@ int Item::checkFM() {
// do something with data if read is successful // do something with data if read is successful
if (result == node.ku8MBSuccess) { if (result == node.ku8MBSuccess) {
Serial.print(F(" FM Val :")); debugSerial<<F(" FM Val :");
for (j = 0; j < 10; j++) { for (j = 0; j < 10; j++) {
data = node.getResponseBuffer(j); data = node.getResponseBuffer(j);
Serial.print(data, HEX); debugSerial<<_HEX(data)<<F("-");
Serial.print(F("-"));
} }
debugSerial<<eol;
int RPM; int RPM;
// aJson.addNumberToObject(out,"gsw", (int) node.getResponseBuffer(1)); // aJson.addNumberToObject(out,"gsw", (int) node.getResponseBuffer(1));
aJson.addNumberToObject(out, "V", (int) node.getResponseBuffer(2) / 100.); aJson.addNumberToObject(out, "V", (int) node.getResponseBuffer(2) / 100.);
@@ -971,20 +909,17 @@ int Item::checkFM() {
// aJson.addNumberToObject(out,"U", (int) node.getResponseBuffer(8)/10.); // aJson.addNumberToObject(out,"U", (int) node.getResponseBuffer(8)/10.);
// aJson.addNumberToObject(out,"Ui", (int) node.getResponseBuffer(9)); // aJson.addNumberToObject(out,"Ui", (int) node.getResponseBuffer(9));
aJson.addNumberToObject(out, "sw", (int) node.getResponseBuffer(0)); aJson.addNumberToObject(out, "sw", (int) node.getResponseBuffer(0));
if (RPM && itemArg->type == aJson_Array) {
if (RPM && itemArg->type == aJson_Array) aJsonObject *airGateObj = aJson.getArrayItem(itemArg, 1);
{ aJsonObject *airGateObj = aJson.getArrayItem(itemArg, 1); if (airGateObj) {
if (airGateObj) { int val = 100;
int val = 100; Item item(airGateObj->valuestring);
Item item(airGateObj->valuestring); if (item.isValid())
if (item.isValid()) item.Ctrl(0,1,&val); item.Ctrl(0, 1, &val);
} }
} }
Serial.println(); } else
} else { debugSerial << F("Modbus polling error=") << _HEX(result) << eol;
Serial.print(F("Modbus polling error="));
Serial.println(result, HEX);
}
if (node.getResponseBuffer(0) & 8) //Active fault if (node.getResponseBuffer(0) & 8) //Active fault
{ {
@@ -997,40 +932,33 @@ int Item::checkFM() {
// do something with data if read is successful // do something with data if read is successful
if (result == node.ku8MBSuccess) { if (result == node.ku8MBSuccess) {
Serial.print(F(" PI Val :")); debugSerial << F(" PI Val :");
for (j = 0; j < 4; j++) { for (j = 0; j < 4; j++) {
data = node.getResponseBuffer(j); data = node.getResponseBuffer(j);
Serial.print(data); debugSerial << data << F("-");
Serial.print(F("-"));
} }
debugSerial << eol;
int set = node.getResponseBuffer(0); int set = node.getResponseBuffer(0);
float fset; float ftemp, fset = set * a + b;
float ftemp; if (set)
if (set) aJson.addNumberToObject(out, "set", fset =set * a + b); aJson.addNumberToObject(out, "set", fset);
aJson.addNumberToObject(out, "t", ftemp =(int) node.getResponseBuffer(1) * a + b); aJson.addNumberToObject(out, "t", ftemp = (int) node.getResponseBuffer(1) * a + b);
// aJson.addNumberToObject(out,"d", (int) node.getResponseBuffer(2)*a+b); // aJson.addNumberToObject(out,"d", (int) node.getResponseBuffer(2)*a+b);
int pwr = node.getResponseBuffer(3); int pwr = node.getResponseBuffer(3);
if (pwr > 0) aJson.addNumberToObject(out, "pwr", pwr / 10.); else aJson.addNumberToObject(out, "pwr", 0); if (pwr > 0)
aJson.addNumberToObject(out, "pwr", pwr / 10.);
else aJson.addNumberToObject(out, "pwr", 0);
if (ftemp>FM_OVERHEAT_CELSIUS && set) if (ftemp > FM_OVERHEAT_CELSIUS && set) {
{
mqttClient.publish("/alarm/ovrht", itemArr->name); mqttClient.publish("/alarm/ovrht", itemArr->name);
Ctrl(CMD_OFF); //Shut down Ctrl(CMD_OFF); //Shut down
} }
Serial.println(); } else
} else { debugSerial << F("Modbus polling error=") << _HEX(result);
Serial.print(F("Modbus polling error="));
Serial.println(result, HEX);
}
outch = aJson.print(out); outch = aJson.print(out);
mqttClient.publish(addrstr, outch); mqttClient.publish(addrstr, outch);
free(outch); free(outch);
aJson.deleteItem(out); aJson.deleteItem(out);
modbusBusy = 0; modbusBusy = 0;
} }
@@ -1038,7 +966,7 @@ boolean Item::checkModbusRetry() {
int cmd = getCmd(true); int cmd = getCmd(true);
if (cmd & CMD_RETRY) { // if last sending attempt of command was failed if (cmd & CMD_RETRY) { // if last sending attempt of command was failed
int val = getVal(); int val = getVal();
Serial.println(F("Retrying CMD")); debugSerial<<F("Retrying CMD\n");
cmd &= ~CMD_RETRY; // Clean retry flag cmd &= ~CMD_RETRY; // Clean retry flag
Ctrl(cmd,1,&val); // Execute command again Ctrl(cmd,1,&val); // Execute command again
@@ -1053,7 +981,7 @@ int Item::checkModbusDimmer() {
short numpar = 0; short numpar = 0;
if ((itemArg->type != aJson_Array) || ((numpar = aJson.getArraySize(itemArg)) < 2)) { if ((itemArg->type != aJson_Array) || ((numpar = aJson.getArraySize(itemArg)) < 2)) {
Serial.println(F("Illegal arguments")); debugSerial<<F("Illegal arguments\n");
return -3; return -3;
} }
@@ -1066,13 +994,13 @@ int Item::checkModbusDimmer() {
int _regType = MODBUS_HOLDING_REG_TYPE; int _regType = MODBUS_HOLDING_REG_TYPE;
if (numpar >= (MODBUS_CMD_ARG_REG_TYPE+1)) _regType = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_REG_TYPE)->valueint; if (numpar >= (MODBUS_CMD_ARG_REG_TYPE+1)) _regType = aJson.getArrayItem(itemArg, MODBUS_CMD_ARG_REG_TYPE)->valueint;
// short mask = getArg(2); // short mask = getArg(2);
// Serial.print(F("Modbus polling ")); // debugSerial<<F("Modbus polling "));
// Serial.print(addr); // debugSerial<<addr);
// Serial.print(F("=>")); // debugSerial<<F("=>"));
// Serial.print(reg, HEX); // debugSerial<<reg, HEX);
// Serial.print(F("(T:")); // debugSerial<<F("(T:"));
// Serial.print(_regType); // debugSerial<<_regType);
// Serial.println(F(")")); // debugSerial<<F(")"));
int data; int data;
@@ -1095,21 +1023,15 @@ int Item::checkModbusDimmer() {
result = node.readInputRegisters(reg, 1); result = node.readInputRegisters(reg, 1);
break; break;
default: default:
Serial.println(F("Not supported reg type")); debugSerial<<F("Not supported reg type\n");
} }
if (result == node.ku8MBSuccess) { if (result == node.ku8MBSuccess) {
data = node.getResponseBuffer(0); data = node.getResponseBuffer(0);
Serial.print(F("MB: ")); debugSerial << F("MB: ") << itemArr->name << F(" Val: ") << _HEX(data) << eol;
Serial.print(itemArr->name);
Serial.print(F(" Val: "));
Serial.println(data, HEX);
checkModbusDimmer(data); checkModbusDimmer(data);
} else { } else
Serial.print(F("Modbus polling error=")); debugSerial << F("Modbus polling error=") << _HEX(result) << eol;
Serial.println(result, HEX);
}
modbusBusy = 0; modbusBusy = 0;
// Looking 1 step ahead for modbus item, which uses same register // Looking 1 step ahead for modbus item, which uses same register
@@ -1118,9 +1040,9 @@ int Item::checkModbusDimmer() {
nextItem.getArg(1) == reg) { nextItem.getArg(1) == reg) {
nextItem.checkModbusDimmer(data); nextItem.checkModbusDimmer(data);
pollingItem = pollingItem->next; pollingItem = pollingItem->next;
if (!pollingItem) pollingItem = items->child; if (!pollingItem)
pollingItem = items->child;
} }
} }
@@ -1138,7 +1060,7 @@ int Item::checkModbusDimmer(int data) {
if (maxVal) d = map(d, 0, maxVal, 0, 100); if (maxVal) d = map(d, 0, maxVal, 0, 100);
int cmd = getCmd(); int cmd = getCmd();
//Serial.println(d); //debugSerial<<d);
if (getVal() != d || d && cmd == CMD_OFF || d && cmd == CMD_HALT) //volume changed or turned on manualy if (getVal() != d || d && cmd == CMD_OFF || d && cmd == CMD_HALT) //volume changed or turned on manualy
{ {
if (d) { // Actually turned on if (d) { // Actually turned on

View File

@@ -33,11 +33,11 @@ extern "C" {
void PrintBytes(uint8_t *addr, uint8_t count, bool newline) { void PrintBytes(uint8_t *addr, uint8_t count, bool newline) {
for (uint8_t i = 0; i < count; i++) { for (uint8_t i = 0; i < count; i++) {
Serial.print(addr[i] >> 4, HEX); debugSerial<<_HEX(addr[i] >> 4);
Serial.print(addr[i] & 0x0f, HEX); debugSerial<<_HEX(addr[i] & 0x0f);
} }
if (newline) if (newline)
Serial.println(); debugSerial<<eol;
} }
const char HEXSTR[] = "0123456789ABCDEF"; const char HEXSTR[] = "0123456789ABCDEF";
@@ -100,13 +100,10 @@ extern char _end;
extern "C" char *sbrk(int i); extern "C" char *sbrk(int i);
unsigned long freeRam() { unsigned long freeRam() {
#ifndef DISABLE_FREERAM_PRINT
char *heapend = sbrk(0); char *heapend = sbrk(0);
register char *stack_ptr asm( "sp" ); register char *stack_ptr asm( "sp" );
struct mallinfo mi = mallinfo(); struct mallinfo mi = mallinfo();
return stack_ptr - heapend + mi.fordblks; return stack_ptr - heapend + mi.fordblks;
#endif
return 7777;
} }
#endif #endif
@@ -174,7 +171,7 @@ int log(const char *str, ...)//TODO: __FlashStringHelper str support
{ {
//Clear buffer //Clear buffer
temp[j] = '\0'; temp[j] = '\0';
Serial.print(temp); debugSerial<<temp;
j=0; j=0;
temp[0] = '\0'; temp[0] = '\0';
@@ -208,7 +205,7 @@ int log(const char *str, ...)//TODO: __FlashStringHelper str support
} }
}; };
Serial.println(); //Print trailing newline debugSerial<<eol;
return count + 1; //Return number of arguments detected return count + 1; //Return number of arguments detected
} }
#endif #endif