1
0
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:
travis-farmer 2024-12-13 05:16:36 -05:00
parent 53d23770f6
commit cf833b3bb0
No known key found for this signature in database
GPG Key ID: 0BC296791D14CB35
2 changed files with 19 additions and 5 deletions

View File

@ -154,6 +154,7 @@ if (taskCnt > 0) {
}
} while (micros() - startMicros <= 500 && len < 256);
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) {
} else {
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);
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) {
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);
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) {
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;
_deviceState = DEVSTATE_FAILED;
} else {
if (!testAndStripMasterFlag(responseBuffer)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
if (responseBuffer[0] != EXIORDY) {
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());
flagOK = false;
}
if (!testAndStripMasterFlag(_currentNode->_digitalInputStates)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
if (!waitReceive) _refreshOperation++;
_lastDigitalRead = currentMicros;
_readState = RDS_DIGITAL;
@ -360,6 +365,7 @@ if (taskCnt > 0) {
DIAG(F("EX-IOExpander485 CRC error on node %d"), _currentNode->getNodeID());
flagOK = false;
}
if (!testAndStripMasterFlag(_currentNode->_digitalInputStates)) DIAG(F("Forgen RS485 Device! no master flag from node %d"),_currentNode->getNodeID());
if (!waitReceive) _refreshOperation = 0;
_lastAnalogueRead = currentMicros;
_readState = RDS_ANALOGUE;
@ -406,7 +412,7 @@ RS485node::RS485node(VPIN firstVpin, int nPins, uint8_t nodeID) {
_nPins = nPins;
_busNo = 0;
_nodeID = nodeID;
if (_nodeID > 255) _nodeID = 255;
if (_nodeID > 254) _nodeID = 254;
// Add this device to HAL device list
IODevice::addDevice(this);

View File

@ -37,7 +37,7 @@
*
* firstVPIN = first vpin in block allocated to this device
* numVPINs = number of vpins
* nodeID = 0-255
* nodeID = 0-254
*/
#ifndef IO_RS485_H
@ -170,7 +170,8 @@ public:
len++;
}
} 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];
_numAnaloguePins = receiveBuffer[2];
@ -241,6 +242,7 @@ public:
}
} while (micros() - startMicros <= 500 && len < 256);
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++) {
_analoguePinMap[i] = receiveBuffer[i];
}
@ -267,6 +269,7 @@ public:
}
} while (micros() - startMicros <= 500 && len < 256);
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];
_minorVer = versionBuffer[1];
_patchVer = versionBuffer[2];
@ -420,6 +423,11 @@ public:
int8_t _txPin;
int taskCnt = 0;
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[]) {
taskCnt++;
tasks[taskCnt][0] = nodeID;