mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-30 03:26:13 +01:00
BugFix + DCC_ENABLED set <s> not replying but <R> ok
This commit is contained in:
parent
77f0b99f8d
commit
a355cc74a0
|
@ -18,7 +18,7 @@
|
||||||
DCCEXParser serialParser;
|
DCCEXParser serialParser;
|
||||||
|
|
||||||
// (0) Declare NetworkInterfaces
|
// (0) Declare NetworkInterfaces
|
||||||
NetworkInterface wifi;
|
// NetworkInterface wifi;
|
||||||
NetworkInterface eth;
|
NetworkInterface eth;
|
||||||
// (0) Declared NetworkInterfaces
|
// (0) Declared NetworkInterfaces
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ void setup()
|
||||||
DIAG(F("\nFree RAM before network init: [%d]\n"),freeMemory());
|
DIAG(F("\nFree RAM before network init: [%d]\n"),freeMemory());
|
||||||
DIAG(F("\nNetwork Setup In Progress ...\n"));
|
DIAG(F("\nNetwork Setup In Progress ...\n"));
|
||||||
|
|
||||||
wifi.setup(WIFI); // WIFI, TCP on Port 2560
|
// wifi.setup(WIFI); // WIFI, TCP on Port 2560
|
||||||
eth.setup(ETHERNET, TCP, 8888); // ETHERNET, TCP on Port 8888
|
eth.setup(ETHERNET, TCP, 8888); // ETHERNET, TCP on Port 8888
|
||||||
eth.setHttpCallback(httpRequestHandler); // HTTP callback
|
eth.setHttpCallback(httpRequestHandler); // HTTP callback
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ void loop()
|
||||||
|
|
||||||
|
|
||||||
// (3) Start Loop NetworkInterface
|
// (3) Start Loop NetworkInterface
|
||||||
wifi.loop();
|
// wifi.loop();
|
||||||
eth.loop();
|
eth.loop();
|
||||||
// (3) End Loop NetworkInterface
|
// (3) End Loop NetworkInterface
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ const byte UNUSED_PIN = 255;
|
||||||
// Arduino standard Motor Shield
|
// Arduino standard Motor Shield
|
||||||
#define STANDARD_MOTOR_SHIELD F("STANDARD_MOTOR_SHIELD"), \
|
#define STANDARD_MOTOR_SHIELD F("STANDARD_MOTOR_SHIELD"), \
|
||||||
new MotorDriver(3, 12, UNUSED_PIN, UNUSED_PIN, A0, 2.99, 2000, UNUSED_PIN), \
|
new MotorDriver(3, 12, UNUSED_PIN, UNUSED_PIN, A0, 2.99, 2000, UNUSED_PIN), \
|
||||||
new MotorDriver(11, 13, UNUSED_PIN, UNUSED_PIN, A1, 2.99, 2000, UNUSED_PIN)
|
new MotorDriver(11, 13, UNUSED_PIN, UNUSED_PIN, A2, 2.99, 2000, UNUSED_PIN)
|
||||||
|
|
||||||
// Pololu Motor Shield
|
// Pololu Motor Shield
|
||||||
#define POLOLU_MOTOR_SHIELD F("POLOLU_MOTOR_SHIELD"), \
|
#define POLOLU_MOTOR_SHIELD F("POLOLU_MOTOR_SHIELD"), \
|
||||||
|
|
|
@ -52,25 +52,30 @@ uint8_t diagNetworkClient = 0;
|
||||||
|
|
||||||
void sendToDCC(Connection *c, TransportProcessor* t, bool blocking)
|
void sendToDCC(Connection *c, TransportProcessor* t, bool blocking)
|
||||||
{
|
{
|
||||||
static MemStream *streamer = new MemStream((byte *)command, MAX_ETH_BUFFER, MAX_ETH_BUFFER, true);
|
char * _command = t->command;
|
||||||
|
|
||||||
DIAG(F("DCC parsing: [%e]\n"), command);
|
static MemStream *streamer = new MemStream((byte *)_command, MAX_ETH_BUFFER, MAX_ETH_BUFFER, true);
|
||||||
|
|
||||||
|
DIAG(F("DCC parsing: [%e]\n"), _command);
|
||||||
// as we use buffer for recv and send we have to reset the write position
|
// as we use buffer for recv and send we have to reset the write position
|
||||||
streamer->setBufferContentPosition(0, 0);
|
streamer->setBufferContentPosition(0, 0);
|
||||||
|
|
||||||
ethParser.parse(streamer, (byte *)t->command, true); // set to true to that the execution in DCC is sync
|
ethParser.parse(streamer, (byte *)_command, true); // set to true to that the execution in DCC is sync
|
||||||
|
|
||||||
if (streamer->available() == 0)
|
if (streamer->available() == 0)
|
||||||
{
|
{
|
||||||
DIAG(F("No response\n"));
|
if (c->client->connected())
|
||||||
|
{
|
||||||
|
c->client->write((byte *)F("No response\n"), streamer->available());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
command[streamer->available()] = '\0'; // mark end of buffer, so it can be used as a string later
|
_command[streamer->available()] = '\0'; // mark end of buffer, so it can be used as a string later
|
||||||
DIAG(F("Response: %s\n"), t->command);
|
DIAG(F("Response: %s\n"), _command);
|
||||||
if (c->client->connected())
|
if (c->client->connected())
|
||||||
{
|
{
|
||||||
c->client->write((byte *)t->command, streamer->available());
|
c->client->write((byte *)_command, streamer->available());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,15 +258,16 @@ void processStream(Connection *c, TransportProcessor *t)
|
||||||
{
|
{
|
||||||
uint8_t i, j, k, l = 0;
|
uint8_t i, j, k, l = 0;
|
||||||
uint8_t* _buffer = t->buffer;
|
uint8_t* _buffer = t->buffer;
|
||||||
|
char* _command = t->command;
|
||||||
|
|
||||||
DIAG(F("\nBuffer: [%e]\n"), _buffer);
|
DIAG(F("\nBuffer: [%e]\n"), _buffer);
|
||||||
memset(t->command, 0, MAX_JMRI_CMD); // clear out the command
|
memset(_command, 0, MAX_JMRI_CMD); // clear out the command
|
||||||
|
|
||||||
// copy overflow into the command
|
// copy overflow into the command
|
||||||
if ((i = strlen(c->overflow)) != 0)
|
if ((i = strlen(c->overflow)) != 0)
|
||||||
{
|
{
|
||||||
// DIAG(F("\nCopy overflow to command: %e"), c->overflow);
|
// DIAG(F("\nCopy overflow to command: %e"), c->overflow);
|
||||||
strncpy(t->command, c->overflow, i);
|
strncpy(_command, c->overflow, i);
|
||||||
k = i;
|
k = i;
|
||||||
}
|
}
|
||||||
// reset the overflow
|
// reset the overflow
|
||||||
|
@ -290,21 +296,21 @@ void processStream(Connection *c, TransportProcessor *t)
|
||||||
}
|
}
|
||||||
// breakup the buffer using its changed length
|
// breakup the buffer using its changed length
|
||||||
i = 0;
|
i = 0;
|
||||||
k = strlen(t->command); // current length of the command buffer telling us where to start copy in
|
k = strlen(_command); // current length of the command buffer telling us where to start copy in
|
||||||
l = strlen((char *)_buffer);
|
l = strlen((char *)_buffer);
|
||||||
// DIAG(F("\nCommand buffer: [%s]:[%d:%d:%d]\n"), command, i, l, k );
|
// DIAG(F("\nCommand buffer: [%s]:[%d:%d:%d]\n"), command, i, l, k );
|
||||||
while (i < l)
|
while (i < l)
|
||||||
{
|
{
|
||||||
// DIAG(F("\nl: %d k: %d , i: %d"), l, k, i);
|
// DIAG(F("\nl: %d k: %d , i: %d"), l, k, i);
|
||||||
t->command[k] = _buffer[i];
|
_command[k] = _buffer[i];
|
||||||
if (_buffer[i] == c->delimiter)
|
if (_buffer[i] == c->delimiter)
|
||||||
{ // closing bracket need to fix if there is none before an opening bracket ?
|
{ // closing bracket need to fix if there is none before an opening bracket ?
|
||||||
|
|
||||||
t->command[k + 1] = '\0';
|
_command[k + 1] = '\0';
|
||||||
|
|
||||||
DIAG(F("Command: [%d:%e]\n"), _rseq[c->id], t->command);
|
DIAG(F("Command: [%d:%e]\n"), _rseq[c->id], _command);
|
||||||
#ifdef DCCEX_ENABLED
|
#ifdef DCCEX_ENABLED
|
||||||
sendToDCC(c, command, true);
|
sendToDCC(c, t, true);
|
||||||
#else
|
#else
|
||||||
sendReply(c, t);
|
sendReply(c, t);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "NetworkConfig.h"
|
#include "NetworkConfig.h"
|
||||||
#include "NetworkInterface.h"
|
#include "NetworkInterface.h"
|
||||||
|
|
||||||
// #define DCCEX_ENABLED
|
#define DCCEX_ENABLED
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user