Esempio n. 1
0
//===========================================================================
int CSerialThread::m_WriteData( int * piItems, int nItems ){
  IScanData isdTmp;

  isdTmp.dLocalTimeMs = TimeStampMs();
  isdTmp.iRawX = piItems[0];
  isdTmp.iRawY = piItems[1]; 
  if( nItems > 2 ) {
    // for some reason the data in ISCAN serial output are multiplied by 10
    isdTmp.iDigIn = piItems[2]/10; 
    // TODO: process synchro timestamps
    // Check time elapsed
    // Check if rollover occured 
    // Update actuall frame counter
    // Calc synchro timestamp
    isdTmp.dSyncTimeMs = 0;  
  }
  else {
    isdTmp.iDigIn = 0;
    isdTmp.dSyncTimeMs = 0;  
  }

  // save values into the buffer
  WriteData(&isdTmp, 1);
  return 0;
}
Esempio n. 2
0
//===========================================================================
int CEyeTrack::m_WriteData( int * piItems, int nItems ){
  IScanFrameStruct isdTmp;
  int iFrame, iDigIn, nMissed;

  isdTmp.dLocalTimeMs = TimeStampMs();
  isdTmp.iRawX = piItems[0];
  isdTmp.iRawY = piItems[1]; 
  if( nItems > 2 ) {
    // for some reason the data in ISCAN serial output are multiplied by 10
    iDigIn = ( piItems[2]/10 ); 
    // use all but the last 4 bits of the previous frame, last 4 bits are taken from iDigIn
    iFrame = (m_iPrevFrame & 0xFFFFFFF0) + iDigIn;
    if( iFrame < m_iPrevFrame ) iFrame += 0x10;
    if( iFrame == m_iPrevFrame ) { // no frame input on DigIn ?
      nMissed = 0;  
    }
    else {
      nMissed = iFrame - m_iPrevFrame -1;
    }
    if( nMissed ){
      m_iMissCount++;
      m_nMissedFrames += nMissed;
    }
    isdTmp.iFrame = iFrame;  
    m_iPrevFrame = iFrame;

  }
  else {
    isdTmp.iFrame = 0;  
  }

  // save values into the buffer
  WriteData(&isdTmp, 1);
  m_ReadCount++;

  return 0;
}