kopia lustrzana https://github.com/DL9SAU/TTGO-T-Beam-LoRa-APRS
439 Commity (master)
Autor | SHA1 | Wiadomość | Data |
---|---|---|---|
Thomas Osterried | f88fe7b8cf |
Smaller fixes
- gps: - gps info on lcd: in sleep mode, "S:zzz" is now shown, instead of "S:sats/hdop" Lie with "GPS:" will show now fix or GPS age as usuual - own beacon: If lora TX is off and no aprsis connection, we sent no beacon. This was a regression; at one digipeater qth there was a setup where an aprs digi software attached to kiss. The beacon via kiss is required. -> - if (manBeacon && (lora_tx_enabled || aprsis_enabled)) { + if (manBeacon && (lora_tx_enabled || aprsis_enabled || usb_serial_data_type == 0 || usb_serial_data_type & 2)) { - Boot messages: if no AP is configured (-> empty SSID), message was Preferences AP found with PW in wifi.cfg and not stored again. -> Made it nicer - More tests on poersaving mode. - With the bad GPS antenna of the T-Beam v1.2, it takes > 5 min to get a fix after repowering the chip. - The algorith of my last commit had too short awake times. I also test powering off the chip if I don't move. Still testing, it may not be perfect. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | d25692b209 |
Fixes and improvements: preamble, gps powersaving mode, LH, ..
- web: - preamble: A bit more detailed description, with suggestion to try value 12 (default is 8) Assurance in taskWebserver that value is >= 8. - sb_angle: min is 5 but text said Range 0 to 360. - GPS: new "GPS powersaving mode". Still testing. "Made GPS may sleep when running on battery" default. - GPS powersaving mode: If you have problems, set it to "Ignore this feature". While looking at the power consumption, GPS has a quite high power consumption. If we have no fix for 10min, we go to sleep mode. Interval Sleep 1min, 2min, 4min, 8min, 1min, 2min, .. Awake 120, next: 60s, next: 40, next: 30s After 4 rounds, we run GPS 10min again (better chance to refresh the almanach). During sleep, taskGPS is suspended and gps chip is powered off. -> This algorithm saves reduces the power consumption of the GPS chip to ~30%. If it behaves good, more fine-tuning can be done (i.E. switching it earlier off if you don't move. Reduce the initial fix-loss-time of 10min, ..) LCD shows "GPS: sleep" when GPS is in power saving mode. If it awakes and has no fix, it shows (as usual) GPS: age nnn". - preamble changes: - TX setting: Now only affects main qrg. Perhaps it's wiser to be able to set it in more detail: Main, Secondary, Both. Or with different values for the different frequencies. - RX setting: moved to loraSend(), where default rx values are reset after TX - LCD: - "GPS: sleep" as described above - Tried to improve the readibility of the LastHeard lines. Need to verify Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Piotr Lewandowski | 3c645ca232 | added preamble conf placeholder with def val, changed def to 8 symbols | |
Piotr Lewandowski | 307aeb0c80 | preambleLen added in preferences.cfg | |
Piotr Lewandowski | 88c7994e47 | tx preamle len settings, extended rx timeout | |
Thomas Osterried | 7dc1c3c728 |
Minor changes
- New Message indicator: - "private message" is now "m" - "winlink" is now "w" - Both: "M" - M / m is now cleared if you read your message on display (see below) - message ((MSG)): - changed date notation to mm-dd - fixed small bug in displaying the time - If you enter this menu item, new message-indicaor is cleared - middle button: if webserver is started - changed info text for display to make it more clear, that you now should release the button (to avoid factory reset on boot) - changed time to tread this from 2s to 3s - tnc: - fixed a bug when starting webserver via tnc cli - beauty: added blank for displaying debug level - display: in behind_position_tx, fillDisplayLine1(5) is not needed; we test this and commented it out. Signed-off-by: DL3EL <dl3el@darc.de> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | a8cf5ce0a1 |
Improved local aprsis-filter
1. The local aprsis-filter is for gating. aprs-text-messages addressed to our tracker call should always pass (and go to kiss-TNCs and usb-trace -- but not on RF of course) 2. Documentation in web: make clearer what a positive and negative filter is Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | f5d114b400 |
MSG feature for display.
Thomas dl3el wrote this feature for displaying the the last personal aprs-messages. Thomas dl9sau modified: don't overwrite a personal aprs-message with winlink notification. Display shows "m" for personal message. "W" for winlink info. "M" for both. Message is cleared when you cycled through the display up to the ((BN)) screen. Thomas dl3el's commit messages: - include LastMessage in flip pages indicate message unread with an "m" between time & uptime flag is cleared when all pages have been flipped through and the manual beacon has been sent - move display of buildnr to the last butone flip page. Gives us more space for the message "next button will tx beacon" Signed-off-by: DL3EL <dl3el@darc.de> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 19136a6405 |
MSG feature for display.
Thomas dl3el wrote this feature for displaying the the last personal aprs-messages. Thomas dl9sau modified: don't overwrite a personal aprs-message with winlink notification. Display shows "m" for personal message. "W" for winlink info. "M" for both. Message is cleared when you cycled through the display up to the ((BN)) screen. Thomas dl3el's commit messages: - include LastMessage in flip pages indicate message unread with an "m" between time & uptime flag is cleared when all pages have been flipped through and the manual beacon has been sent - move display of buildnr to the last butone flip page. Gives us more space for the message "next button will tx beacon" Signed-off-by: DL3EL <dl3el@darc.de> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 64d397835e |
MSG feature for display.
Thomas dl3el wrote this feature for displaying the the last personal aprs-messages. Thomas dl9sau modified: don't overwrite a personal aprs-message with winlink notification. Display shows "m" for personal message. "W" for winlink info. "M" for both. Message is cleared when you cycled through the display up to the ((BN)) screen. Thomas dl3el's commit messages: - include LastMessage in flip pages indicate message unread with an "m" between time & uptime flag is cleared when all pages have been flipped through and the manual beacon has been sent - move display of buildnr to the last butone flip page. Gives us more space for the message "next button will tx beacon" Signed-off-by: DL3EL <dl3el@darc.de> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 85236cda21 |
Two fixes
I did the following mistakes: - GPS age was computed wrong (since I introduced compute_time_since_received() ) - course computation had a small bug Web page: clarified in the description of the middle button where the shown distance and position is based on (the values are based on your current position, not on the position when you received the packet) Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | c68cf822e6 |
local aprsis-filter, bugfix, vers_xxshort_bn, no gif
1.1 local aprsis-filter 1.1 Filter type (local, optional) Local aprsis-filter incoming for packet-types. We observed that if you have a server-site filter, i.e. for receive private messages only, 20km around you (t/m/MYCALL/20), aprsis sends also some location positions of users (if you heard them on RF), and even if \>20km away. Also we have seen packets of type objects telemetry, etc. With this option, you can filter incoming aprsis-packets localy in order to prevent them from gating to RF. Valid filters are poimqstunwb (Position packets, objects, items, message, query, status, telemetry, user-defined, NWS, weather, bulletin (bulletins are aprs-messages prefixed with BLN'). You can invert the filter ('all except ...') by adding a leading '-', i.e. '-mws'. If you leave this field empty, aprsis local filter is disabled. => [-]poimqstunwb 1.2 Filter 'words' (local, optional) Local aprsis-filter incoming for 'words': if this word is part of the header or message body of a packet coming from aprsis, the packet is filtered out. You can sepearate multiple word-filters by space. Leave empty to disable a word filter. Many thanks go to Tomasz SP2ATJ for this idea and nice discussions and intensively testing. 2. bugfix During "save" of the config via web-interface, we call setup_phase2_soft_reconfiguration() String Tcall is changed. OledHdr had a reference to Tcall. OledHdr needs to be updated. Else there's a very rare race condition (only observed one time in 3 years) where writedisplaytext(OledHdr,OledLine1,OledLine2,OledLine3,OledLine4,OledLine5); crashed during accessing OledHdr. OledHdr = String(Tcall); sould make a local copy. OledLines1-5 are also set explicit to "" now. 3. VERS_XXSHORT_BN buildscript_versioning.py generates BUILD_NUMBER, VERSION, VERSION_SHORT, etc. We compute the build_nr with base62 (0-9, a-z, A-Z) This gives us room for (62**2)-1 = 3843 builds between git commits. Should be enough. git_id short is 7 bytes. length of 5 has hopefully enough entropy. VERS_XXSHORT_BN may also be sent on RF -> We keep it short. 8 bytes now, (5 bytes git id, 2 bytes base62-encoded build_no) instead of typically 3 bytes before. Why we need both? 1. git-id: you can determine which was the git head when you checked out, and what has changed since then 2. During developmment / testing, build-nr increases each compiler run - but the git id only changes after git push. build_no helps you to distinguish, which version of a compler run you currently use. VERSION had a date resolution of 1 microsecond. -> now cutting string after the minute value. 4. style.css I decided to remove the #logo ("background-image"), which is a base64- encoded inline gif. We need space for the flash, because the code reached 100% of it's size!! If we have a solution, the logo comes back. Other options: - don't compile with -DENABLE_SYSLOG, or the like - re-partition. Other firmmware-developers did this. But I'm a bit sceptical to do this. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 65f10b62e7 |
Some smaller fixes
- display: - some fixes - fix incorrect display if external power plugged off and gps fix valid - removed some debug_verbose messages and moved some debig_verbose messages inside #ifdef DEVELOPMENT_DEBUG -> saves some flash space of the binary - other smaller fixes Signed-off-by: DL3EL <dl3el@darc.de> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 7aa902c4e4 |
Info: comple flags
TNC now has a "version" command, showing VERSION and compile_flags. Webserver had a VERSION info and now additionaly shows compile_flags. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
DL3EL | 0042ca48b7 |
New enhanced display
If OLED is ON: flip through the available pages 1. press: show lastheard list (Call, time, distance, direction) 2. press: show current build number 3. - 5. press: show last 3 received packets (raw) 6. press: with GPS-FIX immediate send a beacon with the position from the GPS 6. press: without GPS-FIX, immediate send a beacon with the position saved in the configuration changed behaviour when external power is switched off and and autopower off is selected: - any keypress or new plugin of external power within auto power off delay will abort the process and return to normal op - for the time "auto power off delay", the display will show the power off message plus the remaining time und shutdown Signed-off-by: DL3EL <dl3el@darc.de> |
|
DL3EL | 9f6e6d9ee4 |
New enhanced display
If OLED is ON: flip through the available pages 1. press: show lastheard list (Call, time, distance, direction) 2. press: show current build number 3. - 5. press: show last 3 received packets (raw) 6. press: with GPS-FIX immediate send a beacon with the position from the GPS 6. press: without GPS-FIX, immediate send a beacon with the position saved in the configuration changed behaviour when external power is switched off and and autopower off is selected: - any keypress or new plugin of external power within auto power off delay will abort the process and return to normal op - fo Signed-off-by: DL3EL <dl3el@darc.de> |
|
DL3EL | a121c6b8c7 |
Merge branch 'master' of https://github.com/DL3EL/TTGO-T-Beam-LoRa-APRS
Signed-off-by: DL3EL <dl3el@darc.de> |
|
DL3EL | 55018abf7b |
bug fixes
Signed-off-by: DL3EL <dl3el@darc.de> |
|
DL3EL | 4746266cce |
Bug fixes, make programm smaller
Signed-off-by: DL3EL <dl3el@darc.de> |
|
DL3EL | 46f37ba4d0 |
Bugfixes
NEW: Lastheard List (see info on webpage) Signed-off-by: DL3EL <dl3el@darc.de> |
|
Thomas Osterried | 9b66a4cc07 |
New important fix. And: Many new features. bug fixes and improvements
Last commit from today lead to a stack smash (buffer overflow) in is_call_valid(). Found the bug -> fixed with this commit. is_call_blacklisted() and the new handle_aprs_messsage_addressed_to_us() function may be called concurrently in the main program thread and in the taskWebServer-thread. I'm not really sure if buffer operation on the local variable is thread safe; that's why I added sema locking for both. Needed? Not? I'd be glad to remove it ;) handle_aprs_messsage_addressed_to_us() returns a String. I'm also not sure what happens on concurrency -> I now return a copy of the String: String(answer_message). The changelog of the last commit of today: ========================================== New features ------------ - personal text messages addressed to the tracker - are now recognized and stay local -> will not be digipeated or sent to aprsis see handle_aprs_messsage_addressed_to_us(), used in the main program (for rf-received packets) and in taskWebServer for packets received from aprs-is It also displays the message + writedisplaytext(" ((MSG))","",String(msg_from) + String(": ") + String(header_normal_or_third_party_end + 11+1),"","",""); for 30s: + display_dont_update_until = millis() + 30000L; We display the msg in favour of the RX packet. - we send an ACK when a message-ID is present - This is also useful for the winlink feature described below - Winlink feature - if enabled, your device will add the word @winlink to the position beacon text every hour (Refresh interval at winlink is two hours). You can choose if it is sent always, or only if a bluetooth device (i.e. aprsdroid) is connected. Winlink documented that you could send a "status packet" instead. This would be really nice and I implemented it - but they ignore it. -> I've commented it our (for not loosing it), and switched to the position comment approach. - If we get a notification, a "W" is in the display as indicator that new messages are waiting for you. The W is displayed for 24h. Because winlink only informs every 24 hours, and the tracker does not know if you read the message at the winlink system - Powerdown: - If you disconnect external power (USB) from the TTGO device, it can shutdown if you configured the shutdown delay. This is useful when operating in the car and you park. Someone configured a shutdown delay of 1h. -> Shutdown info is displayed a few seconds (you can interrupt the shutdown by pressing the middle button), and info is displayed again a few seconds right before the actual shutdown (also with the option do interrupt the shutdown by pressing the middle button). - On shutdown, a message QRT status message could be sent automatically, if configured - LoRa APRS digipeating: you can configure now an alias reacting as digipeater (kenwood names it "UITRACE". We react only on this call if it's in the first position of the path and has no digipeated flag. - Serial console tnc cli: - Show reboot and halt info also at the display if you issue the reboot or shutdown command And send a status packet if configured (see new status packet feature described above) Bug fixes --------- - Fix for AXP2101 on T-Beam V1.2: In setup() (setup_phase2_soft_reconfiguration()), we needed to add + axp.setButtonBatteryChargeVoltage(3300); // enable charge of the gps battery + axp.enableButtonBatteryCharge(); else the button battery (which is a capacitor) never became loaded. This lead to a time of 10 min to get a GPS fix after powering on (because it needed to wait for the almanach) - Fix and improve of smartbeaconing computation. Sometimes the timer went too fast down, sometimes it went up to max again -> we mostly relied on the course-change event. You will really notice the improvement. - Wrong info if lora TX is enabled and current state of dont_send_own_position_packets is true. Display showed "LoRa-TX; dis", but only the active sending of the beacon is stopped: - if (dont_send_own_position_packets || !(lora_tx_enabled || aprsis_enabled)) { + if (dont_send_own_position_packets) { + OledLine2 = wifi_info + " Own Bcn: dis"; + } else if (!(lora_tx_enabled || aprsis_enabled)) { OledLine2 = wifi_info + " LoRa-TX: dis"; - Beautifying the lines in the display output (indents for different speed units, missing blank if no "p" or "P", etc. I had developed that with the device with-display-and-no-GPS and saw the indent errors at the moment I used my new-device-with-display-and-GPS - During debugging, I was not able to send a packet with digipeated flag via serial console converse mode: typo (q instead of p check): - if (! (*p == '-' || *p == '>' || *p == ',' || *q == '*' || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9'))) + if (! (*p == '-' || *p == '>' || *p == ',' || *p == '*' || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9'))) ;)) - Moved update_speed_from_gps() higher, before gps.speed() calls, because update_speed_from_gps() implicitly changes the gps.speed.isUpdated() value during his calls. This lead to unexpected fewer conditions of speed updates - Improved gps location / speed / ... handling: Work on bestHdop section. You know, gps jumps at low speeds, and it's hard to find a good value between needed updates and wrong-positives. I left old values commented-out in the code. In my test, it now behaves much better. If situation is "p" (had a fix, but lost it), not only set aprsPresetShown "p" but also call displayInvalidGPS(); If situation is " ": we had no gps fix, but we now have a fix: // No GPS signal for a long time? Enforce tx: + if ((millis() - lastPositionTX) > ((sb_max_interval - sb_min_interval) / 2)) + nextTX = sb_min_interval; Sounds good? - removed time_to_refresh = millis() + showRXTime from handle_usb_serial_input(), KISSTX, TX-Xdigi, .. because this value is only intended for the time of displaying ((RX)-packets and must not be overloaded by other stuff. See also new variable display_dont_update_until. - taskWebServer send_queue_to_aprsis(): While \r is a valid char in an aprs message text (for separating lines), it must not be sent to aprs-is, because they interpret \r, \n, \r\n as EOL. That means, the rest of the line will be interpreted and may lead to a disconnect due to garbled input. -> + data.replace("\r", " "); data.replace("\n", " "); data.replace("\0", " "); - is_call_blacklisted(): moved strcat after length check: - // our ssid filter construct: -0 means search for call with ssid 0 zero. - if (!(r = strchr(buf, '-'))) - strcat(buf, "-0"); // after modifications above, is len(buf) still < 10 (space for ',' and \0)? if (strlen(buf) > 10) return 0; + // our ssid filter construct: -0 means search for call with ssid 0 zero. + if (!(r = strchr(buf, '-'))) + strcat(buf, "-0"); - Fixed: average_speed array: last field was always zero (%4 instead of %5) - average_speed[point_avg_speed] = (((curr_hdop < 1.5 && curr_sats >= 3 && curr_kmph <= 16.0) || (curr_hdop < 4.0 && curr_sats >= 3 && curr_kmph > 16.0)) ? curr_kmph : average_speed[(point_avg_speed-1) % 4]); // calculate smart beaconing. Even a not-updated old speed is ok here. + average_speed[point_avg_speed] = ((curr_kmph < 1.8 || (curr_hdop < 1.5 && curr_sats >= 3 && curr_kmph <= 16.0) || (curr_hdop < 4.0 && curr_sats >= 3 && curr_kmph > 16.0)) ? curr_kmph : average_speed[(point_avg_speed-1) % 5]); // calculate smart beaconing. Even a not-updated old speed is ok here. average_speed_final = (average_speed[0]+average_speed[1]+average_speed[2]+average_speed[3]+average_speed[4])/5; Other changes ------------- - Instead of if (enable_bluetooth && SerialBT.hasClient()){ we now have if (serial_bt_client_is_connected){ in TTGO_T-Beam_LoRa_APRS.ino, taskWebServer.cpp and taskTNC.cpp and the current state is checked in the main loop. This way we also learn if a new serial_bt_client is connected - Oled: new display_dont_update_until prevents display changes -> important messages are not interrupted - Better space handling for beacon text additions like "@winlink" "Batt=", "P=", " !W..!" - nextTX and next_fixed_beacon adjustments moved now in sendpacket(), because they need to be adjusted (and only then) after calling this function: + lastPositionTX = millis(); + // reset timer for automatic fixed beacon after manual beacon + next_fixed_beacon = millis() + fix_beacon_interval; + nextTX = sb_max_interval; - enableOled_now() enforces Oled to be on (without waiting for the next loop in main loop). display_dont_update_until is set to the needed values - variable name lastTX changed to lastPositionTX because this variable is only needed in the context of the last position transmission. -> the name lastTX was misleading. - is_call_blacklisted(): whitelist call "WLNK", because it has to be valid for winlink communication - at various places in the code: moved display routines like writedisplaytext("((KISSTX))","",inputBuf,"","",""); to the place before loraSend -> more time for the user to read the message - Middle button code: - fillDisplayLines3to5(0) added to MAN TX / FIX TX part - handle the power-off-timer condition (-> timeslots for being able to abort the poweroff) - variables t_last_smart_beacon_sent and lastPositionTX had the same meaning. -> Abandoned t_last_smart_beacon_sent. - New tmp_t_since_last_sb_tx in the loop: avoid unnecessary recomputations of millis() - lastPositionTX at various places afterwards in the loop. - taskWebserver: - On shutdown or reboot, send statusPacket if configured. And set a delay for do_send_status_message_about_shutdown_to_aprsis() - code beautify in handle_SaveAPRSCfg() and read_from_aprsis() (here: changed log message read_from_aprs to the more correct read_from_aprsis). - aprs-message ack-handling (described above) - renamed send_to_aprsis() to send_queue_to_aprsis(), because we have in TTGO_T-Beam_LoRa_APRS.ino the same function (which only fills the queue, which is handled by send_queue_to_aprsis() in taskWebServer.cpp). - More comprehensible: - <label for="aprs_llfgps">Use lat/lon of current GPS position</label> + <label for="aprs_llfgps">Instead, store current GPS position</label> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 08997f5720 |
Many new features. bug fixes and improvements
New features ------------ - personal text messages addressed to the tracker - are now recognized and stay local -> will not be digipeated or sent to aprsis see handle_aprs_messsage_addressed_to_us(), used in the main program (for rf-received packets) and in taskWebServer for packets received from aprs-is It also displays the message + writedisplaytext(" ((MSG))","",String(msg_from) + String(": ") + String(header_normal_or_third_party_end + 11+1),"","",""); for 30s: + display_dont_update_until = millis() + 30000L; We display the msg in favour of the RX packet. - we send an ACK when a message-ID is present - This is also useful for the winlink feature described below - Winlink feature - if enabled, your device will add the word @winlink to the position beacon text every hour (Refresh interval at winlink is two hours). You can choose if it is sent always, or only if a bluetooth device (i.e. aprsdroid) is connected. Winlink documented that you could send a "status packet" instead. This would be really nice and I implemented it - but they ignore it. -> I've commented it our (for not loosing it), and switched to the position comment approach. - If we get a notification, a "W" is in the display as indicator that new messages are waiting for you. The W is displayed for 24h. Because winlink only informs every 24 hours, and the tracker does not know if you read the message at the winlink system - Powerdown: - If you disconnect external power (USB) from the TTGO device, it can shutdown if you configured the shutdown delay. This is useful when operating in the car and you park. Someone configured a shutdown delay of 1h. -> Shutdown info is displayed a few seconds (you can interrupt the shutdown by pressing the middle button), and info is displayed again a few seconds right before the actual shutdown (also with the option do interrupt the shutdown by pressing the middle button). - On shutdown, a message QRT status message could be sent automatically, if configured - LoRa APRS digipeating: you can configure now an alias reacting as digipeater (kenwood names it "UITRACE". We react only on this call if it's in the first position of the path and has no digipeated flag. - Serial console tnc cli: - Show reboot and halt info also at the display if you issue the reboot or shutdown command And send a status packet if configured (see new status packet feature described above) Bug fixes --------- - Fix for AXP2101 on T-Beam V1.2: In setup() (setup_phase2_soft_reconfiguration()), we needed to add + axp.setButtonBatteryChargeVoltage(3300); // enable charge of the gps battery + axp.enableButtonBatteryCharge(); else the button battery (which is a capacitor) never became loaded. This lead to a time of 10 min to get a GPS fix after powering on (because it needed to wait for the almanach) - Fix and improve of smartbeaconing computation. Sometimes the timer went too fast down, sometimes it went up to max again -> we mostly relied on the course-change event. You will really notice the improvement. - Wrong info if lora TX is enabled and current state of dont_send_own_position_packets is true. Display showed "LoRa-TX; dis", but only the active sending of the beacon is stopped: - if (dont_send_own_position_packets || !(lora_tx_enabled || aprsis_enabled)) { + if (dont_send_own_position_packets) { + OledLine2 = wifi_info + " Own Bcn: dis"; + } else if (!(lora_tx_enabled || aprsis_enabled)) { OledLine2 = wifi_info + " LoRa-TX: dis"; - Beautifying the lines in the display output (indents for different speed units, missing blank if no "p" or "P", etc. I had developed that with the device with-display-and-no-GPS and saw the indent errors at the moment I used my new-device-with-display-and-GPS - During debugging, I was not able to send a packet with digipeated flag via serial console converse mode: typo (q instead of p check): - if (! (*p == '-' || *p == '>' || *p == ',' || *q == '*' || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9'))) + if (! (*p == '-' || *p == '>' || *p == ',' || *p == '*' || (*p >= 'A' && *p <= 'Z') || (*p >= '0' && *p <= '9'))) ;)) - Moved update_speed_from_gps() higher, before gps.speed() calls, because update_speed_from_gps() implicitly changes the gps.speed.isUpdated() value during his calls. This lead to unexpected fewer conditions of speed updates - Improved gps location / speed / ... handling: Work on bestHdop section. You know, gps jumps at low speeds, and it's hard to find a good value between needed updates and wrong-positives. I left old values commented-out in the code. In my test, it now behaves much better. If situation is "p" (had a fix, but lost it), not only set aprsPresetShown "p" but also call displayInvalidGPS(); If situation is " ": we had no gps fix, but we now have a fix: // No GPS signal for a long time? Enforce tx: + if ((millis() - lastPositionTX) > ((sb_max_interval - sb_min_interval) / 2)) + nextTX = sb_min_interval; Sounds good? - removed time_to_refresh = millis() + showRXTime from handle_usb_serial_input(), KISSTX, TX-Xdigi, .. because this value is only intended for the time of displaying ((RX)-packets and must not be overloaded by other stuff. See also new variable display_dont_update_until. - taskWebServer send_queue_to_aprsis(): While \r is a valid char in an aprs message text (for separating lines), it must not be sent to aprs-is, because they interpret \r, \n, \r\n as EOL. That means, the rest of the line will be interpreted and may lead to a disconnect due to garbled input. -> + data.replace("\r", " "); data.replace("\n", " "); data.replace("\0", " "); - is_call_blacklisted(): moved strcat after length check: - // our ssid filter construct: -0 means search for call with ssid 0 zero. - if (!(r = strchr(buf, '-'))) - strcat(buf, "-0"); // after modifications above, is len(buf) still < 10 (space for ',' and \0)? if (strlen(buf) > 10) return 0; + // our ssid filter construct: -0 means search for call with ssid 0 zero. + if (!(r = strchr(buf, '-'))) + strcat(buf, "-0"); - Fixed: average_speed array: last field was always zero (%4 instead of %5) - average_speed[point_avg_speed] = (((curr_hdop < 1.5 && curr_sats >= 3 && curr_kmph <= 16.0) || (curr_hdop < 4.0 && curr_sats >= 3 && curr_kmph > 16.0)) ? curr_kmph : average_speed[(point_avg_speed-1) % 4]); // calculate smart beaconing. Even a not-updated old speed is ok here. + average_speed[point_avg_speed] = ((curr_kmph < 1.8 || (curr_hdop < 1.5 && curr_sats >= 3 && curr_kmph <= 16.0) || (curr_hdop < 4.0 && curr_sats >= 3 && curr_kmph > 16.0)) ? curr_kmph : average_speed[(point_avg_speed-1) % 5]); // calculate smart beaconing. Even a not-updated old speed is ok here. average_speed_final = (average_speed[0]+average_speed[1]+average_speed[2]+average_speed[3]+average_speed[4])/5; Other changes ------------- - Instead of if (enable_bluetooth && SerialBT.hasClient()){ we now have if (serial_bt_client_is_connected){ in TTGO_T-Beam_LoRa_APRS.ino, taskWebServer.cpp and taskTNC.cpp and the current state is checked in the main loop. This way we also learn if a new serial_bt_client is connected - Oled: new display_dont_update_until prevents display changes -> important messages are not interrupted - Better space handling for beacon text additions like "@winlink" "Batt=", "P=", " !W..!" - nextTX and next_fixed_beacon adjustments moved now in sendpacket(), because they need to be adjusted (and only then) after calling this function: + lastPositionTX = millis(); + // reset timer for automatic fixed beacon after manual beacon + next_fixed_beacon = millis() + fix_beacon_interval; + nextTX = sb_max_interval; - enableOled_now() enforces Oled to be on (without waiting for the next loop in main loop). display_dont_update_until is set to the needed values - variable name lastTX changed to lastPositionTX because this variable is only needed in the context of the last position transmission. -> the name lastTX was misleading. - is_call_blacklisted(): whitelist call "WLNK", because it has to be valid for winlink communication - at various places in the code: moved display routines like writedisplaytext("((KISSTX))","",inputBuf,"","",""); to the place before loraSend -> more time for the user to read the message - Middle button code: - fillDisplayLines3to5(0) added to MAN TX / FIX TX part - handle the power-off-timer condition (-> timeslots for being able to abort the poweroff) - variables t_last_smart_beacon_sent and lastPositionTX had the same meaning. -> Abandoned t_last_smart_beacon_sent. - New tmp_t_since_last_sb_tx in the loop: avoid unnecessary recomputations of millis() - lastPositionTX at various places afterwards in the loop. - taskWebserver: - On shutdown or reboot, send statusPacket if configured. And set a delay for do_send_status_message_about_shutdown_to_aprsis() - code beautify in handle_SaveAPRSCfg() and read_from_aprsis() (here: changed log message read_from_aprs to the more correct read_from_aprsis). - aprs-message ack-handling (described above) - renamed send_to_aprsis() to send_queue_to_aprsis(), because we have in TTGO_T-Beam_LoRa_APRS.ino the same function (which only fills the queue, which is handled by send_queue_to_aprsis() in taskWebServer.cpp). - More comprehensible: - <label for="aprs_llfgps">Use lat/lon of current GPS position</label> + <label for="aprs_llfgps">Instead, store current GPS position</label> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 5acc023193 |
minor changes
- a bit better temp averaging - telemetry BITS (currently unused): added komma-separator Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 17c278c53b |
- fix regressipon in TTGO_T-Beam_LoRa_APRS.ino:
If lora_tx is disabled, own beacon was not sent to aprsis. This came from my commit https://github.com/dl9sau/TTGO-T-Beam-LoRa-APRS/commi t/a00555f9cc8111e0caeff9db4a7f739c83c53d6e in Apr 2023. Reason: I disabled TX, saw "TX" on the LCD, and thought it would be wise to check this earlier and not call sendpacket(), because I thought sendpacket() will do nothing usefull. But I was wrong, send to aprsis is a usecase. Thanks to Erik OH2LAK who reported this. - Web-Interface: fixed typo and a missing '/' in </option> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 57c2d372c0 |
fixes, improvements and features
- fixes / improvements
loraSend():
- Since T_BEAM_V1_2 support, the
#if defined (T_BEAM_V1_0) || defined(T_BEAM_V1_2) was wrong:
#if (T_BEAM_V1_0) || defined(T_BEAM_V1_2)
-> The loraChip sleep feature did not work with T_BEAM_V1_0 anymore.
This feature powers lora-chip after transmission,
if lora_rx is disabled AND lora_digipeating-mode is 0 AND
no bluetooth client is connected.
In receiption / for reception:
bg_rf95rssi_to_rssi(): has now two arguments, the rssi of rf95.lastRssi()
and bg_rf95snr_to_snr(rf95.lastSNR()).
encode_snr_rssi_in_path() has now two arguments, the snr and the rssi
from bg_rf95snr_to_snr() and bg_rf95rssi_to_rssi().
On receiption, we store the snr and rssi right after receiving a packet,
while still being in the sema-lock (which is released then right afterwards).
-> This may lead to even exacter values, and it prevents access to a
busy lora chip.
i
After receiption, in the part for the switching-between-both-frequencies
on rx, we now try to acquire a lock for the change of frequency
and speed (because the lora chip may currently send).
If we switch back from secondary to main frequency, clear packet cache
(for not being interpreted to come from main frequency)
- taskWebserver:
- fixed regression:
|
|
Thomas Osterried | e50a214c38 |
fixes and improvements
.ino: - cleaner check for occurences of TCPIP or TCPXX in path when gating rf-to-aprsis or kiss-to-aprsis. Changed decision for received third-party-encoded packets: potential gating of third-paty-packets that were not on the internet before is now possible, because send_to_aprsis() is now capable to re-encode them properly. - if beacon was triggered via tnc cli, then the display said "((WEB TX))". -> fixed. - is_call_blacklisted(): moved empty-list-check beyond the ssid check - beauty fixes and string assurances taskWeberserver: - fix for gating packets with TCPIP in path from aprsis. TCPIP is allowed, TCPXX, NOGATE and RFONLY is not. - cleaner check for occurences of TCPIP in path when preparing to gate as third-party-traffic to aprsis. - also check for NOGATE, RFONLY, TCPXX, TCPIP in the path of the third-party header when gating rf to aprsis. Third-party-packets (from other networks than tcpip) can now be sent unencoded, according to the aprsis spec. - when uploading firmware - acquire sema lock against loraSend() -> lora chip could safely be powered down. - workaround to circumvent crash on interrupt handler isr0(): - re-enable logging when we restart the device do to aprsis-connection-errors - check sender with call is_call_blacklisted() when gating aprsis to rf, like we did this already for that what we hear on rf (for digipeating, or sending to aprsis) - from aprisis (according to the APRS spec): packets from invalid calls are not sent on rf; now: also not to TNC. - from aprsis: disable general station queries (':?')) Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | db1ee46dc1 |
features: exernal gps, usbserial nmea. changed: aprsis-connect wait time
1. usb-serial: option for output gps nmea sentences I patched taskGPS.cpp this for an om a few months ago. Unexpectedly, I pushed this change to github with my last push a few days ago. -> I needed to implent this feature now, because else gps nmea output was sent uninterruptable. I needed to add a small change to taskGPS.cpp. You can enable this in the webinterface tnc mode now also has the option to enable nmea (like the logging and trace command). 2. Feature for those who attached a GPS to a non-gps-tracker like the lora32 device. - GPS speed for those devices is currently hardcoded accordnig to the need of one OM (the way it was already hardcoded for T-BEAM devices) Perhaps it will become a web-configurable featuee - new compile time option FORCE_ENABLE_GPS for your platform.ini if you use a non-T-BEAM hardware (-> gps_state = true) - in setup_phase2_soft_reconfiguration I removed the condition #else 3. On aprsis-connection setup, we waited up to 25s for login prompt. -> The webinterface is unresponsive for this time. connect_to_aprsis() is a sub sub function from the main loop with many checked conditions like variables and retry times. A better solution would need a major redesign. => the wait time for the prompt is now 5s. 4. removed block if (curr_hdop < bestHdop && curr_sats >= 4) { do_update = 1; } else because bestHdop always <= curr_hdop (assignment above) -> This condition was always false, and it is obsolete (came from a time when experimenting for best values, and where the assignment bestHdop = curr_hdop was done after that block). Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 0d06bac161 |
- Feature RTT
WiFi power-management as station: if aprs-is connection is established, switch power saving setting from WIFI_PS_MIN_MODEM to WIFI_PS_NONE. -> less delay. - Beauty: - Webserver index.html: small change in description - getLocalTimeTheBetterWay(): changed if (now != ~0 && now) { to if (now && now != ~((time_t ) 0)) { ;) Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 7dbacac67c |
Fixes for getLocalTime() and configTime()
fix #1: getLocalTime() has bugs getLocalTimeTheBetterWay is my reimplementation of the buggy getLocalTime() library call of esp32 which caused 5s delay on each call of getLocalTime(), if no gps- or ntp- time was obtained since boot. getLocalTime() has an optional argument to reduce this delay, but even then each call has a delay of 10ms. Also, posix recommends to call time with nullpointer instead of storing the time to the address of the argument. On linux, see man (2) time. Thanks to Thomas dl3el for locating the cause of the 5s-delay we observed under some cirumstances. fix #2: configTime() resulted in strange DNS requests. configTime() stores the memory address of ntp-server. Thus the variable needs to be static, else ntp will later will see garbage. This forbids the use of ntp_server.c_str(). Now, we use there a static char array, instead of a more inefficient String buffer. configTime() expects a char array anyway. For more fun with bad concepts, see https://github.com/opendata-stuttgart/sensors-software/issues/471 Thanks to Michal SQ2MO for locating the cause: DNS requests for IN A addresses that looked like the content of free()'d memory. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 3344a44b89 |
Bug fixes for AXP2101, web received_list; aprs-null-position; some smaller features
- AXP2101 powerchip: - fix: battery did not charge. Reason: do not enable axp.enableTSPinMeasure() because the T-BEAM does not this hardware capability - enhancement: battery-friendly charge settings added: - axp.setPrechargeCurr(XPOWERS_AXP2101_PRECHARGE_200MA); - axp.setChargerTerminationCurr(XPOWERS_AXP2101_CHG_ITERM_25MA); - this power chip has no current load measurement, but it could show the battery charge level (in %). -> Added this info to the display, and to (when enabled) the beacon text -> P:4.87V/23%+ means, usb powered (4.87V). Battery is present and is charging; it's 23 % full. P:4.87V/100% means, battery is full and charging has stopped. P without /... means: no battery attached B:3.67V/23%- means, usb power is not plugged in; battery has 3.67V and is discharging; it's 23 % full. - webinterface received_list: This fixes an old issue which occured seldomly: SP2ATJ who reported lives in a region where compressed position often contains "...<...>...". Data to the webserver (/received_listi) comes json format (which properly escapes things like '"' or '\''; but web-server unexpectedly interprets html-commands (compare it to "...<blink>..." ;). -> Now rewriting ", >, <, & and ' ' to " < > & - fix for "null"-position (aprs standard; our default on full reset): - was not sent if compressed position was configured - was faulty if uncompressed position was configured - documented notation 0000.00N 00000.00W in web config tooltip. - WIFI: Another approach to fix the problem that WIFI-encryption in mode SelfAP is not honored. Tried string-COPY of String(ap_password)); did not really help. Special thanks to Tomasz SP2ATJ for help (our long debug sessions) and testing: the AXP2101 code, his helpful location ...<..>...., and the inspiration for the battery load. About the new power chip, see commit |
|
Thomas Osterried | 02dedd3517 |
Now with axp1201 support (T-BEAM V1.2)
- Support for T-BEAM V1.2 (axp1201 power chip), T-BEAM V1.1 and V.0 used the axp192. Unfortunately, this new chip is not able to read current load. In the case of telemetry, we do not drop the current readings (but set it to 0). This notation may change in future. - Feature for needed in SP: enable TX on main and secondary frequency as user. (new commit, had a bug) Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 5a1a6d7d5a |
Now with axp1201 support (T-BEAM V1.2)
- Support for T-BEAM V1.2 (axp1201 power chip), T-BEAM V1.1 and V.0 used the axp192. Unfortunately, this new chip is not able to read current load. In the case of telemetry, we do not drop the current readings (but set it to 0). This notation may change in future. - Feature for needed in SP: enable TX on main and secondary frequency as user. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Luceoria |
4a5a8251f3
|
Allow empty SSID | |
Thomas Osterried | d833835e16 |
Fixes and improvements:
- platform.ini: changed env:xxx-1.0 to xxx-1_0, because latest platformio complains about the dot. - Optional: send beacon as object This is recommended if you like an aps icon like L, while using your normal ssid like DL9SAU-12 You can set it in the webinterface, of by compile time in platform.ini - if you really insist in adding SSID -L4 to your callsign, your RF TX will be disabled. You can connect with that call to to aprs-is. - renamed function name compute_locator() to locator_to_lat_lon(), because it's more clear - GPS accuracy: GPS becomes inaccurate if you move very slow or halt. These jumps may have a distance of more than 100m. If we take hdop and visible satellites into acount, the situation improves significant. A measured height needs even more sats and better vdop. Beacons are also triggered by course change. Speed is not a good indicator, because speed is computed by location change. And if you jump 200m in between 5s, then you speed is interpreted as 144km/h. This leads to wrong assumptions about course change. As far as we know, our changes have no impact to the quality of the positions and the course change detection for smart-beaconing. hdop and sat values for exacter location, course, speed, and altitude have been testet by experiment. If you like, you may find better values. After this commit, we'll test extensively. Then it will become a release dedicated to HAMRADIO 2023 ;) Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | a00555f9cc |
- fix: global variable lastTX (used for smart beaconing) was set by loraSend().
If you send telemetry, this also goes through loraSend. If you reach long smart beaconing interval (you move slow) and you send telemety in a shorter interval, the smart beacon was not sent. -> Moved lastTX to sendPacket(). - lora_tx_enabled check: added to manual beacon and smart beaconing; it is also checked as a last resort in loraSend, but it's more clear to not call loraSend in that case. - prepareAPSFrame: do not remember current position anymore; it made gps-hoping even worse. I have a better approach in the queue, but I like to add this in a separate commit (for easier being able to roll-back, if it does not work as expected) Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 52096d7a45 |
bug fixes, features, much work on telemetry
Last commit: fix aprs message call length (had introduced a new bug) Log of todays commits: - bugfixes - on reset and read from preferences.cfg file, configured lat/lon have been ignored. - fix for compressed position with ambiguity > 0 - right after boot, do not wait for a precise position. this avoids a jump to the configured fixed position, which may be very far away. The code will become even nicer in a next release (I'm currently testing with hdop.hdop(), which will have changes of the decision-making of storing a current location); so the use of no_gps_position_since_boot will become nice. - display: - show P= instead of Batt= if powered from USB - "Up " instead of " Up " for uptime if no system time is available - display " LoRa-TX: dis" instead of " never TX" - display " GPS: no fix " instead of " no GPS fix" Why?: "WiFi-Cli no GPS fix" is irritating (no WiFi-Client but GPS fix? No, it was WiFo mode Client, and GPS without fix). - show P: instead tof Batt: on boot - show axp temperature on TTGO - InpVolts vs BattVolts: Hardware without AXP chip (all except T-BEAM TTGO) have no idea of battery voltage. -> Changed Display and Telemetry vor this: InpVolts instead of VattVolts. - system time from GPS: - Added check if function calls are successful - changed nasty code with type errors and misleading variable names - etc.. - manual beacon (button pressed): added next_fixed_beacon = ... - Telemetry - removed dependency of define KISS_PROTOCOL - the AXP chip of the T-BEAM could measure temperature! Cewl.. But we already have all 5 telemetry-positions in use. -> If we have no battery on boot, we have 3 fields free (Batt V, Current in ant out). If we have no usb on battery-boot connected, we have one field free for the temperature. Temperature is measured in steps of 0.25 degrees C. - The new temperature field as well as the "InputVolts vs BatteryVolts values" for the different devices needet a re-mix of the positions in the telemetry frame. I also decided "AC V" and "AC C" to "P V" and "P C". Trackers are powered on DC, not AC ;) For various reasons, we add temperature to the 5'th field. "B Out" was irritating: what, Volt, Current, Light? It's now BCout. - Changed equations for Volt. The problem with the old method was, that if you have 0 V (i.E. no battery attached), it was interpreted by the += 3000 level -> 3V. Unfortunately, the APRS spec does not define an encoding if i.E. a sensor is not available. ",," would be nice. But the field is defined exactly as ",nmo," with n, m and o as digit. - We had two cases for // DO NOT ENABLE THIS UNTIL YOU READ AND UNDERSTOOD THE IMPACT DESCRIBED ABOVE and people have overseen the second case. Changed the concept (one boolean variable). - Searched more than week why often EQNS are sent (while PARM, etc.. was expected). Our local state variable (type static) sometimes, but not always, was set to 0 on re-entering the function block. -> either a compiler problem, or might be a buffer overflow corrupts the stack? After I fixed this, the same happeneed with the new local static variable static const boolan may_add_temperature = ..., which changed it's assigned value during runtime. - taskWebserver: made status messages more consistent. - watchdog patches from hb9xar Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 31fb53ca1e |
bug fixes, features, much work on telemetry
- bugfixes - on reset and read from preferences.cfg file, configured lat/lon have been ignored. - fix for compressed position with ambiguity > 0 - right after boot, do not wait for a precise position. this avoids a jump to the configured fixed position, which may be very far away. The code will become even nicer in a next release (I'm currently testing with hdop.hdop(), which will have changes of the decision-making of storing a current location); so the use of no_gps_position_since_boot will become nice. - display: - show P= instead of Batt= if powered from USB - "Up " instead of " Up " for uptime if no system time is available - display " LoRa-TX: dis" instead of " never TX" - display " GPS: no fix " instead of " no GPS fix" Why?: "WiFi-Cli no GPS fix" is irritating (no WiFi-Client but GPS fix? No, it was WiFo mode Client, and GPS without fix). - show P: instead tof Batt: on boot - show axp temperature on TTGO - InpVolts vs BattVolts: Hardware without AXP chip (all except T-BEAM TTGO) have no idea of battery voltage. -> Changed Display and Telemetry vor this: InpVolts instead of VattVolts. - system time from GPS: - Added check if function calls are successful - changed nasty code with type errors and misleading variable names - etc.. - manual beacon (button pressed): added next_fixed_beacon = ... - Telemetry - removed dependency of define KISS_PROTOCOL - the AXP chip of the T-BEAM could measure temperature! Cewl.. But we already have all 5 telemetry-positions in use. -> If we have no battery on boot, we have 3 fields free (Batt V, Current in ant out). If we have no usb on battery-boot connected, we have one field free for the temperature. Temperature is measured in steps of 0.25 degrees C. - The new temperature field as well as the "InputVolts vs BatteryVolts values" for the different devices needet a re-mix of the positions in the telemetry frame. I also decided "AC V" and "AC C" to "P V" and "P C". Trackers are powered on DC, not AC ;) For various reasons, we add temperature to the 5'th field. "B Out" was irritating: what, Volt, Current, Light? It's now BCout. - Changed equations for Volt. The problem with the old method was, that if you have 0 V (i.E. no battery attached), it was interpreted by the += 3000 level -> 3V. Unfortunately, the APRS spec does not define an encoding if i.E. a sensor is not available. ",," would be nice. But the field is defined exactly as ",nmo," with n, m and o as digit. - We had two cases for // DO NOT ENABLE THIS UNTIL YOU READ AND UNDERSTOOD THE IMPACT DESCRIBED ABOVE and people have overseen the second case. Changed the concept (one boolean variable). - Searched more than week why often EQNS are sent (while PARM, etc.. was expected). Our local state variable (type static) sometimes, but not always, was set to 0 on re-entering the function block. -> either a compiler problem, or might be a buffer overflow corrupts the stack? After I fixed this, the same happeneed with the new local static variable static const boolan may_add_temperature = ..., which changed it's assigned value during runtime. - taskWebserver: made status messages more consistent. - watchdog patches from hb9xar Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 8f6a308c50 |
bug fixes, features, much work on telemetry
- bugfixes - on reset and read from preferences.cfg file, configured lat/lon have been ignored. - fix for compressed position with ambiguity > 0 - right after boot, do not wait for a precise position. this avoids a jump to the configured fixed position, which may be very far away. The code will become even nicer in a next release (I'm currently testing with hdop.hdop(), which will have changes of the decision-making of storing a current location); so the use of no_gps_position_since_boot will become nice. - display: - show P= instead of Batt= if powered from USB - "Up " instead of " Up " for uptime if no system time is available - display " LoRa-TX: dis" instead of " never TX" - display " GPS: no fix " instead of " no GPS fix" Why?: "WiFi-Cli no GPS fix" is irritating (no WiFi-Client but GPS fix? No, it was WiFo mode Client, and GPS without fix). - show P: instead tof Batt: on boot - show axp temperature on TTGO - InpVolts vs BattVolts: Hardware without AXP chip (all except T-BEAM TTGO) have no idea of battery voltage. -> Changed Display and Telemetry vor this: InpVolts instead of VattVolts. - system time from GPS: - Added check if function calls are successful - changed nasty code with type errors and misleading variable names - etc.. - manual beacon (button pressed): added next_fixed_beacon = ... - Telemetry - removed dependency of define KISS_PROTOCOL - the AXP chip of the T-BEAM could measure temperature! Cewl.. But we already have all 5 telemetry-positions in use. -> If we have no battery on boot, we have 3 fields free (Batt V, Current in ant out). If we have no usb on battery-boot connected, we have one field free for the temperature. Temperature is measured in steps of 0.25 degrees C. - The new temperature field as well as the "InputVolts vs BatteryVolts values" for the different devices needet a re-mix of the positions in the telemetry frame. I also decided "AC V" and "AC C" to "P V" and "P C". Trackers are powered on DC, not AC ;) For various reasons, we add temperature to the 5'th field. "B Out" was irritating: what, Volt, Current, Light? It's now BCout. - Changed equations for Volt. The problem with the old method was, that if you have 0 V (i.E. no battery attached), it was interpreted by the += 3000 level -> 3V. Unfortunately, the APRS spec does not define an encoding if i.E. a sensor is not available. ",," would be nice. But the field is defined exactly as ",nmo," with n, m and o as digit. - We had two cases for // DO NOT ENABLE THIS UNTIL YOU READ AND UNDERSTOOD THE IMPACT DESCRIBED ABOVE and people have overseen the second case. Changed the concept (one boolean variable). - Searched more than week why often EQNS are sent (while PARM, etc.. was expected). Our local state variable (type static) sometimes, but not always, was set to 0 on re-entering the function block. -> either a compiler problem, or might be a buffer overflow corrupts the stack? After I fixed this, the same happeneed with the new local static variable static const boolan may_add_temperature = ..., which changed it's assigned value during runtime. - taskWebserver: made status messages more consistent. - watchdog patches from hb9xar Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 883c9f84cb |
bug fixes, features, much work on telemetry
- bugfixes - on reset and read from preferences.cfg file, configured lat/lon have been ignored. - fix for compressed position with ambiguity > 0 - right after boot, do not wait for a precise position. this avoids a jump to the configured fixed position, which may be very far away. The code will become even nicer in a next release (I'm currently testing with hdop.hdop(), which will have changes of the decision-making of storing a current location); so the use of no_gps_position_since_boot will become nice. - display: - show P= instead of Batt= if powered from USB - "Up " instead of " Up " for uptime if no system time is available - display " LoRa-TX: dis" instead of " never TX" - display " GPS: no fix " instead of " no GPS fix" Why?: "WiFi-Cli no GPS fix" is irritating (no WiFi-Client but GPS fix? No, it was WiFo mode Client, and GPS without fix). - show P: instead tof Batt: on boot - show axp temperature on TTGO - InpVolts vs BattVolts: Hardware without AXP chip (all except T-BEAM TTGO) have no idea of battery voltage. -> Changed Display and Telemetry vor this: InpVolts instead of VattVolts. - system time from GPS: - Added check if function calls are successful - changed nasty code with type errors and misleading variable names - etc.. - manual beacon (button pressed): added next_fixed_beacon = ... - Telemetry - removed dependency of define KISS_PROTOCOL - the AXP chip of the T-BEAM could measure temperature! Cewl.. But we already have all 5 telemetry-positions in use. -> If we have no battery on boot, we have 3 fields free (Batt V, Current in ant out). If we have no usb on battery-boot connected, we have one field free for the temperature. Temperature is measured in steps of 0.25 degrees C. - The new temperature field as well as the "InputVolts vs BatteryVolts values" for the different devices needet a re-mix of the positions in the telemetry frame. I also decided "AC V" and "AC C" to "P V" and "P C". Trackers are powered on DC, not AC ;) For various reasons, we add temperature to the 5'th field. "B Out" was irritating: what, Volt, Current, Light? It's now BCout. - Changed equations for Volt. The problem with the old method was, that if you have 0 V (i.E. no battery attached), it was interpreted by the += 3000 level -> 3V. Unfortunately, the APRS spec does not define an encoding if i.E. a sensor is not available. ",," would be nice. But the field is defined exactly as ",nmo," with n, m and o as digit. - We had two cases for // DO NOT ENABLE THIS UNTIL YOU READ AND UNDERSTOOD THE IMPACT DESCRIBED ABOVE and people have overseen the second case. Changed the concept (one boolean variable). - Searched more than week why often EQNS are sent (while PARM, etc.. was expected). Our local state variable (type static) sometimes, but not always, was set to 0 on re-entering the function block. -> either a compiler problem, or might be a buffer overflow corrupts the stack? After I fixed this, the same happeneed with the new local static variable static const boolan may_add_temperature = ..., which changed it's assigned value during runtime. - taskWebserver: made status messages more consistent. - watchdog patches from hb9xar Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | c8d7a6c71f |
bug fixes, features, much work on telemetry
- bugfixes - on reset and read from preferences.cfg file, configured lat/lon have been ignored. - fix for compressed position with ambiguity > 0 - right after boot, do not wait for a precise position. this avoids a jump to the configured fixed position, which may be very far away. The code will become even nicer in a next release (I'm currently testing with hdop.hdop(), which will have changes of the decision-making of storing a current location); so the use of no_gps_position_since_boot will become nice. - display: - show P= instead of Batt= if powered from USB - "Up " instead of " Up " for uptime if no system time is available - display " LoRa-TX: dis" instead of " never TX" - display " GPS: no fix " instead of " no GPS fix" Why?: "WiFi-Cli no GPS fix" is irritating (no WiFi-Client but GPS fix? No, it was WiFo mode Client, and GPS without fix). - show P: instett of Batt: on boot - InpVolts vs BattVolts: Hardware without AXP chip (all except T-BEAM TTGO) have no idea of battery voltage. -> Changed Display and Telemetry vor this: InpVolts instead of VattVolts. - system time from GPS: - Added check if function calls are successful - changed nasty code with type errors and misleading variable names - etc.. - manual beacon (button pressed): added next_fixed_beacon = ... - Telemetry - removed dependency of define KISS_PROTOCOL - the AXP chip of the T-BEAM could measure temperature! Cewl.. But we already have all 5 telemetry-positions in use. -> If we have no battery on boot, we have 3 fields free (Batt V, Current in ant out). If we have no usb on battery-boot connected, we have one field free for the temperature. Temperature is measured in steps of 0.25 degrees C. - The new temperature field as well as the "InputVolts vs BatteryVolts values" for the different devices needet a re-mix of the positions in the telemetry frame. I also decided "AC V" and "AC C" to "P V" and "P C". Trackers are powered on DC, not AC ;) For various reasons, we add temperature to the 5'th field. "B Out" was irritating: what, Volt, Current, Light? It's now BCout. - Changed equations for Volt. The problem with the old method was, that if you have 0 V (i.E. no battery attached), it was interpreted by the += 3000 level -> 3V. Unfortunately, the APRS spec does not define an encoding if i.E. a sensor is not available. ",," would be nice. But the field is defined exactly as ",nmo," with n, m and o as digit. - We had two cases for // DO NOT ENABLE THIS UNTIL YOU READ AND UNDERSTOOD THE IMPACT DESCRIBED ABOVE and people have overseen the second case. Changed the concept (one boolean variable). - Searched more than week why often EQNS are sent (while PARM, etc.. was expected). Our local state variable (type static) sometimes, but not always, was set to 0 on re-entering the function block. -> either a compiler problem, or might be a buffer overflow corrupts the stack? After I fixed this, the same happeneed with the new local static variable static const boolan may_add_temperature = ..., which changed it's assigned value during runtime. - taskWebserver: made status messages more consistent. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 5bcb7ef0c6 |
bug fixes, features, much work on telemetry
- bugfix: on reset and read from preferences.cfg file, configured lat/lon have been ignored. - right after boot, do not wait for a precise position. this avoids a jump to the configured fixed position, which may be very far away. The code will become even nicer in a next release (I'm currently testing with hdop.hdop(), which will have changes of the decision-making of storing a current location); so the use of no_gps_position_since_boot will become nice. - display: - show P= instead of Batt= if powered from USB - "Up " instead of " Up " for uptime if no system time is available - display " LoRa-TX: dis" instead of " never TX" - display " GPS: no fix " instead of " no GPS fix" Why?: "WiFi-Cli no GPS fix" is irritating (no WiFi-Client but GPS fix? No, it was WiFo mode Client, and GPS without fix). - show P: instett of Batt: on boot - InpVolts vs BattVolts: Hardware without AXP chip (all except T-BEAM TTGO) have no idea of battery voltage. -> Changed Display and Telemetry vor this: InpVolts instead of VattVolts. - system time from GPS: - Added check if function calls are successful - changed nasty code with type errors and misleading variable names - etc.. - manual beacon (button pressed): added next_fixed_beacon = ... - Telemetry - removed dependency of define KISS_PROTOCOL - the AXP chip of the T-BEAM could measure temperature! Cewl.. But we already have all 5 telemetry-positions in use. -> If we have no battery on boot, we have 3 fields free (Batt V, Current in ant out). If we have no usb on battery-boot connected, we have one field free for the temperature. Temperature is measured in steps of 0.25 degrees C. - The new temperature field as well as the "InputVolts vs BatteryVolts values" for the different devices needet a re-mix of the positions in the telemetry frame. I also decided "AC V" and "AC C" to "P V" and "P C". Trackers are powered on DC, not AC ;) For various reasons, we add temperature to the 5'th field. "B Out" was irritating: what, Volt, Current, Light? It's now BCout. - Changed equations for Volt. The problem with the old method was, that if you have 0 V (i.E. no battery attached), it was interpreted by the += 3000 level -> 3V. Unfortunately, the APRS spec does not define an encoding if i.E. a sensor is not available. ",," would be nice. But the field is defined exactly as ",nmo," with n, m and o as digit. - We had two cases for // DO NOT ENABLE THIS UNTIL YOU READ AND UNDERSTOOD THE IMPACT DESCRIBED ABOVE and people have overseen the second case. Changed the concept (one boolean variable). - Searched more than week why often EQNS are sent (while PARM, etc.. was expected). Our local state variable (type static) sometimes, but not always, was set to 0 on re-entering the function block. -> either a compiler problem, or might be a buffer overflow corrupts the stack? After I fixed this, the same happeneed with the new local static variable static const boolan may_add_temperature = ..., which changed it's assigned value during runtime. - taskWebserver: made status messages more consistent. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | aa854462d4 |
Major changes. Hard work on this new releae.
Improvements
- Even more intelligent behavior in "Allow failback Mode AP"
- Webserver: Current GPS location can be stored as current lat/lon;
And fixed a not-so-nice down-rounding from i.e.
53.2100N to 53.2099N
- Webserver: better input handling for ap password, remoteAP ssid and
password, syslog and ntp server
- Webserver: fixed typos in tooltip texts, and improved documentation,
especially for the new features
- Position ambiguity and higher precision
You can choose now between
- compressed position (also when fixed position).
- uncompressed aprs position
- uncompressed aprs position with higher precision (DAO W and w)
Improvement for unknown position: encode it according to aprs spec
- OLED: more variants to display lat/lon positions.
Displayed lat/lon resolution depends on setting and if you move,
and current gps hdop.
You can also configure if maidenhead grid locator is shown (always,
never, in intervals). Locator could be shown as RR99XX, RR99XX99
or RR99XX99xx - you can choose which variant you like.
- Oled Lines: one-liners now cut at end of display-length;
except for line2 (if line3-5 are empty).
Oled display.display() is called only if display is on.
Improvement for fillDisplayLines3to5 (may be forced)
- Serial output on boot: Warn for unser preference variables only once,
and set them accordingly
- Digipeating / Gate handling. Don't send 3rd-party packets
back to aprsis. Digipeat telemetry only do secondary qrg.
- aprs-is:
- 3rd-party traffic: it's not seldom that igates use
lowercase calls. Don't tread this as (minor) error anymore.
- aprs-is: improved filters according to aprsis spec
- digipeating:
- if we are a WIDE1 (= fill-in) digi and if a packet is in
lora_TXBUF_for_digipeating and we hear a repeated one with same
source-address and content, we clear it from queue.
Improved viscous-delay.
For development (compile time): different debug-verbose levels
Fixes
- aprsLatPreset (etc..) variables are now changed from their temporary
variable names at once. Reading from preferences, a separate
variable is filled. This mitigates a smp problem between webserver
and main threads
- aprsis login messages missed word "vers " placed before the version string
- Small fix for aprsis 3rd party traffic encoding according to the spec.
- Some numbers with decimals are now shown complete (instead of cut'ed
to two decimals (default of String(floatVariable)).
- fixes for some buffer dimensions; detected two buffer overflow conditions
- Telemetry: assurance that values > 255 are ceiled and not start from 0 again
(An analoge value must not exceet 255)
This dedicated to the three-country-edge SysOp meeting
in Engen 2023-02-11 ;)
LoRa was one topic..
And after my commit
|
|
Thomas Osterried | 38387dc189 |
Major changes. Hard work on this new releae.
Improvements - Even more intelligent behavior in "Allow failback Mode AP" - Webserver: Current GPS location can be stored as current lat/lon; And fixed a not-so-nice down-rounding from i.e. 53.2100N to 53.2099N - Webserver: better input handling for ap password, remoteAP ssid and password, syslog and ntp server - Webserver: fixed typos in tooltip texts, and improved documentation, especially for the new features - Position ambiguity and higher precision You can choose now between - compressed position (also when fixed position). - uncompressed aprs position - uncompressed aprs position with higher precision (DAO W and w) Improvement for unknown position: encode it according to aprs spec - OLED: more variants to display lat/lon positions. Displayed lat/lon resolution depends on setting and if you move, and current gps hdop. You can also configure if maidenhead grid locator is shown (always, never, in intervals). Locator could be shown as RR99XX, RR99XX99 or RR99XX99xx - you can choose which variant you like. - Oled Lines: one-liners now cut at end of display-length; except for line2 (if line3-5 are empty). Oled display.display() is called only if display is on. Improvement for fillDisplayLines3to5 (may be forced) - Serial output on boot: Warn for unser preference variables only once, and set them accordingly - Digipeating / Gate handling. Don't send 3rd-party packets back to aprsis. Digipeat telemetry only do secondary qrg. - aprs-is: - 3rd-party traffic: it's not seldom that igates use lowercase calls. Don't tread this as (minor) error anymore. - aprs-is: improved filters according to aprsis spec - digipeating: - if we are a WIDE1 (= fill-in) digi and if a packet is in lora_TXBUF_for_digipeating and we hear a repeated one with same source-address and content, we clear it from queue. Improved viscous-delay. For development (compile time): different debug-verbose levels Fixes - aprsLatPreset (etc..) variables are now changed from their temporary variable names at once. Reading from preferences, a separate variable is filled. This mitigates a smp problem between webserver and main threads - aprsis login messages missed word "vers " placed before the version string - Small fix for aprsis 3rd party traffic encoding according to the spec. - Some numbers with decimals are now shown complete (instead of cut'ed to two decimals (default of String(floatVariable)). - fixes for some buffer dimensions; detected two buffer overflow conditions - Telemetry: assurance that values > 255 are ceiled and not start from 0 again (An analoge value must not exceet 255) This dedicated to the three-country-edge SysOp meeting in Engen 2023-02-11 ;) LoRa was one topic.. Signed-off-by: DL3EL <dl3el@darc.de> Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 7600d5bc6e |
fix: wrong datatype
Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | cb78bf522b |
fix for commit 521ed0f from 2023-02-01 "Webserver start issue fixed for LORA32_21 devices."
I was inacurate in applying the change Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | bc8997d113 |
tel_allow_tx_on_rf: fixed a mistake (compared frequency with speed ;)
Tnx to Gunnar SM3SGP Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | 521ed0f69c |
Webserver start issue fixed for LORA32_21 devices.
Logical errors about assumptions ;) Tnx to Michal SQ2MO. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | d98e08452c |
Small bugfix for a change from yesterday.
Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | d926aab8c5 |
Bugfix in check for aprs call
..for my last patch a few hours ago. Signed-off-by: Thomas Osterried <dl9sau@darc.de> |
|
Thomas Osterried | b4fcb30f58 |
telemetry on rf is bad on slow lora.
But since we got several requests, here's the approach: - only on secondary qrg - only in mode >= 1200 (comparable to 1k2 AFSK APRS on 2m) - no digipeater in the path Signed-off-by: Thomas Osterried <dl9sau@darc.de> |