Example #1
0
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;
}
Example #2
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;
}
Example #3
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;
}