1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2025-02-19 23:46:02 +01:00

Start on callback

This commit is contained in:
peteGSX 2023-08-30 19:48:30 +10:00
parent dbf053858b
commit a0c1ad182c
6 changed files with 20 additions and 7 deletions

View File

@ -161,8 +161,8 @@ void CommandDistributor::broadcastTurnout(int16_t id, bool isClosed ) {
#endif #endif
} }
void CommandDistributor::broadcastTurntable(int16_t id, uint8_t position) { void CommandDistributor::broadcastTurntable(int16_t id, uint8_t position, bool moving) {
broadcastReply(COMMAND_TYPE, F("<i %d %d>\n"), id, position); broadcastReply(COMMAND_TYPE, F("<i %d %d %d>\n"), id, position, moving);
} }
void CommandDistributor::broadcastClockTime(int16_t time, int8_t rate) { void CommandDistributor::broadcastClockTime(int16_t time, int8_t rate) {

View File

@ -49,7 +49,7 @@ public :
static void broadcastLoco(byte slot); static void broadcastLoco(byte slot);
static void broadcastSensor(int16_t id, bool value); static void broadcastSensor(int16_t id, bool value);
static void broadcastTurnout(int16_t id, bool isClosed); static void broadcastTurnout(int16_t id, bool isClosed);
static void broadcastTurntable(int16_t id, uint8_t position); static void broadcastTurntable(int16_t id, uint8_t position, bool moving);
static void broadcastClockTime(int16_t time, int8_t rate); static void broadcastClockTime(int16_t time, int8_t rate);
static void setClockTime(int16_t time, int8_t rate, byte opt); static void setClockTime(int16_t time, int8_t rate, byte opt);
static int16_t retClockTime(); static int16_t retClockTime();

View File

@ -1226,3 +1226,8 @@ void DCCEXParser::callback_Wloco(int16_t result)
StringFormatter::send(getAsyncReplyStream(), F("<w %d>\n"), result); StringFormatter::send(getAsyncReplyStream(), F("<w %d>\n"), result);
commitAsyncReplyStream(); commitAsyncReplyStream();
} }
void DCCEXParser::callback_Imoving(bool moving) {
if (!moving) StringFormatter::send(getAsyncReplyStream(), F("<i>"));
commitAsyncReplyStream();
}

View File

@ -72,6 +72,7 @@ struct DCCEXParser
static void callback_Wloco(int16_t result); static void callback_Wloco(int16_t result);
static void callback_Vbit(int16_t result); static void callback_Vbit(int16_t result);
static void callback_Vbyte(int16_t result); static void callback_Vbyte(int16_t result);
static void callback_Imoving(bool moving);
static FILTER_CALLBACK filterCallback; static FILTER_CALLBACK filterCallback;
static FILTER_CALLBACK filterRMFTCallback; static FILTER_CALLBACK filterRMFTCallback;
static AT_COMMAND_CALLBACK atCommandCallback; static AT_COMMAND_CALLBACK atCommandCallback;

View File

@ -95,10 +95,10 @@ uint8_t Turntable::getPositionCount() {
/* /*
* Public static functions * Public static functions
*/ */
bool Turntable::setPositionStateOnly(uint16_t id, uint8_t position) { bool Turntable::setPositionStateOnly(uint16_t id, uint8_t position, bool moving) {
Turntable *tto = get(id); Turntable *tto = get(id);
if (!tto) return false; if (!tto) return false;
CommandDistributor::broadcastTurntable(id, position); CommandDistributor::broadcastTurntable(id, position, moving);
#if defined(EXRAIL_ACTIVE) #if defined(EXRAIL_ACTIVE)
// RMFT2::turntableEvent(id, position); // RMFT2::turntableEvent(id, position);
#endif #endif
@ -116,7 +116,11 @@ bool Turntable::setPosition(uint16_t id, uint8_t position, uint8_t activity) {
if (ok) { if (ok) {
// Broadcast a position change only if non zero has been set, or home/calibration sent // Broadcast a position change only if non zero has been set, or home/calibration sent
if (position > 0 || (position == 0 && (activity == 2 || activity == 3))) { if (position > 0 || (position == 0 && (activity == 2 || activity == 3))) {
tto->setPositionStateOnly(id, position); if (tto->getType() == TURNTABLE_EXTT) {
tto->setPositionStateOnly(id, position, 1);
} else {
tto->setPositionStateOnly(id, position, 0);
}
tto->_turntableData.position = position; tto->_turntableData.position = position;
} }
} }

View File

@ -36,6 +36,9 @@ enum {
TURNTABLE_DCC = 1, TURNTABLE_DCC = 1,
}; };
// Callback needs to return a bool: 1 = moving, 0 = stopped
typedef void (*EXTT_CALLBACK)(bool moving);
/************************************************************************************* /*************************************************************************************
* Turntable positions. * Turntable positions.
* *
@ -167,7 +170,7 @@ public:
*/ */
inline static bool exists(uint16_t id) { return get(id) != 0; } inline static bool exists(uint16_t id) { return get(id) != 0; }
static bool setPosition(uint16_t id, uint8_t position, uint8_t activity=0); static bool setPosition(uint16_t id, uint8_t position, uint8_t activity=0);
static bool setPositionStateOnly(uint16_t id, uint8_t position); static bool setPositionStateOnly(uint16_t id, uint8_t position, bool moving);
inline static Turntable *first() { return _firstTurntable; } inline static Turntable *first() { return _firstTurntable; }
static bool printAll(Print *stream) { static bool printAll(Print *stream) {
bool gotOne = false; bool gotOne = false;