1
0
mirror of https://github.com/DCC-EX/CommandStation-EX.git synced 2024-11-23 08:06:13 +01:00

Bugfix: Transmit packages of size MAX_PACKET_SIZE (5) as well

This commit is contained in:
Harald Barth 2021-03-12 22:12:13 +01:00
parent d35529e94a
commit 98071602c3
4 changed files with 16 additions and 5 deletions

View File

@ -198,6 +198,10 @@ void DCC::setAccessory(int address, byte number, bool activate) {
DCCWaveform::mainTrack.schedulePacket(b, 2, 4); // Repeat the packet four times DCCWaveform::mainTrack.schedulePacket(b, 2, 4); // Repeat the packet four times
} }
//
// writeCVByteMain: Write a byte with PoM on main. This writes
// the 5 byte sized packet to implement this DCC function
//
void DCC::writeCVByteMain(int cab, int cv, byte bValue) { void DCC::writeCVByteMain(int cab, int cv, byte bValue) {
byte b[5]; byte b[5];
byte nB = 0; byte nB = 0;
@ -212,6 +216,10 @@ void DCC::writeCVByteMain(int cab, int cv, byte bValue) {
DCCWaveform::mainTrack.schedulePacket(b, nB, 4); DCCWaveform::mainTrack.schedulePacket(b, nB, 4);
} }
//
// writeCVBitMain: Write a bit of a byte with PoM on main. This writes
// the 5 byte sized packet to implement this DCC function
//
void DCC::writeCVBitMain(int cab, int cv, byte bNum, bool bValue) { void DCC::writeCVBitMain(int cab, int cv, byte bNum, bool bValue) {
byte b[5]; byte b[5];
byte nB = 0; byte nB = 0;

View File

@ -256,7 +256,7 @@ void DCCWaveform::interrupt2() {
// Wait until there is no packet pending, then make this pending // Wait until there is no packet pending, then make this pending
void DCCWaveform::schedulePacket(const byte buffer[], byte byteCount, byte repeats) { void DCCWaveform::schedulePacket(const byte buffer[], byte byteCount, byte repeats) {
if (byteCount >= MAX_PACKET_SIZE) return; // allow for chksum if (byteCount > MAX_PACKET_SIZE) return; // allow for chksum
while (packetPending); while (packetPending);
byte checksum = 0; byte checksum = 0;
@ -264,6 +264,7 @@ void DCCWaveform::schedulePacket(const byte buffer[], byte byteCount, byte repea
checksum ^= buffer[b]; checksum ^= buffer[b];
pendingPacket[b] = buffer[b]; pendingPacket[b] = buffer[b];
} }
// buffer is MAX_PACKET_SIZE but pendingPacket is one bigger
pendingPacket[byteCount] = checksum; pendingPacket[byteCount] = checksum;
pendingLength = byteCount + 1; pendingLength = byteCount + 1;
pendingRepeats = repeats; pendingRepeats = repeats;

View File

@ -29,7 +29,7 @@ const int POWER_SAMPLE_OVERLOAD_WAIT = 20;
// Number of preamble bits. // Number of preamble bits.
const int PREAMBLE_BITS_MAIN = 16; const int PREAMBLE_BITS_MAIN = 16;
const int PREAMBLE_BITS_PROG = 22; const int PREAMBLE_BITS_PROG = 22;
const byte MAX_PACKET_SIZE = 5; // NMRA standard exrtended packets const byte MAX_PACKET_SIZE = 5; // NMRA standard extended packets, payload size WITHOUT checksum.
// The WAVE_STATE enum is deliberately numbered because a change of order would be catastrophic // The WAVE_STATE enum is deliberately numbered because a change of order would be catastrophic
// to the transform array. // to the transform array.
@ -119,7 +119,7 @@ class DCCWaveform {
bool isMainTrack; bool isMainTrack;
MotorDriver* motorDriver; MotorDriver* motorDriver;
// Transmission controller // Transmission controller
byte transmitPacket[MAX_PACKET_SIZE]; // packet being transmitted byte transmitPacket[MAX_PACKET_SIZE+1]; // +1 for checksum
byte transmitLength; byte transmitLength;
byte transmitRepeats; // remaining repeats of transmission byte transmitRepeats; // remaining repeats of transmission
byte remainingPreambles; byte remainingPreambles;
@ -127,7 +127,7 @@ class DCCWaveform {
byte bits_sent; // 0-8 (yes 9 bits) sent for current byte byte bits_sent; // 0-8 (yes 9 bits) sent for current byte
byte bytes_sent; // number of bytes sent from transmitPacket byte bytes_sent; // number of bytes sent from transmitPacket
WAVE_STATE state; // wave generator state machine WAVE_STATE state; // wave generator state machine
byte pendingPacket[MAX_PACKET_SIZE]; byte pendingPacket[MAX_PACKET_SIZE+1]; // +1 for checksum
byte pendingLength; byte pendingLength;
byte pendingRepeats; byte pendingRepeats;
int lastCurrent; int lastCurrent;

View File

@ -3,7 +3,9 @@
#include "StringFormatter.h" #include "StringFormatter.h"
#define VERSION "3.0.5" #define VERSION "3.0.6"
// 3.0.6 Includes:
// Fix Bug that did not let us transmit 5 byte sized packets like PoM
// 3.0.5 Includes: // 3.0.5 Includes:
// Fix Fn Key startup with loco ID and fix state change for F16-28 // Fix Fn Key startup with loco ID and fix state change for F16-28
// 3.0.4 Includes: // 3.0.4 Includes: