Hi Matthew, I tried below code in GetPosition() and driver passed the test case. ULONGLONG currentTime = KeQueryInterruptTime(); ULONG timeElapsedInNS = (ULONG) (currentTime - m_ullDmaTimeStamp); // Diff in nanoseconds ULONGLONG bytesDisplaceMent = (ULONGLONG)( (ULONGLONG)m_ulDmaMovementRate * (ULONGLONG)timeElapsedInNS ) / 10000000; m_ulDmaPosition = (m_ulDmaPosition + (ULONG)bytesDisplaceMent) % m_ulDmaBufferSize; *Position = m_ulDmaPosition; m_ullDmaTimeStamp = currentTime; Is this a proper way to update position from GetPosition? Thanks, Gaurav On Sun, May 4, 2014 at 10:19 AM, Gaurav Khuntale <gauravkhuntale@xxxxxxxxx>wrote: > Hmmm..i don't have a way to get a position from the layer below me because > i am throwing the data over the network after processing it. I don't have > any hardware for which my driver is working. > > Can you please let me know when your better version with sample > granularity is ready? > > Thanks. > > > On Sat, May 3, 2014 at 6:09 PM, Matthew van Eerde < > Matthew.van.Eerde@xxxxxxxxxxxxx> wrote: > >> Do you have any way of getting a real position from the layer below >> you? That would be much better than relying on KeQueryInterruptTime(). Or >> are you throwing the data on the floor like MSVad does? >> >> >> >> Don’t use my code; it’s just a proof-of-concept to demonstrate that you >> can get much better than 0.29 ms jitter using sample accuracy instead of >> millisecond accuracy. >> >> In particular, I really don’t like this line: >> >> >> >> ULONG ulByteDisplacement = (ULONG)((m_ulDmaMovementRate * ullElapsed + >> ullHnsInHalfASec) / ullHnsPerSec); >> >> >> >> This line introduces slop into the byte position which accumulates over >> time. I think that’s why my skew actually regressed (but I’m not sure.) >> >> >> >> I’m working on a better version which attempts to maintain sample >> granularity but eliminates the slop. >> >> >> >> >> > >