diff --git a/IO_DCCAccessory.cpp b/IO_DCCAccessory.cpp index 5e1c8f4..e40198b 100644 --- a/IO_DCCAccessory.cpp +++ b/IO_DCCAccessory.cpp @@ -22,17 +22,9 @@ #include "DIAG.h" #include "defines.h" -// Note: For DCC Accessory Decoders, a particular output can be specified by -// a linear address, or by an address/subaddress pair, where the subaddress is -// in the range 0 to 3 and specifies an output within a group of 4. -// NMRA and DCC++EX accepts addresses in the range 0-511. Linear addresses -// are not specified by the NMRA and so different manufacturers may calculate them -// in different ways. DCC++EX uses a range of 1-2044 which excludes decoder address 0. -// Linear address 1 corresponds to address 1 subaddress 0. - -#define LINEARADDRESS(addr, subaddr) (((addr-1) << 2) + subaddr + 1) -#define ADDRESS(linearaddr) (((linearaddr-1) >> 2) + 1) -#define SUBADDRESS(linearaddr) ((linearaddr-1) % 4) +#define PACKEDADDRESS(addr, subaddr) (((addr) << 2) + (subaddr)) +#define ADDRESS(packedaddr) ((packedaddr) >> 2) +#define SUBADDRESS(packedaddr) ((packedaddr) % 4) void DCCAccessoryDecoder::create(VPIN vpin, int nPins, int DCCAddress, int DCCSubaddress) { new DCCAccessoryDecoder(vpin, nPins, DCCAddress, DCCSubaddress); @@ -42,7 +34,7 @@ void DCCAccessoryDecoder::create(VPIN vpin, int nPins, int DCCAddress, int DCCSu DCCAccessoryDecoder::DCCAccessoryDecoder(VPIN vpin, int nPins, int DCCAddress, int DCCSubaddress) { _firstVpin = vpin; _nPins = nPins; - _packedAddress = LINEARADDRESS(DCCAddress, DCCSubaddress); + _packedAddress = PACKEDADDRESS(DCCAddress, DCCSubaddress); addDevice(this); } @@ -66,8 +58,7 @@ void DCCAccessoryDecoder::_write(VPIN id, int state) { void DCCAccessoryDecoder::_display() { int endAddress = _packedAddress + _nPins - 1; - DIAG(F("DCCAccessoryDecoder Configured on Vpins:%d-%d Linear Address:%d-%d (%d/%d-%d/%d)"), _firstVpin, _firstVpin+_nPins-1, - _packedAddress, _packedAddress+_nPins-1, + DIAG(F("DCCAccessoryDecoder Configured on Vpins:%d-%d Addresses %d/%d-%d/%d)"), _firstVpin, _firstVpin+_nPins-1, ADDRESS(_packedAddress), SUBADDRESS(_packedAddress), ADDRESS(endAddress), SUBADDRESS(endAddress)); }