//=========================================================================== 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; }
//=========================================================================== 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; }