diff --git a/README.md b/README.md
index 8f3df09..86e4fb1 100644
--- a/README.md
+++ b/README.md
@@ -41,6 +41,8 @@ Now the DS18B20 is supported as well - uncomment line 31: // #define DS18B20
by uncommenting // #define SHOW_RX_PACKET the tracker shows received LoRa APRS packets in raw format for the time in milliseconds defined in SHOW_RX_TIME - both in ...config.h
new features:
+- compressed packets in tracker mode
+- symbol RV added
- show RX packets
- DS18B20 support (setable in config.h)
- GPS switched off in WX_FIXED mode (only available with boards with HW-Version >=V1.0)
diff --git a/src/TTGO_T-Beam_LoRa_APRS.ino b/src/TTGO_T-Beam_LoRa_APRS.ino
index 257e532..36c7ffb 100644
--- a/src/TTGO_T-Beam_LoRa_APRS.ino
+++ b/src/TTGO_T-Beam_LoRa_APRS.ino
@@ -11,9 +11,14 @@
//
// licensed under CC BY-NC-SA
//
+// version: V1.3
+// last update: 27.08.2020
+// change history
+// symbol RV added
+// compressed packets in tracker mode (base91)
+//
// version: V1.2
// last update: 02.01.2020
-//
// change history
// added course change to smart Beaconing
// code cleaned
@@ -736,14 +741,29 @@ static void smartDelay(unsigned long ms)
} while (millis() - start < ms);
}
+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. */
+
+ for(s += n, *s = '\0'; n; n--)
+ {
+ *(--s) = v % 91 + 33;
+ v /= 91;
+ }
+
+ return(s);
+}
/////////////////////////////////////////////////////////////////////////////////////////
//@APA Recalc GPS Position == generate APRS string
void recalcGPS(){
String Ns, Ew, helper;
+ char helper_base91[] = {"0000\0"};
float Tlat=48.2012, Tlon=15.6361;
int i, Talt, lenalt;
+ uint32_t aprs_lat, aprs_lon;
float Lat=0.0;
float Lon=0.0;
float Tspeed=0, Tcourse=0;
@@ -931,48 +951,76 @@ case WX_MOVE:
break;
case TRACKER:
default:
- for (i=0; iAPRS:!";
- if(Tlat<10) {outString += "0"; }
- outString += String(Lat,2);
- outString += Ns;
- outString += sTable;
- if(Tlon<100) {outString += "0"; }
- if(Tlon<10) {outString += "0"; }
- outString += String(Lon,2);
- outString += Ew;
- outString += TxSymbol;
- if(Tcourse<100) {outString += "0"; }
- if(Tcourse<10) {outString += "0"; }
- Coursex = String(Tcourse,0);
- Coursex.replace(" ","");
- outString += Coursex;
- outString += "/";
- if(Tspeed<100) {outString += "0"; }
- if(Tspeed<10) {outString += "0"; }
- Speedx = String(Tspeed,0);
- Speedx.replace(" ","");
- outString += Speedx;
- outString += "/A=";
- outString += Altx;
- outString += " Batt=";
- outString += String(BattVolts,2);
- outString += ("V");
-#ifdef DEBUG
- outString += (" Debug: ");
- outString += TxRoot;
-#endif
+ // outString = (Tcall);
+ outString += ">APRS:!";
+ if(Tlat<10) {outString += "0"; }
+ outString += String(Lat,2);
+ outString += Ns;
+ outString += sTable;
+ if(Tlon<100) {outString += "0"; }
+ if(Tlon<10) {outString += "0"; }
+ outString += String(Lon,2);
+ outString += Ew;
+ outString += TxSymbol;
+ if(Tcourse<100) {outString += "0"; }
+ if(Tcourse<10) {outString += "0"; }
+ Coursex = String(Tcourse,0);
+ Coursex.replace(" ","");
+ outString += Coursex;
+ outString += "/";
+ if(Tspeed<100) {outString += "0"; }
+ if(Tspeed<10) {outString += "0"; }
+ Speedx = String(Tspeed,0);
+ Speedx.replace(" ","");
+ outString += Speedx;
+ outString += "/A=";
+ outString += Altx;
+ outString += " Batt=";
+ outString += String(BattVolts,2);
+ outString += ("V");
+ #ifdef DEBUG
+ outString += (" Debug: ");
+ outString += TxRoot;
+ #endif
+ #else
+ for (i=0; iAPRS:!/";
+ 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;
+ ax25_base91enc(helper_base91, 4, aprs_lat);
+ for (i=0; i<4; i++) {
+ outString += helper_base91[i];
+ }
+ ax25_base91enc(helper_base91, 4, aprs_lon);
+ for (i=0; i<4; i++) {
+ outString += helper_base91[i];
+ }
+ outString += TxSymbol;
+ ax25_base91enc(helper_base91, 1, (uint32_t) Tcourse/4 );
+ outString += helper_base91[0];
+ ax25_base91enc(helper_base91, 1, (uint32_t) (log1p(Tspeed)/0.07696));
+ outString += helper_base91[0];
+ outString += "\x48";
+ #endif
Serial.print("outString=");
// Speedx = String(Tspeed,0);
// Speedx.replace(" ","");
Serial.println(outString);
// Serial.println("=");
- break;
+ break;
}
}
diff --git a/src/TTGO_T-Beam_LoRa_APRS_config.h b/src/TTGO_T-Beam_LoRa_APRS_config.h
index 5a9beb4..b91e732 100644
--- a/src/TTGO_T-Beam_LoRa_APRS_config.h
+++ b/src/TTGO_T-Beam_LoRa_APRS_config.h
@@ -10,6 +10,12 @@
//
// licensed under CC BY-NC-SA
//
+// version: V1.3
+// last update: 27.08.2020
+// change history
+// symbol RV added
+// compressed packets in tracker mode (base91)
+//
// version: V1.1beta
// last update: 22.11.2019
//
@@ -26,6 +32,7 @@
// SET HW version
#define T_BEAM_V1_0 // use this for newer Boards AKA Rev1 (second board release)
// #define T_BEAM_V0_7 // use this for older Boards AKA Rev0.x (first board release)
+#define TX_BASE91 // if BASE91 is set, packets will be sent compressed (in TRACKER-mode only)
// SET temperature sensor type
// #define DS18B20 // use this if you use DS18B20, default ist DHT22
@@ -33,12 +40,12 @@
// USER DATA - USE THESE LINES TO MODIFY YOUR PREFERENCES
// IF NOT CHANGED you have to go through the configuration routine at first boot up of the TTGO T-Beam
-#define DONT_USE_FLASH_MEMORY // uncomment if you don't want to use Flashmemory - instead data below must be corrected
-#define CALLSIGN "OE3CJB-14" // enter your callsign here - less then 6 letter callsigns please add "spaces" so total length is 6 (without SSID)
-#define WX_CALLSIGN "OE3CJB-14" // use same callsign but you can use different SSID
+// #define DONT_USE_FLASH_MEMORY // uncomment if you don't want to use Flashmemory - instead data below must be corrected
+#define CALLSIGN "OE1XYZ-11" // enter your callsign here - less then 6 letter callsigns please add "spaces" so total length is 6 (without SSID)
+#define WX_CALLSIGN "OE1XYZ-11" // use same callsign but you can use different SSID
#define LONGITUDE_PRESET "01539.85E" // please in APRS notation DDDMM.mmE or DDDMM.mmW
#define LATIDUDE_PRESET "4813.62N" // please in APRS notation DDMM.mmN or DDMM.mmS
-#define APRS_SYMBOL "R" // other symbols are
+#define APRS_SYMBOL ">" // other symbols are
// "_" => Weather Station
// ">" => CAR
// "[" => RUNNER