float PTIDSensors::readTachometer(UInt32 index) { mach_timespec_t now; clock_get_system_nanotime((clock_sec_t*)&now.tv_sec, (clock_nsec_t*)&now.tv_nsec); if (CMP_MACH_TIMESPEC(&tachometerNextUpdate, &now) <= 0) { mach_timespec_t next; tachometerNextUpdate.tv_sec = now.tv_sec; tachometerNextUpdate.tv_nsec = now.tv_nsec; next.tv_sec = 1; next.tv_nsec = 0; ADD_MACH_TIMESPEC(&tachometerNextUpdate, &next); updateTachometers(); } if (tachometers) { if (OSNumber *number = OSDynamicCast(OSNumber, tachometers->getObject(index))) { UInt64 value = number->unsigned32BitValue(); return (value == 0x80000000) ? 0 : (float)value; } } return 0; }
float PTIDSensors::readTachometer(UInt32 index) { if (ptimer_read() - tachometersLastUpdated >= NSEC_PER_SEC) { updateTachometers(); tachometersLastUpdated = ptimer_read(); } if (tachometers) { if (OSNumber *number = OSDynamicCast(OSNumber, tachometers->getObject(index))) { UInt64 value = number->unsigned32BitValue(); return (value == 0x80000000) ? 0 : (float)value; } } return 0; }
float PTIDSensors::readTachometer(UInt32 index) { double time = ptimer_read_seconds(); if (time - tachometersLastUpdated >= 1.0) { updateTachometers(); tachometersLastUpdated = time; } if (tachometers) { if (OSNumber *number = OSDynamicCast(OSNumber, tachometers->getObject(index))) { UInt64 value = number->unsigned32BitValue(); return (value == 0x80000000) ? 0 : (float)value; } } return 0; }