From 63abbe9a2c42ad7a52e189425331f9a9f08978d3 Mon Sep 17 00:00:00 2001
From: "Hans P. Reiser"
Date: Tue, 16 Apr 2019 16:52:16 +0200
Subject: [PATCH] dao extension, aprs symbol
---
libraries/SondeLib/RS41.cpp | 1 +
libraries/SondeLib/Sonde.cpp | 2 ++
libraries/SondeLib/aprs.cpp | 39 +++++++++++++++++++++++++++++++++++-
libraries/SondeLib/aprs.h | 1 +
4 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/libraries/SondeLib/RS41.cpp b/libraries/SondeLib/RS41.cpp
index a3d1d72..39c6628 100644
--- a/libraries/SondeLib/RS41.cpp
+++ b/libraries/SondeLib/RS41.cpp
@@ -339,6 +339,7 @@ static void posrs41(const byte b[], uint32_t b_len, uint32_t p)
long0)+vz*(double)sin((float)lat);
dir = X2C_DIVL(atang2(vn, ve),1.7453292519943E-2);
if (dir<0.0) dir = 360.0+dir;
+ sonde.si()->dir = dir;
Serial.print(" ");
sonde.si()->hs = sqrt((float)(vn*vn+ve*ve))*3.6f;
Serial.print(sonde.si()->hs);
diff --git a/libraries/SondeLib/Sonde.cpp b/libraries/SondeLib/Sonde.cpp
index 5676438..12c2897 100644
--- a/libraries/SondeLib/Sonde.cpp
+++ b/libraries/SondeLib/Sonde.cpp
@@ -54,12 +54,14 @@ Sonde::Sonde() {
config.udpfeed.active = 1;
config.udpfeed.type = 0;
strcpy(config.udpfeed.host, "192.168.42.20");
+ strcpy(config.udpfeed.symbol, "/O");
config.udpfeed.port = 9002;
config.udpfeed.highrate = 1;
config.udpfeed.idformat = ID_DFMGRAW;
config.tcpfeed.active = 0;
config.tcpfeed.type = 1;
strcpy(config.tcpfeed.host, "radiosondy.info");
+ strcpy(config.tcpfeed.symbol, "/O");
config.tcpfeed.port = 12345;
config.tcpfeed.highrate = 10;
config.tcpfeed.idformat = ID_DFMDXL;
diff --git a/libraries/SondeLib/aprs.cpp b/libraries/SondeLib/aprs.cpp
index 10fc23a..18fc71c 100644
--- a/libraries/SondeLib/aprs.cpp
+++ b/libraries/SondeLib/aprs.cpp
@@ -211,6 +211,43 @@ extern int aprsstr_mon2raw(const char *mon, char raw[], int raw_len)
#define FEET (1.0/0.3048)
#define KNOTS (1.851984)
+#define X2C_max_longcard 0xFFFFFFFFUL
+static uint32_t X2C_TRUNCC(double x, uint32_t min0, uint32_t max0)
+{
+ uint32_t i;
+
+ if (x < (double)min0)
+ i = (uint32_t)min0;
+ if (x > (double)max0)
+ i = (uint32_t)max0;
+
+ i = (uint32_t)x;
+ if ((double)i > x)
+ --i;
+ return i;
+}
+
+
+static uint32_t truncc(double r)
+{
+ if (r<=0.0) return 0UL;
+ else if (r>=2.E+9) return 2000000000UL;
+ else return (uint32_t)X2C_TRUNCC(r,0UL,X2C_max_longcard);
+ return 0;
+} /* end truncc() */
+
+
+
+static uint32_t dao91(double x)
+/* radix91(xx/1.1) of dddmm.mmxx */
+{
+ double a;
+ a = fabs(x);
+ return ((truncc((a-(double)(float)truncc(a))*6.E+5)%100UL)
+ *20UL+11UL)/22UL;
+} /* end dao91() */
+
+
char b[201];
char raw[201];
@@ -248,7 +285,7 @@ char * aprs_senddata(float lat, float lon, float hei, float speed, float dir, fl
i=strlen(b);
snprintf(b+i, APRS_MAXLEN-i, "/A=%06d", realcard(hei*FEET+0.5));
}
-#if 0
+#if 1
int dao=1;
if(dao) {
i=strlen(b);
diff --git a/libraries/SondeLib/aprs.h b/libraries/SondeLib/aprs.h
index 90e7b97..f383067 100644
--- a/libraries/SondeLib/aprs.h
+++ b/libraries/SondeLib/aprs.h
@@ -9,6 +9,7 @@ typedef struct st_feedinfo {
int type; // 0:UDP(axudp), 1:TCP(aprs.fi)
char host[64];
int port;
+ char symbol[3];
int lowrate;
int highrate;
int lowlimit;