PopDripsWatchdogCallbackWorker

VOID __fastcall PopDripsWatchdogCallbackWorker(INT64 a1){
  char v2; 
  __int64 v3; 
  UINT64 *v4; 
  int v5; 
  __int128 v6; 
  int v7; 
  __int128 v8; 
  unsigned int v9; 
  int v10; 
  int v11; 
  UINT64 v12; 
  UINT64 v13; 
  INT64 v14[2]; 
  __int128 v15; 
  CHAR a6; 
  unsigned int a2; 
  INT64 a5; 
  *(_OWORD *)v14 = 0i64;
  v15 = 0i64;
  PopDripsWatchdogAcquireContextLock((ERESOURCE *)a1);
  if( (*(_DWORD *)(a1 + 104) & 4) != 0 && (*(_DWORD *)(a1 + 292) & 2) != 0 )
  {
    v2 = 1;
    ++*(_DWORD *)(a1 + 640);
    ++*(_DWORD *)(a1 + 308);
    PopDripsWatchdogScheduleNextTimer(a1 + 112);
    v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
    PopCalculateIdleInformation((INT64)v14, v4);
    v5 = DWORD2(v15) - *(_DWORD *)(a1 + 368);
    if( DWORD2(v15) != *(_DWORD *)(a1 + 368) )
    {
      v6 = *(_OWORD *)v14;
      v7 = PopDripsWatchdogDebounceTickInterval;
      v8 = v15;
      *(_DWORD *)(a1 + 308) = 0;
      *(_OWORD *)(a1 + 344) = v6;
      *(_QWORD *)(a1 + 328) = v3;
      *(_OWORD *)(a1 + 360) = v8;
      *(_DWORD *)(a1 + 312) = v7;
      *(_QWORD *)(a1 + 320) = v3;
    }
    v9 = *(_DWORD *)(a1 + 312);
    if( v9 )
    {
      if( *(_DWORD *)(a1 + 308) < v9 )
      {
        PopDirectedDripsClearDisengageReason(0);
      }
      else
      {
        PopDirectedDripsSetDisengageReason(0);
        *(_DWORD *)(a1 + 312) = PopDripsWatchdogDebounceTickInterval + *(_DWORD *)(a1 + 308);
      }
    }
    v10 = *(_DWORD *)(a1 + 292);
    if( (v10 & 4) == 0 )
    {
      v11 = *(_DWORD *)(a1 + 108);
      v12 = v3 - *(_QWORD *)(a1 + 320);
      v13 = v3 - *(_QWORD *)(a1 + 328);
      a2 = *(_DWORD *)(a1 + 304);
      a5 = *(_QWORD *)(a1 + 648);
      a6 = *(_BYTE *)(a1 + 336);
      *(_DWORD *)(a1 + 292) = v10 | 4;
      PopDripsWatchdogReleaseContextLock((_ERESOURCE *)a1);
      PopAcquirePolicyLock();
      if( v5 || qword_140C4FC98 )
        v2 = 0;
      PopReleasePolicyLock();
      if( v2 )
        PopDripsWatchdogCallbackHandler(v11, a2, v12, v13, a5, a6);
      PopDripsWatchdogAcquireContextLock((ERESOURCE *)a1);
      *(_QWORD *)(a1 + 320) = v3;
      *(_DWORD *)(a1 + 292) &= ~4u;
    }
  }
  PopDripsWatchdogReleaseContextLock((_ERESOURCE *)a1);
}

Referenced by:

No references.