IOReturn ACPIProbe::woorkloopTimerEvent(void) { if (pollingTimeout > 0 && !startTime) startTime = ptimer_read_seconds(); double time = ptimer_read_seconds(); if (pollingTimeout == 0 || (time - startTime < pollingTimeout)) { OSDictionary *values = OSDictionary::withCapacity(0); for (unsigned int i = 0; i < methods->getCount(); i++) { if (OSString *method = (OSString*)methods->getObject(i)) { OSObject *object = NULL; IOReturn result = acpiDevice->evaluateObject(method->getCStringNoCopy(), &object); if (kIOReturnSuccess == result && object) { values->setObject(method->getCStringNoCopy(), object); if (loggingEnabled) logValue(method->getCStringNoCopy(), object); } else ACPISensorsErrorLog("failed to evaluate method \"%s\", return %d", method->getCStringNoCopy(), result); } } setProperty("Values", values); timerEventSource->setTimeoutMS((UInt32)(pollingInterval * 1000.0)); } return kIOReturnSuccess; }
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; }
float PTIDSensors::readTemperature(UInt32 index) { double time = ptimer_read_seconds(); if (time - temperaturesLastUpdated >= 1.0) { updateTemperatures(); temperaturesLastUpdated = time; } if (temperatures) { if (OSNumber *number = OSDynamicCast(OSNumber, temperatures->getObject(index))) { UInt64 value = number->unsigned32BitValue(); return (value == 0x80000000) ? 0 : (float)((value - 0xAAC) / 0xA); } } return 0; }
const void *FakeSMCKey::getValue() { if (handler) { double time = ptimer_read_seconds(); if (time - lastValueRead >= 1.0) { IOReturn result = handler->getValueCallback(key, type, size, value); if (kIOReturnSuccess == result) { lastValueRead = time; } else { HWSensorsWarningLog("value update request callback returned error for key %s (%s)", key, handler->stringFromReturn(result)); } } } return value; };
IOReturn ACPIProbe::woorkloopTimerEvent(void) { double time = ptimer_read_seconds(); if (activeProfile->timeout > 0 && activeProfile->startedAt == 0) { activeProfile->startedAt = time; } if (activeProfile && (activeProfile->timeout == 0 || (time - activeProfile->startedAt < activeProfile->timeout))) { OSDictionary *values = OSDictionary::withCapacity(0); for (unsigned int i = 0; i < activeProfile->methods->getCount(); i++) { if (OSString *method = (OSString*)activeProfile->methods->getObject(i)) { OSObject *object = NULL; IOReturn result = acpiDevice->evaluateObject(method->getCStringNoCopy(), &object); if (kIOReturnSuccess == result && object) { values->setObject(method->getCStringNoCopy(), object); if (activeProfile->verbose) logValue(method->getCStringNoCopy(), object); } else { ACPISensorsErrorLog("failed to evaluate method \"%s\", return %d", method->getCStringNoCopy(), result); } } } setProperty("Values", values); timerEventSource->setTimeoutMS(activeProfile->interval); } return kIOReturnSuccess; }
bool FakeSMCKey::setValueFromBuffer(const void *aBuffer, UInt8 aSize) { if (!aBuffer || aSize == 0) return false; if (aSize != size) { if (value) IOFree(value, size); size = aSize; if (!(value = IOMalloc(size))) return false; } bcopy(aBuffer, value, size); if (handler) { double time = ptimer_read_seconds(); if (time - lastValueWrote >= 1.0) { IOReturn result = handler->setValueCallback(key, type, size, value); if (kIOReturnSuccess == result) { lastValueWrote = time; } else { HWSensorsWarningLog("value changed event callback returned error for key %s (%s)", key, handler->stringFromReturn(result)); } } } return true; }