You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.6 KiB
C++
126 lines
3.6 KiB
C++
/***************************************************************************
|
|
* Copyright (C) 2009 by gempa GmbH *
|
|
* *
|
|
* All Rights Reserved. *
|
|
* *
|
|
* NOTICE: All information contained herein is, and remains *
|
|
* the property of gempa GmbH and its suppliers, if any. The intellectual *
|
|
* and technical concepts contained herein are proprietary to gempa GmbH *
|
|
* and its suppliers. *
|
|
* Dissemination of this information or reproduction of this material *
|
|
* is strictly forbidden unless prior written permission is obtained *
|
|
* from gempa GmbH. *
|
|
***************************************************************************/
|
|
|
|
#include <gempa/caps/packet.h>
|
|
|
|
#include <cstring>
|
|
|
|
|
|
namespace Gempa {
|
|
namespace CAPS {
|
|
|
|
|
|
bool PacketDataHeader::setUOM(const char *type) {
|
|
int i;
|
|
|
|
if ( type != NULL ) {
|
|
for ( i = 0; i < 4; ++i ) {
|
|
if ( type[i] == '\0' ) break;
|
|
unitOfMeasurement.str[i] = type[i];
|
|
}
|
|
|
|
// Input type must not have more than 4 characters
|
|
if ( i == 3 && type[i] != '\0' && type[i+1] != '\0' ) {
|
|
memset(unitOfMeasurement.str, '\0', 4);
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
i = 0;
|
|
|
|
// Pad with null bytes
|
|
for ( ; i < 4; ++i )
|
|
unitOfMeasurement.str[i] = '\0';
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
std::string PacketDataHeader::uom(char fill) const {
|
|
std::string s;
|
|
for ( int i = 0; i < 4; ++i ) {
|
|
if ( unitOfMeasurement.str[i] == '\0' ) break;
|
|
s += unitOfMeasurement.str[i];
|
|
}
|
|
|
|
if ( s.size() < 4 && fill != '\0' ) {
|
|
for ( int i = s.size(); i < 4; ++i )
|
|
s += fill;
|
|
}
|
|
|
|
return s;
|
|
}
|
|
|
|
|
|
bool PacketDataHeader::operator!=(const PacketDataHeader &other) const {
|
|
return version != other.version ||
|
|
packetType != other.packetType ||
|
|
unitOfMeasurement.ID != other.unitOfMeasurement.ID;
|
|
}
|
|
|
|
bool PacketDataHeaderV2::operator!=(const PacketDataHeaderV2 &other) const {
|
|
return PacketDataHeader::operator!=(other) ||
|
|
samplingFrequencyNumerator != other.samplingFrequencyNumerator ||
|
|
samplingFrequencyDenominator != other.samplingFrequencyDenominator ||
|
|
quality.ID != other.quality.ID;
|
|
}
|
|
|
|
bool DataRecord::Header::put(std::streambuf &buf) const {
|
|
Endianess::Writer put(buf);
|
|
char dt = (char)dataType;
|
|
put(dt);
|
|
|
|
put(samplingTime.year);
|
|
put(samplingTime.yday);
|
|
put(samplingTime.hour);
|
|
put(samplingTime.minute);
|
|
put(samplingTime.second);
|
|
put(samplingTime.usec);
|
|
put(samplingFrequencyNumerator);
|
|
put(samplingFrequencyDenominator);
|
|
|
|
return put.good;
|
|
}
|
|
|
|
|
|
void DataRecord::Header::setSamplingTime(const Time &ts) {
|
|
int year, yday, hour, min, sec, usec;
|
|
ts.get2(&year, &yday, &hour, &min, &sec, &usec);
|
|
samplingTime.year = year;
|
|
samplingTime.yday = yday;
|
|
samplingTime.hour = hour;
|
|
samplingTime.minute = min;
|
|
samplingTime.second = sec;
|
|
samplingTime.usec = usec;
|
|
}
|
|
|
|
|
|
bool DataRecord::Header::compatible(const Header &other) const {
|
|
return dataType == other.dataType &&
|
|
samplingFrequencyNumerator == other.samplingFrequencyNumerator &&
|
|
samplingFrequencyDenominator == other.samplingFrequencyDenominator;
|
|
}
|
|
|
|
|
|
bool DataRecord::Header::operator!=(const Header &other) const {
|
|
return dataType != other.dataType ||
|
|
samplingFrequencyNumerator != other.samplingFrequencyNumerator ||
|
|
samplingFrequencyDenominator != other.samplingFrequencyDenominator;
|
|
}
|
|
|
|
DataRecord::~DataRecord() {}
|
|
|
|
}
|
|
}
|