* Enable QSPI flash chip drivers on NUCLEOH743 for some CI visibility.
* Rework QSPI flash detection.
* Supports chips that are in QSPI mode by default (factory).
* Supports chips that are in QSPI mode due to configuration (e.g. Quad
Enable in Non-Volatile on W25Q128FV)
* Supports chips that need 8 dummy bytes (e.g. W25Q128JV) and ones that
don't (e.g. W25N01G)
Adds variations in GPS coordinate OSD element display:
1. Fractional degrees with 7 digits (default) - 000.0000000
2. Fractional degrees with 4 digits - 000.0000
3. Degrees, minutes, seconds - 000^00'00.0"E
4. Open Location Code (sometimed called Google Plus Code) - 23ABC4R8+M37
Uses Open Location Code library from:
https://github.com/google/open-location-code
Added support for `STATE(GPS_FIX_EVER)` to differentiate from having a fix now (`STATE(GPS_FIX)`) vs. ever having a fix.
Logic change to only display coordinates from the GPS module once a fix has been initially established. This prevents displaying interim coordinates supplied by the GPS while the fix is still being establised as these coordinates can be inaccurate by hundreds of miles. Once a fix is established initially then the coordinates will continue to be displayed even if the fix is lost or degrades in quality.
Add logic to "blink" the coordinates if the 3D fix is lost after initially being established. Alerts the user that the coordinate display may be inaccurate or no longer being updated. We want to keep the coordinates displayed to aid recovery if the user loses the fix (like crashing upside down).
Replace GPS defines `LAT` and `LON` used throughout the code with the enumeration:
```
typedef enum {
GPS_LATITUDE,
GPS_LONGITUDE
} gpsCoordinateType_e;
```
The Open Location Code option is bounded with `USE_GPS_PLUS_CODE` to allow it to be excluded if needed for targets with limited flash space. It currently fits for F411 but we may have to remove it in the future.
Provides a properly implemented way for MSP query type OSD implementations (like DJI) to display OSD warnings. Separates the warnings generation from the OSD task and shares common code to make the text available for the OSD and/or via MSP. Eliminates the need to implement hacks and workarounds like using the `CRAFT_NAME` field to display warnings. Since the warnings logic is now separate, the OSD task does not need to be running unlike other hacks.
Adds the `MSP2_GET_OSD_WARNINGS` message formatted as follows:
```
byte description
0 Display attributes including blink (see displayPortAttr_e in drivers/display.h)
1 Length of warning text
2-n Warning text characters
```
First pass at GHST driver including low-latency control, and basic telemetry.
Fix Ghost channel scaling
Use ghstChannelData instead of rxRuntimeState->channelData
Integrate PR feedback
Primarily de-tab and a few cosmetic changes.
Keep Travis CI happy
Removed unused function
Rework ghost driver to reduce time in ISR, move processing
As requested in PR review.
Fixed issue in telemetry driver, mAh consumed is transmitted as units of 10mAh, not 1mAh.
Resolve Packet Collision Issue with GHST
Send telemetry packets only within a well defined time slot after an incoming Rx packet.
Remove unnecessary comment
rxRefreshRate doesn't need to be dynamic.
Ghost - Remove special case from scheduler
No need to reschedule telemetry for the Ghost protocol.
The MSP override mode allows for use of MSP togehter with
another RX feature like SBUS. When enabling the MSP override
mode all channels from the `msp_override_channels` bitmask
will be overwritten by data comming from MSP instead of the
main RX.
The following driver files only contain initialization and configuration fuctions and were erroneously set up for speed-optimization. Moving them to size-optimization saves significant space. They all share common runtime functions contained in `drivers/accgyro/accgyro_mpu.c` which is correctly speed-optimized.
```
drivers/accgyro/accgyro_mpu6050.c
drivers/accgyro/accgyro_mpu6500.c
drivers/accgyro/accgyro_spi_mpu6000.c
drivers/accgyro/accgyro_spi_mpu6500.c
drivers/accgyro/accgyro_spi_mpu9250.c
drivers/accgyro/accgyro_spi_icm20689.c
```
Also added explicit `#ifdef USE_` around the code of some of the drivers missing it. Doesn't result in any space savings as the compiler optimizes out the unused functions. But better in the long-term as it will flag any cases where the code might be called without proper bounding.
Saves 10704 bytes on STM32F7X2.
- Add displayWriteFontCharacter() for font writing, removing all max7456
specific code.
- Add displayIsReady() for asynchronous display initialization
- Add displayBeginTransaction()/displayCommitTransaction() for display
transactions, which allow performing complex drawing operations without
flickering
- Add displayGetCanvas(), which retrieves the canvas associated with a
display (if it has it)
- Add canvas implementation for pixel based access for a display
- Add FrSkyOSD driver and displayPort driver
- Enable FrSkyOSD driver for targets with flash > 256
- Rename max7456_symbols.h to osd_symbols.h
Instead of having individual menus for RTC6705, SmartAudio, and Tramp, Now there is a single VTX menu that detects the type of active device and redirects to the appropriate protocol menu.
Reduces confusion and chances of erroneously using the wrong VTX menu.
Fixes a problem where the Tramp menu could be used to change band/channel/power even though the VTX was a SmartAudio device.
If the VTX is not configured or not communicating, a more informative message will be presented rather than a partially populated protocol menu. For example:
```
VTX NOT RESPONDING
OR NOT CONFIGURED
> BACK
```
Extends the CMS menu capabilities by adding an optional `redirectCheck` function that can conditionally return a menu that should be redirected to instead of the current menu. This redirect happens before any processing happens for the original menu. Adds flexibility to make the CMS menus have a more dynamic aspect.
all pins are initialized to pullup inputs per default. With resource PULLDOWN 1 PIN it is
possible to reconfigure the pin so it is a PULLDOWN input.
With this it's possible to prevent certain errors on some boards that have multiple pins connected
with an inverter and the pullup flows back via the inverter and pulls other pins low (see #7849)
Moved vtxtable frequency mode implementation into `vtx_common.c`.
This makes the implementation available for all vtx types and allows
for some code deduplication (see point below)
Removed band and channel tracking from tramp and rtc6705.
The hardware underlying both only support frequency mode and
the tracking is now done in `vtx_common.c` using the new factory flag.
Deleted vtxStringXXX. to continue supporting builds without
`USE_VTX_TABLE`, new infrastructure was created in
`drivers/vtx_table.c`, which loads fixed tables into vtxTableXXX
when built witout `USE_VTX_TABLE`. Individual vtx implementations no
longer need to load any band/channel tables. They only need to load
their individual power tables when built without `USE_VTX_TABLE`.
Additionally this allows for the next point:
Fully integrated vtxTableXXX and removed the old and no longer needed
indirection of frequency and power tables in `vtxDevice_t`.
Removed VTX_SETTINGS_* constants from `vtx_common.h` and replaced them
with the vtxtable equivalent.
rtc6705 implementation now uses power values from vtxtable instead of
using indices directly. It also stops using index 0. This makes it
consistent with other vtx implementations and is more user configurable.
It also cleans up `telemetry\srxl.c` which had to have a special case for rtc6705.
Finally, frequency entries in the vtxtable can now be marked as empty
by setting their frequency to 0. Betaflight will never allow a blocked
channel to be selected. This is useful for vtxtable index mode
(FACTORY flag set) where manufacturer-defined bands can be truncated
to ensure compliance with local laws and regulations.
- Initial
- Adjust load address of EXST firmware.
- Add helper script to pad an EXST binary to the expected size.
Padded firmware currently required due to a bug in the flash/dfu code
which causes anything less than a flash page size to be truncated when
uploading new firmware via the bootloader DFU.
- Minor linker script cleanups.
- STM32H7.mk change hardcoded TARGET_FLASH (384) to FIRMWARE_SIZE
- Delete unused configuration section entries from linker
scripts.
- Increase EXST firmware size to 448K.
It turns out 384K wasn't enough for a feature-complete firmware.
- Update pad-exst.sh to use 448K by default.
- Move the EXST file generation to the makefile.
[EXST] Embed firmware hash in ELF
- Add debug marker at end of CODE_RAM section.
It was found when transferring firmware to the H7 RAM via a BMP probe
using the 'gdb load' command, that the last few bytes were not
transferred, this debug marker is present to ensure all needed parts of
the firmware are present.
Example memory view of corrupted bytes at end of transfer:
0x2407DFAE DEB90000 DEB9DEB9 DEB9DEB9 DEB9DEB9 ..¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ
0x2407DFBE 000000B9 00000000 00000000 00000000 ¹...............
should be:
0x2407DFAE DEB9DEB9 DEB9DEB9 DEB9DEB9 DEB9DEB9 ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ¹Þ
0x2407DFBE 00000000 00000000 00000000 00000000 ................
- Remove debug marker in EXST firmware.
STM32H750_EXST - Provide space for empty hash.
* Bootloader will run firmware if hash is empty, without re-verifying
RAM content against hash.
* CODE_RAM always shows as 100% usage.
STM32H750_EXST - Use a specific ELF section for a hash.
Two benefits:
1) CODE_RAM no-longer shows 100% full, since it is no-longer
padded/filled.
2) Prepares the code so that objcopy can be used to inject the hash
into the ELF.
STM32H750_EXST - Patch MD5 into ELF.
Process is now as follows.
* Binary generated (via make target dependency) so there is something to
hash.
* Binary copied (and padded).
* MD5 Hash computed.
* xxd patch file generated from hash.
* xxd hash patch applied to copy of binary at correct address.
* elf .exst_hash section dumped.
* hash injected into into dumped section.
* elf .exst_hash section updated with updated dumped section.
Replace EXST with USE_EXST.
Add documentation for the EXST firmware format.
Add table formatting to EXST documentation.
Update bootloader block.
Update H750 EXST linker script to use block format 0x00.
Use .exst.elf and .exst.bin on the exst files.
Add 'no checksum' to list of checksum hash methods.
Update EXST build system so it generates the following sets of files
obj/main/betaflight_TARGET.elf
obj/main/betaflight_TARGET.map
obj/main/betaflight_TARGET_EXST.elf
obj/betaflight_VERSION_TARGET.bin
obj/betaflight_VERSION_TARGET.bin.md5
obj/betaflight_VERSION_TARGET_EXST.bin
Update EXST build system to be more user-friendly.
* user-flashable files are generated in the normal place.
* Intermediate files are generated in `obj/main/...`
* Removes the `exst` goal.
* Adds .hex generation for EXST builds based on the patched .elf.
To build EXST targets, simply use `make TARGET=x` as normal and flash
the resulting `.hex/.bin` files rather than the .exst.bin file.
Developers can use either the `.elf` or patched `_EXST.elf` file as is
appropriate for their needs.
EXST documentation updated to match changes to build system.
Basic system files
- Initial system files
- Additional RCC clock enables for testing
- Coding style tidy (target/system_stm32h7xx.c) and enable MCO for testing
- Clock generator changes for SPI support
- Setup MPU for "D2 SRAM as write-through by MPU, call it DMA_RAM"
- Drop USB clock enabling from driver/system_stm32h7xx.c
- stm32h7_hal_conf.h for persistent object storage
Basic build files
STM32H7.mk changes
- STM32H7.mk for USE_UART and USE_SERIAL_RX
- Modify STM32H7.mk for inclusion of SPI driver
- STM32H7.mk change for D2 SRAM as write-through by MPU, call it DMA_RAM
- STM32H7.mk for DMA facility
- STM32H7.mk for [TIMER] For "Initial cut without Dshot"
- STM32H7.mk change for [LED_STRIP] Add LED_STRIP
- STM32H7.mk for [ADC] Initial cut without internal sensors
- STM32H7.mk for Enable I2C (HAL)
- STM32H7.mk for "Enable HAL-based DShot (no burst yet)"
- STM32H7.mk change for transponder
- STM32H750 - Add platform support.
- STM32H750 - Add H750 MCU ID.
- STM32H743 - Add MCU ID.
STM32H7.mk change for "Burst Dshot First working version"
Fix boot loader request
STM32H750 - Add PERSISTENT memory support.
STM32H743 - Add PERSISTENT memory support.
Use PERSISTENT memory for bootloader request.
Using DTCM RAM did not work on H750.
Change flash latency from 4WS to 2WS
STM32H750 - Fix reset of RCC_CR to reset value.
Note: The comment above the code didn't match code.
STM32H750 - Remove duplicate startup code, see SystemClock_Config.
STM32H7.mk changes for Port RTC backup register based persistent storage for H7
Make use of persistent object facility
Force reboot after possible boot loader activity
Enable CRS
stm32h7xx_hal_conf.h for H7 - QuadSPI support
stm32h7xx_hal_conf.h for STM32H7 - SDCard/SDIO using HAL Driver
stm32h7xx_hal_conf.h : Fix systick to be 0x00 instead of ST's default 0x0F.
This fixes the ability to use HAL_Delay() from an ISR, as required by
the ST's USB Library.
Specifically, systick handler must be a higher priority than the USB
FS/HS Interrupt handler priorities.
stm32h7xx_hal_conf.h for Add PID-Audio support
source.mk for H7 - QuadSPI support
drivers/system_stm32h7xx.c for H7 - QuadSPI support
STM32H7.mk for H7 - QuadSPI support
STM32H7.mk change for CDC-HID support
common_pre.h updates
- Scheduler parameters to same as F4 & F7
- Enable some important default features
- STM32H7 - Enable ITCM RAM.
Requires voltage scaling fix from commit
6e684c609310024141c43de484a5e78103140e3c
STM32H750 - Disable caches before reboot.
Prior to this when EEPROM_IN_RAM was used the persistent data section
would have corruption immediately after a reboot, prior to even the
Reset_Handler code having been executed.
drivers/system_stm32h7xx.c Touch-up after 2019-02-02 rebase
STM32H7 - Write protect ITCM ram.
Remove local defs for RESET_xxx symbols
STM32H750 - EXST firmware reboots to FLASH bootloader, rather than ROM bootloader.
STM32H750 - Disable some MCO/clock testing code as the pins interfere with new targets.
STM32H750 - Don't disable data caches after bootloader.
Observed that disabling dcache after cold boot with BOOT pin high causes
segfault.
drivers/system_stm32h7xx.c for STM32H7 - SDCard/SDIO using HAL Driver
drivers/system_stm32h7xx.c change for Move SDMMC clock init into SDIO driver
drivers/system_stm32h7xx.c: Cleanup some Clock/MCO/GPIO initialisation code.
drivers/system_stm32h7xx.c for Reset if systick is stuck.
STM32H7 - Fix missing CPU voltage scaling.
It appears this was the cause of other seemingly random issues:
* Crash soon after enabling USB.
* Flash write failures.
* Random un-explainable crashes.
Change RCC_HSE_BYPASS to RCC_HSE_ON
Even Nucleo-H743 seems to work without setting HSE_BYPASS.
STM32H7xx - Move memory section initialisation earlier into the init sequence.
Allows startup-code/libs/etc to be moved into different memory regions.
Don't touch vector table in EXST targets
STM32H750_EXST - fix boot loop
target/system_stm32h7xx.c for STM32H7 - SDCard/SDIO using HAL Driver
target/system_stm32h7xx.c change for Fix SD card clock speed selection
STM32H750_EXST - Reset MPU regions on boot.
* Failure to reset regions will result in mem-fault if bootloader has
configured a similar region.
STM32H750 - Fix missing include of platform.h in system_stm32h7xx.c
This caused the SDMMC peripheral clock to be un-configured (at reset
state) when USE_SDCARD_SDIO was defined.
Change MPU region number for DMA_RAM from 0 to 1
Avoid conflict with ITCM-RAM write protection.
STM32H7xx - HSERDY slow/stuck workarounds.
STM32H7xx - Fix region MPU number for SDIO.
* It was overwriting the previous region causing LED strip and
transponder issues.
Target/system_stmh7xx.c for Reset if systick is stuck.
startup/system_stm32h7xx.c change for non-caching DMA_RAM
H750 - Use SIZE optimization by default due to limited flash space.
STM32H7.mk for STM32H7 - SDCard/SDIO using HAL Driver
STM32H7.mk updates
- Decrease HSE_STARTUP_TIMEOUT to 1 second
* default is 5 seconds, which is too long when HSE gets stuck.
- Add PID-Audio support
Temporary override LINKER_DIR