Commit Graph
392 Commits
Author SHA1 Message Date
Julian Oes 388dbc24b2 fix(boards): no SD card on this board 2026-04-11 06:39:01 +12:00
Julian Oes 1a96bd2c94 feat(logger): add SDLOG_ROTATE, disentangle cleanup thresholds
The previous cleanup logic conflated two independent concerns into
SDLOG_MAX_SIZE: the maximum size of a single log file (rotation
trigger) AND the minimum free space to maintain. That was broken:
the 4095 MB default meant "keep 4 GB free", which over-cleaned on
large SD cards and was impossible to satisfy on small flash.

Disentangle the two:

- SDLOG_ROTATE (new, int %, default 90): maximum disk usage percentage.
  Cleanup guarantees at least (100 - SDLOG_ROTATE)% free even during
  writing of a new log file. Setting 0 disables space-based cleanup;
  100 allows filling the disk completely.
- SDLOG_MAX_SIZE (default lowered from 4095 to 1024): pure max file
  size. The value is added on top of the rotate-derived threshold as
  headroom for the next file write, so the rotate guarantee holds
  even mid-write.
- SDLOG_DIRS_MAX: removed. Directory count limits were confusing and
  orthogonal to the space-management goal; free-space cleanup alone
  covers the use case. Drop the param and all remaining overrides
  (rc.board_defaults, rcS, rc.replay, 1002_standard_vtol.hil).

Cleanup threshold is now:
    ((100 - SDLOG_ROTATE)% of disk) + SDLOG_MAX_SIZE

Small-flash boards can override SDLOG_MAX_SIZE to get more retained
logs within the available space. kakuteh7v2 and airbrainh743 drop
their SDLOG_DIRS_MAX overrides accordingly.

Update docs/en/dev_log/logging.md with the new semantics and a
worked example for the typical 8 GB SD case.
2026-04-11 06:35:58 +12:00
Julian Oes 7f76b71526 feat(boards): add W25N NAND flash support with littlefs
The kakuteh7mini ships with a W25N01GV (1Gbit/128MB) SPI NAND flash on
SPI1, but the board init was treating SPI1 as an MMC/SD slot and the
W25N driver was not enabled. Enable the chip and use it for logging:

- spi.cpp: register the device as SPIDEV_FLASH(0) instead of SPIDEV_MMCSD(0)
- init.c: initialize the W25N MTD driver, register /dev/mtd0, mount
  littlefs at /fs/flash with autoformat, and print the flash geometry
  on boot for verification.
- nuttx defconfig: enable CONFIG_MTD_W25N, CONFIG_FS_LITTLEFS,
  SPI1 DMA + DMAMUX1, drop the unused RAMTRON config.
- board_dma_map.h: define DMAMAP_SPI1_RX/TX for the SPI1 DMA channels.
- default.px4board: set CONFIG_BOARD_ROOT_PATH to /fs/flash.
- rc.board_defaults: drop the SDLOG_BACKEND=0 override that was
  disabling logging entirely and the COM_ARM_SDCARD override (the
  flash logging replaces the need for an SD card). Set SDLOG_MAX_SIZE=30
  so a few recent logs fit within the 128 MB flash.
2026-04-11 06:35:49 +12:00
Julian Oes 18493222ed feat(mklittlefs): add command to format littlefs filesystems
Add an NSH command to format a device with littlefs, analogous to
mkfatfs for FAT filesystems. The command unmounts the mount point,
then remounts with forceformat to format and mount in one step.

Enable the command on boards that use littlefs as primary storage
(airbrainh743 and kakuteh7v2), and document it in the airbrainh743
flight controller page as a recovery procedure for a corrupted
flash filesystem.

Usage: mklittlefs /dev/mtd0 /fs/flash
2026-04-11 05:59:27 +12:00
Julian Oes 5762d72004 feat(logger): add support for small flash storage
Move log cleanup from boot to log start, delete individual .ulg files
(oldest first) instead of entire directories, and add a max log file
size. This makes it practical to run the logger on small flash targets
(e.g. 128 MB W25N NAND) while still allowing logs to be downloaded via
MAVLink FTP before they are removed.

- Move cleanup from boot to log start so logs can be downloaded first.
- Delete individual .ulg files (oldest first) instead of whole dirs.
- Add SDLOG_MAX_SIZE parameter (default 4095 MiB, just under FAT32 limit).
- Prioritize directories from the naming scheme not currently in use
  (e.g. delete sess dirs first when using date dirs).
- Simplify get_log_time to rely on clock_gettime (GPS driver sets it).
- Safer string handling in directory parsing.
- Log elapsed cleanup time for diagnostics.
- Split pure parsing helpers into util_parse.{h,cpp} and add unit tests
  (loggerUtilTest.cpp). Move px4_add_unit_gtest outside the BUILD_TESTING
  guard for consistency with the rest of the tree; the macro already
  checks BUILD_TESTING internally.

Sponsored by CubePilot.
2026-04-11 05:58:49 +12:00
Julian Oes ebe0b727d8 fix(kakuteh7-wing): fix BOARD_FLASH_SECTORS to protect param sectors (#26897)
Set BOARD_FLASH_SECTORS to 13 so the bootloader does not erase the
parameter sectors (14 and 15) during firmware updates. Previously set
to 14 which allowed the bootloader to erase sector 14, potentially
wiping stored parameters.
2026-04-03 09:22:48 +13:00
Marco Hauswirth 8624682db1 chore(boards): remove optical flow from holybro-kakutef7 build 2026-04-02 16:20:19 +02:00
Jacob Dahl f00e46f618 feat(dshot): Extended Telemetry and EEPROM support
Overhauls the DShot driver with per-timer BDShot selection, multi-timer                                                                                                                                  
sequential capture, Extended DShot Telemetry (EDT), and AM32 ESC EEPROM                                                                                                                                  
read/write via MAVLink. Expands ESC support from 8 to 12 channels.                                                                                                                                       
                                                                                                                                                                                                   
BDShot:                                                                                                                                                                                                  
- Per-timer BDShot protocol selection via actuator config UI                                                                                                                                             
- Multi-timer sequential burst/capture on any DMA-capable timer                                                                                                                                          
- Adaptive per-channel GCR bitstream decoding                                                                                                                                                            
- Per-channel online/offline detection with hysteresis                                                                                                                                                   
                                                                                                                                                                                                   
Extended DShot Telemetry (EDT):                                                                                                                                                                          
- Temperature, voltage, current from BDShot frames (no serial wire)                                                                                                                                      
- New DSHOT_BIDIR_EDT parameter                                                                                                                                     
- EDT data merged with serial telemetry when both available                                                                                                                                              
                                                                                                                                                                                                   
AM32 EEPROM:                                                                                                                                                                                             
- Read/write AM32 ESC settings via MAVLink ESC_EEPROM message                                                                                                                                            
- ESCSettingsInterface abstraction for future ESC firmware types                                                                                                                                         
- New DSHOT_ESC_TYPE parameter                                                                                                                                                                           
                                                                                                                                                                                                   
Other changes:                                                                                                                                                                                           
- Per-motor pole count params DSHOT_MOT_POL1–12 (replaces MOT_POLE_COUNT)                                                                                                                              
- EscStatus/EscReport expanded to 12 ESCs with uint16 bitmasks                                                                                                                                           
- Numerous bounds-check, overflow, and concurrency fixes                                                                                                                                                 
- Updated DShot documentation
2026-03-17 16:38:33 -08:00
963a776fa6 feat(heater): Add multi-instance support for heaters (#26325)
* heater: add multi-instance support, refactor parameter handling, remove legacy params file

This change introduces multi-instance heater support to allow independent temperature control for multiple IMUs.

Main changes:
- Add support for multiple heater instances
- Refactor parameter handling to use per-instance parameters
- Remove the legacy parameter file and migrate to the updated parameter structure

This improves scalability and makes heater configuration consistent across setups with multiple sensors.

* Refactor heater configuration across multiple boards

- Updated heater GPIO definitions to introduce a new naming convention for better clarity and consistency.
- Replaced `GPIO_HEATER_OUTPUT` with `GPIO_HEATER1_OUTPUT` and adjusted the corresponding output enable macros.
- Changed parameter names from `SENS_TEMP_ID` to `HEATER1_IMU_ID` in various board default configurations to reflect the new heater setup.
- Ensured all affected board configurations are updated to maintain functionality with the new heater definitions.

* heater: fix missing HEATER1_OUTPUT_EN control

* heater: fix more missing HEATER1_OUTPUT_EN control

* heater: tidy config, docs, and instance handling

- Remove unused controller period member and use CONTROLLER_PERIOD_DEFAULT
- Improve HEATER${i}_IMU_ID description and instance-related logging/behavior
- Add a guard when HEATER_NUM exceeds HEATER_MAX_INSTANCES

Note: drop intermediate/reverted change around the 'celsius' spelling.

* heater: refactor constructor to remove unused parameter and add instance name function

- Remove unused ModuleParams argument from Heater constructor
- Add heater_instance_name() helper to provide per-instance work queue task names
- Use instance-specific parameter lookup (HEATER{n}_*) during initialization

Use heater_instance_name() to label each instance (heater_1/2/3) in work queue.
Also drop unused ModuleParams argument from constructor and keep per-instance
parameter handle lookup in initialization.

* format

* board: update GPIO configuration for multiple heater instances, add HEATER_NUM for boards using PX4IO

* heater: update heater control to use HEATER1_OUTPUT_EN when using PX4IO for consistency

* heater: add a TODO for px4io multi-instance

* heater: update missing GPIO_HEATER1_OUTPUT in  sky-drones

* heater: fix multiple newlines at EOF (resolve CI check failure)

* heater: switch to PublicationMulti for heater_status and log multi-instance

- Changed _heater_status_pub from Publication to PublicationMulti to support independent per-instance publications without overwriting.
- Updated logged_topics.cpp to use add_optional_topic_multi("heater_status")

This fixes the issue where multiple heater instances were writing to the same heater_status topic, causing data overwriting and incorrect update rates in logs.

---------

Co-authored-by: Jacob Dahl <dahl.jakejacob@gmail.com>
Co-authored-by: Jacob Dahl <37091262+dakejahl@users.noreply.github.com>
2026-03-02 12:13:08 -09:00
Julian Oes 3a6a57bd45 kakuteh7v2: use /fs/flash instead of /fs/microsd 2026-02-10 15:23:51 +13:00
Julian Oes e0af9f4ef4 boards: add NAND flash logging support to KakuteH7v2
- Initialize W25N01GV NAND flash on SPI1 with littlefs.
- Enable BOARD_SMALL_FLASH_LOGGING for small flash handling.
- Increase logger buffer size for flash write performance.
2026-02-10 15:23:51 +13:00
Julian Oes 1bfc0da258 [Sponsored by CubePilot] Get CI to pass all boards (#26402)
* kakutef7: try to save more flash
2026-02-03 16:46:36 -05:00
Jacob Dahl 06db25c078 boards: remove CONFIG_COMMON_OPTICAL_FLOW from all non-CANnode hardware (#26315) 2026-01-21 10:51:09 -05:00
Alexander Lerach 8f2c36689d logging: allow logging backend config
* logging: allow logging backend config

* correct board comments

* documentation: updated logging section
2025-08-27 15:44:36 +02:00
PX4 BuildBot 81ff0925f8 boards: update all NuttX defconfigs 2025-08-07 20:35:04 -04:00
chfriedrich98 e266d1f22f rover: remove deprecated module 2025-07-10 10:11:58 +02:00
Ramon Roche 725d800a38 boards: save flash for KakuteH7-Wing 2025-07-01 10:23:49 -07:00
Julian Oes 84c3abbba2 boards: LED fixup for Kakute 2025-07-01 10:48:18 +12:00
Julian Oes 75031fe375 boards: save flash on KakuteH7 dualimu
Due to trying to being compatible with the ArduPilot flash layout with
two sectors reserved for parameters.
2025-07-01 10:48:18 +12:00
Julian Oes 9cf3893266 boards: fixup image size of KakuteH7 dualimu
We have 1 sector for the bootloader and the last 2 for parameters.
That's to match how ArduPilot has it.
2025-07-01 10:48:18 +12:00
Julian Oes 4c130769bd boards: set RC serial for KakuteH7-Wing
This was missed earlier.
2025-06-13 10:19:54 +12:00
Julian Oes 599ea7545d boards: fixup image size of KakuteH7-Wing
We have 1 sector for the bootloader and the last 2 for parameters.
That's to match how ArduPilot has it.
2025-06-13 10:19:54 +12:00
Niklas Hauser 8c6d7235e4 [drivers] Allow swapping RX/TX pins of DShot Telemetry 2025-05-27 11:07:29 +02:00
Julian Oes c9145a24b4 holybro: hard-select CAM1 for now
I don't think there is an easy way to hook this up to RC input at the
moment, so I'm setting it fixed to CAM1 for now.
2025-05-27 13:30:57 +12:00
Julian Oes 9595f12327 holybro: fixup Wing system power setup
I don't think we have a way to explicitly detect if BAT1 or BAT2
"bricks" are correct, so we have to assume they are, and rely on the
voltage/current shown.

Additionally, we can now power cycle sensor power.
2025-05-27 13:30:57 +12:00
Julian Oes 7c77cfa6e1 holybro: match AP flash layout
That way the ArduPilot bootloader works with PX4.
2025-05-27 13:30:57 +12:00
Silvan 8c1f7ec7c0 rename FWPositionController to FWModeManager
Signed-off-by: Silvan <silvan@auterion.com>
2025-05-26 14:47:38 +02:00
RomanBapst 779a55c6dc FW Position Controller rework
- split up old module into two, one handling setpoint generation, one control
- add lateral and longitudinal control setpoints topics that can also be
injected from companion computer
- add configuration topics that (optionally) configure the controller
with limits and momentary settings

Signed-off-by: RomanBapst <bapstroman@gmail.com>
2025-05-26 14:47:38 +02:00
Julian Oes 47cb1133c3 boards: add new target for Kakute H7 with dual IMU 2025-05-14 08:00:17 -07:00
Julian Oes 3c39095271 [Sponsored by Holybro] Support for Kakute H743-Wing (#24669)
* hrt: Fix PPM input on channel 2

The CCMR1_PPM define for PPM input on channel 2 was incorrectly set to 2,
which was setting bits for channel 1 instead of channel 2. This prevented
PPM input from functioning properly on channel 2.

Changed CCMR1_PPM for channel 2 from 2 to (1 << 8), which correctly
configures the CC2S bits for input capture mode on TI2.

This fixes an issue noted in the existing code comment:
"FIXME! There is an interaction in the CCMR registers that prevents
using Chan 1 as the timer and chan 2 as the PPM"

Tested on STM32H743 with PPM input on PC7 (TIM8_CH2).

* rc_input: enable sharing serial and PPM pin

By setting RC_SERIAL_PORT_SHARED_PPM_PIN_GPIO_RX it is now possible to
use the same pin on the STM32 for PPM input as well as serial input.

* boards: Add support for Holybro KakuteH7-Wing
2025-05-04 14:44:11 -08:00
co63oc f4cfee6f72 Fix typos in comments (#24681) 2025-04-08 16:47:58 -08:00
Silvan 18b6a61788 Navigator: add NUM_MISSION_ITMES_SUPPORTED to kconfig
Signed-off-by: Silvan <silvan@auterion.com>

boards: increase max mission items for boards with >=1kb RAM to 1000

Signed-off-by: Silvan <silvan@auterion.com>

boards: increase NUM_MISSION_ITMES_SUPPORTED for SITL to 10000

Signed-off-by: Silvan <silvan@auterion.com>
2025-03-20 11:45:26 +01:00
Julian Oes fe5d90301d boards: fix startup delay for all Kakute H7
This configures the RTC clock to use the HSE instead of the not existing
LSE clock which prevents boot waiting for the not existing LSE crystal
for a few seconds on startup.
2025-03-17 07:27:11 +01:00
543851db50 [Sponsored by ARK] Bidirectional DShot (#23863)
* Bidirectional DShot

Co-authored-by: Julian Oes <julian@oes.ch>

* f4/f1 support, not supported

* fix f1 build target

* sanity check timer_channel value, fix CCxNP ifdef, debug stuff

* removed debug code, added define for H7 HAVE_GTIM_CCXNP

* round robin sampling for less than 4 DMA

* unlimited esc_status logging

* dshot: fix formatting

* dshot: add define for number of DMA channels to use

This allows individual boards to override the number of DShot channels
and hence avoid round robin capture of the RPM feedback.

* ARK: enable 4 DMA channels for DShot on 6X

* dshot: publish when all channels are updated

This slows down the ESC_STATUS publication in the case of round robin
capture. E.g. for 800 Hz output with one DMA channel, the ESC_STATUS is
now published at 200 Hz.

* dshot: avoid duplicate publications for bidir and telem

Instead of publishing both bidirectional dshot updates as well as
telemetry updates, we now combine the data from both streams, and
publish whenever we get RPM updates, as the latter arrives with higher
rate, e.g. 200 Hz with round robin, or faster otherwise.

When combining the data, we take RPM from bidirectional dshot, and the
rest from telemetry.

When we have only one of the two, either telemetry or bidirectional
dshot, we just publish that one.

* boards: add ark fpv and pi6x BOARD_DMA_NUM_DSHOT_CHANNELS

* dshot: turn off debug build

---------

Co-authored-by: Julian Oes <julian@oes.ch>
Co-authored-by: alexklimaj <alex@arkelectron.com>
2025-03-12 12:55:15 -06:00
Alexander Lerach 047578a844 Disarm PWM ESCs before reboot 2025-02-10 18:16:48 +01:00
PX4 BuildBot 1aa83d954b update all px4board kconfig 2025-01-22 14:46:24 -05:00
Silvan Fuhrer a16f7859ac boards: disable CONFIG_EKF2_AUX_GLOBAL_POSITION on some boards
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2025-01-14 02:19:49 -05:00
Matthias Grob 839010eeab Navigator: make ADSB handling optional 2024-12-19 15:30:34 +01:00
Vincent Poon 0f1a4eb72c update H-Flow Boot config and add stm32_configgpio (#24086) 2024-12-11 09:49:06 +13:00
Julian Oes 95b5859913 boards: add SPA06 to KakuteH7/H7mini/H7v2 boards 2024-11-28 12:18:44 +13:00
PX4 BuildBot ccd32cc13f update all px4board kconfig 2024-11-15 21:13:34 -05:00
Vincent Poon 1b163b5e4d Update KakuteH7 mini board_id in hw_config.h
Update KakuteH7 mini board_id in hw_config.h
2024-11-12 11:48:34 +13:00
Julian Oes b9bca9fa94 boards: Add Holybro H-Flow (#23865) 2024-10-30 13:42:03 -04:00
Julian Oes 4d4c5ef7f3 boards: change board ID of KakuteH7 mini (#23832)
* boards: change board ID of KakuteH7 mini

Holybro would like to consolidate the board ID to what is used in
ArduPilot.

* boards: update KakuteH7mini bootloader

This is due to the board ID change.
2024-10-22 09:22:33 +13:00
Julian Oesandjamming efbd01c3c2 Add IMU compatible for KakuteH7Mini (#23831)
Co-authored-by: jamming <jianbing.pan@holybro.com>
2024-10-22 09:22:16 +13:00
Vincent Poon e2e435af7c kakuteh7: enable EKF2 external vision
to make it consistent with kakuteh7v2/mini 
https://github.com/PX4/PX4-Autopilot/pull/23803
2024-10-17 10:51:46 +02:00
Julian Oes 9031f44eba kakuteh7v2/mini: enable EKF2 external vision
We can enable it given there is flash space available.
2024-10-11 13:41:59 -04:00
BazookaJoe1900 4d83badba1 fix files tags on the header comments (#23564) 2024-09-19 09:25:18 +03:00
Matthias Grob f2bca92221 Fix duplicate newlines at the end of files 2024-07-19 14:33:36 +02:00
Ruoyu Wang b9aa8818a4 kakute f7/h7/h7mini/h7v2: fix EKF2_IMU_CTRL typo 2024-06-10 11:08:33 +02:00