void QPowerStatusManager::getStatus() { // ac = AC line status // bs = battery status // percentRemain = remaining battery life as percent // secsRe/main = remaining battery life in time units double batteryLevel = 0; double batteryFull = 1490000; bool charging = false; //QValueSpaceObject vsoBattery("/Accessories/Battery"); // List backlight class subdirectories QDir iClassBattery( CLASS_BATTERY ); QStringList iDirectory( iClassBattery.entryList() ); QDir iDeviceBattery; // if a directory is set then battery module is loaded if (iDirectory.count()==0) exit; QString szPath( CLASS_BATTERY ); // Search Main battery szPath.append( "main-battery/" ); iDeviceBattery.setPath( szPath ); // if exists there is a battery directory if (iDeviceBattery.exists("status")) { //Read and return value QFile file; QString szFile( CLASS_BATTERY ); szFile.append( "main-battery/status" ); file.setFileName( szFile ); file.open( QIODevice::ReadOnly | QIODevice::Text); charging = !QString( file.readLine()).contains("Not"); file.close(); } //x/ if exists there is a battery directory if (iDeviceBattery.exists("charge_now")) { //Read and return value QFile file; QString szFile( CLASS_BATTERY ); szFile.append( "main-battery/charge_now" ); file.setFileName( szFile ); file.open( QIODevice::ReadOnly | QIODevice::Text); batteryLevel = QString(file.readLine()).toDouble(); file.close(); } if (iDeviceBattery.exists("charge_full")) { QFile file; QString szFile( CLASS_BATTERY ); szFile.append( "main-battery/charge_full" ); file.setFileName( szFile ); file.open( QIODevice::ReadOnly | QIODevice::Text); batteryFull = QString(file.readLine()).toDouble(); file.close(); } if (batteryLevel >= 0) { if (batteryLevel>batteryFull) batteryLevel = batteryFull; ps->percentRemain = (int)(batteryLevel*100) / batteryFull; if (charging) ps->ac = QPowerStatus::Online; else ps->ac = QPowerStatus::Offline; if (charging) ps->bs = QPowerStatus::Charging; else if (ps->percentRemain <= 10) ps->bs = QPowerStatus::Critical; else if (ps->percentRemain <= 30) ps->bs = QPowerStatus::VeryLow; else if (ps->percentRemain <= 50) ps->bs = QPowerStatus::Low; else if (ps->percentRemain <= 80) ps->bs = QPowerStatus::High; else if (ps->percentRemain >= 81) ps->bs = QPowerStatus::High; } else { ps->bs = QPowerStatus::NotPresent; ps->percentRemain = -1; ps->secsRemain = -1; ps->ac = QPowerStatus::Unknown; ps->percentAccurate = false; } }