Commit Graph
43 Commits
Author SHA1 Message Date
Peter Barker bc4a6f05a6 AP_Filesystem: add the @MAV_LOG virtual directory
MAVFTP defines @MAV_LOG as the flight-stack-independent location for log
files, so that a GCS can find them without being told where a particular
board keeps them. QGroundControl asks for it before anything else, and
falls back to guessing per-firmware paths when it is not there.

It is an alias rather than a filesystem of its own: the backend table
gains a root, and where a row carries one the resolver rewrites a path
under that prefix to sit under that directory before handing it to the
filesystem which serves it. @MAV_LOG points at the local filesystem, under
whatever directory this board logs to, following a custom log directory
the same way AP_Logger_File does.

The rewritten path has to hold the root as well as the path, so the buffer
is sized for the longest path an FTP listing stats - the longest path a
request can carry, a separator and a 255 byte name - underneath the longest
log directory a board has, and a static_assert holds boards to that. A
path too long to rewrite is refused with ENAMETOOLONG before any filesystem
sees it, rather than being truncated into the name of some other file.

That buffer is not on the stack, where every path-based call would pay for
it. It is allocated the first time an alias is used and kept, and a
semaphore is held around each backend call which uses it. rename, the one
call with two paths alive at once, allocates a second buffer for its new
path and frees it afterwards. Paths which are not aliases take neither the
semaphore nor a buffer.

An alias can't sit on LittleFS for now, and @MAV_LOG is not built where
LittleFS is the local filesystem; forcing it on is a build error. LittleFS
holds its lock from opendir() to closedir(), so the semaphore, held across
each call, would be released before that lock, which ChibiOS mutexes do not
allow, and a thread listing an alias directory would wait for the semaphore
while holding the lock another thread holding the semaphore could be
waiting for.

rename now compares the filesystems which serve its two paths rather than
their table rows, since an alias shares its filesystem with other paths,
and sets EXDEV when they differ.

A prefix now has to be the whole of a path's first component, so that
"@MAV_LOG_backup" is not served as "_backup" under the log directory. This
is not particular to the alias: "@SYSfoo" used to be served by @SYS as
"foo", and is now the local file of that name. Nothing in the tree relied
on the old behaviour.

@MAV_LOG, and the alias support with it, is only built where the logs go
to a filesystem at all.
2026-09-22 11:10:46 +10:00
Peter BarkerandClaude Opus 4.8 10dfd237a2 AP_Filesystem: make fgets buflen semantics match C's fgets
buflen now includes the space required for the null terminator, so up
to buflen-1 characters are returned.  Previously fgets could write
buf[buflen], one byte beyond the caller-nominated length.  All
in-tree callers passed sizeof(buf)-1 to compensate, but
posix_compat's apfs_fgets forwards its C-style size argument
directly, so a caller supplying a size-byte buffer could have that
buffer overrun by one byte on an over-long line.

Update callers to pass the full buffer size; usable capacity is
unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 17:37:00 +10:00
Peter Barker ad28bb78d2 AP_Filesystem: correct fgets for last-line-missing-termination
refusal to seek past the end of the file broke this
2026-07-21 18:56:09 +10:00
Thomas Watson ed2c42ede2 AP_Filesystem: new API for performing optimal fsyncs 2025-02-17 16:33:51 +11:00
Andy Piper 0c541b72fd AP_Filesystem: provide SITL implementation for littlefs 2025-01-21 11:10:31 +11:00
Andy Piper 8a992740f5 AP_Filesystem: add littlefs singleton for sync block use 2025-01-21 11:10:31 +11:00
Andy Piper 6390285598 AP_Filesystem: add littlefs based filesystem support
use correct read status for nor flash
implement format on littlefs
optimize device calls in littlefs flash usage
check for fileops allowed in littlefs
littlefs optimization and support for mtime
2025-01-21 11:10:31 +11:00
Iampete1 78d9e5a875 AP_Filesystem: Don't try and rename between backends 2025-01-05 13:33:42 +11:00
Andrew Tridgell f8ce4183b8 AP_Filesystem: support QURT with posix filesystem
some features disabled
2024-07-12 15:56:48 +10:00
Andrew Tridgell c2e52af1e2 AP_Filesystem: make fgets() much more efficient
normally fgets is on a buffered FILE handle. For AP_Filesystem we use
an unbuffered file descriptor. This means we were reading one byte at
a time from the file

this uses lseek to make fgets() much more efficient by reading the max
buffer size at a time in the file
2024-07-11 09:24:38 +10:00
Andrew Tridgell a241b13f45 AP_Filesystem: use NEW_NOTHROW for new(std::nothrow) 2024-06-04 09:20:21 +10:00
Thomas Watson 0ca37387be AP_Filesystem: guarantee load_file() data is null-terminated
Improves safety of use and clarity of users. Termination is not
included in the reported size to avoid changing user behavior or
misrepresenting the file contents.
2024-05-04 10:15:44 +10:00
Peter Barker 2cb5f434fd AP_Filesystem: don't show directory entries for empty @ filesystems 2024-02-28 18:47:22 +11:00
Peter Barker ac769014c4 AP_Filesystem: list virtual @SYS, @MISSION etc directories in /
Adds virtual directory entries for these virtual filesystems in /

RTL> ftp list
RTL> Listing /
 D @MISSION
 D @PARAM
 D @ROMFS
 D @SYS
 D APM
 D log
   V5_BT.dfu	10541
   bootlog.txt	297
   dataman	350216
   message-intervals-chan0.txt	7
Total size 352.60 kByte
ftp list @MISSION
RTL> Listing @MISSION
LIST: OP seq:7 sess:2 opcode:129 req_opcode:3 size:2 bc:0 ofs:0 plen=2 [2]
ftp list @ROMFS
RTL> Listing @ROMFS
   bootloader.bin	16448
   hwdef.dat	5743
   io_firmware.bin	40880
Total size 61.59 kByte

This PR also makes us *much* more lenient in what we accept for looking at virtual filesystems, so

ftp list @SYS
ftp list /@SYS
ftp list @SYS/
ftp list /@SYS/

should all work
2024-02-27 10:07:01 +11:00
Iampete1 93d8de2834 AP_Filesystem: support full direcotry listing in ROMFS 2024-02-22 07:43:16 +11:00
Iampete1 c48759f4ba AP_Filesystem: crc32: Ensure checksum value is initialized 2024-02-15 07:36:39 +11:00
Andrew Tridgell 9beea49c3c AP_Filesystem: implement stat() call for lua 2023-12-11 18:00:38 +11:00
Iampete1 2c7e06dc5e AP_Filesystem: add crc 32 method 2023-12-05 11:03:58 +11:00
Peter Barker 6faa77993a AP_Filesystem: correct include problem
transitive include may fail depending on build options
2023-06-18 10:35:27 +10:00
Peter Barker 294b975335 AP_Filesystem: correct detection of feature AP_FILESYSTEM_FORMAT_ENABLED 2023-06-08 08:55:26 +10:00
Andrew Tridgell 4946ce5431 HAL_ChibiOS: revert recent USB changes
these are causing some boards to crash on startup. Tested with a
QiotekZealotH743 which doesn't get out of setup_usb_strings()

once we have debugged this we can re-add the functionality
2023-06-03 16:50:30 +10:00
bugobliterator 414606ba31 AP_Filesystem: add support for blocking filesystem access 2023-05-31 18:40:17 +10:00
Peter Barker 1c54d18672 AP_Filesystem: replace HAVE_FILESYSTEM_SUPPORT with backend defines 2023-05-17 09:40:39 +10:00
Andrew Tridgell cf79843661 AP_Filesystem: support file rename 2023-03-05 09:42:48 +11:00
Peter Barker d633bd3f49 AP_Filesystem: add in-progress to formatsdcard process 2023-02-21 17:07:41 +11:00
Peter Barker b5165b6d7f AP_FileSystem: add AP_FILESYSTEM_*_ENABLED 2022-09-15 10:53:02 +10:00
Peter Barker 936fef11e2 AP_Filesystem: rename HAL_MISSION_ENABLED to AP_MISSION_ENABLED 2022-08-18 22:49:10 +10:00
Willian Galvani 0e62d561d9 AP_Filesystem: add allow_absolute_paths to open(), implement it for posix backend 2022-03-22 10:19:21 +11:00
Willian Galvani 802974a337 AP_Filesystem: tweak fgets()
This avoids that it returns False when encountering new lines or
\n\r
2022-02-01 17:35:26 +11:00
Andrew Tridgell 7c57e1521c AP_Filesystem: support formatting of SDcard on ChibiOS 2021-12-28 16:04:57 +11:00
Buzz 7c893d7cc9 AP_Filesystem: add ESP32 support
Author: Charles Villard <charlesvillard10@gmail.com>
Author: Buzz <davidbuzz@gmail.com>
2021-11-01 17:40:31 +11:00
Peter Barker df7b2982d3 AP_Filesystem: add fgets 2021-09-30 10:31:03 +10:00
Peter Barker c11a6bbb47 AP_Filesystem: add support for AP_Logger into AP_Periph 2021-06-08 09:57:55 +10:00
Andrew Tridgell e055165eb8 AP_Filesystem: added download of mission/fence/rally 2021-04-21 07:12:55 +10:00
Andrew Tridgell 773517a473 AP_Filesystem: added load_file() API
this makes it very easy to load a small file from sdcard or ROMFS
2020-11-18 09:11:36 +11:00
bugobliterator bf4f482f5e AP_FileSystem: do listing for SYS without slash as well 2020-11-12 08:42:44 +11:00
Andrew Tridgell e429d578fa AP_Filesystem: added interface for mount/unmount
we need to hold the FATFS semaphore when doing mount/unmount, which
means we must go via AP_Filesystem_FATFS
2020-10-27 10:45:03 +11:00
Andrew Tridgell 9b14fa7ed9 AP_Filesystem: enable @PARAM, @ROMFS and @SYS with no microSD 2020-04-29 07:36:55 +10:00
Andrew Tridgell cd3b4dcc7d AP_Filesystem: added @SYS filesystem backend 2020-04-29 07:36:55 +10:00
Andrew Tridgell 67fc23d01b AP_Filesystem: support downloading parameters via ftp
adds @PARAM/param.pck as a packed file of all parameters
2020-04-29 07:36:55 +10:00
Andrew Tridgell 10c709a5a1 AP_Filesystem: use @ROMFS 2020-03-28 15:28:03 +11:00
Andrew Tridgell 6583f7c13e AP_Filesystem: added VFS system for multiple backends 2020-03-28 15:28:03 +11:00
Andrew Tridgell 692abb11fa AP_Filesystem: define new filesystem API 2019-08-27 15:40:43 +10:00