fixing stuff. The child class did not work as expexted.

master
Steffen Pohle 4 years ago
parent 9b1eb38f29
commit 0a446a26df

@ -59,7 +59,7 @@ InterfaceZ21::~InterfaceZ21() {
void InterfaceZ21::Connect () { void InterfaceZ21::Connect () {
debug (DEBUG_INFO | DEBUG_IFACE, "InterfaceZ21: Connect to: %s", host); debug (DEBUG_INFO | DEBUG_IFACE, "InterfaceZ21: Connect %s to: %s", name, host);
if (status_connected) Disconnect(); if (status_connected) Disconnect();
@ -99,12 +99,11 @@ void InterfaceZ21::Disconnect() {
// //
// check if we are connected and for timeouts. // check if we are connected and for timeouts.
// read and go through incoming data // read and go through incoming data
int InterfaceZ21::Loop(string interfacename) { int InterfaceZ21::Loop() {
time_t curtime = time(NULL); time_t curtime = time(NULL);
string source; string source;
int inlen; int inlen;
int i; int i;
int needs_update = false;
// debug (DEBUG_INFO | DEBUG_IFACE, "* InterfaceZ21 (%s) Loop", name); // debug (DEBUG_INFO | DEBUG_IFACE, "* InterfaceZ21 (%s) Loop", name);
@ -145,7 +144,7 @@ int InterfaceZ21::Loop(string interfacename) {
if ((inlen = udp.ReadTimeout(&source, inbuffer, INTF_Z21_INBUFFER, 10)) > 0) { if ((inlen = udp.ReadTimeout(&source, inbuffer, INTF_Z21_INBUFFER, 10)) > 0) {
// //
// got some data // got some data
debug (DEBUG_INFO | DEBUG_IFACE, "%s:%d [%s] got some data.", __FILE__, __LINE__, name);
// //
// check for LAN_SYSTEMSTATE_DATACHANGED // check for LAN_SYSTEMSTATE_DATACHANGED
if (memcmp (inbuffer, RX_GET_SERIAL_NUMBER, sizeof(RX_GET_SERIAL_NUMBER)) == 0) { if (memcmp (inbuffer, RX_GET_SERIAL_NUMBER, sizeof(RX_GET_SERIAL_NUMBER)) == 0) {
@ -162,9 +161,9 @@ int InterfaceZ21::Loop(string interfacename) {
debug (0, "%s:%d Interface-Z21: TurnoutInformation Addr:%d", __FILE__, __LINE__, addr); debug (0, "%s:%d Interface-Z21: TurnoutInformation Addr:%d", __FILE__, __LINE__, addr);
if (inbuffer[Z21_IDX_SETTURNOUT_MODE] == 2) if (inbuffer[Z21_IDX_SETTURNOUT_MODE] == 2)
server->TurnoutAddrMode(interfacename, addr, 1); server->TurnoutAddrMode(name, addr, 1);
else if (inbuffer[Z21_IDX_SETTURNOUT_MODE] == 1) else if (inbuffer[Z21_IDX_SETTURNOUT_MODE] == 1)
server->TurnoutAddrMode(interfacename, addr, 0); server->TurnoutAddrMode(name, addr, 0);
} }
@ -180,7 +179,7 @@ int InterfaceZ21::Loop(string interfacename) {
status_shortcircuit = (cs & INTF_Z21_CS_ShortCircuit); status_shortcircuit = (cs & INTF_Z21_CS_ShortCircuit);
status_programmingmode = (cs & INTF_Z21_CS_ProgModeActive); status_programmingmode = (cs & INTF_Z21_CS_ProgModeActive);
debug (0, "%s:%d cs:%d csex:%d", __FILE__, __LINE__, cs, csex); debug (0, "%s:%d Name:%s cs:%d csex:%d", __FILE__, __LINE__, name, cs, csex);
needs_update = true; needs_update = true;
//if ( old_poweron != status_poweron || //if ( old_poweron != status_poweron ||
@ -219,7 +218,7 @@ int InterfaceZ21::Loop(string interfacename) {
debug (0, "%s:%d Loc:%d Speed:%d", __FILE__, __LINE__, loconet_map[inloc].addr, inspeed); debug (0, "%s:%d Loc:%d Speed:%d", __FILE__, __LINE__, loconet_map[inloc].addr, inspeed);
if (loconet_map[inloc].addr > 0) { if (loconet_map[inloc].addr > 0) {
int speed = inspeed; int speed = inspeed;
server->LocomotiveAddrSpeed(interfacename, loconet_map[inloc].addr, speed); server->LocomotiveAddrSpeed(name, loconet_map[inloc].addr, speed);
} }
} }
loconet_last.addr = 0; loconet_last.addr = 0;
@ -238,7 +237,7 @@ int InterfaceZ21::Loop(string interfacename) {
debug (0, "%s:%d Loc:%d Function:%d", __FILE__, __LINE__, loconet_map[inloc].addr, infunc); debug (0, "%s:%d Loc:%d Function:%d", __FILE__, __LINE__, loconet_map[inloc].addr, infunc);
if (loconet_map[inloc].addr > 0) { if (loconet_map[inloc].addr > 0) {
server->LocomotiveAddrFunction(interfacename, loconet_map[inloc].addr, infunc); server->LocomotiveAddrFunction(name, loconet_map[inloc].addr, infunc);
} }
loconet_last.addr = 0; loconet_last.addr = 0;
@ -251,7 +250,7 @@ int InterfaceZ21::Loop(string interfacename) {
int group = (unsigned char)inbuffer[4]; int group = (unsigned char)inbuffer[4];
int idx; int idx;
printf ("LAN_RMBUS_DATA_CHANGE[%s] ", interfacename.c_str()); printf ("LAN_RMBUS_DATA_CHANGE[%s] ", name);
for (idx = 0; idx < INTF_Z21_RMSENSOR_BYTES * INTF_Z21_RMSENSOR_GROUPS; idx++) { for (idx = 0; idx < INTF_Z21_RMSENSOR_BYTES * INTF_Z21_RMSENSOR_GROUPS; idx++) {
printf ("%x ", (unsigned char) inbuffer[4+idx]); printf ("%x ", (unsigned char) inbuffer[4+idx]);
} }
@ -268,9 +267,9 @@ int InterfaceZ21::Loop(string interfacename) {
for (idx = 0; idx < INTF_Z21_RMSENSOR_GROUPS*INTF_Z21_RMSENSOR_BYTES; idx++) { for (idx = 0; idx < INTF_Z21_RMSENSOR_GROUPS*INTF_Z21_RMSENSOR_BYTES; idx++) {
if (rmsold[idx]^rmsensors[idx]) { if (rmsold[idx]^rmsensors[idx]) {
for (i = 0; i < 8; i++) if (rmsensorinit || (rmsold[idx] & 1 << i) != (rmsensors[idx] & 1 << i)) { for (i = 0; i < 8; i++) if (rmsensorinit || (rmsold[idx] & 1 << i) != (rmsensors[idx] & 1 << i)) {
debug (0, "Sendor Data Changed: %s[%d]", interfacename.c_str(), idx*8+i); debug (0, "Sendor Data Changed: %s[%d]", name, idx*8+i);
if (rmsensors[idx] & 1 << i) server->SensorAddrChange(interfacename, idx*8+i, 1); if (rmsensors[idx] & 1 << i) server->SensorAddrChange(name, idx*8+i, 1);
else server->SensorAddrChange(interfacename, idx*8+i, 0); else server->SensorAddrChange(name, idx*8+i, 0);
} }
} }
} }
@ -279,7 +278,7 @@ int InterfaceZ21::Loop(string interfacename) {
} }
else { else {
printf ("InterfaceZ21(%s) Got some Data:", interfacename.c_str()); printf ("InterfaceZ21(%s) Got some Data:", name);
for (i = 0; i < inlen; i++) { for (i = 0; i < inlen; i++) {
int z = (unsigned char) inbuffer[i]; int z = (unsigned char) inbuffer[i];
printf ("%02x:", z); printf ("%02x:", z);
@ -295,6 +294,11 @@ int InterfaceZ21::Loop(string interfacename) {
} }
} }
if (IsConnected()) flags |= INTF_F_CONNECTED;
if (IsPoweron()) flags |= INTF_F_POWER;
if (IsEmergencyStop()) flags |= INTF_F_STOP;
if (IsSortCircuit()) flags |= INTF_F_SHORT_CIRCUIT;
return needs_update; return needs_update;
}; };
@ -456,7 +460,7 @@ void InterfaceZ21::SetTurnout(Turnout *t, int activate, int outputactive) {
// send_X_SET_TRACK_POWER_ON(); send_X_SET_TRACK_POWER_ON(); // send_X_SET_TRACK_POWER_ON(); send_X_SET_TRACK_POWER_ON();
void InterfaceZ21::PowerOnOff(int onoff) { void InterfaceZ21::PowerOnOff(int onoff) {
if (status_connected == false) return; if (status_connected == false) return;
debug (DEBUG_INFO | DEBUG_IFACE, "InterfaceZ21::PowerOnOff onoff:%d", onoff);
if (onoff) { if (onoff) {
udp.Write(host, (char*)TX_X_SET_TRACK_POWER_ON, sizeof (TX_X_SET_TRACK_POWER_ON)); udp.Write(host, (char*)TX_X_SET_TRACK_POWER_ON, sizeof (TX_X_SET_TRACK_POWER_ON));
} }

@ -70,7 +70,7 @@ class InterfaceZ21: public Interface {
bool IsProgramminnMode() { return status_programmingmode; }; bool IsProgramminnMode() { return status_programmingmode; };
bool IsEmergencyStop() { return status_emergencystop; }; bool IsEmergencyStop() { return status_emergencystop; };
int Loop(string interfacename); int Loop();
void PowerOnOff(int onoff); void PowerOnOff(int onoff);
void SetLocoSpeed(Locomotive *l, int step); void SetLocoSpeed(Locomotive *l, int step);
void SetLocoFunction(Locomotive *l, int func, int value); void SetLocoFunction(Locomotive *l, int func, int value);

@ -93,3 +93,23 @@ bool Interface::IsPoweron() {
return ret; return ret;
} }
bool Interface::IsSortCircuit() {
bool ret = false;
debug (DEBUG_INFO | DEBUG_IFACE, "* Interface (%s) IsSortCircuit", name);
return ret;
}
bool Interface::IsProgramminnMode() {
bool ret = false;
debug (DEBUG_INFO | DEBUG_IFACE, "* Interface (%s) IsProgramminnMode", name);
return ret;
}
bool Interface::IsEmergencyStop() {
bool ret = false;
debug (DEBUG_INFO | DEBUG_IFACE, "* Interface (%s) IsEmergencyStop", name);
return ret;
}

@ -17,8 +17,8 @@
class Interface { class Interface {
private: private:
bool needs_update;
public: public:
bool needs_update;
char name[REFERENCENAME_LEN]; char name[REFERENCENAME_LEN];
char host[NET_HOSTLEN]; char host[NET_HOSTLEN];
int flags; int flags;
@ -37,6 +37,9 @@ public:
virtual bool IsConnected(); virtual bool IsConnected();
virtual bool IsPoweron(); virtual bool IsPoweron();
virtual bool IsSortCircuit();
virtual bool IsProgramminnMode();
virtual bool IsEmergencyStop();
virtual int Loop(); virtual int Loop();
}; };

@ -10,7 +10,7 @@ var interfaces = [];
function interface_Update(intdata) { function interface_Update(intdata) {
for (var i = 0; i < interfaces.length; i++) { for (var i = 0; i < interfaces.length; i++) {
if (intdata.name == interfaces[i].name) { if (intdata.name == interfaces[i].name) {
//debug ("Update Interface:" + interfaces[i].name + "(" + interfaces[i].host + ") with Interface:" + intdata.name + "(" + intdata.host + ")"); debug ("Update Interface:" + interfaces[i].name + "(" + interfaces[i].host + ") with Interface:" + intdata.name + "(" + intdata.host + ") Flags:" + intdata.flags);
if (!(intdata.flags & 0x0001)) sideBtnOnOffMode (3); // not connected if (!(intdata.flags & 0x0001)) sideBtnOnOffMode (3); // not connected
else if ((intdata.flags & 0x0010)) sideBtnOnOffMode (3); // programming mode else if ((intdata.flags & 0x0010)) sideBtnOnOffMode (3); // programming mode

Loading…
Cancel
Save