//
// Copyright 2014 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#include
#include
#include
#include
#include
#include
using namespace uhd;
std::string rx_metadata_t::to_pp_string(bool compact) const
{
std::stringstream ss;
if (compact) {
if (has_time_spec) {
ss << "Time: " << time_spec.get_real_secs() << " s\n";
}
if (more_fragments) {
ss << "Fragmentation offset: " << fragment_offset << "\n";
}
if (start_of_burst) {
ss << "Start of burst.\n" << fragment_offset;
}
if (end_of_burst) {
ss << "End of burst.\n" << fragment_offset;
}
if (error_code != ERROR_CODE_NONE) {
ss << strerror() << "\n";
}
} else {
ss << "Has timespec: " << (has_time_spec ? "Yes" : "No")
<< "\tTime of first sample: " << time_spec.get_real_secs()
<< "\nFragmented: " << (more_fragments ? "Yes" : "No")
<< " Fragmentation offset: " << fragment_offset
<< "\nStart of burst: " << (start_of_burst ? "Yes" : "No")
<< "\tEnd of burst: " << (end_of_burst ? "Yes" : "No")
<< "\nError Code: " << strerror()
<< "\tOut of sequence: " << (out_of_sequence ? "Yes" : "No");
}
return ss.str();
}
std::string rx_metadata_t::strerror() const
{
std::string errstr = "";
switch(this->error_code) {
case ERROR_CODE_NONE:
errstr = "ERROR_CODE_NONE";
break;
case ERROR_CODE_TIMEOUT:
errstr = "ERROR_CODE_TIMEOUT";
break;
case ERROR_CODE_LATE_COMMAND:
errstr = "ERROR_CODE_LATE_COMMAND";
break;
case ERROR_CODE_BROKEN_CHAIN:
errstr = "ERROR_CODE_BROKEN_CHAIN (Expected another stream command)";
break;
case ERROR_CODE_OVERFLOW:
errstr = "ERROR_CODE_OVERFLOW ";
errstr += (this->out_of_sequence ? "(Out of sequence error)" : "(Overflow)");
break;
case ERROR_CODE_ALIGNMENT:
errstr = "ERROR_CODE_ALIGNMENT (Multi-channel alignment failed)";
break;
case ERROR_CODE_BAD_PACKET:
errstr = "ERROR_CODE_BAD_PACKET";
break;
default:
errstr = std::string(str(boost::format("Unknown error code: 0x%x") % error_code));
}
return errstr;
}