Ignore:
Timestamp:
02/17/08 22:39:04 (17 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy/candrv
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/candrv/canopen.cc

    r8862 r8864  
    7878    if (fInterface)
    7979        fInterface->Stop();
     80}
     81
     82bool CanOpen::HasError() const
     83{
     84    return fInterface ? !fInterface->HasConnection() : kFALSE;
    8085}
    8186
  • trunk/MagicSoft/Cosy/candrv/canopen.h

    r8813 r8864  
    7878    virtual void Start();           // Start CanOpen communication
    7979    virtual void Stop();            // Stop  CanOpen communcation
     80
     81    virtual bool HasError() const;
    8082
    8183private:
  • trunk/MagicSoft/Cosy/candrv/ethernet.cc

    r8862 r8864  
    7474// --------------------------------------------------------------------------
    7575//
    76 void Ethernet::ReadSocket(TSocket &rx)
     76Bool_t Ethernet::ReadSocket(TSocket &rx)
    7777{
    7878    Int_t pos = -1;
     
    8787    while (!IsThreadCanceled())
    8888    {
    89         //TThread::CancelPoint();
    90 
    9189        unsigned char c;
    9290        const Int_t len = rx.RecvRaw(&c, 1);
    9391
    94         //TThread::CancelPoint();
    95 
    9692        // No data received (non-blocking mode)
    9793        if (len<0)
     
    10197        }
    10298
    103         // Data received with zero length!
     99        // Data received with zero length! (Connection lost)
    104100        if (len==0)
    105         {
    106             gLog << warn << "WARNING - Connection lost (received 0bytes) to " << address << endl;
    107             //break; // This break is for TEST PURPOSE FIXME!!!
    108             continue;
    109         }
     101            return kFALSE;
    110102
    111103        // Data received
     
    113105        {
    114106            gLog << err << "Data received from " << address << " is more than one byte!" << endl;
    115             break;
     107            continue;
    116108        }
    117109
     
    121113            {
    122114                cout << "Data received from " << address << " too long (> " << MSGLEN << ")" << endl;
    123                 break;
     115                continue;
    124116            }
    125117
     
    147139        // String completed
    148140        HandleMessage(msg);
     141
     142        return kTRUE;
    149143    }
    150 }
    151 
     144
     145    return kTRUE;
     146}
     147
     148/*
     149void Ethernet::ReadSocket(TSocket &rx)
     150{
     151    Int_t pos = -1;
     152
     153    Message msg;
     154    msg.cmd = M_BCAN_RX_ind;
     155    msg.data[0] = 0;
     156    msg.data[1] = 0;
     157
     158    const TString address = MTcpIpO::GetSocketAddress(rx);
     159
     160    while (!IsThreadCanceled())
     161    {
     162        //TThread::CancelPoint();
     163
     164        unsigned char c;
     165        const Int_t len = rx.RecvRaw(&c, 1);
     166
     167        //TThread::CancelPoint();
     168
     169        // No data received (non-blocking mode)
     170        if (len<0)
     171        {
     172            usleep(1);
     173            continue;
     174        }
     175
     176        // Data received with zero length!
     177        if (len==0)
     178        {
     179            gLog << warn << "WARNING - Connection lost (received 0bytes) to " << address << endl;
     180            //break; // This break is for TEST PURPOSE FIXME!!!
     181            return;
     182        }
     183
     184        // Data received
     185        if (len>1)
     186        {
     187            gLog << err << "Data received from " << address << " is more than one byte!" << endl;
     188            continue;
     189        }
     190
     191        if (pos<0)
     192        {
     193            if (c>=MSGLEN)
     194            {
     195                cout << "Data received from " << address << " too long (> " << MSGLEN << ")" << endl;
     196                continue;
     197            }
     198
     199            msg.len = c;
     200            pos = 2;
     201            continue;
     202        }
     203
     204        //            if (pos==2 && c==0x0a)
     205        //                continue;
     206
     207        msg.data[pos++] = c;
     208        if (pos-2<msg.len)
     209            continue;
     210
     211#ifdef DEBUG
     212        cout << "*** RcvdCanFrame len=" << dec << msg.len << ": ";
     213        for (int i=0; i<msg.len; i++)
     214            cout << "0x" << setfill('0') << setw(2) << hex << (int)((msg.data+2)[i]) << " ";
     215        cout << dec << endl;
     216#endif
     217
     218        pos = -1;
     219
     220        // String completed
     221        HandleMessage(msg);
     222    }
     223}
     224*/
    152225
    153226// --------------------------------------------------------------------------
     
    174247//   */
    175248//
     249#ifdef DEBUG
     250#include <TStopwatch.h>
     251#endif
    176252void Ethernet::SendCanFrame(WORD_t cobid, BYTE_t m[8], BYTE_t rtr)
    177253{
     
    203279#endif
    204280
     281#ifdef DEBUG
     282    TStopwatch st;
     283    st.Start();
     284#endif
    205285    MTcpIpO::SendFrame(fTxAddress, fTxPort, (char*)(msg.data+1), msg.len-1);
     286#ifdef DEBUG
     287    st.Print();
     288#endif
    206289    //Send((char*)(msg.data+1), msg.len-1);
    207290
  • trunk/MagicSoft/Cosy/candrv/ethernet.h

    r8862 r8864  
    1717
    1818    // Send interface based on MTcpIpI
    19     void ReadSocket(TSocket &rx);
     19    Bool_t ReadSocket(TSocket &rx);
    2020
    2121    // Start/stop communication inherited from Interface
    2222    void Start() { RunThread(); }
    2323    void Stop()  { CancelThread(); }
     24
     25    Bool_t HasConnection() const { return IsConnectionEstablished(); }
    2426
    2527public:
  • trunk/MagicSoft/Cosy/candrv/interface.h

    r8854 r8864  
    4545    virtual void EnableCobId(WORD_t cobid, int flag=TRUE) { }
    4646
     47    virtual bool HasConnection() const { return true; }
     48
    4749    // Public interface
    4850    void PrintMsg(const Message &m);
  • trunk/MagicSoft/Cosy/candrv/network.cc

    r8863 r8864  
    314314            continue;
    315315
     316        if (CanOpen::HasError())
     317            fNodes[i]->SetZombie();
     318
    316319        if (!fNodes[i]->HasError())
    317320            continue;
     
    325328        //gLog << "' has error #" << fNodes[i]->GetError() << endl;
    326329    }
     330
     331    if (CanOpen::HasError())
     332        return true;
    327333
    328334    return rc;
  • trunk/MagicSoft/Cosy/candrv/nodedrv.h

    r8863 r8864  
    6060
    6161    int  GetError() const { return fError; }
    62     bool HasError() const { return fError; }
     62    bool HasError() const { return fError!=0; }
    6363
    6464    bool IsZombieNode() const { return fIsZombie; }
Note: See TracChangeset for help on using the changeset viewer.