Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
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;
}
Esempio n. 4
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; 
};
Esempio n. 5
0
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;
}
Esempio n. 6
0
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;
}