Skip to content

feat: S29.04 Platform/PlusFat adapter pack + 100% host TDD#524

Merged
DavidCozens merged 8 commits into
mainfrom
feat/s29-04-plusfat-adapter
Jun 3, 2026
Merged

feat: S29.04 Platform/PlusFat adapter pack + 100% host TDD#524
DavidCozens merged 8 commits into
mainfrom
feat/s29-04-plusfat-adapter

Conversation

@DavidCozens

@DavidCozens DavidCozens commented Jun 3, 2026

Copy link
Copy Markdown
Owner

Purpose

Closes #522 (S29.04, epic #512 / E29). Add a FreeRTOS-Plus-FAT SolidSyslogFile
adapter so the PlusTCP target can later run a Plus-FAT-backed store (S29.05),
proving the SolidSyslogFile seam is FS-vendor-portable the same way E28 proved
the transport seam is TCP-vendor-portable. Host-tested pack only — media driver,
target swap, @store BDD, and docs/integrating-plusfat.md are S29.05.

Change Description

New Platform/PlusFat/ pack mirroring the FatFs sibling, adapted to the
ff_stdio API. 3-TU split (*.c / *Private.h / *Static.c) + an Errors
header — no Messages TU (the library is codes-only since S12.26; the epic
text predates that and has been corrected).

Key Plus-FAT vs FatFs differences:

  • Open tries ff_fopen(path, "r+") then falls back to "w+"
    open-or-create without truncating existing data (Plus-FAT has no open-always
    mode).
  • The FF_FILE* sentinel is the open-state — no separate IsOpen bool
    (FatFs needs one because its FIL is embedded).
  • Read/Write call ff_fread/ff_fwrite with xSize == 1 so the returned
    item count is the byte count; a short transfer is the single failure mode.
  • Write issues ff_fflush after every complete write (durability — a power
    loss never loses a record the BlockStore was told had been stored).
  • Truncate = ff_fseek(0) + ff_seteof; Size = ff_filelength;
    Exists/Delete = ff_stat/ff_remove.

Plus-FAT is FreeRTOS-coupled (ff_stdio.hff_headers.h pulls FreeRTOS.h /
task.h / semphr.h). We surface that in the test harness rather than hide it:
PlusFatFakes carries a test-local FreeRTOSFATConfig.h, the shared
FreeRtosFakes/FreeRTOSConfig.h gains configNUM_THREAD_LOCAL_STORAGE_POINTERS
(Plus-FAT keeps errno/CWD/ff_error in TLS slots), and the test include path adds
the kernel + Plus-FAT dirs.

The pool plumbing (Static.c) and its 9-test suite are copied + renamed verbatim
from FatFs — proven, agreed coverage. Every ff_* op was driven by genuine
red→green TDD.

Test Evidence

Tests/PlusFat/SolidSyslogPlusFatFileTest — 30 tests / 70 checks, 100%
line+branch by construction:

  • 9 pool tests (distinct-fallback, exhaustion-reports-error, fallback-Open-false,
    config-lock acquire/probe/destroy, unknown- & stale-destroy warnings) — copied.
  • 21 behavioural tests TDD'd one red→green at a time per op. Two invalid reds were
    caught (IsOpen-false and Write-returns-true both pass for free through the
    NullFile fallback) and replaced with reds that assert the call reached the
    fake.

Verified in the cpputest-freertos image: full host suite 22/22 green;
clang-tidy clean; cppcheck clean; cppcheck-misra exit 0 (one D.002 vtable-downcast
suppression added, mirroring every other adapter). ff_seteof/ff_stat/
ff_remove confirmed present in the pinned Plus-FAT SHA 8d38036.

Areas Affected

  • New: Platform/PlusFat/ (INTERFACE lib, gated on FREERTOS_PLUS_FAT_PATH),
    Tests/PlusFat/, Tests/Support/PlusFatFakes/.
  • Tests/Support/FreeRtosFakes/FreeRTOSConfig.h — additive TLS-pointer count
    (no effect on the other 21 host tests).
  • CI: Platform/PlusFat added to the cppcheck / cppcheck-misra command lists
    (ci.yml + scripts/misra_renumber.py, kept in lockstep); the freertos
    tidy/iwyu lanes pick it up via the configure.
  • Docs: CLAUDE.md public-header rows; DEVLOG entry.
  • No Core / Tier-1 / Tier-2 change; FatFs untouched.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added FreeRTOS-Plus-FAT file adapter enabling syslog logging to FAT filesystems.
    • Added optional build support for FreeRTOS-Plus-FAT integration.
  • Documentation

    • Documented new FreeRTOS-Plus-FAT adapter interface and error definitions.
  • Tests

    • Added comprehensive test coverage for FreeRTOS-Plus-FAT adapter operations.
    • Added test mocking infrastructure supporting FreeRTOS-Plus-FAT testing.
  • Chores

    • Updated CI workflows to analyze FreeRTOS-Plus-FAT adapter code.

DavidCozens and others added 8 commits June 3, 2026 21:27
Stand up Platform/PlusFat/ (INTERFACE lib, gated on FREERTOS_PLUS_FAT_PATH)
and the Tests/PlusFat host harness. The pool plumbing (Static.c) and its
9-test suite are copied + renamed verbatim from the FatFs sibling — proven,
agreed coverage. The class seam (Initialise/Cleanup) is a minimal stub; the
ff_* behaviour is driven by TDD from here.

PlusFatFakes carries the test-local FreeRTOSFATConfig.h; the shared
FreeRtosFakes FreeRTOSConfig.h gains configNUM_THREAD_LOCAL_STORAGE_POINTERS
(Plus-FAT's ff_stdio requires >= 3). Plus-FAT is FreeRTOS-coupled and the
test include path surfaces that rather than hiding it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drive the SolidSyslogFile lifecycle ops on the PlusFat adapter via TDD:
Open tries ff_fopen "r+" then falls back to "w+" (open-or-create with no
truncation, since Plus-FAT has no open-always mode); Close calls ff_fclose
guarded on an open handle; IsOpen and the open-state both derive from the
FF_FILE* sentinel (no separate bool); Cleanup closes any open handle before
the NullFile overwrite. PlusFatFake grows ff_fopen (with mode-fail injection
and mode/path spies) and ff_fclose.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Read maps to ff_fread(buf, 1, count, fp) and succeeds only when the returned
item count equals the requested count — a short read is the single failure
mode (Plus-FAT's ff_fread has no separate status return). PlusFatFake grows
ff_fread with source injection and size/items/call-count spies.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Write maps to ff_fwrite(buf, 1, count, fp) and, only on a complete write,
ff_fflush — so a power loss never loses a record the BlockStore was told had
been stored. Fails on a short write (skipping the flush) or a flush error.
PlusFatFake grows ff_fwrite (data/items spies + incomplete-write injection)
and ff_fflush (call-count spy + fail injection).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SeekTo maps to ff_fseek(fp, offset, SEEK_SET); Size returns ff_filelength.
PlusFatFake grows ff_fseek (offset/whence spies) and ff_filelength (length
injection).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Truncate empties the file via ff_fseek(fp, 0, SEEK_SET) then ff_seteof —
Plus-FAT has no truncate-to-zero call of its own. PlusFatFake grows ff_seteof.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Exists maps to ff_stat (true when it returns 0); Delete maps to ff_remove
(true when it returns 0). Both ignore the file handle and act on the path.
PlusFatFake grows ff_stat and ff_remove with path spies and fail injection.
This completes the SolidSyslogFile vtable for the PlusFat adapter.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add Platform/PlusFat to the cppcheck / cppcheck-misra command lists in ci.yml
and scripts/misra_renumber.py (kept in lockstep); the freertos tidy/iwyu lanes
pick the pack up automatically via the configure. Suppress the one vtable
downcast under deviation D.002. Apply clang-format and clang-tidy fixes to the
new pack and fake (ff_filelength param name, openModes pointer-array init).
Add the SolidSyslogPlusFatFile{,Errors}.h rows to the CLAUDE.md header table
and the S29.04 DEVLOG entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR implements the FreeRTOS-Plus-FAT file adapter pack (S29.04) for SolidSyslog. It adds a complete SolidSyslogFile implementation via ff_stdio, a host-side fake with full call tracking and failure injection, comprehensive behavioral and pool tests with 100% host line+branch coverage, and integrates the new adapter into CMake and CI lanes without modifying core or existing adapters.

Changes

FreeRTOS-Plus-FAT Adapter & Testing

Layer / File(s) Summary
Adapter public contract & error types
Platform/PlusFat/Interface/SolidSyslogPlusFatFile.h, Platform/PlusFat/Interface/SolidSyslogPlusFatFileErrors.h, CLAUDE.md
SolidSyslogPlusFatFile_Create and _Destroy factory API declared with C linkage; error enum (PLUSFATFILE_ERROR_POOL_EXHAUSTED, _UNKNOWN_DESTROY) and PlusFatFileErrorSource public contract; documented in CLAUDE.md public headers.
Core ff_ vtable implementation*
Platform/PlusFat/Source/SolidSyslogPlusFatFilePrivate.h, Platform/PlusFat/Source/SolidSyslogPlusFatFile.c
SolidSyslogPlusFatFile struct wraps SolidSyslogFile base + FF_FILE* handle; PlusFatFile_Initialise wires all 10 vtable ops (Open/Close/IsOpen/Read/Write/SeekTo/Size/Truncate/Exists/Delete) to ff_stdio calls; open-or-create via "r+" with fallback to "w+"; write durability via ff_fflush after each write; PlusFatFile_Cleanup closes handle and overwrites vtable with NullFile to prevent use-after-destroy.
Pool allocation & lifecycle
Platform/PlusFat/Source/SolidSyslogPlusFatFileStatic.c
Fixed-size pool storage with bitmap allocator; SolidSyslogPlusFatFile_Create acquires pool index, initializes, and returns handle or NullFile on exhaustion with error reporting; SolidSyslogPlusFatFile_Destroy resolves handle to index, frees via allocator with cleanup callback, reports warning on unknown/stale handle.
FreeRTOS/Plus-FAT test configuration
Tests/Support/FreeRtosFakes/Interface/FreeRTOSConfig.h, Tests/Support/PlusFatFakes/Interface/FreeRTOSFATConfig.h, Tests/Support/PlusFatFakes/CMakeLists.txt
FreeRTOS kernel config adds configNUM_THREAD_LOCAL_STORAGE_POINTERS = 5 for Plus-FAT TLS coupling; new FreeRTOSFATConfig.h defines byte order, CWD TLS index, and portINLINE fallback; PlusFatFakes layer documented.
PlusFatFake implementation
Tests/Support/PlusFatFakes/Interface/PlusFatFake.h, Tests/Support/PlusFatFakes/Source/PlusFatFake.c
Fake implements all ff_stdio functions called by adapter; configurable open/flush/stat/remove failures; scripted read source and incomplete write injection; call count and last-argument capture (paths, modes, offsets, sizes) for test assertions.
Core adapter behavioral tests
Tests/PlusFat/SolidSyslogPlusFatFileTest.cpp
9 test sub-groups validating open/close/read/write/seek/size/truncate/exists/delete ops via PlusFatFake; verifies fallback from read+ to write+ mode, read byte equality, write+flush atomicity, seek with SEEK_SET, and stat/remove boolean logic.
Pool & lifecycle tests
Tests/PlusFat/SolidSyslogPlusFatFilePoolTest.cpp
9 tests validating pool fill then overflow returns distinct fallback, pool-exhaustion reports error via ErrorHandlerFake, ConfigLockFake called once per probed slot during full-pool creation, destroy on pooled handles locks once, unknown/stale handle destroy reports warning via ErrorHandlerFake with correct source/detail.
Test harness & CMake configuration
Tests/PlusFat/main.cpp, Tests/PlusFat/CMakeLists.txt
Test runner forwards args to CommandLineTestRunner::RunAllTests; CMake conditionally defines test executable when FREERTOS_KERNEL_PATH set, links against project + fakes + CppUTest, combines PlusFat/Core/kernel include paths, registers with CTest.
Root build & CI integration
Platform/PlusFat/CMakeLists.txt, CMakeLists.txt, Tests/CMakeLists.txt, .github/workflows/ci.yml, scripts/misra_renumber.py, misra_suppressions.txt
New INTERFACE library target SolidSyslogPlusFat with header install; root CMakeLists conditionally includes PlusFat on FREERTOS_PLUS_FAT_PATH; Tests/CMakeLists adds PlusFatFakes + PlusFat subdirectories and registers JUnit output; cppcheck/cppcheck-misra lanes extended with -IPlatform/PlusFat/Interface and Platform/PlusFat/Source/ in include/source lists; new MISRA suppression for D.011.3 downcast at line 45.
Development documentation
DEVLOG.md
S29.04 entry documents host TDD work: harness spike confirming ff_stdio header coupling, pool+9-test suite copied/renamed from FatFs, design decisions (FF_FILE* open-state sentinel, element size 1 reads/writes, MISRA 11.3 suppression), and lesson learned reverting over-built allocator while catching invalid red behaviors masked by NullFile fallback.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • DavidCozens/solid-syslog#512: Main changes fully implement the S29.04 "Platform/PlusFat adapter pack" epic scope (headers, vtable wiring, pool management, fakes, tests, build/CI integration) with no Core/FatFs modifications and 100% host TDD coverage as specified.

Possibly related PRs

  • DavidCozens/solid-syslog#464: Both PRs extend .github/workflows/ci.yml cppcheck/cppcheck-misra commands to add platform adapter tree include-paths and source directories (main: Platform/PlusFat, retrieved: Platform/LwipRaw).
  • DavidCozens/solid-syslog#417: Both PRs update misra_suppressions.txt with targeted MISRA deviations; main adds suppression for Platform/PlusFat/Source/SolidSyslogPlusFatFile.c:45 (D.011.3 downcast), intersecting with #417's suppressions rebuild.

Poem

🐰 A fat filesystem adapts with grace,
Nine tests in place, no fallback's trace—
From pools that fill to writes that flush,
Plus-FAT and Solid syslog rush!
The fake runs free on tests we trust, 🐇✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 5.32% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Title clearly identifies the main change: adding the S29.04 Platform/PlusFat adapter pack with 100% host test-driven development.
Description check ✅ Passed Description comprehensively addresses all template sections: Purpose (closes #522, S29.04 epic #512), Change Description (detailed 3-TU split, ff_* mappings, FreeRTOS coupling), Test Evidence (30 tests, 100% coverage claim), and Areas Affected (Platform/PlusFat, Tests, CI, Docs).
Linked Issues check ✅ Passed Code changes fully satisfy #522 scope: Platform/PlusFat adapter pack with 3-TU split + Errors header, all 10 SolidSyslogFile vtable ops implemented via ff_* calls, PlusFatFake with 100% host TDD, pool-exhaustion fallback, freertos analysis lanes updated, CLAUDE.md and DEVLOG entries added.
Out of Scope Changes check ✅ Passed All changes are in-scope per #522: new Platform/PlusFat, Tests/PlusFat, Tests/Support/PlusFatFakes, test configuration updates, CI tooling additions, and documentation. No media driver, target swap, or integration docs present—correctly deferred to S29.05.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/s29-04-plusfat-adapter

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

☀️   Quality Summary

   🚦   build-linux-gcc: 100% successful (✔️ 1428 passed)
   🚦   build-freertos-host-tdd-plustcp: 100% successful (✔️ 1773 passed)
   🚦   build-linux-clang: 100% successful (✔️ 1362 passed)
   🚦   sanitize-linux-gcc: 100% successful (✔️ 1362 passed)
   🚦   integration-linux-openssl: 100% successful (✔️ 16 passed)
   🚦   integration-linux-mbedtls: 100% successful (✔️ 14 passed)
   🚦   integration-windows-openssl: 100% successful (✔️ 16 passed)
   🚦   bdd-linux-syslog-ng: 94% successful (✔️ 48 passed, 🙈 3 skipped)
   🚦   bdd-windows-otel: 88% successful (✔️ 45 passed, 🙈 6 skipped)
   🚦   bdd-freertos-qemu-plustcp: 86% successful (✔️ 44 passed, 🙈 7 skipped)
   🚦   bdd-freertos-qemu-lwip: 86% successful (✔️ 44 passed, 🙈 7 skipped)
   🚦   build-windows-msvc: 100% successful (✔️ 1217 passed)
   🚦   build-linux-tunable-override: 100% successful (✔️ 1362 passed)
   ⚠️   Clang-Tidy: No warnings
   ⚠️   CPPCheck: No warnings


Created by Quality Monitor v1.14.0 (#f3859fd). More details are shown in the GitHub Checks Result.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
Tests/PlusFat/SolidSyslogPlusFatFilePoolTest.cpp (2)

79-91: 💤 Low value

Consider using the CHECK_REPORTED macro for ErrorHandlerFake assertions.

For consistency with the established pattern, lines 87-90 could be replaced with:

CHECK_REPORTED(SOLIDSYSLOG_SEVERITY_ERROR, &PlusFatFileErrorSource, 
               SOLIDSYSLOG_CAT_POOL_EXHAUSTED | PLUSFATFILE_ERROR_POOL_EXHAUSTED);

However, this assumes the macro accepts the combined category|detail pattern. If not, the current explicit assertions are fine. Based on learnings, CHECK_REPORTED(severity, source, code) wraps the exact pattern used here.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Tests/PlusFat/SolidSyslogPlusFatFilePoolTest.cpp` around lines 79 - 91, The
test SolidSyslogPlusFatFilePoolTest::ExhaustedCreateReportsError uses individual
ErrorHandlerFake assertions; replace the four explicit checks after overflow =
SolidSyslogPlusFatFile_Create() (the CALLED_FAKE, LONGS_EQUAL, POINTERS_EQUAL,
UNSIGNED_LONGS_EQUAL calls) with a single CHECK_REPORTED(...) invocation
referencing SOLIDSYSLOG_SEVERITY_ERROR, &PlusFatFileErrorSource and the combined
code (SOLIDSYSLOG_CAT_POOL_EXHAUSTED | PLUSFATFILE_ERROR_POOL_EXHAUSTED); ensure
the CHECK_REPORTED macro is used consistently and accepts the combined
category|detail bit pattern before removing the original assertions.

145-173: 💤 Low value

Consider using the CHECK_REPORTED macro for ErrorHandlerFake assertions.

Lines 152-156 and 168-172 manually assert ErrorHandlerFake fields. For consistency with the established pattern, these could use the CHECK_REPORTED(severity, source, code) macro. The current explicit assertions are correct but the macro provides a more concise, canonical form.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Tests/PlusFat/SolidSyslogPlusFatFilePoolTest.cpp` around lines 145 - 173,
Replace the manual ErrorHandlerFake assertions in the two tests
(SolidSyslogPlusFatFilePoolTest::DestroyOfUnknownHandleReportsWarning and
::DestroyOfStaleHandleReportsWarning) with the canonical CHECK_REPORTED macro:
after calling SolidSyslogPlusFatFile_Destroy and asserting
CALLED_FAKE(ErrorHandlerFake_Handle, ONCE), remove the
LONGS_EQUAL/POINTERS_EQUAL/UNSIGNED_LONGS_EQUAL calls that check
ErrorHandlerFake_LastSeverity(), ErrorHandlerFake_LastSource(), and
ErrorHandlerFake_LastCategory()/LastDetail() and instead invoke
CHECK_REPORTED(SOLIDSYSLOG_SEVERITY_WARNING, &PlusFatFileErrorSource,
PLUSFATFILE_ERROR_UNKNOWN_DESTROY) to assert severity, source and code in one
concise call.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@Tests/PlusFat/SolidSyslogPlusFatFilePoolTest.cpp`:
- Around line 79-91: The test
SolidSyslogPlusFatFilePoolTest::ExhaustedCreateReportsError uses individual
ErrorHandlerFake assertions; replace the four explicit checks after overflow =
SolidSyslogPlusFatFile_Create() (the CALLED_FAKE, LONGS_EQUAL, POINTERS_EQUAL,
UNSIGNED_LONGS_EQUAL calls) with a single CHECK_REPORTED(...) invocation
referencing SOLIDSYSLOG_SEVERITY_ERROR, &PlusFatFileErrorSource and the combined
code (SOLIDSYSLOG_CAT_POOL_EXHAUSTED | PLUSFATFILE_ERROR_POOL_EXHAUSTED); ensure
the CHECK_REPORTED macro is used consistently and accepts the combined
category|detail bit pattern before removing the original assertions.
- Around line 145-173: Replace the manual ErrorHandlerFake assertions in the two
tests (SolidSyslogPlusFatFilePoolTest::DestroyOfUnknownHandleReportsWarning and
::DestroyOfStaleHandleReportsWarning) with the canonical CHECK_REPORTED macro:
after calling SolidSyslogPlusFatFile_Destroy and asserting
CALLED_FAKE(ErrorHandlerFake_Handle, ONCE), remove the
LONGS_EQUAL/POINTERS_EQUAL/UNSIGNED_LONGS_EQUAL calls that check
ErrorHandlerFake_LastSeverity(), ErrorHandlerFake_LastSource(), and
ErrorHandlerFake_LastCategory()/LastDetail() and instead invoke
CHECK_REPORTED(SOLIDSYSLOG_SEVERITY_WARNING, &PlusFatFileErrorSource,
PLUSFATFILE_ERROR_UNKNOWN_DESTROY) to assert severity, source and code in one
concise call.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e7de7f79-e0ab-4947-b653-134e8c9971d9

📥 Commits

Reviewing files that changed from the base of the PR and between 6ae08d9 and 87c1cb4.

📒 Files selected for processing (22)
  • .github/workflows/ci.yml
  • CLAUDE.md
  • CMakeLists.txt
  • DEVLOG.md
  • Platform/PlusFat/CMakeLists.txt
  • Platform/PlusFat/Interface/SolidSyslogPlusFatFile.h
  • Platform/PlusFat/Interface/SolidSyslogPlusFatFileErrors.h
  • Platform/PlusFat/Source/SolidSyslogPlusFatFile.c
  • Platform/PlusFat/Source/SolidSyslogPlusFatFilePrivate.h
  • Platform/PlusFat/Source/SolidSyslogPlusFatFileStatic.c
  • Tests/CMakeLists.txt
  • Tests/PlusFat/CMakeLists.txt
  • Tests/PlusFat/SolidSyslogPlusFatFilePoolTest.cpp
  • Tests/PlusFat/SolidSyslogPlusFatFileTest.cpp
  • Tests/PlusFat/main.cpp
  • Tests/Support/FreeRtosFakes/Interface/FreeRTOSConfig.h
  • Tests/Support/PlusFatFakes/CMakeLists.txt
  • Tests/Support/PlusFatFakes/Interface/FreeRTOSFATConfig.h
  • Tests/Support/PlusFatFakes/Interface/PlusFatFake.h
  • Tests/Support/PlusFatFakes/Source/PlusFatFake.c
  • misra_suppressions.txt
  • scripts/misra_renumber.py

@DavidCozens DavidCozens merged commit 21e0a82 into main Jun 3, 2026
27 checks passed
@DavidCozens DavidCozens deleted the feat/s29-04-plusfat-adapter branch June 3, 2026 21:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

S29.04: Platform/PlusFat/ adapter pack + PlusFatFake + 100% host TDD

1 participant