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);
|
||||
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);
|
||||
|
12
IO_RS485.h
12
IO_RS485.h
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user