mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2025-04-21 20:41:19 +02:00
Compare commits
No commits in common. "2fb0f4fb1b7c73e6402e95df183c7817f6b1ce29" and "ce2ed1844dcf856cf0dc398d849c574c4e1c0883" have entirely different histories.
2fb0f4fb1b
...
ce2ed1844d
@ -185,9 +185,6 @@ void CommandDistributor::setClockTime(int16_t clocktime, int8_t clockrate, byte
|
||||
{
|
||||
case 1:
|
||||
if (clocktime != lastclocktime){
|
||||
auto difference = clocktime - lastclocktime;
|
||||
if (difference<0) difference+=1440;
|
||||
DCC::setTime(clocktime,clockrate,difference>2);
|
||||
// CAH. DIAG removed because LCD does it anyway.
|
||||
LCD(6,F("Clk Time:%d Sp %d"), clocktime, clockrate);
|
||||
// look for an event for this time
|
||||
|
38
DCC.cpp
38
DCC.cpp
@ -371,44 +371,6 @@ whole range of the 11 bits sent to track.
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DCC::setTime(uint16_t minutes,uint8_t speed, bool suddenChange) {
|
||||
/* see rcn-122
|
||||
5 Global commands
|
||||
These commands are sent and begin exclusively with a broadcast address 0
|
||||
always with {synchronous bits} 0 0000-0000 … and end with the checksum
|
||||
... PPPPPPPP 1. Therefore, only the bytes of the commands and not that of
|
||||
shown below whole package shown. The commands can be used by vehicle and
|
||||
accessory decoders alike.
|
||||
|
||||
5.1 Time command
|
||||
This command is four bytes long and has the format:
|
||||
1100-0001 CCxx-xxxx xxxx-xxxxx xxxx-xxxx
|
||||
CC indicates what data is transmitted in the packet:
|
||||
CC = 00 Model Time
|
||||
1100-0001 00MM-MMMM WWWH-HHHH U0BB-BBBB with:
|
||||
MMMMMM = Minutes, Value range: 0..59
|
||||
WWW = Day of the Week, Value range: 0 = Monday, 1 = Tuesday, 2 = Wednesday,
|
||||
3 = Thursday, 4 = Friday, 5 = Saturday, 6 = Sunday, 7 = Weekday
|
||||
is not supported.
|
||||
HHHHH = Hours, value range: 0..23
|
||||
U =
|
||||
Update, i.e. the time has changed suddenly, e.g. by a new one timetable to start.
|
||||
Up to 4 can occur per sudden change commands can be marked like this.
|
||||
BBBBBB = Acceleration factor, value range 0..63. An acceleration factor of 0 means the
|
||||
model clock has been stopped, a factor of 1 corresponds to real time, at 2 the
|
||||
clock runs twice as fast, at three times as fast as real time, etc.
|
||||
*/
|
||||
if (minutes>=1440 || speed>63 ) return false;
|
||||
byte b[5];
|
||||
b[0]=0; // broadcast address
|
||||
b[1]=0b11000001; // 1100-0001 (model time)
|
||||
b[2]=minutes % 60 ; // MM
|
||||
b[3]= 0b11100000 | (minutes/60); // 111H-HHHH weekday not supported
|
||||
b[4]= (suddenChange ? 0b10000000 : 0) | speed;
|
||||
DCCWaveform::mainTrack.schedulePacket(b, sizeof(b), 2);
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
// writeCVByteMain: Write a byte with PoM on main. This writes
|
||||
// the 5 byte sized packet to implement this DCC function
|
||||
|
1
DCC.h
1
DCC.h
@ -77,7 +77,6 @@ public:
|
||||
static void setAccessory(int address, byte port, bool gate, byte onoff = 2);
|
||||
static bool setExtendedAccessory(int16_t address, int16_t value, byte repeats=3);
|
||||
static bool writeTextPacket(byte *b, int nBytes);
|
||||
static bool setTime(uint16_t minutes,uint8_t speed, bool suddenChange);
|
||||
|
||||
// ACKable progtrack calls bitresults callback 0,0 or -1, cv returns value or -1
|
||||
static void readCV(int16_t cv, ACK_CALLBACK callback);
|
||||
|
@ -402,8 +402,7 @@ void DCCEXParser::parseOne(Print *stream, byte *com, RingStream * ringStream)
|
||||
|| (p[activep] > 1) || (p[activep] < 0) // invalid activate 0|1
|
||||
) break;
|
||||
// Honour the configuration option (config.h) which allows the <a> command to be reversed
|
||||
// Because of earlier confusion we need to do the same thing under both defines
|
||||
#if defined(DCC_ACCESSORY_COMMAND_REVERSE) || defined(DCC_ACCESSORY_RCN_213)
|
||||
#ifdef DCC_ACCESSORY_COMMAND_REVERSE
|
||||
DCC::setAccessory(address, subaddress,p[activep]==0,onoff);
|
||||
#else
|
||||
DCC::setAccessory(address, subaddress,p[activep]==1,onoff);
|
||||
|
@ -1 +1 @@
|
||||
#define GITHUB_SHA "devel-202412281446Z"
|
||||
#define GITHUB_SHA "devel-railcom2-202409282036Z"
|
||||
|
11
Turnouts.cpp
11
Turnouts.cpp
@ -312,6 +312,12 @@
|
||||
*
|
||||
*************************************************************************************/
|
||||
|
||||
#if defined(DCC_TURNOUTS_RCN_213)
|
||||
const bool DCCTurnout::rcn213Compliant = true;
|
||||
#else
|
||||
const bool DCCTurnout::rcn213Compliant = false;
|
||||
#endif
|
||||
|
||||
// DCCTurnoutData contains data specific to this subclass that is
|
||||
// written to EEPROM when the turnout is saved.
|
||||
struct DCCTurnoutData {
|
||||
@ -379,10 +385,7 @@
|
||||
// DCC++ Classic behaviour is that Throw writes a 1 in the packet,
|
||||
// and Close writes a 0.
|
||||
// RCN-213 specifies that Throw is 0 and Close is 1.
|
||||
#if defined(DCC_TURNOUTS_RCN_213)
|
||||
close = !close;
|
||||
#endif
|
||||
DCC::setAccessory(_dccTurnoutData.address, _dccTurnoutData.subAddress, close);
|
||||
DCC::setAccessory(_dccTurnoutData.address, _dccTurnoutData.subAddress, close ^ !rcn213Compliant);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -245,6 +245,8 @@ public:
|
||||
// Load a VPIN turnout definition from EEPROM. The common Turnout data has already been read at this point.
|
||||
static Turnout *load(struct TurnoutData *turnoutData);
|
||||
void print(Print *stream) override;
|
||||
// Flag whether DCC Accessory packets are to contain 1=close/0=throw(RCN-213) or 1=throw/0-close (DCC++ Classic)
|
||||
static const bool rcn213Compliant;
|
||||
|
||||
protected:
|
||||
bool setClosedInternal(bool close) override;
|
||||
|
@ -269,10 +269,9 @@ The configuration file for DCC-EX Command Station
|
||||
// over DCC++. This #define likewise inverts the behaviour of the <a> command
|
||||
// for triggering DCC Accessory Decoders, so that <a addr subaddr 0> generates a
|
||||
// DCC packet with D=1 (close turnout) and <a addr subaddr 1> generates D=0
|
||||
// (throw turnout). This is the same as DCC_ACCESSORY_COMMAND_REVERSE
|
||||
// (throw turnout).
|
||||
//#define DCC_ACCESSORY_RCN_213
|
||||
|
||||
|
||||
//
|
||||
// HANDLING MULTIPLE SERIAL THROTTLES
|
||||
// The command station always operates with the default Serial port.
|
||||
// Diagnostics are only emitted on the default serial port and not broadcast.
|
||||
|
@ -3,8 +3,7 @@
|
||||
|
||||
#include "StringFormatter.h"
|
||||
|
||||
#define VERSION "5.2.94"
|
||||
// 5.2.94 - Bugfix: Less confusion and simpler code around the RCN213 defines
|
||||
#define VERSION "5.2.93"
|
||||
// 5.2.93 - Bugfix ESP32: clear progTrackSyncMain (join flag) when prog track is removed
|
||||
// 5.2.92 - Bugfix: FADE power off fix, EXRAIL power diagnostic fix.
|
||||
// 5.2.91 - Bugfix: Neopixel I2C overlap check
|
||||
|
Loading…
x
Reference in New Issue
Block a user