Ignore:
Timestamp:
08/30/01 16:02:20 (23 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy/devdrv
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/devdrv/shaftencoder.cc

    r920 r921  
    1313#include <sys/resource.h>  // PRIO_PROCESS
    1414
    15 ShaftEncoder::ShaftEncoder(BYTE_t nodeid, MLog &out) : NodeDrv(nodeid, out), fLabel(NULL)
     15ShaftEncoder::ShaftEncoder(BYTE_t nodeid, MLog &out) : NodeDrv(nodeid, out), fLabel(NULL), fPosHasChanged(false)
    1616{
    1717}
     
    112112}
    113113
    114 void ShaftEncoder::HandlePDOType0(BYTE_t *data)
     114void ShaftEncoder::HandlePDOType0(BYTE_t *data, struct timeval *tv)
    115115{
    116116    //
    117117    // Decode information, we have a 14bit only
    118118    //
    119     fPos  = data[0] | (data[1]<<8) | (data[2]<<16); // | (data[3]<<24);
    120 }
    121 
    122 void ShaftEncoder::HandlePDOType1(BYTE_t *data)
     119    LWORDS_t pos = data[0] | (data[1]<<8) | (data[2]<<16); // | (data[3]<<24);
     120    if (pos==fPos)
     121        return;
     122
     123    fPos = pos;
     124    fTime.SetTimer(tv);
     125    fPosHasChanged = true;
     126}
     127
     128void ShaftEncoder::HandlePDOType1(BYTE_t *data, struct timeval *tv)
    123129{
    124130    //
     
    127133    LWORDS_t pos  = data[0] | (data[1]<<8) | (data[2]<<16); // | (data[3]<<24);
    128134    BYTE_t   flag = data[4];
    129     pos=pos;
     135
     136    if (fPos==pos)
     137        return;
     138
     139    fPos=pos;
     140    fTime.SetTimer(tv);
     141    fPosHasChanged=true;
     142
    130143    flag=flag;
    131144}
     
    141154    fAcc = data[6] | (data[7]<<8);
    142155
    143     fTime.SetTimer(tv);
    144 
    145156    const int uplim = 9*fTicks/10;
    146157    const int dnlim = 1*fTicks/10;
    147158
     159    int turn = fTurn;
     160
    148161    if (fPos > uplim && pos < dnlim)
    149         fTurn++;
     162        turn++;
    150163
    151164    if (fPos < dnlim && pos > uplim)
    152         fTurn--;
    153 
    154     fPos = pos;
     165        turn--;
     166
     167    if (fPos==pos && fTurn==fTurn)
     168        return;
     169
     170    fPos  = pos;
     171    fTurn = turn;
     172    fTime.SetTimer(tv);
     173    fPosHasChanged=true;
    155174}
    156175
  • trunk/MagicSoft/Cosy/devdrv/shaftencoder.h

    r920 r921  
    2222    WORDS_t   fUpdAcc;   // ticks per 25ms^2
    2323
     24    bool fPosHasChanged;
     25
    2426    Timer fTime;
    2527
    26     void HandlePDOType0(BYTE_t *data);
    27     void HandlePDOType1(BYTE_t *data);
     28    void HandlePDOType0(BYTE_t *data, struct timeval *tv);
     29    void HandlePDOType1(BYTE_t *data, struct timeval *tv);
    2830    void HandlePDOType2(BYTE_t *data, struct timeval *tv);
    2931
     
    5658
    5759    void DisplayVal();
     60
     61    bool IsPosHasChanged() const { return fPosHasChanged; }
     62    void ResetPosHasChanged() { fPosHasChanged = false; }
    5863};
    5964
Note: See TracChangeset for help on using the changeset viewer.