mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-04-21 12:31:19 +02:00
cleaning and debugging
This commit is contained in:
parent
53d23770f6
commit
cf833b3bb0
@ -154,6 +154,7 @@ if (taskCnt > 0) {
|
|||||||
}
|
}
|
||||||
} while (micros() - startMicros <= 500 && len < 256);
|
} while (micros() - startMicros <= 500 && len < 256);
|
||||||
if (crcGood(responseBuffer,sizeof(responseBuffer)-2)) {
|
if (crcGood(responseBuffer,sizeof(responseBuffer)-2)) {
|
||||||
|
if (!testAndStripMasterFlag(responseBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
|
||||||
if (responseBuffer[0] == EXIORDY) {
|
if (responseBuffer[0] == EXIORDY) {
|
||||||
} else {
|
} else {
|
||||||
DIAG(F("EX-IOExpander485 Vpin %u cannot be used as a digital input pin"), (int)taskData[3]);
|
DIAG(F("EX-IOExpander485 Vpin %u cannot be used as a digital input pin"), (int)taskData[3]);
|
||||||
@ -196,6 +197,7 @@ if (taskCnt > 0) {
|
|||||||
} while (micros() - startMicros <= 500 && len < 256);
|
} while (micros() - startMicros <= 500 && len < 256);
|
||||||
|
|
||||||
if (crcGood(responseBuffer,sizeof(responseBuffer)-2)) {
|
if (crcGood(responseBuffer,sizeof(responseBuffer)-2)) {
|
||||||
|
if (!testAndStripMasterFlag(responseBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
|
||||||
if (responseBuffer[0] != EXIORDY) {
|
if (responseBuffer[0] != EXIORDY) {
|
||||||
DIAG(F("EX-IOExpander485: Vpin %u on node %d cannot be used as an analogue input pin"), (int) taskData[3], (int) taskData[0]);
|
DIAG(F("EX-IOExpander485: Vpin %u on node %d cannot be used as an analogue input pin"), (int) taskData[3], (int) taskData[0]);
|
||||||
}
|
}
|
||||||
@ -234,6 +236,7 @@ if (taskCnt > 0) {
|
|||||||
}
|
}
|
||||||
} while (micros() - startMicros <= 500 && len < 256);
|
} while (micros() - startMicros <= 500 && len < 256);
|
||||||
if (crcGood(responseBuffer,sizeof(responseBuffer)-2)) {
|
if (crcGood(responseBuffer,sizeof(responseBuffer)-2)) {
|
||||||
|
if (!testAndStripMasterFlag(responseBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
|
||||||
if (responseBuffer[0] != EXIORDY) {
|
if (responseBuffer[0] != EXIORDY) {
|
||||||
DIAG(F("EX-IOExpander485 Vpin %u cannot be used as a digital output pin"), (int)taskData[3]);
|
DIAG(F("EX-IOExpander485 Vpin %u cannot be used as a digital output pin"), (int)taskData[3]);
|
||||||
}
|
}
|
||||||
@ -284,6 +287,7 @@ if (taskCnt > 0) {
|
|||||||
flagOK = false;
|
flagOK = false;
|
||||||
_deviceState = DEVSTATE_FAILED;
|
_deviceState = DEVSTATE_FAILED;
|
||||||
} else {
|
} else {
|
||||||
|
if (!testAndStripMasterFlag(responseBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
|
||||||
if (responseBuffer[0] != EXIORDY) {
|
if (responseBuffer[0] != EXIORDY) {
|
||||||
DIAG(F("EX-IOExpander485 Vpin %u cannot be used as a servo/PWM pin"), (int) taskData[3]);
|
DIAG(F("EX-IOExpander485 Vpin %u cannot be used as a servo/PWM pin"), (int) taskData[3]);
|
||||||
}
|
}
|
||||||
@ -324,6 +328,7 @@ if (taskCnt > 0) {
|
|||||||
DIAG(F("EX-IOExpander485 CRC error on node %d"), _currentNode->getNodeID());
|
DIAG(F("EX-IOExpander485 CRC error on node %d"), _currentNode->getNodeID());
|
||||||
flagOK = false;
|
flagOK = false;
|
||||||
}
|
}
|
||||||
|
if (!testAndStripMasterFlag(_currentNode->_digitalInputStates)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
|
||||||
if (!waitReceive) _refreshOperation++;
|
if (!waitReceive) _refreshOperation++;
|
||||||
_lastDigitalRead = currentMicros;
|
_lastDigitalRead = currentMicros;
|
||||||
_readState = RDS_DIGITAL;
|
_readState = RDS_DIGITAL;
|
||||||
@ -360,6 +365,7 @@ if (taskCnt > 0) {
|
|||||||
DIAG(F("EX-IOExpander485 CRC error on node %d"), _currentNode->getNodeID());
|
DIAG(F("EX-IOExpander485 CRC error on node %d"), _currentNode->getNodeID());
|
||||||
flagOK = false;
|
flagOK = false;
|
||||||
}
|
}
|
||||||
|
if (!testAndStripMasterFlag(_currentNode->_digitalInputStates)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
|
||||||
if (!waitReceive) _refreshOperation = 0;
|
if (!waitReceive) _refreshOperation = 0;
|
||||||
_lastAnalogueRead = currentMicros;
|
_lastAnalogueRead = currentMicros;
|
||||||
_readState = RDS_ANALOGUE;
|
_readState = RDS_ANALOGUE;
|
||||||
@ -406,7 +412,7 @@ RS485node::RS485node(VPIN firstVpin, int nPins, uint8_t nodeID) {
|
|||||||
_nPins = nPins;
|
_nPins = nPins;
|
||||||
_busNo = 0;
|
_busNo = 0;
|
||||||
_nodeID = nodeID;
|
_nodeID = nodeID;
|
||||||
if (_nodeID > 255) _nodeID = 255;
|
if (_nodeID > 254) _nodeID = 254;
|
||||||
|
|
||||||
// Add this device to HAL device list
|
// Add this device to HAL device list
|
||||||
IODevice::addDevice(this);
|
IODevice::addDevice(this);
|
||||||
|
12
IO_RS485.h
12
IO_RS485.h
@ -37,7 +37,7 @@
|
|||||||
*
|
*
|
||||||
* firstVPIN = first vpin in block allocated to this device
|
* firstVPIN = first vpin in block allocated to this device
|
||||||
* numVPINs = number of vpins
|
* numVPINs = number of vpins
|
||||||
* nodeID = 0-255
|
* nodeID = 0-254
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IO_RS485_H
|
#ifndef IO_RS485_H
|
||||||
@ -170,7 +170,8 @@ public:
|
|||||||
len++;
|
len++;
|
||||||
}
|
}
|
||||||
} while (micros() - startMicros <= 500 && len < 256);
|
} while (micros() - startMicros <= 500 && len < 256);
|
||||||
if (receiveBuffer[0] == EXIOPINS && bus->crcGood(receiveBuffer,sizeof(receiveBuffer)-2)) {
|
if (receiveBuffer[1] == EXIOPINS && bus->crcGood(receiveBuffer,sizeof(receiveBuffer)-2)) {
|
||||||
|
if (!bus->testAndStripMasterFlag(receiveBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_nodeID);
|
||||||
_numDigitalPins = receiveBuffer[1];
|
_numDigitalPins = receiveBuffer[1];
|
||||||
_numAnaloguePins = receiveBuffer[2];
|
_numAnaloguePins = receiveBuffer[2];
|
||||||
|
|
||||||
@ -241,6 +242,7 @@ public:
|
|||||||
}
|
}
|
||||||
} while (micros() - startMicros <= 500 && len < 256);
|
} while (micros() - startMicros <= 500 && len < 256);
|
||||||
if (bus->crcGood(receiveBuffer,sizeof(receiveBuffer)-2)) {
|
if (bus->crcGood(receiveBuffer,sizeof(receiveBuffer)-2)) {
|
||||||
|
if (!bus->testAndStripMasterFlag(receiveBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_nodeID);
|
||||||
for (int i = 0; i < _numAnaloguePins; i++) {
|
for (int i = 0; i < _numAnaloguePins; i++) {
|
||||||
_analoguePinMap[i] = receiveBuffer[i];
|
_analoguePinMap[i] = receiveBuffer[i];
|
||||||
}
|
}
|
||||||
@ -267,6 +269,7 @@ public:
|
|||||||
}
|
}
|
||||||
} while (micros() - startMicros <= 500 && len < 256);
|
} while (micros() - startMicros <= 500 && len < 256);
|
||||||
if (bus->crcGood(versionBuffer,sizeof(versionBuffer)-2)) {
|
if (bus->crcGood(versionBuffer,sizeof(versionBuffer)-2)) {
|
||||||
|
if (!bus->testAndStripMasterFlag(versionBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_nodeID);
|
||||||
_majorVer = versionBuffer[0];
|
_majorVer = versionBuffer[0];
|
||||||
_minorVer = versionBuffer[1];
|
_minorVer = versionBuffer[1];
|
||||||
_patchVer = versionBuffer[2];
|
_patchVer = versionBuffer[2];
|
||||||
@ -420,6 +423,11 @@ public:
|
|||||||
int8_t _txPin;
|
int8_t _txPin;
|
||||||
int taskCnt = 0;
|
int taskCnt = 0;
|
||||||
HardwareSerial *_serialD;
|
HardwareSerial *_serialD;
|
||||||
|
bool testAndStripMasterFlag(uint8_t *buf) {
|
||||||
|
if (buf[0] != 0xFF) return false; // why did we not get a master flag? bad node?
|
||||||
|
for (int i = 0; i < sizeof(buf)-1; i++) buf[i] = buf[i+1]; // shift array to begining
|
||||||
|
return true;
|
||||||
|
}
|
||||||
void addTask(int nodeID, int taskNum, int paramCnt, int *param[]) {
|
void addTask(int nodeID, int taskNum, int paramCnt, int *param[]) {
|
||||||
taskCnt++;
|
taskCnt++;
|
||||||
tasks[taskCnt][0] = nodeID;
|
tasks[taskCnt][0] = nodeID;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user