128 lines
5.1 KiB
C++
128 lines
5.1 KiB
C++
/*
|
|
* Copyright (C) 2021 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <ParseUtils.h>
|
|
#include <sstream>
|
|
#include <stdexcept>
|
|
|
|
namespace android {
|
|
namespace hardware {
|
|
namespace gnss {
|
|
namespace common {
|
|
|
|
int ParseUtils::tryParseInt(const std::string& s, int defaultVal) {
|
|
if (s.empty()) {
|
|
return defaultVal;
|
|
} else {
|
|
return std::stoi(s);
|
|
}
|
|
}
|
|
|
|
float ParseUtils::tryParsefloat(const std::string& s, float defaultVal) {
|
|
if (s.empty()) {
|
|
return defaultVal;
|
|
} else {
|
|
return std::stof(s);
|
|
}
|
|
}
|
|
|
|
double ParseUtils::tryParseDouble(const std::string& s, double defaultVal) {
|
|
if (s.empty()) {
|
|
return defaultVal;
|
|
} else {
|
|
return std::stod(s);
|
|
}
|
|
}
|
|
|
|
long ParseUtils::tryParseLong(const std::string& s, long defaultVal) {
|
|
if (s.empty()) {
|
|
return defaultVal;
|
|
} else {
|
|
return std::stol(s);
|
|
}
|
|
}
|
|
|
|
long long ParseUtils::tryParseLongLong(const std::string& s, long long defaultVal) {
|
|
if (s.empty()) {
|
|
return defaultVal;
|
|
} else {
|
|
return std::stoll(s);
|
|
}
|
|
}
|
|
|
|
void ParseUtils::splitStr(const std::string& line, const char& delimiter,
|
|
std::vector<std::string>& out) {
|
|
std::istringstream iss(line);
|
|
std::string item;
|
|
while (std::getline(iss, item, delimiter)) {
|
|
out.push_back(item);
|
|
}
|
|
}
|
|
|
|
bool ParseUtils::isValidHeader(const std::unordered_map<std::string, int>& columnNameIdMapping) {
|
|
std::vector<std::string> requiredHeaderColumns = {"Raw",
|
|
"utcTimeMillis",
|
|
"TimeNanos",
|
|
"LeapSecond",
|
|
"TimeUncertaintyNanos",
|
|
"FullBiasNanos",
|
|
"BiasNanos",
|
|
"BiasUncertaintyNanos",
|
|
"DriftNanosPerSecond",
|
|
"DriftUncertaintyNanosPerSecond",
|
|
"HardwareClockDiscontinuityCount",
|
|
"Svid",
|
|
"TimeOffsetNanos",
|
|
"State",
|
|
"ReceivedSvTimeNanos",
|
|
"ReceivedSvTimeUncertaintyNanos",
|
|
"Cn0DbHz",
|
|
"PseudorangeRateMetersPerSecond",
|
|
"PseudorangeRateUncertaintyMetersPerSecond",
|
|
"AccumulatedDeltaRangeState",
|
|
"AccumulatedDeltaRangeMeters",
|
|
"AccumulatedDeltaRangeUncertaintyMeters",
|
|
"CarrierFrequencyHz",
|
|
"CarrierCycles",
|
|
"CarrierPhase",
|
|
"CarrierPhaseUncertainty",
|
|
"MultipathIndicator",
|
|
"SnrInDb",
|
|
"ConstellationType",
|
|
"AgcDb",
|
|
"BasebandCn0DbHz",
|
|
"FullInterSignalBiasNanos",
|
|
"FullInterSignalBiasUncertaintyNanos",
|
|
"SatelliteInterSignalBiasNanos",
|
|
"SatelliteInterSignalBiasUncertaintyNanos",
|
|
"CodeType",
|
|
"ChipsetElapsedRealtimeNanos"};
|
|
|
|
for (const auto& columnName : requiredHeaderColumns) {
|
|
if (columnNameIdMapping.find(columnName) == columnNameIdMapping.end()) {
|
|
ALOGE("Missing column %s in header.", columnName.c_str());
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
} // namespace common
|
|
} // namespace gnss
|
|
} // namespace hardware
|
|
} // namespace android
|