-
-
Notifications
You must be signed in to change notification settings - Fork 111
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
commit 3fc90c9 Merge: 132e2d0 91e60b3 Author: Asbelos <[email protected]> Date: Fri Apr 12 15:08:49 2024 +0100 Merge branch 'devel' into devel_chris commit 132e2d0 Author: Asbelos <[email protected]> Date: Fri Apr 12 15:07:31 2024 +0100 Revert "Merge branch 'master' into devel_chris" This reverts commit 23845f2, reversing changes made to 7675599. commit 23845f2 Merge: 7675599 28d60d4 Author: Asbelos <[email protected]> Date: Fri Apr 12 14:38:22 2024 +0100 Merge branch 'master' into devel_chris commit 7675599 Author: Asbelos <[email protected]> Date: Fri Apr 12 14:37:34 2024 +0100 ONSENSOR/ONBUTTON commit 8987d62 Author: Asbelos <[email protected]> Date: Tue Apr 9 20:44:47 2024 +0100 doc note commit 8f0a5c1 Author: Asbelos <[email protected]> Date: Thu Apr 4 09:45:58 2024 +0100 Exrail notes commit 94083b9 Merge: 72ef199 02bf50b Author: Asbelos <[email protected]> Date: Thu Apr 4 09:08:26 2024 +0100 Merge branch 'devel' into devel_chris commit 72ef199 Author: Asbelos <[email protected]> Date: Thu Apr 4 09:06:50 2024 +0100 TOGGLE_TURNOUT commit e69b777 Author: Asbelos <[email protected]> Date: Wed Apr 3 15:17:40 2024 +0100 BLINK command commit c7ed474 Author: Asbelos <[email protected]> Date: Tue Apr 2 10:12:45 2024 +0100 FTOGGLE,XFTOGGLE commit 7a93cf7 Author: Asbelos <[email protected]> Date: Fri Mar 29 13:21:35 2024 +0000 EXRAIL STEALTH_GLOBAL commit 28d60d4 Author: Peter Akers <[email protected]> Date: Fri Feb 16 18:02:40 2024 +1000 Update README.md commit 3b16299 Author: peteGSX <[email protected]> Date: Sun Jan 21 07:13:53 2024 +1000 EX-IO fixes in version commit fb414a7 Author: Harald Barth <[email protected]> Date: Thu Jan 18 08:20:33 2024 +0100 Bugfix: allocate enough bytes for digital pins. Add more sanity checks when allocating memory commit 818e05b Author: Harald Barth <[email protected]> Date: Wed Jan 10 08:37:54 2024 +0100 version 5.0.8 commit c5168f0 Author: Harald Barth <[email protected]> Date: Wed Jan 10 08:15:30 2024 +0100 Do not crash on turnouts without description commit 387ea01 Author: Harald Barth <[email protected]> Date: Mon Nov 6 22:11:56 2023 +0100 version 5.0.7 commit a981f83 Author: Harald Barth <[email protected]> Date: Mon Nov 6 22:11:31 2023 +0100 Only flag 2.2.0.0-dev as broken, not 2.2.0.0 commit 749a859 Author: Asbelos <[email protected]> Date: Wed Nov 1 20:13:05 2023 +0000 Bugfix TURNOUTL commit 659c58b Author: Harald Barth <[email protected]> Date: Sat Oct 28 19:20:33 2023 +0200 version 5.0.5 commit 0b9ec74 Author: Harald Barth <[email protected]> Date: Sat Oct 28 19:18:59 2023 +0200 Bugfix version detection logic and better message
- Loading branch information
Showing
7 changed files
with
209 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
/* | ||
* © 2024 Chris Harlow | ||
* All rights reserved. | ||
* | ||
* This file is part of CommandStation-EX | ||
* | ||
* This is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* It is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with CommandStation. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
/********************************************************************** | ||
EXRAILSensor represents a sensor that should be monitored in order | ||
to call an exrail ONBUTTON or ONCHANGE handler. | ||
These are created at EXRAIL startup and thus need no delete or listing | ||
capability. | ||
The basic logic is similar to that found in the Sensor class | ||
except that on the relevant change an EXRAIL thread is started. | ||
**********************************************************************/ | ||
|
||
#include "EXRAILSensor.h" | ||
#include "EXRAIL2.h" | ||
|
||
void EXRAILSensor::checkAll() { | ||
if (firstSensor == NULL) return; // No sensors to be scanned | ||
if (readingSensor == NULL) { | ||
// Not currently scanning sensor list | ||
unsigned long thisTime = micros(); | ||
if (thisTime - lastReadCycle < cycleInterval) return; | ||
// Required time has elapsed since last read cycle started, | ||
// so initiate new scan through the sensor list | ||
readingSensor = firstSensor; | ||
lastReadCycle = thisTime; | ||
} | ||
|
||
// Loop until either end of list is encountered or we pause for some reason | ||
byte sensorCount = 0; | ||
|
||
while (readingSensor != NULL) { | ||
bool pause=readingSensor->check(); | ||
// Move to next sensor in list. | ||
readingSensor = readingSensor->nextSensor; | ||
// Currently process max of 16 sensors per entry. | ||
// Performance measurements taken during development indicate that, with 128 sensors configured | ||
// on 8x 16-pin MCP23017 GPIO expanders with polling (no change notification), all inputs can be read from the devices | ||
// within 1.4ms (400Mhz I2C bus speed), and a full cycle of checking 128 sensors for changes takes under a millisecond. | ||
if (pause || (++sensorCount)>=16) return; | ||
} | ||
} | ||
|
||
bool EXRAILSensor::check() { | ||
// check for debounced change in this sensor | ||
inputState = IODevice::read(pin); | ||
|
||
// Check if changed since last time, and process changes. | ||
if (inputState == active) {// no change | ||
latchDelay = minReadCount; // Reset counter | ||
return false; // no change | ||
} | ||
|
||
// Change detected ... has it stayed changed for long enough | ||
if (latchDelay > 0) { | ||
latchDelay--; | ||
return false; | ||
} | ||
|
||
// change validated, act on it. | ||
active = inputState; | ||
latchDelay = minReadCount; // Reset debounce counter | ||
if (onChange || active) { | ||
new RMFT2(progCounter); | ||
return true; // Don't check any more sensors on this entry | ||
} | ||
return false; | ||
} | ||
|
||
EXRAILSensor::EXRAILSensor(VPIN _pin, int _progCounter, bool _onChange) { | ||
// Add to the start of the list | ||
//DIAG(F("ONthing vpin=%d at %d"), _pin, _progCounter); | ||
nextSensor = firstSensor; | ||
firstSensor = this; | ||
|
||
pin=_pin; | ||
progCounter=_progCounter; | ||
onChange=_onChange; | ||
|
||
IODevice::configureInput(pin, true); | ||
active = IODevice::read(pin); | ||
inputState = active; | ||
latchDelay = minReadCount; | ||
} | ||
|
||
EXRAILSensor *EXRAILSensor::firstSensor=NULL; | ||
EXRAILSensor *EXRAILSensor::readingSensor=NULL; | ||
unsigned long EXRAILSensor::lastReadCycle=0; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
/* | ||
* © 2024 Chris Harlow | ||
* All rights reserved. | ||
* | ||
* This file is part of CommandStation-EX | ||
* | ||
* This is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* It is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with CommandStation. If not, see <https://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#ifndef EXRAILSensor_h | ||
#define EXRAILSensor_h | ||
#include "IODevice.h" | ||
class EXRAILSensor { | ||
static EXRAILSensor * firstSensor; | ||
static EXRAILSensor * readingSensor; | ||
static unsigned long lastReadCycle; | ||
|
||
public: | ||
static void checkAll(); | ||
|
||
EXRAILSensor(VPIN _pin, int _progCounter, bool _onChange); | ||
bool check(); | ||
|
||
private: | ||
static const unsigned int cycleInterval = 10000; // min time between consecutive reads of each sensor in microsecs. | ||
// should not be less than device scan cycle time. | ||
static const byte minReadCount = 4; // number of additional scans before acting on change | ||
// E.g. 1 means that a change is ignored for one scan and actioned on the next. | ||
// Max value is 63 | ||
|
||
EXRAILSensor* nextSensor; | ||
VPIN pin; | ||
int progCounter; | ||
bool active; | ||
bool inputState; | ||
bool onChange; | ||
byte latchDelay; | ||
}; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
|
||
BLINK(vpin, onMs,offMs) | ||
|
||
which will start a vpin blinking until such time as it is SET, RESET or set by a signal operation such as RED, AMBER, GREEN. | ||
|
||
BLINK returns immediately, the blinking is autonomous. | ||
|
||
This means a signal that always blinks amber could be done like this: | ||
``` | ||
SIGNAL(30,31,32) | ||
ONAMBER(30) BLINK(31,500,500) DONE | ||
``` | ||
The RED or GREEN calls will turn off the amber blink automatically. | ||
|
||
Alternatively a signal that has normal AMBER and flashing AMBER could be like this: | ||
|
||
#define FLASHAMBER(signal) \ | ||
AMBER(signal) \ | ||
BLINK(signal+1,500,500) | ||
|
||
(Caution: this issumes that the amber pin is redpin+1) | ||
|
||
== | ||
|
||
FTOGGLE(function) | ||
Toggles the current loco function (see FON and FOFF) | ||
|
||
XFTOGGLE(loco,function) | ||
Toggles the function on given loco. (See XFON, XFOFF) | ||
|
||
TOGGLE_TURNOUT(id) | ||
Toggles the turnout (see CLOSE, THROW) | ||
|
||
STEALTH_GLOBAL(code) | ||
ADVANCED C++ users only. | ||
Inserts code such as static variables and functions that | ||
may be utilised by multiple STEALTH operations. | ||
|