Skip to content
Snippets Groups Projects
UAS.cc 107 KiB
Newer Older
  • Learn to ignore specific revisions
  •             if (ok) warnVoltage = temp;
                // Get the full voltage
                temp = parts.at(2).toFloat(&ok);
                if (ok) fullVoltage = temp;
            }
            else
            {
                emit textMessageReceived(0, 0, 0, "Could not set battery options, format is wrong");
            }
        }
    }
    
    /**
    * @return the battery specifications(empty voltage, warning voltage, full voltage)
    */
    QString UAS::getBatterySpecs()
    {
        if (batteryRemainingEstimateEnabled)
        {
            return QString("%1V,%2V,%3V").arg(emptyVoltage).arg(warnVoltage).arg(fullVoltage);
        }
        else
        {
            return QString("%1%").arg(warnLevelPercent);
        }
    }
    
    /**
    * @return the time remaining.
    */
    int UAS::calculateTimeRemaining()
    {
        quint64 dt = QGC::groundTimeMilliseconds() - startTime;
        double seconds = dt / 1000.0f;
        double voltDifference = startVoltage - currentVoltage;
        if (voltDifference <= 0) voltDifference = 0.00000000001f;
        double dischargePerSecond = voltDifference / seconds;
        int remaining = static_cast<int>((currentVoltage - emptyVoltage) / dischargePerSecond);
        // Can never be below 0
        if (remaining < 0) remaining = 0;
        return remaining;
    }
    
    /**
     * @return charge level in percent - 0 - 100
     */
    float UAS::getChargeLevel()
    {
        if (batteryRemainingEstimateEnabled)
        {
            if (lpVoltage < emptyVoltage)
            {
                chargeLevel = 0.0f;
            }
            else if (lpVoltage > fullVoltage)
            {
                chargeLevel = 100.0f;
            }
            else
            {
                chargeLevel = 100.0f * ((lpVoltage - emptyVoltage)/(fullVoltage - emptyVoltage));
            }
        }
        return chargeLevel;
    }
    
    void UAS::startLowBattAlarm()
    {
        if (!lowBattAlarm)
        {
            GAudioOutput::instance()->alert(tr("system %1 has low battery").arg(getUASName()));
            QTimer::singleShot(3000, GAudioOutput::instance(), SLOT(startEmergency()));
            lowBattAlarm = true;
        }
    }
    
    void UAS::stopLowBattAlarm()
    {
        if (lowBattAlarm)
        {
            GAudioOutput::instance()->stopEmergency();
            lowBattAlarm = false;
        }
    }