Esempio n. 1
0
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);

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