We use an old BG_RF95 library from 2001. RadioHead/RH_RF95.cpp implements _lastSNR and _lastRssi correctly accordingg to the specs
- SNR computation according to spec
- RSSI computation revised
Work on design of Q...-encoding scheme for encoding SNR and RSSI in path.
In TTGO_T-Beam_LoRa_APRS.ino I removed unused variable
lora_old_speed
which was still there after removing my debug code which showed previous / current value ;)
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
In TTGO_T-Beam_LoRa_APRS.ino I removed unused variable
lora_old_speed
which was still there after removing my debug code which showed previous / current value ;)
Signed-off-by: Thomas Osterried <dl9sau@darc.de>
(c) 2021 Thomas Osterried dl9sau, License GPL
CAVE:
webconfig does not work properly. This needs to be fixed before the changes could go upstream!
Until then, you can hardcode values in TTGO_T-Beam_LoRa_APRS.ino after the
"// enforce valid transmissions even on wrong configurations"
section.
For examples, see appendix 1.
New features
Changes
- improved automatic CodeRate adaption
- Concept for adding SNR+RSSI in packet path. Q23073* means, 23 dB SNR, -73 dB RSSI.
- full smart-beaconing implementation, with default parameters from kenwood / yaesu devices
Changed files:
1. data_embed/index.html
------------------------
- cosmetic changes
- added configuration options for new features described above
- description how to configure DST-call-path-addressing
- make configurable
- automatic coderate adaption
- rate limiting comment text
- My recent "Accept own positions via KISS" feature
- My recent "Allow GPS sleep while own positions received via KISS" feature
- LoRa Digipeating
- LoRa cross-digipeating (Mode, frequency, speed)
2. preference_storage.h
-----------------------
definitions for the new configuration variables
3. platformio.ini
------------------k
Variable MAX_TIME_TO_NEXT_TXT commented out. Was not implemented, and needs not be configured anymore.
Default enabling of
ENABLE_TNC_SELF_TELEMETRY
switched off because most people do not need this
DIGI_PATH="1": suggestion to make this default
"FIXED_BEACON_EN": switched off, because if you have a tracker with GPS, you do smart-beaconing.
Or if you have no GPS, you need to configure LAT/LONG before enabling fixed beaconing.
"SHOW_BATT": if you really need this, enable it.
"SPEED_1200": most regions use 300.
Typo:
LATIDUDE_PRESET -> changed to LATITUDE_PRESET (also in TTGO_T-Beam_LoRa_APRS.ino)
4. TTGO_T-Beam_LoRa_APRS.ino
----------------------------
global variables:
- -D SPEED_1200 had not effekt. Added appropriete #ifdef.
Perhaps, "LORA_SPEED_LOW" or "LORA_SPEED_FAST" (like mentioned in the web interface) would be a better approach
- gps state: set default on only at devices with GPS-RX
- New smartbeaconing:
- values like sb_turn_slope and sb_turn_time
- if -D SB_ALGO_KENWOOD, use those defaults. Scales better at low speed.
- my new featerus:
- lora_speed_cross_digi
- lora_freq_cross_digi
- lora_automatic_cr_adaption
- lora_digipeating_mode
- lora_add_snr_rssi_to_path
- lora_cross_digipeating_mode
- acceptOwnLocationReportsViaKiss
- allow_gps_sleep_while_kiss
- acceptOwnPositionReportsViaKiss
- gps_allow_sleep_while_kiss
- added code for new preferences values
- in prepareAPRSFrame()
- beautified DST-path addition on outString
- better comment-ratelimiting computation
- loraSend(): small change.
- If lora freq was changed for sending one packet on another frequency (cross digi mode):
+ // cross-digipeating may have altered our RX-frequency. Revert frequency change needed for this transmission.
+ if (lora_FREQ != lora_freq)
+ rf95.setFrequency(lora_freq);
- FEATURE request:
// Feauture request: add param lora_speed. Currently, we need a variable for storing the old speed, and affer loraSend(), we have to revert :(
I did not change the function parametes without asking
- new sanity check:
+// enforce valid transmissions even on wrong configurations
+if (aprsSymbolTable.length() != 1)
+ aprsSymbolTable = String("/");
+if (aprsSymbol.length() != 1)
+ aprsSymbol = String("[");
+if (aprsLatPreset.length() != 8 || !(aprsLatPreset.endsWith("N") || aprsLatPreset.endsWith("S")) || aprsLatPreset.c_str()[4] != '.')
+ aprsLatPreset = String("0000.00N");
+if (aprsLonPreset.length() != 9 || !(aprsLonPreset.endsWith("E") || aprsLonPreset.endsWith("W")) || aprsLonPreset.c_str()[5] != '.')
+ aprsLonPreset = String("00000.00E");
-> Without this, and if unconfigured, invalid packets without position in the position-part of the AX.25 packets could occur. Saw this happens, at findu.com ;)
- encode_snr_rssi_in_path():
My idea of coding SNR and RSSI in packet path. Instead of modifying user's comment text (which some digi software does, and is a really bad idea)
- add_element_to_path():
a quick, string based option to add a digi element to the AX.25 header
- tnc_format_to_ax25_frame(): header parser, needed for handle_lora_frame_for_lora_digipeating
- handle_lora_frame_for_lora_digipeating: does header rewrite for digipeating
- implemented digipeating and cross-digipeating
- redesignt automatic cr-adatpion
- improved smart-beaconing decisions
5. taskWebServer.cpp:
---------------------
- added code for new preferences values
Appendix 1
----------
I.e. my enforced test settings in TTGO_T-Beam_LoRa_APRS.ino behind
the block
"// enforce valid transmissions even on wrong configurations"
were:
lora_speed = 180;
lora_digipeating_mode = 2;
lora_cross_digipeating_mode = 0;
sb_min_interval = 90000L;
sb_max_interval = 1800000L;
lora_automatic_cr_adaption = true;
lora_speed_cross_digi = 1200;
lora_freq_cross_digi = 433.900;
sb_max_speed = 20;
sb_turn_slope = 11;
rate_limit_message_text = true;
acceptOwnPositionReportsViaKiss = true;
lora_add_snr_rssi_to_path = true;
And in platformio.ini:
-D 'KISS_PROTOCOL' ; leave enabled
-D 'CALLSIGN="DL9SAU-12"' ; can be set from www interface
-D 'DIGI_PATH="1"' ; can be set from www interface
; -D 'FIXED_BEACON_EN' ; can be set from www interface
-D 'SB_ALGO_KENWOOD' ; Kenwood skales better on lower speed.
-D 'LATITUDE_PRESET="0000.00N"' ; can be set from www interface
-D 'LONGITUDE_PRESET="00000.00E"' ; can be set from www interface
-D 'APRS_SYMBOL_TABLE="/"' ; can be set from www interface
-D 'APRS_SYMBOL="["' ; can be set from www interface
-D 'MY_COMMENT="/145.500MHz d023/Thomas D23. TTGO-T-Beam LoRa 70cm; KISS-Test"' ; can be set from www interface
-D 'SHOW_ALT' ; can be set from www interface
; -D 'SHOW_BATT' ; can be set from www interface
-D 'SHOW_RX_PACKET' ; can be set from www interface
-D 'SHOW_RX_TIME=10000' ; can be set from www interface
-D 'TXFREQ=433.775' ; set operating frequency
; -D 'LORA_SPEED_1200' ; comment out to set 300baud
-D 'TXdbmW=23' ; set power
; -D 'ENABLE_OLED' ; can be set from www interface
-D 'ENABLE_LED_SIGNALING' ; can be set from www interface
-D 'NETWORK_TNC_PORT=8001' ; default KISS TCP port
; -D 'MAX_TIME_TO_NEXT_TX=120000L' ; can be set from www interface -- not implemented
-D 'FIX_BEACON_INTERVAL=1800000L' ; can be set from www interface
-D 'NETWORK_GPS_PORT=10110' ; GPS NMEA Port
; -D 'ENABLE_TNC_SELF_TELEMETRY' ; can be set from www interface
-D 'TNC_SELF_TELEMETRY_INTERVAL=3600L' ; can be set from www interface (seconds)
-D 'SHOW_OLED_TIME=15000' ; an be set from www interface (OLED Timeout)
Signed-off-by: Thomas Osterried <dl9sau@github>
- automatic CR adption in regions running SF12
- Algorithm (n packets vs. last heard frame) is a first guess;
maybe it's a goood choice, maybe it has to be optimized.
- Rate-Limiting position packets: grace time now honoors CR-value (longer
wait time in SF12 CR4/8). Makes use of the "lora_speed" definition.
- Could be ported for other SF's, but there are no other CRs
(here: "speed rates") defined yet.
TODO: Make it web-configurable (variable: lora_automatic_cr_adaption = true)
- Text-Messaging
- if our KISS client (same call+ssid) uses TEXT messaging, beacon indicator
changes from '!' to '=' (-> signals text messaging capability)
- If kiss client came via bluetooth and disconnects, we can now instantly
go back to send own positon packets