Repository navigation
DEV-MASTER HEX / Build 4144
Pre-release
Pre-release
HEX BUILD of MASTER
Build 4144
Commit SHA: ed3ff87 (ed3ff87a1777ec7719af4430d24279a2568f6a85)
BuildTag: master_dev
EmuFlight 0.5.0 base plus committed code
Feedback Welcome in EmuFlight's Discord or GitHub Discussions.
Changes since official release 0.4.3:
Targets (58)
- feat(target): take the reference ADC instance and DMA option on 14 boards (#1582)
- fix(target): match the reference dmaopt on five boards (#1581)
- feat(target): SPRACINGH7NANO target and QUADSPI flash path (#1572)
- feat(target): define the OSD and flash chips the reference sets (#1576)
- chore(target): match reference timer occurrence and dmaopt on 9 boards (#1578)
- chore(target): set gyro EXTI to NONE on KROOZX, YUPIF4 and YUPIF7 (#1577)
- chore(target): match reference ADC pins, OSD chip select and camera control pin (#1575)
- chore(target): match reference role pins on five boards (#1574)
- chore(target): match reference ADC DMA, I2C and TIM8 dmaopt on NOX, BLADE, TMVELOXF7 (#1573)
- fix(target): JHEF7DUAL default gyro 2, ADC3/PC8 DMA options, DPS310 CLI name (#1554)
- fix(target): STELLARH7DEV ADC/LED DMA to reference, move burst to DMA2_S3 (#1570)
- feat(target): add TMOTORVELOXF7SE (#1568)
- fix(target): enable MPU6500-family gyro and acc on TMVELOXF7 (#1567)
- chore(target): rename BETAFLIGHTF7 to FPVM_BETAFLIGHTF7 (#1564)
- chore(target): match reference role pins, flags and TIM8 CH1 dmaopt (#1558)
- chore(target): remove duplicate targets, rename to reference names (#1560)
- chore(target): match reference motor order on four H7 boards (#1559)
- feat(target): add named pin defines to the last 15 USE_TIMER_MGMT boards (#1557)
- fix(targets): match reference DMA options on 102 more boards (#1531)
- fix(target): set board data to reference configs and remove COLIBRI_OPBL, NUCLEOF7 (#1549)
- fix(targets): match reference DMA options on VGOODRCF4 motor pins (#1528)
- fix(targets): match reference DMA options on 43 boards to clear stream collisions (#1527)
- refactor(targets): default OSD, TELEMETRY and AIRMODE in feature reset; drop redundant target defaults (#1512)
- fix(targets): distinct H7 motor DMA streams and resolved-stream LED claim (#1502)
- fix(targets): match reference timer data and enable USE_TIMER_MGMT on 14 boards (#1498)
- feat(target): define SPRACINGH7EF ADC, PINIO, buttons, SPI6 flash, timer map (#1484)
- feat(target): add named-pin defines for 441 USE_TIMER_MGMT boards (#1481)
- feat(target): USE_TIMER_MGMT bulk rollout on 441 remaining boards (#1473)
- chore(target): add generic per-MCU-family compile-test targets (#1470)
- chore(target): remove invalid STM32F7X2 kitchen-sink target (#1469)
- fix(target): resolve ELLE0 TIM8 CH1/CH2 DMA-stream collision (#1465)
- docs(target): note DMAR non-removal on HELIOSPRING/STRIXF10/MODE2FLUX (#1457)
- fix(target): resolve ADC1/TIM8-CH3 DMA-stream collision on STELLARF7, STELLARF7V2, ELLE0 (#1454)
- fix(target): resolve TIM8 DMA-stream collision on ALIENFLIGHTF4 and BEEROTORF4 (#1453)
- fix(targets): resolve TIM8 CH2/CH3 DMA-stream collision with CH1 on 16 F7 boards (#1449)
- fix(targets): match BF pins, split SPRACING REV targets (#1438)
- feat(target): enable USE_ESCSERIAL fleet-wide via common_fc_pre.h (#1433)
- fix(target): correct PYRODRONEF7 voltage meter scale (#1434)
- chore(targets): remove orphaned SDCARD_DMA_CHANNEL define (#1424)
- fix(target): single-pin port masks use (BIT(n)) instead of 0xffff (#1328)
- targets: prune OMNINXT4/OMNINXT7 dead sibling branches
- targets: fix pre-existing per-target hardware-define bugs (BF-configs audit)
- targets: split shared multi-board folders into atomic per-board targets (#1302)
- build: add targets-h7 convenience target for STM32H7 MCU group (#1263)
- feat(targets): import 70 H7 targets + full flash define audit (#1233)
- fix(targets): add barometer_dps310.c to target.mk for 114 DPS310 targets (#1188)
- fix(targets): correct scale define names and sync values from BF 4.5-maintenance (#1201)
- FOXEERF722V4: add USE_BARO_BMP280 support (#1179)
- [target] fix RUSHBLADEF7HD_I2C (#1157)
- [target] add DARWINF411 (#1089)
- [targets] fix VGOODRCF4 motor map/gyro align and VGOODF722DUAL OSD (#1154)
- [target] FREEAXISF4 (F411) (#1077)
- [target] add NBD_INFINITYAIO255 (#1080)
- [target] add FLYSPARKF4 (F405) (#1088)
- [targets] TMOTORF7 / TMOTORF7_AIO - fix motor3 timer/channel (#1082)
- [target] JHEF411HD add LED0 PIN (#1083)
- [target] JHEF745 dshot_burst ON by default (#1087)
- [target] update TUNERCF405 (#1078)
Features (37)
- feat(motors): add motor_output_reordering CLI array (#1543)
- feat: complete CLI arguments with Tab and '?' (#1553)
- feat: store SPI SDO/SDI dmaopt in config (pin-or-scan) (#1520)
- feat: SDIO DMA stream selectable via dmaopt (F4/F7) (#1519)
- feat(h7): resolve the burst DShot TIM_UP stream from a per-timer TIMUPn_DMA_OPT (#1513)
- feat(adc): select the ADC per input on H7 and give ADC3 its own DMA stream (#1514)
- feat(adc): resolve ADC DMA stream from a per-device dmaopt (#1501)
- feat(msp): report rate profile count in MSP_STATUS_EX, API 1.55.0 (#1500)
- feat(msp): report API_VERSION_PATCH in MSP_API_VERSION (#1492)
- feat(config): store SPRACINGH7EF config on external SPI flash (#1489)
- feat: EXST image packaging and flash-bootloader reboot for SPRACINGH7EF (#1483)
- feat(cli): add dma and timer pin management commands, dump sections (#1480)
- feat(drivers): named pin defines for Class A timer-pin discovery (#1463)
- feat(drivers): wire fullTimerHardware[]/TIMER_PIN_MAPPING into the timer resolution layer (#1459)
- feat(pg): restore timerio.c/timerio.h PG plumbing (#1458)
- feat(drivers): port BF SWD protection + centralize TARGET_IO_PORTx fleet-wide (#1440)
- feat(drivers): implement real dmaGetChannelSpecByTimer() for F4/F7 (#1436)
- feat(cli): warn when a resource pin loses its timer claim (#1423)
- feat(cli): warn when a UART's configured dmaopt loses its DMA claim (#1400)
- feat(cli): add dmaopt resource subsystem for UART DMA stream/channel selection (#1384)
- feat: activate SPI DMA for IMUF9001 boards' SPI2/SPI3 (#1359)
- feat(blackbox): output field masking via CLI (BF 4.5 parity) (#1332)
- feat(blackbox): log unfiltered/raw gyro data like Betaflight (#1331)
- feat(SITL): wire fake baro/mag sensors from FDM state (#1293)
- feat: enable OSD and Telemetry by default on all capable targets
- feat(osd): altitude limit warning (#1260)
- feat(profiles): allow PID/rate profile counts to be overridden via EXTRA_FLAGS (#1249)
- feat(filter): replace biquad with SVF filters (#1245)
- feat(h7): add STM32H7 MCU support (H743/H750/H723/H725/H730/H735/H7A3) (#1194)
- feat(flash): backport flash drivers to BF 4.5-maintenance parity
- feat(flash): backport flash drivers to BF 4.5-maintenance parity
- feat(baro): add DPS310/SPL06/SPL07 barometer driver — closes #822 #551 (#1180)
- feat(h7): add STM32H7 vendor libraries (#1195)
- feat(ci): add SITL compile gate and expand build to 12 parallel groups (#1192)
- feat(jeti): add GPS and G-Force sensor telemetry — closes #1177 (#1181)
- feat: add camera_control_button_resistance CLI setting (#1171)
- feat: Add complete SITL (Software-In-The-Loop) build support, repo hygiene, and debug-only filter checks (#1100)
Fixes (99)
- fix(msp): advance read pointer in sbufReadData and clamp board info lengths (#1541)
- fix(flashfs): honor the write interlock and release it on a zero-byte accept (#1542)
- fix(f7): store the bootloader request with persistentObject (#1536)
- fix: parenthesize flag argument in DMA_CLEAR_FLAG and DMA_GET_FLAG_STATUS (#1544)
- fix: correct internal Vref and core temperature formulas (#1526)
- fix(cli): reject signed pins and handle resource with no pin (#1516)
- fix: advance w25m_readBytes by bytes the die driver returns (#1515)
- fix: pump flashfsEraseAsync in the flash_erase wait loops (#1511)
- fix(flash): return 0 from m25p16_readBytes on SPI transfer timeout (#1499)
- fix: use dmaopt -1 for TIMER_PIN_MAP entries on DMA-incapable channels (#1496)
- fix: initialize SPI5/SPI6 hardware at boot (#1488)
- fix(timer): add TIMER_GET_IO_TAG indirection for DEF_TIM (#1474)
- fix(drivers): match F7 TIM8 DMA-option order to F4 in timer_def.h (#1448)
- fix(flash_w25n): use clamped transferLength in QuadSPI read path (#1445)
- fix(drivers): wire dmaGetChannelSpecByTimer() into H7 LED strip/transponder/DShot (#1435)
- fix(drivers): wire dmaGetChannelSpecByTimer() into F4/F7 LED strip/transponder/DShot (#1437)
- fix(sensors): gate host-side lowpass filters off USE_GYRO_IMUF9001 (#1432)
- fix(cli): exclude gyroregisters command on IMUF9001 targets (#1431)
- fix(drivers): refuse escserial TX-pin fallback for SIMONK/BLHELI/CASTLE (#1429)
- fix(drivers): resolve serial_escserial.c TX-pin, HAL-timer, and RX ownership defects (#1427)
- fix: guard cli.c/servos.c against USE_QUAD_MIXER_ONLY (#1417)
- fix(msp): correct USE_USE_BEESIGN typo in MSP_FC_VARIANT board-type byte (#1414)
- fix(build): stamp-file dependency for version.o REVISION staleness (#1386)
- fix: correct W25N01GV flash geometry (sectors/pageSize swapped) (#1405)
- fix(scheduler): SERIAL task avg/max stats corrupted by unflagged USB TX waits (#1392)
- fix(drivers): migrate timerGetByTag() to ownership-checked timerAllocate() (#1406)
- fix(target/spi): fix STM32F7X2 generic target boot hang (#1410)
- fix(sdcard): migrate dmaInit() to ownership-checked dmaAllocate() (#1398)
- fix(motors): migrate dmaInit() to ownership-checked dmaAllocate() (#1397)
- fix(led-strip): migrate dmaInit() to ownership-checked dmaAllocate() (#1394)
- fix(transponder): migrate dmaInit() to ownership-checked dmaAllocate() (#1393)
- fix(adc): migrate dmaInit() to ownership-checked dmaAllocate() (#1389)
- fix(uart): port H7 DMA resolution to shared dmaopt mechanism (#1383)
- fix(uart): activate DMA for UART on F4/F7 targets (#1370)
- fix: remove dead STM32F3 code (#1369)
- fix: activate SPI DMA for STM32H7 targets (#1367)
- fix: disable SPI DMA during AK8963 aux-I2C-passthrough init (#1358)
- fix: check DMA stream ownership before UART reopen claims it (#1356)
- fix(dma): guard dmaDescriptors[] indexing on F4/F7 against invalid identifiers (#1344)
- fix(accgyro): cap ICM-20689/ICM-20649 persistent SPI clock at 8MHz ceiling (#1326)
- fix(h7): bounds-validate dmaIdentifier_e before dmaDescriptors[] indexing (#1325)
- fix(pid): unify directFF pure-P-term gate with pidLevel() call site (#1324)
- fix(msp): don't alias exhausted descriptor pool to descriptor 0 (#1320)
- fix(scheduler): suppress TASK_SERIAL maxload inflation from USB VCP connect
- fix(board-info): remove colliding flags, wire up BOARD_NAME + USB string
- Fix CRAZYFLIE2/CRAZYFLIE2BQ: clamp numAuxChannels to prevent OOB read/write (#1306)
- fix(h7): align D-cache invalidate address in uartRead() (#1301)
- fix(board-info): wire up BF-style MANUFACTURER_ID fallback + missing boot init (#1295)
- fix: correct ICM-20689/MPU6500 SPI initialisation sequence (#1289)
- fix(msp): drain TX and clear pendingRequest before CLI entry (#1284)
- fix: crashflip/turtle broken when 3D feature enabled but disabled via switch (#1280)
- fix: DShot beacon fires even when battery alarm owns beeper (#1278)
- fix(linker+filter): revert F7 tcm_code to ITCM_RAM; remove FAST_CODE from filter update fns
- fix(pid): use pure P-term for directFF in angle/horizon mode
- fix: suppress -Wduplicated-branches warning in accInit dual-gyro align (#1264)
- fix(linker): move F7X2 tcm_code ITCM_RAM -> ITCM_FLASH1 (#1258)
- fix(usb/msc): BF 4.5 parity — MSC_UTC reboot mode, H7 stale-flag clear, timezone param, NAND USE_USB_MSC compile fix (#1246)
- fix(msc): align H7 SPI SD MSC fops with EF symbol name (#1242)
- fix(spi): add SPIDEV_6 support for STM32H7 (SPI6 peripheral) (#1240)
- fix(make): parallel build races, forced re-link, and CI observability (#1238)
- fix(fc_tasks): add missing io/flashfs.h include (#1235)
- fix(flash/nand): NAND flash fixes; re-enable W25M02G on STELLARH7DEV (#1231)
- fix(sitl): resolve make SITL warnings
- fix(link): align F7 linker scripts with BF 4.5-m MOVABLE_FLASH layout (#1214)
- fix(telemetry): add missing <stdlib.h> in jetiexbus.c for abs() declaration (#1198)
- fix(bus): guard DMA HAL types against SIMULATOR_BUILD for SITL compile (#1191)
- fix(codacy): replace invalid extraOptions with documented language key (#1187)
- fix(position): implement getEstimatedVario() — closes #1183 (#1185)
- fix(make): clean_all wipes obj/main directly; bare make clean redirects to clean_all (#1182)
- fix(jeti): correct EXTEL_MAX_LEN, sensor data types, and GPS frame guard (#1176)
- fix(dshot): align MOTOR_BITLENGTH=20 and ARR=n-1 with Betaflight (#1175)
- fix(APEXF7): add PINIO2 config and UART4 MSP default for DJI Vista (#1172)
- fix(dshot/proshot): explicitly write frame-reset slots in DMA buffers (#1173)
- fix(sfhss): check cc2500 init result, enable SFHSS on CRAZYBEEF4FR (#1170)
- fix(rx): JETI ExBus unconditionally use SERIAL_BIDIR (#1168)
- fix(brushed): remove pinioSet from pwmWriteStandard, enforce no-3D for brushed protocol (#1166)
- fix(msp): per-client arming disable to prevent DJI MSP bypass (#1159)
- fix(bus_spi): guard IMUF9001 DMA transfer length against overflow (#1162)
- fix: make bus_spi_impl.h self-sufficient (closes #1122) (#1160)
- fix(bus_spi): clamp DMA SPI transfer length to dmaTxBuffer size (#1152)
- fix(gyro): always deassert CS on shared SPI bus in dual-gyro mode (#1153)
- fix(config): unconditionally clamp failsafe_procedure to valid range (#1151)
- fix(mixer): add 'f' suffix to double literals in twoPassMix (#1150)
- fix(make): arm_sdk download/install progress reporting and CI compatibility (#1147)
- fix(drivers): bus_i2c_busdev.h self-contained; dmaTransactionInProgress static (#1146)
- fix(accgyro): add USE_DUAL_GYRO guard to ICM20649/ICM42605/ICM42688P spiSetBusInstance (#1145)
- fix(usb): cap CDC_Send_DATA blocking spin to prevent WWDG reset under TX backpressure (#1141)
- fix(imuf9001): propagate spiReadWriteBufRB return value; rename to imufSendReceiveSpi (#1139)
- fix(config): stop silently zeroing rssi_channel when RSSI_ADC is enabled (#1138)
- fix(osd): cast intentional SPI DR-drain read to (void) in max7456 DMA IRQ handler (#1140)
- fix(gyro): BMI270 DLPF_EXPERIMENTAL rate-select reads lpf param, not gyro->hardware_lpf (#1134)
- fix(gyro): backport clockMicrosToCycles + gyroShortPeriod init for MPU6000 (BF 4.5-m parity) (#1133)
- fix(build): always recompile version.o with explicit 7-char revision (#1125)
- fix: pidCopyProfile silently rejected copy to Nth profile (PID_PROFILE_COUNT) (#1104)
- fix: Comprehensive Unit Test Fixes. (#1099)
- fix compile warnings - HelioSpring, Strix, Mode2Flux packed alignment of 4 same as uint32 (#986)
- Fix: Move global variable definitions from headers to source files to prevent multiple definition errors (#1098)
- fix: Use intptr_t for pointer-to-int cast in cmsMenuExit() (#1095)
- Fix Smith Predictor compilation guards (#1094)
Cleanup and refactor (43)
- refactor(timer): remove per-board timerHardware[] and the usage-flag pin scan (#1571)
- refactor: stop DShot output when a motor fails hardware config (#1532)
- refactor: remove dead SDIO stream state and stray USE_SDCARD_SDIO (#1524)
- chore: bump firmware version to 0.5.0-dev (#1487)
- refactor(drivers): migrate sdcard.c (SPI mode) to spiSequence()/extDevice_t (#1420)
- refactor: guard softserial RX IOInit in duplex shared-pin mode (#1419)
- chore(STRIXF10): remove stale commented-out defines (#1415)
- perf(maths): backport BF #14790 O(1) sin/cos range reduction (#1327)
- chore: remove dead USE_OSD_SLAVE code (#1379)
- chore: remove dead STM32H7 RCC bus tags (#1378)
- chore: remove dead code surfaced by STM32F3 purge (#1376)
- chore: remove dead STM32F1 code (#1368)
- Activate spiInitBusDMA() for F4/F7 targets (partial #1340) (#1348)
- refactor(imuf9001): migrate gyro driver from USE_DMA_SPI_DEVICE to spiSequence/imufIntCallback (#1283)
- refactor(filter): replace D-term dynamic notch biquad with SVF notch (#1329)
- cliTasks(): include SERIAL in Total load, remove stale exclusion
- Add motorCount byte to MSP_MOTOR_CONFIG response (#1309)
- flash_w25n: remove dead BBLUT read/write code (#1298)
- refactor(make): prune dead entries from UNSUPPORTED_TARGETS and remove F3 targets
- refactor(make): remove dead official target and OFFICIAL_TARGETS variable (#1243)
- Revert "feat(flash): backport flash drivers to BF 4.5-maintenance parity" (#1223)
- refactor(docs): remove obsolete documentation (#1196)
- refactor(docs): debloat—remove stale assets, dead infrastructure, auto-generate CLI reference (#1193)
- chore: suppress cppcheck missingIncludeSystem false positive (#1156)
- upgrade to python3 (#977)
- refactor(gyro): Stage M.4 — EXTI-triggered non-blocking DMA gyro read (BF 4.5-m parity) (#1131)
- refactor(bus): Stage M.3.d–g — async DMA SPI implementation (BF 4.5-m parity) (#1130)
- refactor(bus): Stage M.3.c — port dma_reqmap infrastructure (BF 4.5-m parity) (#1129)
- refactor(bus): Stage M.3.a/b — port spiSequenceStart polled path (BF 4.5-m parity) (#1128)
- refactor(I.4): remove inline busType/instance/handle from extDevice_s; migrate all SPI access sites to dev->bus (#1126)
- refactor(bus): Stage M - DMA infrastructure scaffold (BF 4.5-maintenance parity) (#1121)
- refactor(bus): Stage L.2 - rename gyro *_SPI_INSTANCE to *_SPI_BUS + remove forwarder (#1118)
- refactor(bus): Stage L.2 part 1 - rename gyro *_SPI_INSTANCE to *_SPI_BUS in all target files (#1119)
- refactor(bus): Stage K - MPU-slave bus-resource split (BF-parity magDev_t.bus field) (#1117)
- refactor(bus): Stage J - I2C bus-resource split (infra + 3 sites) (#1116)
- refactor(bus): Stage L-drivers - spiSetBusInstance BF-convention (#1114)
- refactor(bus): phase 3 - bus-resource split infrastructure (#1113)
- refactor(bus): naming cleanup phase 2 (type sweep + identifier consistency) (#1111)
- refactor(bus): align naming with Betaflight 4.5-maintenance (phase 1 of N) (#1108)
- BMI270 - 6.4k code for USE_GYRO_DLPF_EXPERIMENTAL (#989)
- HELIOSPRING and dervatives, set IMUF PT(N) to PT2 as default (#1093)
- PreArm allow Re-Arm (without resetting PreArm AUX) (#1090)
- trim leading whitepace from IMUF blackbox headers (#1091)
Build, CI and packaging (14)
- chore(build): drop redundant common sources from target.mk (#1580)
- ci: use build job version output in main release draft (#1517)
- ci: split build target groups round-robin, 12 to 16 jobs (#1495)
- ci: clear the -dev version suffix for release tags (#1491)
- build: expand SIZE_OPTIMISED_SRC to cover init/config/telemetry paths (#1330)
- build: add -fmerge-all-constants to LTO optimisation flags (#1321)
- build: upgrade xpack arm-none-eabi-gcc 9.3.1 → 13.3.1
- build: pass/fail summary after multi-target make (#1288)
- build: remove hardcoded -j from submake targets (#1202)
- ci: remove travis and split macos unit tests (#1197)
- build(make): switch arm sdk download to xpack github cdn (#1163)
- github-actions: update artifacts upload/download to v4 (#1092)
- [github] workflow updates (#1086)
- [github] update actions/upload-artifact and actions/download-artifact to v3 (#1085)
Tests (5)
- test: add host unit tests for timer and dma CLI commands (#1510)
- test(blackbox): add GPS mask + motor byte-sync regression tests (#1418)
- test(cli): add host unit-test coverage for dmaopt claim-status diagnostic (#1404)
- test(dma): add host unit tests for DMA/LL register-level logic (#1385)
- test: add host unit tests for spiSetBusInstance/spiInitBusDMA (#1357)
Docs (4)
- update docs/CLI/parameters-reference.md (#1546)
- docs(scheduler): correct DEBUG_SCHEDULER slot comment (#1518)
- docs: generate CLI reference for PG-backed commands (#1413)
- docs: modernize README, add semver+MSP to CLI reference (#1266)