decoded update
This commit is contained in:
parent
16cf727f4a
commit
d6fa9fca82
|
|
@ -3,21 +3,104 @@
|
|||
namespace APRSPacketLib {
|
||||
|
||||
String generateStatusPacket(String callsign, String tocall, String path, String status) {
|
||||
String packet = callsign + ">" + tocall;
|
||||
if (path != "") {
|
||||
packet += "," + path;
|
||||
String packet = callsign + ">" + tocall;
|
||||
if (path != "") {
|
||||
packet += "," + path;
|
||||
}
|
||||
packet += ":>" + status;
|
||||
return packet;
|
||||
}
|
||||
|
||||
char *ax25_base91enc(char *s, uint8_t n, uint32_t v) {
|
||||
for(s += n, *s = '\0'; n; n--) {
|
||||
*(--s) = v % 91 + 33;
|
||||
v /= 91;
|
||||
}
|
||||
return(s);
|
||||
}
|
||||
|
||||
String encondeGPS(String type) {
|
||||
String encodedData;
|
||||
float Tlat, Tlon;
|
||||
float Tspeed=0, Tcourse=0;
|
||||
Tlat = gps.location.lat();
|
||||
Tlon = gps.location.lng();
|
||||
Tcourse = gps.course.deg();
|
||||
Tspeed = gps.speed.knots();
|
||||
|
||||
uint32_t aprs_lat, aprs_lon;
|
||||
aprs_lat = 900000000 - Tlat * 10000000;
|
||||
aprs_lat = aprs_lat / 26 - aprs_lat / 2710 + aprs_lat / 15384615;
|
||||
aprs_lon = 900000000 + Tlon * 10000000 / 2;
|
||||
aprs_lon = aprs_lon / 26 - aprs_lon / 2710 + aprs_lon / 15384615;
|
||||
|
||||
String Ns, Ew, helper;
|
||||
if(Tlat < 0) { Ns = "S"; } else { Ns = "N"; }
|
||||
if(Tlat < 0) { Tlat= -Tlat; }
|
||||
|
||||
if(Tlon < 0) { Ew = "W"; } else { Ew = "E"; }
|
||||
if(Tlon < 0) { Tlon= -Tlon; }
|
||||
|
||||
char helper_base91[] = {"0000\0"};
|
||||
int i;
|
||||
//utils::ax25_base91enc(helper_base91, 4, aprs_lat);
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 4, aprs_lat);
|
||||
for (i=0; i<4; i++) {
|
||||
encodedData += helper_base91[i];
|
||||
}
|
||||
//utils::ax25_base91enc(helper_base91, 4, aprs_lon);
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 4, aprs_lon);
|
||||
for (i=0; i<4; i++) {
|
||||
encodedData += helper_base91[i];
|
||||
}
|
||||
if (type=="Wx") {
|
||||
encodedData += "_";
|
||||
} else {
|
||||
encodedData += currentBeacon->symbol;
|
||||
}
|
||||
|
||||
if (Config.sendAltitude) { // Send Altitude or... (APRS calculates Speed also)
|
||||
int Alt1, Alt2;
|
||||
int Talt;
|
||||
Talt = gps.altitude.feet();
|
||||
if(Talt>0) {
|
||||
double ALT=log(Talt)/log(1.002);
|
||||
Alt1= int(ALT/91);
|
||||
Alt2=(int)ALT%91;
|
||||
} else {
|
||||
Alt1=0;
|
||||
Alt2=0;
|
||||
}
|
||||
packet += ":>" + status;
|
||||
return packet;
|
||||
if (sendStandingUpdate) {
|
||||
encodedData += " ";
|
||||
} else {
|
||||
encodedData +=char(Alt1+33);
|
||||
}
|
||||
encodedData +=char(Alt2+33);
|
||||
encodedData +=char(0x30+33);
|
||||
} else { // ... just send Course and Speed
|
||||
//utils::ax25_base91enc(helper_base91, 1, (uint32_t) Tcourse/4 );
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 1, (uint32_t) Tcourse/4 );
|
||||
if (sendStandingUpdate) {
|
||||
encodedData += " ";
|
||||
} else {
|
||||
encodedData += helper_base91[0];
|
||||
}
|
||||
//utils::ax25_base91enc(helper_base91, 1, (uint32_t) (log1p(Tspeed)/0.07696));
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 1, (uint32_t) (log1p(Tspeed)/0.07696));
|
||||
encodedData += helper_base91[0];
|
||||
encodedData += "\x47";
|
||||
}
|
||||
return encodedData;
|
||||
}
|
||||
|
||||
String generateGPSBeaconPacket(String callsign, String tocall, String path, String overlay, String gps) {
|
||||
String packet = callsign + ">" + tocall;
|
||||
if (path != "") {
|
||||
packet += "," + path;
|
||||
}
|
||||
packet += ":!" + overlay + gps;
|
||||
return packet;
|
||||
String packet = callsign + ">" + tocall;
|
||||
if (path != "") {
|
||||
packet += "," + path;
|
||||
}
|
||||
packet += ":!" + overlay + gps;
|
||||
return packet;
|
||||
}
|
||||
|
||||
float decodeEncodedLatitude(String receivedPacket) {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ struct APRSPacket {
|
|||
namespace APRSPacketLib {
|
||||
|
||||
String generateStatusPacket(String callsign, String tocall, String path, String status);
|
||||
char *ax25_base91enc(char *s, uint8_t n, uint32_t v);
|
||||
String generateGPSBeaconPacket(String callsign, String tocall, String path, String overlay, String gpsData);
|
||||
float decodeEncodedLatitude(String receivedPacket);
|
||||
float decodeEncodedLongitude(String receivedPacket);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
#include "logger.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "APRSPacketLib.h"
|
||||
|
||||
extern Configuration Config;
|
||||
extern HardwareSerial neo6m_gps;
|
||||
extern TinyGPSPlus gps;
|
||||
|
|
@ -122,11 +124,13 @@ namespace GPS_Utils {
|
|||
|
||||
char helper_base91[] = {"0000\0"};
|
||||
int i;
|
||||
utils::ax25_base91enc(helper_base91, 4, aprs_lat);
|
||||
//utils::ax25_base91enc(helper_base91, 4, aprs_lat);
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 4, aprs_lat);
|
||||
for (i=0; i<4; i++) {
|
||||
encodedData += helper_base91[i];
|
||||
}
|
||||
utils::ax25_base91enc(helper_base91, 4, aprs_lon);
|
||||
//utils::ax25_base91enc(helper_base91, 4, aprs_lon);
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 4, aprs_lon);
|
||||
for (i=0; i<4; i++) {
|
||||
encodedData += helper_base91[i];
|
||||
}
|
||||
|
|
@ -156,13 +160,15 @@ namespace GPS_Utils {
|
|||
encodedData +=char(Alt2+33);
|
||||
encodedData +=char(0x30+33);
|
||||
} else { // ... just send Course and Speed
|
||||
utils::ax25_base91enc(helper_base91, 1, (uint32_t) Tcourse/4 );
|
||||
//utils::ax25_base91enc(helper_base91, 1, (uint32_t) Tcourse/4 );
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 1, (uint32_t) Tcourse/4 );
|
||||
if (sendStandingUpdate) {
|
||||
encodedData += " ";
|
||||
} else {
|
||||
encodedData += helper_base91[0];
|
||||
}
|
||||
utils::ax25_base91enc(helper_base91, 1, (uint32_t) (log1p(Tspeed)/0.07696));
|
||||
//utils::ax25_base91enc(helper_base91, 1, (uint32_t) (log1p(Tspeed)/0.07696));
|
||||
APRSPacketLib::ax25_base91enc(helper_base91, 1, (uint32_t) (log1p(Tspeed)/0.07696));
|
||||
encodedData += helper_base91[0];
|
||||
encodedData += "\x47";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ namespace MSG_Utils {
|
|||
}
|
||||
if (Config.notification.buzzerActive && Config.notification.messageRxBeep) {
|
||||
NOTIFICATION_Utils::messageBeep();
|
||||
}
|
||||
}
|
||||
if (aprsPacket.message.indexOf("ping")==0 || aprsPacket.message.indexOf("Ping")==0 || aprsPacket.message.indexOf("PING")==0) {
|
||||
delay(4000);
|
||||
sendMessage(aprsPacket.sender, "pong, 73!");
|
||||
|
|
@ -222,6 +222,9 @@ namespace MSG_Utils {
|
|||
lastHeardTracker = aprsPacket.sender;
|
||||
if (!Config.simplifiedTrackerMode) {
|
||||
GPS_Utils::calculateDistanceCourse(aprsPacket.sender, aprsPacket.latitude, aprsPacket.longitude);
|
||||
if (Config.notification.buzzerActive && Config.notification.stationBeep) {
|
||||
NOTIFICATION_Utils::stationHeardBeep();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,15 +54,13 @@ namespace utils {
|
|||
return locator;
|
||||
}
|
||||
|
||||
char *ax25_base91enc(char *s, uint8_t n, uint32_t v) {
|
||||
/* Creates a Base-91 representation of the value in v in the string */
|
||||
/* pointed to by s, n-characters long. String length should be n+1. */
|
||||
/*char *ax25_base91enc(char *s, uint8_t n, uint32_t v) {
|
||||
for(s += n, *s = '\0'; n; n--) {
|
||||
*(--s) = v % 91 + 33;
|
||||
v /= 91;
|
||||
}
|
||||
return(s);
|
||||
}
|
||||
}*/
|
||||
|
||||
static String padding(unsigned int number, unsigned int width) {
|
||||
String result;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
namespace utils {
|
||||
|
||||
char *getMaidenheadLocator(double lat, double lon, int size);
|
||||
char *ax25_base91enc(char *s, uint8_t n, uint32_t v);
|
||||
//char *ax25_base91enc(char *s, uint8_t n, uint32_t v);
|
||||
String createDateString(time_t t);
|
||||
String createTimeString(time_t t);
|
||||
void checkStatus();
|
||||
|
|
|
|||
Loading…
Reference in New Issue