1
0
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:
Gregor Baues 2020-10-26 10:52:47 +01:00
parent 77f0b99f8d
commit a355cc74a0
4 changed files with 26 additions and 20 deletions

View File

@ -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

View File

@ -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"), \

View File

@ -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

View File

@ -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
{ {