Index: trunk/MagicSoft/Cosy/candrv/network.cc
===================================================================
--- trunk/MagicSoft/Cosy/candrv/network.cc	(revision 1701)
+++ trunk/MagicSoft/Cosy/candrv/network.cc	(revision 1702)
@@ -240,6 +240,6 @@
             if (!fNodes[i]->IsZombieNode())
                 fNodeInitialized[i] = TRUE;
-            else
-                fNodes[i]=NULL;
+            /*else
+                fNodes[i]=NULL;*/
         }
     lout << "- All Nodes setup." << endl;
@@ -288,2 +288,38 @@
     return rc;
 }
+
+// --------------------------------------------------------------------------
+//
+// returns true if one of the nodes is a zombie node
+//
+bool Network::HasZombie() const
+{
+    for (int i=0; i<32; i++)
+        if (fNodes[i])
+            if (fNodes[i]->IsZombieNode())
+                return true;
+
+    return false;
+}
+
+// --------------------------------------------------------------------------
+//
+// try to reboot all zombie nodes to get them working again. all other
+// nodes are left untouched.
+//
+bool Network::RebootZombies()
+{
+    lout << "- Trying to reboot all Zombies..." << endl;
+    for (int i=0; i<32; i++)
+        if (fNodes[i])
+            if (fNodes[i]->IsZombieNode())
+                if (!fNodes[i]->Reboot())
+                {
+                    lout << "- Failed to reboot " << fNodes[i]->GetNodeName() << "." << endl;
+                    return false;
+                }
+
+    lout << "- All Zombies rebooted." << endl;
+
+    return true;
+}
Index: trunk/MagicSoft/Cosy/candrv/network.h
===================================================================
--- trunk/MagicSoft/Cosy/candrv/network.h	(revision 1701)
+++ trunk/MagicSoft/Cosy/candrv/network.h	(revision 1702)
@@ -32,4 +32,7 @@
 
     bool HasError() const;
+    bool HasZombie() const;
+
+    bool RebootZombies();
 
     ClassDef(Network, 0) // collection of nodes (nodedrv)
Index: trunk/MagicSoft/Cosy/candrv/nodedrv.cc
===================================================================
--- trunk/MagicSoft/Cosy/candrv/nodedrv.cc	(revision 1701)
+++ trunk/MagicSoft/Cosy/candrv/nodedrv.cc	(revision 1702)
@@ -87,4 +87,15 @@
 // --------------------------------------------------------------------------
 //
+// This should be called from a master or main thread to get a node out
+// of the Zombie-Status. Overload it by your needs.
+//
+bool NodeDrv::Reboot()
+{
+    fIsZombie = false;
+    return true;
+}
+
+// --------------------------------------------------------------------------
+//
 // Init device, sets the pointer to the whole network and enables
 // the Can messages to be passed through the interface:
@@ -315,5 +326,10 @@
 bool NodeDrv::WaitForSdo(WORD_t idx, BYTE_t subidx, WORDS_t timeout)
 {
-    return fNetwork->WaitForSdo(fId, idx, subidx, timeout);
+    bool rc = fNetwork->WaitForSdo(fId, idx, subidx, timeout);
+
+    if (!rc)
+        fIsZombie = kTRUE;
+
+    return rc;
 }
 
Index: trunk/MagicSoft/Cosy/candrv/nodedrv.h
===================================================================
--- trunk/MagicSoft/Cosy/candrv/nodedrv.h	(revision 1701)
+++ trunk/MagicSoft/Cosy/candrv/nodedrv.h	(revision 1702)
@@ -34,5 +34,5 @@
     void DelError()        { fError = 0; }
 
-    Bool_t fIsZombie;
+    Bool_t fIsZombie; // A Zombie node is a node which doesn't answer...
 
 public:
@@ -60,4 +60,6 @@
     virtual void HandlePDO3(BYTE_t *data, timeval_t *tv) {};
     virtual void HandlePDO4(BYTE_t *data, timeval_t *tv) {};
+
+    virtual bool Reboot();
 
     void SendPDO1(BYTE_t data[8]);
Index: trunk/MagicSoft/Cosy/candrv/vmodican.cc
===================================================================
--- trunk/MagicSoft/Cosy/candrv/vmodican.cc	(revision 1701)
+++ trunk/MagicSoft/Cosy/candrv/vmodican.cc	(revision 1702)
@@ -202,5 +202,5 @@
     const WORD_t cobid = desc>>5;
 
-    switch (msg->cmd)
+    switch (msg->cmd) // FROM mican.h
     {
     case M_MSG_LOST:
@@ -208,6 +208,14 @@
         return;
 
+    case M_BCAN_TX_con:  /* confirm (+/-) transmission */
+        cout << "VmodIcan reports: CTXcon=0x35" << endl;
+        cout << "This normally means, that the transmission of the following CAN frame failed:" << hex << endl;
+        cout << "Descr: 0x" << cobid << dec;
+        cout << "  Rtr: "   << (rtr?"Yes":"No");
+        cout << "  Len: "   << (int)len << endl;
+        return;
+
     case M_BCAN_EVENT_ind:
-        cout << "VmodIcan reports: CEVTind=0x37, " << hex;
+        cout << "VmodIcan reports: CEVTind=0x37: " << hex;
         switch (msg->data[0]) // error indicator
         {
