void CreateDataLoggerFile() { FRESULT res; /* FatFs function common result code */ UINT bw; /* File R/W count */ uint8_t i = 0; uint16_t value = 0; record_count = *(uint16_t *)REOCRD_COUNT_ADDRESS; FIL* pfile = &g_file_datalogger; /* Create destination file on the drive 0 */ res = f_open(pfile, "0:datalogger.bin", FA_CREATE_ALWAYS|FA_WRITE); if (res) die(res); for(i =0;i<record_count;i++) { value = *(uint16_t*)(DATA_LOGGER_ADDRESS_START + i * 2); res = f_write(pfile, &value, sizeof(value), &bw); } f_close(pfile); /*Write the battery file*/ res = f_open(pfile, "0:battery.bin", FA_CREATE_ALWAYS | FA_WRITE); value = GetBatteryInfo(); res = f_write(pfile, &value, sizeof(value), &bw); if (res) die(res); f_close(pfile); f_mount(0, NULL); }
void UpdateBatteryInfos(void) { #if (WINDOWSPC>0) return; #else BATTERYINFO BatteryInfo; BatteryInfo.acStatus = 0; #ifdef PNA if (DeviceIsGM130) { PDABatteryPercent = GM130PowerLevel(); PDABatteryStatus = GM130PowerStatus(); PDABatteryFlag = GM130PowerFlag(); PDABatteryTemperature = 0; } else #endif if (GetBatteryInfo(&BatteryInfo)) { PDABatteryPercent = BatteryInfo.BatteryLifePercent; PDABatteryTemperature = BatteryInfo.BatteryTemperature; PDABatteryStatus=BatteryInfo.acStatus; PDABatteryFlag=BatteryInfo.chargeStatus; // All you need to display extra Battery informations... // TCHAR vtemp[1000]; // _stprintf(vtemp,_T("Battpercent=%d Volt=%d Curr=%d AvCurr=%d mAhC=%d Temp=%d Lifetime=%d Fulllife=%d\n"), // BatteryInfo.BatteryLifePercent, BatteryInfo.BatteryVoltage, // BatteryInfo.BatteryCurrent, BatteryInfo.BatteryAverageCurrent, // BatteryInfo.BatterymAHourConsumed, // BatteryInfo.BatteryTemperature, BatteryInfo.BatteryLifeTime, BatteryInfo.BatteryFullLifeTime); // StartupStore( vtemp ); } #endif }
NAMESPACE_UPP #ifdef PLATFORM_POSIX bool GetBatteryStatus(bool &discharging, int &percentage, int &remainingMin) { /* This is only if acpi package is present StringParse data = Sys("acpi -V"); data.GoAfter("AC Adapter", ":"); String sacStatus = data.GetText(); discharging = sacStatus != "on-line"; data.GoInit(); data.GoAfter("Battery", ":"); data.GoAfter(","); percentage = data.GetInt("%"); data.GoAfter(","); String remaining; if (discharging) { remaining = data.GetText(" "); int hour, min; double secs; StringToHMS(remaining, hour, min, secs); // It is really days:hour:min in this case remainingMin = int(secs) + min*60 + hour*24*60; } else remainingMin = Null; */ percentage = 100; Array<String> files = SearchFile("/proc/acpi/battery", "state"); if (files.GetCount() == 0) return false; StringParse state = LoadFile_Safe(files[0]); if (state == "") return false; bool present; if(!state.GoAfter_Init("present", ":")) return false; present = state.GetText() == "yes"; if (!present) return false; // No battery inserted state.GoAfter_Init("charging state", ":"); discharging = state.GetText() == "discharging"; int presentRate, remainingCapacity; state.GoAfter_Init("present rate", ":"); presentRate = state.GetInt(); state.GoAfter_Init("remaining capacity", ":"); remainingCapacity = state.GetInt(); if (presentRate == 0 || !discharging) remainingMin = Null; else remainingMin = (int)((60.*remainingCapacity)/presentRate); int designCapacity,lastFullCapacity; String vendor, type, model, serial; if (!GetBatteryInfo(present/*, designCapacity, lastFullCapacity, vendor, type, model, serial*/)) percentage = (int)((100.*remainingCapacity)/lastFullCapacity); return true; }
void UpdateBatteryInfos(void) { BATTERYINFO BatteryInfo; BatteryInfo.acStatus = Battery::UNKNOWN; #ifdef PNA if (DeviceIsGM130) { PDABatteryPercent = GM130PowerLevel(); PDABatteryStatus = GM130PowerStatus(); PDABatteryFlag = GM130PowerFlag(); PDABatteryTemperature = 0; HaveBatteryInfo=true; } else #endif if (GetBatteryInfo(&BatteryInfo)) { PDABatteryPercent = BatteryInfo.BatteryLifePercent; PDABatteryTemperature = BatteryInfo.BatteryTemperature; PDABatteryStatus=BatteryInfo.acStatus; PDABatteryFlag=BatteryInfo.chargeStatus; #if TESTBENCH if (HaveBatteryInfo==false) StartupStore(_T("... LKBatteryManager: HaveBatteryInfo ENABLED%s"),NEWLINE); #endif HaveBatteryInfo=true; // All you need to display extra Battery informations... // TCHAR vtemp[1000]; // _stprintf(vtemp,_T("Battpercent=%d Volt=%d Curr=%d AvCurr=%d mAhC=%d Temp=%d Lifetime=%d Fulllife=%d\n"), // BatteryInfo.BatteryLifePercent, BatteryInfo.BatteryVoltage, // BatteryInfo.BatteryCurrent, BatteryInfo.BatteryAverageCurrent, // BatteryInfo.BatterymAHourConsumed, // BatteryInfo.BatteryTemperature, BatteryInfo.BatteryLifeTime, BatteryInfo.BatteryFullLifeTime); // StartupStore( vtemp ); } else { #if TESTBENCH if (HaveBatteryInfo==true) StartupStore(_T("... LKBatteryManager: HaveBatteryInfo DISABLED%s"),NEWLINE); #endif HaveBatteryInfo=false; } battInitialized=true; }
void BlankDisplay(bool doblank) { static bool oldblank = false; BATTERYINFO BatteryInfo; BatteryInfo.acStatus = 0; // JMW initialise if (GetBatteryInfo(&BatteryInfo)) { PDABatteryPercent = BatteryInfo.BatteryLifePercent; PDABatteryTemperature = BatteryInfo.BatteryTemperature; // VENTA3 /* // All you need to display extra Battery informations... TCHAR vtemp[1000]; _stprintf(vtemp,_T("Battpercent=%d Volt=%d Curr=%d AvCurr=%d mAhC=%d Temp=%d Lifetime=%d Fulllife=%d\n"), BatteryInfo.BatteryLifePercent, BatteryInfo.BatteryVoltage, BatteryInfo.BatteryCurrent, BatteryInfo.BatteryAverageCurrent, BatteryInfo.BatterymAHourConsumed, BatteryInfo.BatteryTemperature, BatteryInfo.BatteryLifeTime, BatteryInfo.BatteryFullLifeTime); StartupStore( vtemp ); */ } if (!XCSoarInterface::SettingsMap().EnableAutoBlank) { return; } if (doblank == oldblank) { return; } HDC gdc; int iESC=SETPOWERMANAGEMENT; gdc = ::GetDC(NULL); if (ExtEscape(gdc, QUERYESCSUPPORT, sizeof(int), (LPCSTR)&iESC, 0, NULL)==0) { // can't do it, not supported } else { VIDEO_POWER_MANAGEMENT vpm; vpm.Length = sizeof(VIDEO_POWER_MANAGEMENT); vpm.DPMSVersion = 0x0001; // TODO feature: Trigger a GCE (Glide Computer Event) when // switching to battery mode This can be used to warn users that // power has been lost and you are now on battery power - ie: // something else is wrong if (doblank) { /* Battery status - simulator only - for safety of battery data note: Simulator only - more important to keep running in your plane */ // JMW, maybe this should be active always... // we don't want the PDA to be completely depleted. if (BatteryInfo.acStatus==0) { if (is_simulator() && (PDABatteryPercent < BATTERY_EXIT)) { StartupStore(TEXT("Battery low exit...\n")); // TODO feature: Warning message on battery shutdown XCSoarInterface::SignalShutdown(true); } else { if (PDABatteryPercent < BATTERY_WARNING) { DWORD LocalWarningTime = ::GetTickCount(); if ((LocalWarningTime - BatteryWarningTime) > BATTERY_REMINDER) { BatteryWarningTime = LocalWarningTime; // TODO feature: Show the user what the batt status is. Message::AddMessage(TEXT("Organiser Battery Low")); } } else { BatteryWarningTime = 0; } } } if (BatteryInfo.acStatus==0) { // Power off the display vpm.PowerState = VideoPowerOff; ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm, 0, NULL); oldblank = true; XCSoarInterface::SetSettingsMap().ScreenBlanked = true; } else { ResetDisplayTimeOut(); } } else { if (oldblank) { // was blanked // Power on the display vpm.PowerState = VideoPowerOn; ExtEscape(gdc, SETPOWERMANAGEMENT, vpm.Length, (LPCSTR) &vpm, 0, NULL); oldblank = false; XCSoarInterface::SetSettingsMap().ScreenBlanked = false; } } } ::ReleaseDC(NULL, gdc); }