Skip to content
Snippets Groups Projects
utils.cpp 5.19 KiB
#include "gnss_utils/utils/utils.h"

namespace GnssUtils
{
void print(std::string& _msg)
{
  std::string msg = GNSSUTILS_MSG + _msg;

  std::cout << msg << "\n";
}

void printArray(std::string _name, int* _array, int size)
{
  std::cout << _name << ": [";
  for (int ii = 0; ii < size; ++ii)
  {
    std::cout << _array[ii];
    if (ii == size - 1)
      std::cout << "] \n";
    else
      std::cout << ",";
  }
}

void printArray(std::string _name, unsigned char* _array, int size)
{
  std::cout << _name << ": [";
  for (int ii = 0; ii < size; ++ii)
  {
    std::cout << (int)(_array[ii]);
    if (ii == size - 1)
      std::cout << "] \n";
    else
      std::cout << ",";
  }
}

void printArray(std::string _name, double* _array, int size)
{
  std::cout << _name << ": [";
  for (int ii = 0; ii < size; ++ii)
  {
    std::cout << _array[ii];
    if (ii == size - 1)
      std::cout << "] \n";
    else
      std::cout << ",";
  }
}

void printArray(std::string _name, float* _array, int size)
{
  std::cout << _name << ": [";
  for (int ii = 0; ii < size; ++ii)
  {
    std::cout << _array[ii];
    if (ii == size - 1)
      std::cout << "] \n";
    else
      std::cout << ",";
  }
}

bool equalTime(const gtime_t& time1, const gtime_t& time2)
{
  return (difftime(time1.time, time2.time) == 0.0 && time1.sec == time2.sec);
}

bool equalObservations(const obsd_t& obs1, const obsd_t& obs2)
{
  if (!equalTime(obs1.time, obs2.time))
    return false;
  if (!equalTime(obs1.eventime, obs2.eventime))
    return false;
  if (obs1.timevalid != obs2.timevalid)
    return false;
  if (obs1.sat != obs2.sat)
    return false;
  if (obs1.rcv != obs2.rcv)
    return false;
  if (memcmp(obs1.SNR, obs2.SNR, sizeof(obs1.SNR)) != 0)
    return false;
  if (memcmp(obs1.LLI, obs2.LLI, sizeof(obs1.LLI)) != 0)
    return false;
  if (memcmp(obs1.code, obs2.code, sizeof(obs1.code)) != 0)
    return false;
  if (memcmp(obs1.qualL, obs2.qualL, sizeof(obs1.qualL)) != 0)
    return false;
  if (memcmp(obs1.qualP, obs2.qualP, sizeof(obs1.qualP)) != 0)
    return false;
  if (obs1.freq != obs2.freq)
    return false;
  if (!equalArray<double>(obs1.L, obs2.L, ARRAY_SIZE(obs1.L), ARRAY_SIZE(obs2.L)))
    return false;
  if (!equalArray<double>(obs1.P, obs2.P, ARRAY_SIZE(obs1.P), ARRAY_SIZE(obs2.P)))
    return false;
  if (!equalArray<float>(obs1.D, obs2.D, ARRAY_SIZE(obs1.D), ARRAY_SIZE(obs2.D)))
    return false;

  return true;
}

bool equalObservations(const obs_t& obs1, const obs_t& obs2)
{
  if (obs1.n != obs2.n)
    return false;
  if (obs1.nmax != obs2.nmax)
    return false;
  if (obs1.flag != obs2.flag)
    return false;
  if (obs1.rcvcount != obs2.rcvcount)
    return false;
  if (obs1.tmcount != obs2.tmcount)
    return false;
  if (!equalObservations(*(obs1.data), *(obs2.data)))
    return false;

  return true;
}

bool equalNavigation(const nav_t& nav1, const nav_t& nav2)
{
  if (nav1.n != nav2.n)
    return false;
  if (nav1.nmax != nav2.nmax)
    return false;
  if (nav1.ng != nav2.ng)
    return false;
  if (nav1.ngmax != nav2.ngmax)
    return false;
  if (nav1.ns != nav2.ns)
    return false;
  if (nav1.nsmax != nav2.nsmax)
    return false;
  if (nav1.ne != nav2.ne)
    return false;
  if (nav1.nemax != nav2.nemax)
    return false;
  if (nav1.nc != nav2.nc)
    return false;
  if (nav1.ncmax != nav2.ncmax)
    return false;
  if (nav1.na != nav2.na)
    return false;
  if (nav1.namax != nav2.namax)
    return false;
  if (nav1.nt != nav2.nt)
    return false;
  if (nav1.ntmax != nav2.ntmax)
    return false;
  if (nav1.nf != nav2.nf)
    return false;
  if (nav1.nfmax != nav2.nfmax)
    return false;

  // eph
  // geph
  // seph
  // peph
  // pclk
  // alm
  // tec
  // fcb
  // erp
  if (!equalArray<double>(nav1.utc_gps, nav2.utc_gps, ARRAY_SIZE(nav1.utc_gps), ARRAY_SIZE(nav2.utc_gps)))
    return false;
  if (!equalArray<double>(nav1.utc_glo, nav2.utc_glo, ARRAY_SIZE(nav1.utc_glo), ARRAY_SIZE(nav2.utc_glo)))
    return false;
  if (!equalArray<double>(nav1.utc_gal, nav2.utc_gal, ARRAY_SIZE(nav1.utc_gal), ARRAY_SIZE(nav2.utc_gal)))
    return false;
  if (!equalArray<double>(nav1.utc_qzs, nav2.utc_qzs, ARRAY_SIZE(nav1.utc_qzs), ARRAY_SIZE(nav2.utc_qzs)))
    return false;
  if (!equalArray<double>(nav1.utc_cmp, nav2.utc_cmp, ARRAY_SIZE(nav1.utc_cmp), ARRAY_SIZE(nav2.utc_cmp)))
    return false;
  if (!equalArray<double>(nav1.utc_irn, nav2.utc_irn, ARRAY_SIZE(nav1.utc_irn), ARRAY_SIZE(nav2.utc_irn)))
    return false;
  if (!equalArray<double>(nav1.utc_sbs, nav2.utc_sbs, ARRAY_SIZE(nav1.utc_sbs), ARRAY_SIZE(nav2.utc_sbs)))
    return false;
  if (!equalArray<double>(nav1.ion_gps, nav2.ion_gps, ARRAY_SIZE(nav1.ion_gps), ARRAY_SIZE(nav2.ion_gps)))
    return false;
  if (!equalArray<double>(nav1.ion_gal, nav2.ion_gal, ARRAY_SIZE(nav1.ion_gal), ARRAY_SIZE(nav2.ion_gal)))
    return false;
  if (!equalArray<double>(nav1.ion_qzs, nav2.ion_qzs, ARRAY_SIZE(nav1.ion_qzs), ARRAY_SIZE(nav2.ion_qzs)))
    return false;
  if (!equalArray<double>(nav1.ion_cmp, nav2.ion_cmp, ARRAY_SIZE(nav1.ion_cmp), ARRAY_SIZE(nav2.ion_cmp)))
    return false;
  if (!equalArray<double>(nav1.ion_irn, nav2.ion_irn, ARRAY_SIZE(nav1.ion_irn), ARRAY_SIZE(nav2.ion_irn)))
    return false;
  
  if (nav1.leaps != nav2.leaps)
    return false;
  
}
}  // namespace GnssUtils