Цитата:
Сообщение от Tolyan
А то по умолчанию все локи в обратную сторону в отличие от роковской КС
|
Ну если я правильно понял немецкий
Цитата:
27.02.2016 Änderung Dekodierung DCC14 und DCC28
Invertierung Fahrtrichtung DCC Decoder DIRF
|
то так и должно быть.
Цитата:
Сообщение от Tolyan
как прграммно сделать реверс?
|
надо "ковырять" библиотеку Z21.cpp
Как я понял, гдето тут
Код:
case LAN_X_SET_LOCO:
if (packet[5] == LAN_X_SET_LOCO_FUNCTION) { //DB0
//LAN_X_SET_LOCO_FUNCTION Adr_MSB Adr_LSB Type (EIN/AUS/UM) Funktion
if (notifyz21LocoFkt)
notifyz21LocoFkt(word(packet[6] & 0x3F, packet[7]), packet[8] >> 5, packet[8] & B00011111);
//uint16_t Adr, uint8_t type, uint8_t fkt
}
else { //DB0
//Debug.print("X_SET_LOCO_DRIVE ");
byte steps = 14;
if ((packet[5] & 0x03) == 3)
steps = 128;
else if ((packet[5] & 0x03) == 2)
steps = 28;
if (notifyz21LocoSpeed)
notifyz21LocoSpeed(word(packet[6] & 0x3F, packet[7]), packet[8],steps);
}
break;
Если точнее, то в седьмом бите пятого пакета задается направление
Ну и класс, который это все обрабатывает
Код:
void z21Class::setLocoStateFull (int Adr, byte steps, byte speed, byte F0, byte F1, byte F2, byte F3, bool bc)
{
byte data[9];
data[0] = LAN_X_LOCO_INFO; //0xEF X-HEADER
data[1] = (Adr >> 8) & 0x3F;
data[2] = Adr & 0xFF;
data[3] = steps & B111; //steps
if (data[3] == 3) //nicht vorhanden!
data[3] = 4;
data[4] = speed; //DSSS SSSS
data[5] = F0; //F0, F4, F3, F2, F1
data[6] = F1; //F5 - F12; Funktion F5 ist bit0 (LSB)
data[7] = F2; //F13-F20
data[8] = F3; //F21-F28
if (bc) //BC?
EthSend(0, 14, LAN_X_Header, data, true, Z21bcAll_s | Z21bcNetAll_s); //Send Power und Funktions to all active Apps
else EthSend (0, 14, LAN_X_Header, data, true, Z21bcNone); //Send Power und Funktions to all active Apps
}
можно попробовать тут в data[4] инвертировать седьмой бит.