* RX task update rate to 22Hz, to improve 25Hz link stability
* modified Rx code
* add LQ to debug
* use max of frameAge or FrameDelta
* Require a dropouit of 200ms, not 100ms, before RXLOSS
* remove FrameAge, use 150ms timeout 50ms checks
* fix tests and tidy up the comments
* Handle NULL input as before, log frame time
* possible solutions to review comment about names
* Remove rxFrameTimeUs
- prepare for direct use of lastRcFrameTimeUs
- refactor rx_spi callback
* remove global currentRxRateHz
* simplify updateRcRefreshRate
* re-name to recheck interval, return frame time debug
* Calculate RxRate only once
* use rxReceivingSignal for consistency
* use signalReceived not rxDataReceived for consistency
* suggestions from review PL
* move defines, thanks K
* fixes from review, thanks MH
* review changes, undo task interval change
rename bool rxIsReceivingSignal to isRxReceivingSignal
thanks Steve for resolving that tasks changes are not needed
thanks PL for your feedback also
---------
Co-authored-by: Petr Ledvina <ledvinap@hp124.ekotip.cz>
* unittest - fix duplicate symbols in unittests
Some symbols were declared again
With clang -fcommon, this resulted in allocatin in common segment and
prevented error.
(tentative definitions in C standard).
-fno-common (now default in clang https://reviews.llvm.org/D75056)
causes compilation errors.
Declarations are now marked extern.
* unittest - fix scheduler array size for unittest
Unittest needs extra space for canary
* unittest - fix missing include (needed for clang-16)
* unittest - remove unused varibles
-Werror in clang 15+
* unittest - increase max supported version to clang-16
* unittest - conditionaly disable useless output in unittests
* unittest - C++11 version of STATIC_ASSERT
* unittest - fix initializers for g++
- Change order of initializers to match order in struct
- make valueTable initializion consistent (necessary for C++)
- adapt controlRateConfig
* unittest - adapt scheduler_unitest for g++
scheduler_stubs.c is necessary to initialize task_attributes
* unittest - fix ledstrip unittest
only part of config was zeroed
* unittest - fix g++ warnings
- memcpy when length is known and \0 is not copied
- isError is local stub, no extern
- serialReadStub - don't memcpy into object, use initializer
* cli - cleanup cliGetSettingIndex
- compare only passed bytes (old version may read data after
name)
- input string is const
* unittest - fix ld warning from PG sections
move pg data sections after .rodata. Sections were marked as writable
due to relocation (!?). That marked .text output section
(containing .pg_data) as writable too and linker correctly complained
that executable section is writable.
* unittest - cleanup
* unittest - adapt after code cleanup, add gcc
- remove clang flags that are not necessary now (tested on clang-11
and clang-16)
- add support for gcc ( make test CC=gcc CXX=g++ )
- add suport for different optimization level (detects some code
problems) : make test OPTIMIZE=-O2
- fallback to clang on Linux too
* fixup! unittest - conditionaly disable useless output in unittests
* WIP
* start of implement m10 code
* Fetch MON-VER from unit to check for unit version
* test nav5 m10 command
* missing empty lines
* offload detect to config file
* copy from hasli and organization
* fix platform.h include
* fix cli_unittest gps include
* fix cli_unittest for gps calls
* guard ublox version in gpsData
* print human readable hw version
* add utc_standard param and transfer with nav5 set
add nav5x message for autonomous mode for m10
* fix typo
* revert order structure, remove functions and reduce flash size
* revert order structure, remove functions and reduce flash size
* fix gps init and navx5 message
* generalized nav5 message
* remove unguarded debug
* change ubx version detection, baud rate negotiation fix and save found baud
* revert indentation
* revert indentation and refactorings
* the new code works with faster baud rate changes
* remove unguarded debug statement
* fix cli commands, major space reduce finished, removed extensions for now
* ubx version checks, add valset for M10
* beta of valset, change suggestions from ledvinap and macgivergim
* valset helper function and combine set nav rate valsets
* more valset refactoring
* remove big array and replace with macro
* remove assert, as it can stop bf completely
* refactoring to offsetof
* making reconnect more resilient, reorganize rate setup, so it doesnt get missed on init
* improved lost communcation detection, dont rely on ACK/NACK anymore
* paket rate debug
* adding debug mode, fixing major flight mode bug
* revert fake flight "isConfiguratorConnected"
* fixed proto detection, fixed reconfigure on too low updaterate
* valset doesnt always send ACK, so we dont wait for it
* size optimization, debug mode rename, minor fixes
* implemented some requested changes
* changed wait delay millisecond based
* fixes from ctzsnooze and zzXyz
* timer fixes
* CamelCase new settings names
* indent
* Fix failure to enter flight model on GPS Fix
* remove old commented out debugs
* simplify timeouts
* Clarify skip_acc and remove development valset code
* accept PL's advice to remove >> (8 * 0
* Simplify package counter, remove reconfiguration based on packet count
* fix error in package count introduced in previous commit
* Fix delay detecting Configurator, ANA disable (for another PR)
* address payload comments and fix logical error
* indentation edits
* delete old enum
* log gps and firmware nav interval times
* fix payload size, inc Rx buffer to 256, ifDef for sw_proto
* remove token parsing (Petr suggestions)
* fixes from reviews
* Basic NMEA improvements
* Address comments from karate
* only check platform version - thanks zzyzx
* Fix for too many sats problem - thanks zzyzx
* tidy up comments, ifdef some ublox definitions
* Use Nav packet intervals, NMEA and UBX, for time delta
* Resolve comments and flatten conditionals
* editorial change
* single function for gpsSol.navIntervalMs
* adam-ah suggestion for payload optimisation
* ACK/NAK & polled message timer fixes
* Revert timer fixes - unexpected side effects
* Revert adam-ah suggestion for payload optimisation"
This reverts commit 42fc8c04fdbc436c9ef196b88f0764ffcbb9239f.
Broke the display of sat info when more than 32 sats in view
* implement a number of comments
* Fast task rate on new data, don't spam at the start
thanks adam-ah
* include PDOP for M10 via NAV-PVT
* Address some of PL's recent comments
* don't recalculate millis so many times
* tidy up baudrate connect code
* Split receiving of GPS bytes from processing by adding GPS_STATE_PROCESS_DATA
* Split receiving of GPS bytes from processing by adding GPS_STATE_PROCESS_DATA
* Preserve state whilst processing packets
* Set gpsData.state directly as gpsSetState() clobbers gpsData.state_position
* Restore original read time check
* Schedule gpsUpdate() to run immediately again when a packet is received for processing
* add debugs to display scheduler valuesl
* simpler scheduler solution
* minor debug change
* FIxes: M10 connection, pDop, NMEA disable; thanks zzyxz
NB: Breaks unit's neat reconnection methods
M8 need a lot of settling time before using the serial port
* ubx parse length sanity + cleanup + dashboard conditional compiles
* Address recent comments from PL
---------
Co-authored-by: ctzsnooze <chris.thompson@sydney.edu.au>
Co-authored-by: ZzyzxTek <zzyzx@zzyzxtek.com>
Co-authored-by: Steve Evans <Steve@SCEvans.com>
* Add GPS status line to cli status output: connected status, UART + serial port baud + configured baud, configured status.
* Fixed unit test link fail.
* Really fixed unit test link fail (I hope).
* Really fixed unit test link fail (no really this time).
* Updated to address code reviews.
* Updated to address code reviews.
* Updated to address code reviews.
* Refactor Feedforward Angle and RC Smoothing
* update rc_smoothing at regular intervals
* add Earth Ref to OSD, update pid and rate PG
* Initialise filters correctly
* refactoring to improve performance
* Save 24 cycles in Horizon calculations, other optimisations
At a cost of 40 bytes
* save 25 cycles and 330 bytes in rc_smoothing
* feedforward max rate improvements
* typo fix
* Karatebrot's review suggestions part one
* Karatebrot's excellent suggestions part 2
* more efficient if we calculate inverse at init time
Co-Authored-By: Jan Post <post@stud.tu-darmstadt.de>
* Horizon delay, to ease it in when returning sticks to centre
* fix unit tests after horizon changes
Co-Authored-By: 4712 <4712@users.noreply.github.com>
* horizon_delay_ms, default 500
* fix unit test for feedforward from setpointDelta
* Final optimisations - thanks @Karatebrot for your advice
* increase horizon level strength default to 75 now we have the delay
* restore Makefile value which allowed local make test on mac
---------
Co-authored-by: Jan Post <post@stud.tu-darmstadt.de>
Co-authored-by: 4712 <4712@users.noreply.github.com>
Each time the `tasks` CLI command is executed the task stats are reset to allow the max and average stats to represent the data since the last `tasks` command. However the task check function stats were not being reset so the "max" would represent the maximum value since boot.
Isolates and prevents changes to runtime active features. Any changes to enabled features are deferred until after a save/reboot. Simplifies the previous logic.
Prevents potential failures when features are changed at runtime but the underlying code is not capabile of dynamic reconfiguration.
If the MCU also supports PERSISTENT ram (not erased on a warm boot) it
allows testing of config changes without wearing out your flash.
e.g.
linker script
-------------
comment out __config_start/__config_end
target.c
--------
PERSISTENT uint8_t eepromData[EEPROM_SIZE]; // persistent, so it
survives warm boots.
target.h
--------
extern uint8_t eepromData[EEPROM_SIZE];
SITL actually keeps the EEPROM in a FILE, loaded into RAM using
alternate FLASH_* implementation.
Remove the giant `select` block that contained all the code to generate the elements and transition them to individual functions called only when the element is active. Simplifies the code and results in a performance improvement as it's not necessary to fall through the large `select` statement for every element that will be drawn. The individual functions and the element to function mapping are moved to a new `osd_elements.c` file.
Moved the OSD related code files to a new `osd/` directory.
Also pre-analyze the active elements and only process those that are active. This also saves processing as it's not necessary to loop through all 50 or so elements when only a couple are active.
Various other cleanup and removal of stale or unnecessary code.
In the default configuration the element drawing phase of the OSD task is reduced from ~51us to ~35us - resulting in about a 30% decrease in processing time.
Analyze the rc modes activation conditions and only process configured entries. Previously the entire possible list was processed even though typically only a handful are configured.
Reduces the RX task processing time by about 25% (~44us to ~33us) with an average setup of 3 modes configured (F405, SBUS). Processing time savings will diminish as the user configures more modes. But typically far fewer than the maximum of 20 will be configured.
Previously the logic would process all possible ranges defined by MAX_ADJUSTMENT_RANGE_COUNT even if some (or even all) ranges were not configured. This change first builds a list of configured ranges and only processes thos entries.
Reduces CPU load by skipping unnecessary processing and minimizes the impact of increasing the number of available ranges.
* Support DTR in serial passthrough mode to enable programming of Arduino
based devices such as MinimOSD.
Use 'serialpassthrough 5 57600 rxtx 56' and then use Ardino to program MinimOSD
Use 'serialpassthrough 5 115200' and then use MWOSD configurator to setup
* Fix comment for CDC_SetCtrlLineStateCb routine
* Handle F7 CDC interface
* Use strToPin() to allow easy port/pin specification
* Fix use of CDC_SetCtrlLineStateCb for all processor types
* Only set baud when specified
* Fix unit tests for cli
* Only register callback if needed
* Fix white space
* Provide implementation of IOConfigGPIO in SITL
* Update serialpassthrough help text
* DTR handling through serial drivers
* Fix F3, F7 and SITL builds
* If serialpassthrough command specifies baud rate of 0, set baud rate over USB. MWOSD configurator can now access config and reflash MinimOSD without rebooting and changing baud rate.
* Fix F3 build
* Fix failing unit tests
* Use resources to declare DTR pin assignment
* Don't assert DTR during normal operation as MW_OSD doesn't like it
* MW_OSD must be built with MAX_SOFTRESET defined in order to support DTR resets
* Minimise changes after dropping DTR pin param from serialpassthrough cmd
* Remove DTR pin param from serialpassthrough cmd
* Treat ioDtrTag as boolean in conditional statements
* Tidy buffer check
* Check buffer size in CDC_Itf_Control
* Fix unit test
* Add documentation for DTR
* Add note on MAX_SOFTRESET to documentation
* Remove superfluous function definitions
* Fix tabs
* Fix tabs
* Removed superfluous entried from vtable
* Backout whitespace changes unrelated to this PR
* Pass true/false to IOWrite()
* Fix line coding packing
* Add LINE_CODING structure defintion
* Revise serial documentation
* Prevent tx buffer overflow in serialPassthrough()
* Revert change unrelated to PR
* Review feedback from ledvinap
* Fix unit test
* Use PINIO to drive DTR
* Fix unit test
* Remove change unrelated to PR
* Fix SITL build
* Use shifted bits for mask definition
* Fix serialpassthrough documentation
* Only compile PINIO functionality if USE_PINIO defined
* IOConfigGPIO not needed
* Move cbCtrlLine callback to cli.c
* serialPassthrough params changed
* Check packed structure size
* Fix unit test
* Tidy up baud rate handling