Skip to content

Commit

Permalink
Store my position in decoder. D-Star: compute bearing and distance fr…
Browse files Browse the repository at this point in the history
…om my position
  • Loading branch information
f4exb committed Sep 28, 2016
1 parent 4101a06 commit a263cdc
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 9 deletions.
3 changes: 3 additions & 0 deletions dsd_decoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "dpmr.h"
#include "dstar.h"
#include "nxdn.h"
#include "locator.h"

#define DSD_SQUELCH_TIMEOUT_SAMPLES 960 // 200ms timeout after return to sync search

Expand Down Expand Up @@ -260,6 +261,7 @@ class DSDDecoder
void enableAudioOut(bool on);
void enableScanResumeAfterTDULCFrames(int nbFrames);
void setDataRate(DSDRate dataRate);
void setMyPoint(float lat, float lon) { m_myPoint.setLatLon(lat, lon); }

// parameter getters:

Expand Down Expand Up @@ -348,6 +350,7 @@ class DSDDecoder
DSDRate m_dataRate;
DSDSyncType m_syncType;
DSDSyncType m_lastSyncType;
LocPoint m_myPoint;
};

} // namespace dsdcc
Expand Down
6 changes: 4 additions & 2 deletions dstar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,9 @@ void DSDDstar::processDPRS()
{
if (m_dprs.matchDSTAR(m_slowData.gpsNMEA))
{
m_dprs.m_locator.toCSting(m_slowData.locator);
m_dprs.m_locPoint.getLocator().toCSting(m_slowData.locator);
m_slowData.bearing = m_dsdDecoder->m_myPoint.bearingTo(m_dprs.m_locPoint);
m_slowData.distance = m_dsdDecoder->m_myPoint.distanceTo(m_dprs.m_locPoint);
// std::cerr << "DSDDstar::processDPRS: " << m_dprs.lat << ":" << m_dprs.lon << ":" << m_dprs.m_locator.toString() << std::endl;
}
}
Expand Down Expand Up @@ -621,7 +623,7 @@ bool DSDDstar::DPRS::matchDSTAR(const char *d)
min = modf(x, &deg);
m_lon = (deg + ((min*100.0f)/60.0f))*(lonH == 'E' ? 1 : -1);

m_locator.setLatLon(m_lat, m_lon);
m_locPoint.setLatLon(m_lat, m_lon);

return true;
}
Expand Down
2 changes: 1 addition & 1 deletion dstar.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ class DSDDstar

float m_lon;
float m_lat;
Locator m_locator;
LocPoint m_locPoint;
};

void initVoiceFrame();
Expand Down
6 changes: 3 additions & 3 deletions locator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ void Locator::setIndexes()
m_lon_index3 = int(lon_rem * 12.0);
}

std::string Locator::toString()
std::string Locator::toString() const
{
std::string returned = "";

Expand All @@ -131,7 +131,7 @@ void Locator::toCSting(char *locator) const

// LocPoint class

float LocPoint::bearingTo(LocPoint& distant_point)
float LocPoint::bearingTo(const LocPoint& distant_point)
{
double lat1 = m_locator.latitude() * (M_PI / 180.0);
double lon1 = m_locator.longitude() * (M_PI / 180.0);
Expand All @@ -149,7 +149,7 @@ float LocPoint::bearingTo(LocPoint& distant_point)
return 360.0 + (bear_rad * (180.0 / M_PI));
}

float LocPoint::distanceTo(LocPoint& distant_point)
float LocPoint::distanceTo(const LocPoint& distant_point)
{
double lat1 = m_locator.latitude() * (M_PI / 180.0);
double lon1 = m_locator.longitude() * (M_PI / 180.0);
Expand Down
11 changes: 8 additions & 3 deletions locator.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
*/

#ifndef LOCATOR_H_
#define LOCATOR_H_

#include <string>

class LocatorInvalidException
Expand All @@ -36,7 +39,7 @@ class Locator
Locator();
Locator(std::string locator_str);
Locator(float lat, float lon);
std::string toString();
std::string toString() const;
void toCSting(char *locator) const;
float latitude() const { return m_lat; };
float longitude() const { return m_lon; };
Expand Down Expand Up @@ -69,10 +72,12 @@ class LocPoint
LocPoint(float lat, float lon) : m_locator(lat, lon) {};
float latitude() const { return m_locator.latitude(); }
float longitude() const { return m_locator.longitude(); }
float bearingTo(LocPoint& distant_point);
float distanceTo(LocPoint& distant_point);
float bearingTo(const LocPoint& distant_point);
float distanceTo(const LocPoint& distant_point);
void setLatLon(float lat, float lon) { m_locator.setLatLon(lat, lon); }
const Locator& getLocator() { return m_locator; }
protected:
Locator m_locator;
};

#endif // define LOCATOR_H_

0 comments on commit a263cdc

Please sign in to comment.