Compare commits

..

416 Commits

Author SHA1 Message Date
dependabot[bot]
94b4457154
Bump urllib3 from 2.5.0 to 2.6.0 (#4528)
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.5.0 to 2.6.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.5.0...2.6.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.6.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-09 14:09:27 -08:00
budhe888
1f860de821
Added missing undef for m_len in VxWorks collision fix (#4520)
Co-authored-by: Adit Sahasrabudhe <adit.sahasrabudhe@jpl.nasa.gov>
Co-authored-by: kevin-f-ortega <kevin.f.ortega@gmail.com>
2025-12-09 08:56:49 -08:00
Thomas Boyer-Chammard
f3b191beff
Address student review of Device Driver docs (#4509)
* First pass at addressing student review

* nits and pieces
2025-12-05 14:12:11 -08:00
Thomas Boyer-Chammard
59e1baa9d8
Add website navigability updates (#4504)
* Add minor website navigability updates

* Add navigation hint to User manual landing page

* add an arrow

* spelling
2025-12-05 14:08:24 -08:00
kevin-f-ortega
43de02bafd
Update docs for AssertHook (#4505) 2025-12-04 10:53:07 -08:00
Thomas Boyer-Chammard
6c80056596
Bump requirements.txt ahead of v4.1.0 release (#4488)
* Bump requirements.txt for v4.1.0 release

* Update GDS pointer to v4.1.0
2025-12-03 12:17:44 -08:00
M Starch
a8fe137283
Fix FPrimeRouter potential usage of invalid buffer (#4493)
* Fix #4491

* Formatting and enum size
2025-12-03 12:17:00 -08:00
Rob Bocchino
3a293cd705
FPP v3.1.0 (#4483)
* Update FPP version

* Update fpp version
2025-12-02 17:57:14 -08:00
mshahabn
e0afd3c3fb
Add missing implementation of GenericHub (#4420)
* Revise GenericHub model

* Revise GenericHub model

* Revise GenericHub model

* Update spelling

* Revise annotations

* Revise annotations for GenericHub model

* Revise annotations in GenericHub model

* Revise GenericHub model

* Revise GenericHub model

* Revise GenericHub model

* Revise GenericHub

* Revise GenericHub

* Revise GenericHub model

* Revise GenericHub model

* Revise GenericHub config

* Revise GenericHub model

* Revise GenericHub model

* Clean up naming in GenericHub implementation

* Revise GenericHub port names

* Revise annotations in GenericHub model

* Revise annotations in GenericHub model

* Revise annotations in GenericHub model

* Add ByteStreamDriverClient

* Revise ByteStreamDriverClient

* Revise ByteStreamDriverClient

* Revise driver interfaces

* Add PassiveByteStreamDriverClientSendAsync interface

* Add PassiveAsyncByteStreamDriverClient interface

* Add PassiveBufferDriver

* Revise PassiveByteStreamDriverClient interfaces

* Revise PassiveBufferDriver

* Revise Drv interfaces

* Revise PassiveBufferDriver

* Add PassiveBufferDriverClient

* Revise GenericHub model

Use interfaces from Drv

* Revise annotations in GenericHub model

* Revise FPP models

Point FPP to a non-released version with a bug fix

* Add ByteStreamBufferAdapter

* Revise ByteStreamBufferAdapter model

* Revise ByteStreamBufferAdapter

* Revise ByteStreamBufferAdapter

* Add AsyncByteStreamBufferAdapter

* Revise AsyncByteStreamBufferAdapter

* Revsie AsyncByteStreamBufferAdapter

* Revise AsyncByteStreamBufferAdapter

* Revise annotations in FPP model

* Revise ByteStreamBufferAdapter

* Bump fpp version

* Revise GenericHub model

* Revise GenericHub interface

* Revise GenericHub interface

* Fix typo in FPP annotations

* Revise Generic Hub model

* Fix spelling and formatting

* Review recommendations

---------

Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
Co-authored-by: thomas-bc <thomas.boyerchammard@gmail.com>
2025-12-02 17:56:34 -08:00
M Starch
cddf38bb6f
Make Os::Queues use Fw::MemAllocator pattern for memory (#4451)
* Queues use MemAllocator pattern

* Derive queue allocation from MallocRegistry

* Formatting

* Fix UTs

* Fix CI

* Fix alignment in UT

* Formatting and sp

* Formatting, bad header

* More formatting

* Add queue teardown

* Deinit components

* Fix priority queue test

* Fix bug in priority queue allocation

* Correct comments

* Fix FppTest and Ref UTs

* Fix max heap teardown

* Fix review comment on max heap

* Fix null -> nullptr
2025-12-02 17:36:15 -08:00
dependabot[bot]
89a9e3247b
Bump werkzeug from 3.0.6 to 3.1.4 (#4480)
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.0.6 to 3.1.4.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/werkzeug/compare/3.0.6...3.1.4)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-version: 3.1.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-02 14:27:49 -08:00
bevinduckett
a9e05045da
Add missing cstring includes (#4486)
* Modified the fprime-fpp version for fpp branch

* Fixes for missing includes

* Removed include from Fw/FPrimeBasicTypes.hpp and modified fprime-fpp version

* Fixed files that failed to include cstring header

* Changed string.h to cstring in BufferRepeater.cpp

* Updated formatting in ActivePhaser.cpp & BufferManagerComponentImpl.cpp

* Fixed formatting in FpySequencerStack.cpp & FpySequencerDirectives.cpp
2025-12-02 14:27:10 -08:00
djbyrne17
9fbf5800ab
Update Spi component to return a status on device access (#4452)
* Update Spi component to return a status on device access

* Format LinuxSpiDriver files and update comments from TODO to DEPRECATED

* Add assertions to LinuxSpiDriver

* Add assertions to LinuxSpiDriver

---------

Co-authored-by: djbyrne <djbyrne@jpl.nasa.gov>
2025-12-02 10:42:06 -08:00
M Starch
08f43279da
Fix improper file dependencies in the build (#4479) 2025-12-02 10:27:49 -08:00
Will MacCormack
e8c3fea70c
Add one more ifdef to allow POSIX_THREAD_ENABLE_NAMES off to compile (#4482) 2025-12-02 10:23:41 -08:00
Will MacCormack
b9a7059667
Set the Name of Fprime Tasks on Linux (#4428)
* Set the Name of Fprime Tasks on Linux

* prefix thread name w/ process name

* Revert "prefix thread name w/ process name"

This reverts commit 5867602f135c69022469c985b6de13458686e6a2.

* Add `setname` to spelling expected list

* Format My Changes

* Add in opt-out configuration

* Enable POSIX_THREADS_ENABLE_NAMES and fix ut

* Remove warning when flag set off

* UT thread names

* Add tmate session setup to build workflow

* Disable thread names on Ip UTs

* Use random thread ids in UTs

* Fix race condition

* Fix improper string set

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Michael D Starch <Michael.D.Starch@jpl.nasa.gov>
2025-12-01 10:15:35 -08:00
Rob Bocchino
aed0837c9c
Merge FPP v3.1.0a12 (#4474)
* Bump fpp version to v3.1.0a11

* Update FPP version to v3.1.0a12
2025-11-24 10:07:44 -08:00
M Starch
f5902583ce
Add component send only test (configSend, open) (#4465)
* Add component send only (configSend, open) test

* Formatting
2025-11-20 17:08:21 -08:00
Thomas Boyer-Chammard
5baf4076ab
Add best practice to CONTRIBUTING.md (#4464)
* Add best practice to CONTRIBUTING.md

* mention clang-tidy optional

* Add code formatting command
2025-11-20 11:11:29 -08:00
kevin-f-ortega
ba95054a24
missing more comments (#4463) 2025-11-20 08:20:17 -08:00
kevin-f-ortega
081a2f8654
Add missing argument description to Os::RawTime (#4461) 2025-11-19 16:22:25 -08:00
djbyrne17
027b658208
Update UT guidelines in Contributing guide (#4421)
* Add clang-tidy to requirement.txt, and update Unit Test guideline

* Leave out of requirements until rPI is supported or avoided

* Fix spelling of macOS

---------

Co-authored-by: djbyrne <djbyrne@jpl.nasa.gov>
2025-11-19 15:31:50 -08:00
Thomas Boyer-Chammard
6d756f7431
Specify dictionary types as required by GDS (#4442)
* Specify dictionary types as required by GDS

* Update requirements.txt for fprime-tools

* Update documentation referencing type
2025-11-19 12:13:28 -08:00
M Starch
8cbba542fc
Make fpp-to-json opt-in by default (#4449) 2025-11-19 12:02:15 -08:00
Will MacCormack
31b6488723
Print the task name when socket open/recv fails (#4434)
* Log task name of socket that failed to open port

* Give failed to recv the same treatment

* Format my changes
2025-11-18 16:56:22 -08:00
M Starch
62dd7445db
Restrict core C and DH when turning off text loggers (#4438) 2025-11-18 16:56:11 -08:00
M Starch
afb6f13853
Add convienence functions to MemoryAllocator (#4439)
* Add convienence functions to MemoryAllocator

* Fix comments
2025-11-18 16:55:57 -08:00
kevin-f-ortega
6388f046e1
Add undef to fix VxWorks collision problem (#4424)
* adding undef to fix collission problem.

* Fix comment typo in UdpSocket.hpp
2025-11-18 10:05:11 -08:00
Joseph Perez
6a132c5df4
Remove redundant line from ActiveRateGroup SDD (#4435) 2025-11-18 10:02:15 -08:00
Tristan
317ba3d7e0
Update fprime-gds version to 4.0.2a10 (#4433) 2025-11-18 09:48:15 -08:00
djbyrne17
402c0317b6
Update obsolete link in docs (#4423)
* Update obsolete link and screenshots

* Revert image updates

---------

Co-authored-by: djbyrne <djbyrne@jpl.nasa.gov>
Co-authored-by: chammard <thomas.boyer.chammard@jpl.nasa.gov>
2025-11-17 10:40:58 -08:00
Rob Bocchino
589871a957
Update FPP version to 3.1.0a10 (#4418) 2025-11-13 09:03:22 -08:00
M Starch
cc2522b257
Add fpp-to-json to FPP model sub-build (#4268)
* Add fpp-to-json to FPP model subbuild

* Update fprime-fpp version to 3.1.0a9
2025-11-11 17:59:32 -08:00
M Starch
6af7bcd5a9
ComAggregator updates (#4402)
* Fix timeout queue overflow with long transmissions

* Fix aggregator existing design

* Fix exactly full edge case

* Bump FPP version
2025-11-11 17:20:18 -08:00
Zimri Leisher
1c87278b6b
Clean up FpySequencer directives (#4395)
* Remove assert and float floor div

* Rename add/sub/mul

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-11-11 17:20:01 -08:00
Rob Bocchino
a587677fae
Fix FppTest (#4410)
* Fix regression in FppTest

* Rename SerializeBufferBase to LinearBufferBase

* Revise FppTest

Add missing tests to CMakeLists
2025-11-11 10:50:37 -08:00
Rob Bocchino
a46fccf54d
Fix Ref build (#4409)
CMake directives were out of order
2025-11-11 10:49:12 -08:00
Ian Brault
2b65cc83cf
Add new Fw::ConstStringBase type for strings backed by immutable string literals (#4269)
* Add new Fw::StringBase type StaticString for strings backed my immutable literals

* Spellcheck fix

* Add disclaimer comment about use of StaticString

* Refactor the StringBase interface into an immutable ConstStringBase abstract base class and the now mutable StringBase class

* Rename StaticString to ConstExternalString and inherit from ConstStringBase

* Fix typo

* Change references from StringBase to ConstStringBase where applicable

* Updates following review meeting: add missing deserialize function and add new error status, move length function implementation into ConstStringBase so it is not pure virtual

* Clang format fix

* Additional clang-format fixes

* Fix the copy-assignment operator for StringBase not being correctly evaluated

* Clang format fix

* Explicitly delete the Serializable assignment operator and provide a skeleton implementation for RawTimeInterface to appease the compiler

* Revert "Explicitly delete the Serializable assignment operator and provide a skeleton implementation for RawTimeInterface to appease the compiler"

This reverts commit 086d7bcd3ca9c4f6e553d7fc34d0d126a69a165b.

* Move ConstStringBase to separate hpp/cpp files, plus other pull request feedback

* Clang format fix

* Update length implementation for ConstStringBase and ConstExternalString

* Improved asserts in ConstExternalString constructor

Co-authored-by: Rob Bocchino <bocchino@icloud.com>

* Fixed ConstStringBase length implementation

Co-authored-by: Rob Bocchino <bocchino@icloud.com>

* Clang format fix

* Add some UTs for ConstExternalString, fix non-overridden interfaces, and fix ConstStringBase::maxLength asserting for zero capacity strings

* Spell-check fix for ConstExternalString UTs

* Revise length implementation in ConstStringBase

If the capacity is zero, return zero

* Format

---------

Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
Co-authored-by: Rob Bocchino <bocchino@icloud.com>
Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-11-07 09:50:05 -08:00
dependabot[bot]
90bac90821
Bump brotli from 1.1.0 to 1.2.0 (#4400)
Bumps [brotli](https://github.com/google/brotli) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/google/brotli/releases)
- [Changelog](https://github.com/google/brotli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/brotli/compare/go/cbrotli/v1.1.0...v1.2.0)

---
updated-dependencies:
- dependency-name: brotli
  dependency-version: 1.2.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-07 08:27:05 -08:00
Thomas Boyer-Chammard
ba5988bfcd
Add How-To Implement a Bus Driver guide (device driver 2 of 2) (#4398)
* initial changes

* v0.1

* More improvements

* fix spelling
2025-11-06 16:29:40 -08:00
Thomas Boyer-Chammard
d669ea2c5a
Replace FpConfig.h header with FPP model elements (#4393)
* Update FpConfig.h

* Update AcConstants.fpp

* Update FPrimeBasicTypes.hpp

* Update BasicTypes.h

* Update FpySequencer.hpp

* Update FpConfig.h

* Update FPrimeBasicTypes.hpp

* Update BasicTypes.h

* Update BasicTypes.h

* Update BasicTypes.h

* Update BasicTypes.h

* Update BasicTypes.h

* Update BasicTypes.h

* Update BasicTypes.h

* Update FPrimeBasicTypes.hpp

* Update FPrimeBasicTypes.hpp

* Update FpConfig.h

* Update AcConstants.fpp

* Revert casts

* Add static_cast in asserts, reorganize files per feature

* Fix static_assert after merging devel

* Add assert to static cast

* clean up comments and TODOs

* formatting

* Fix formatting

* Fix RHEL8 error

* Other UT cast fix

* cast one side only

* fix spelling and move assert count to FpConstants

* Reorder and comments

* rob test

* re-add double cast

* Revert testing static_cast

* Update docs

* use SIZE_OF variables instead of hardcoding value

* Update FpConfig in CMake tests

---------

Co-authored-by: ekswang <eric.k.wang@jpl.nasa.gov>
2025-11-06 16:29:15 -08:00
Vince Woo
48e4720419
Created new SerialBufferBase as a parent of SerializeBufferBase (now renamed LinearBufferBase). (#4288)
* Created new SerialBufferBase as a parent of SerializeBufferBase. Renaming interface functions to be less confusing.

* Deprecating copyRawOffset. No direct use-cases in F' core.

* Make SerialBufferBase a true pure virtual interface.

* Changing Serializable to work with SerialBufferBase parent interface.

* Changing copyRaw and copyRawOffset to work with SerialBufferBase

* Updating documentation for SerialBufferBase usage

* Adding some documentation. Adding missing ASSERT in copyRaw. Fixing some bugs that new ASSERT uncovered.

* Renaming SerializeBufferBase to LinearBufferBase. Add a using declaration to maintain backwards compatability. Properly mark LinearBufferBase functions as override.

* Filling in the rest of the docstrings for the classes in Serializable

* Removing redundant virtual keyword on override function

* Applying clang formatting

* Incorporating PR comments

* Fix compile issues

* Bump version to alpha

* Format

* v

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-11-06 16:23:20 -08:00
M Starch
b254e981a1
Update directives documentation with requirements (#4385)
* Update directives documentation with requirements

Added requirements for various directives and updated documentation.

* Refine sequencer requirements for clarity

* sp, missing exit requirement

* Update requirement references in directives.md

* Adding missing stack results as N/A

* Update requirements and descriptions in directives.md

Updated requirements for various directives and clarified descriptions. Removed unused directives and added TODOs for further specification.

* Update sequencer requirements in sdd.md

* Add in 2's complement notes.

Updated integer operations to use unsigned 64-bit integers and clarified handling of integers with 2's complement representation.

* Update documentation with 2's complement caution

Added caution note about 2's complement representation requirement.

* sp
2025-11-04 09:29:06 -08:00
Zimri Leisher
b1b613fd0c
FpySequencer Add DUMP_STACK_TO_FILE command (#4384)
* Add DUMP_STACK_TO_FILE command

* Add docstring

* Fix bug in directive

* format
2025-11-04 09:18:55 -08:00
Saransh Chopra
903677e97d
Fix clang-tidy checks (#4379)
* fix(.clang-tidy): `Checks` is supposed to be a comma separated list of checks

* fix clang-tidy warning

* fix a few lint warnings

* run clang-format

* more format
2025-11-03 17:45:54 -08:00
Thomas Boyer-Chammard
d6f43b02ff
Add How-To implement a Device Manager (device driver 1 of 2) (#4378)
* Add guide for developing device drivers in F Prime

* Add develop-device-driver.md

* Update device driver docs

* small fixes

* Polish things up

* more polishing

* spelling and link fixes

* Address review comments
2025-11-03 11:41:06 -08:00
Zimri Leisher
d0e9508988
FpySequencer new directives for loops (#4356)
* Rework exit, push tlm and push prm

* Rename store to store const offset

* Add new dirs for loops

* Compiling again

* Add UTs, passing

* Format

* sp

* Update schema version

* Update error code names

* Update directives documentation

* Add new stack class, switch DUPLICATE to PEEK

* Update peek docs

* Remove old docs

* sp

* sp, format
2025-11-03 10:03:38 -08:00
Copilot
aa4517c69b
Add Configuration section to BufferManager SDD (#4355)
* Initial plan

* Add Configuration section to BufferManager SDD

Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>

* Improve example by adding component instantiation

Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>

* Simplify configuration example and remove TBD sections per review feedback

Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>

* Manual updates

* add link

* Address review feedback: clarify memID, bin entry wording, and numBuffers description

Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>
Co-authored-by: thomas-bc <thomas.boyerchammard@gmail.com>
2025-11-03 09:36:28 -08:00
M Starch
edf5c85d09
Allow bypass of posix_fallocate with FPRIME_SYNTHETIC_FALLOCATE (#4380) 2025-11-03 09:33:34 -08:00
M Starch
695478d1a1
Bump fprime-gds to 4.0.2a9 for FileUplink fix (#4382) 2025-11-03 09:30:44 -08:00
M Starch
c51921aca3
Add more error checking to Fpy arithmetic directives (#4331)
* Add more error checking to arithmetic directives

* sp

* Inadvertant double literal fix

* Add missing std::
2025-10-30 10:43:08 -07:00
M Starch
cb9f3a982b
Clarify Fpy float operation behavior in documentation (#4328)
* Clarify float operation behavior in documentation

Updated float operations to specify handling of NaN and infinity.  Fixes #3892, #3893.

* sp correcting neq definition

* sp
2025-10-30 10:42:20 -07:00
M Starch
033f504418
Document sequencer requirements and directives (#4373)
* Document sequencer requirements and directives

Added detailed requirements for the sequencer, including support for various directives and operations.

* Reorganize sequencer requirements in documentation
2025-10-29 13:13:12 -07:00
Thomas Boyer-Chammard
fdc582bc56
Update CI for top-level namespace structure (#4353)
* Update CI for top-level namespace structure

* update deployment expect file

* Fix other led-blinker workflows

* Fix dictionary name

* formatting to trigger CI

* Update MathTutorial CI build location

* add fprime location
2025-10-29 11:07:36 -07:00
Thomas Boyer-Chammard
0d78cd407c
Fix macOS CI intermittent failure (#4347)
* Attempt CI fix and test debug setup

* Sleep longer to wait for downlink

* why tho?

* revert misc debug things
2025-10-22 17:26:25 -07:00
Philip Romano
bf12f48c27
Adjust task priorities to fit within supported platform priority ranges (#4337)
* Adjust task priorities to fit in supported platforms' priority ranges

Darwin's task priority range is most restrictive (15-47); adjusted priorities
to reside within that range.

* Add comment clarifying TASK_PRIORITY_DEFAULT and TASK_DEFAULT

* Adjust relative task priorities for uplink and downlink

This moves uplink tasks to higher priority than downlink tasks and places
consumer tasks at higher priority than producer tasks.
2025-10-22 15:46:05 -07:00
Philip Romano
3f25d8b535
Change FPP enums to smallest representation (#4342)
For all FPP enums in the framework, set the representing type to the minimum
width that can represent the enum's member constants.
2025-10-22 15:44:10 -07:00
Thomas Boyer-Chammard
c0b75fb06a
Refactor FrameAccumulator not to assert on incorrect size_out (#4340)
* Refactor FrameAccumulator not to assert on incorrect size_out

* spelling

* revert port names

* Update check logic
2025-10-22 15:17:27 -07:00
Andrei Tumbar
6bdd79f290
Time Limited Event Throttle (#4306)
* Time Limited Event Throttle

* Bump fpp version

* Bump fpp version to include dictionary fix

* Bump fpp
2025-10-21 11:19:09 -07:00
Thomas Boyer-Chammard
38361bebd1
Fix RawTime UT oversight on initialization (#4330)
* Fix RawTime UT oversight on initialization

* fix include path

* update calculation method

* revert to 5000 steps
2025-10-21 09:52:25 -07:00
Thomas Boyer-Chammard
4261f9d815
Update RawTime UTs to require a platform-specific helper (#4323)
* tmp

* Update RawTime.Now test to require a platform-specific helper

* Fix ordering for GitHub rendering not to trip up

* spelling
2025-10-20 14:16:12 -07:00
M Starch
c909a19a54
Add alignment to memory allocator (#4319)
* Add alignment to memory allocator

* Fix undefined reference

* Fix enum type comparison

* Switch to enum class

* format

* Fix time

* Update Fw/Types/MallocAllocator.hpp

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Fw/Types/MmapAllocator.hpp

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-10-20 12:51:36 -07:00
M Starch
4705b6c989
Fix O_SYNC on systems without the definition (#4322) 2025-10-20 11:10:35 -07:00
Thomas Boyer-Chammard
626473fc4e
Add News page to nav.yml (#4317) 2025-10-16 16:08:30 -07:00
Thomas Boyer-Chammard
1ff13ac93f
Address student feedback for How-To Framing protocol (#4314)
* Address student review feedback for How-To Framing protocol

* last couple nits

* fix spelling

* ugh

* add review comments
2025-10-16 15:51:00 -07:00
M Starch
a8328b95cf
Enhance Fpy docs with state machine diagram (#4315)
* Enhance documentation with state machine diagram

* sp
2025-10-16 15:34:37 -07:00
M Starch
4afac326ba
Update contribution guidelines for clarity and CCB process (#4312)
* Update contribution guidelines for clarity and process

Clarified the process for submitting pull requests and emphasized the importance of opening an issue first. Updated the note about F´ Autocoder Python and its replacement by FPP.

* Fix typo and reorganize CONTRIBUTING.md structure

Corrected a typo in the Code Contribution Process section and reorganized the structure of the CONTRIBUTING.md file for clarity.

* Update CONTRIBUTING.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-10-16 10:47:33 -07:00
Zimri Leisher
2fca863e4d
FpySequencer flag system (#4259)
* Much work on set flags

* Little more work on flags

* Get UTs passing

* Defaults for flags

* Add uts for set flag

* Switch from bitfield to boolean array

* fix ut

* more work on flag system

* Add some uts

* Add getflag dir

* format

* Update docs

* sp

* Remove update on change from bool tlm

* pr feedback

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-10-14 13:49:22 -07:00
Mishaal
0fc995fefd
Provide ability to update parameters via a file (#4165)
* Save point for PRM_SET_FILE work, add basic infrastruture

* fprime-format

* Create prime and backup DB, initial implementation of file based set, some UT updates

* More work on Prime and Backup DBs including helper methods, utilizing those for copy, and UTs

* spelling

* printf in Tester fix

* printf in Tester fix

* printf in Tester fix

* Remove a debug printf, update new method args, additional offNom Set File tests

* Spelling and format

* Clean up comments

* Sync with upstream devel updates

* Add additional UT for reverting parameter db on set file failure

* Spelling and format

* Updates to PrmDb after first review; change to active/staging design

* Spelling

* Remove FIXME comment

* Review fixes

* Fix UT

* Format

* Format II

* Format III

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-10-14 13:40:27 -07:00
Cel Skeggs
9c11872889
Mark SwAssert declarations as noinline (#4304)
* Mark SwAssert declarations as noinline

Without this change, a compiler using LTO may inline the zeros that are
inserted as additional parameters for the call to defaultSwAssert. This
increases code size to optimize for the off-nominal condition where an
assertion is tripped.

In my testing, this single change reduces my largest deployment's
code size by 11%.

* Add 'noinline' to dictionary

* Update Fw/Types/Assert.hpp

Co-authored-by: Rob Bocchino <bocchino@icloud.com>

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Rob Bocchino <bocchino@icloud.com>
2025-10-14 12:55:33 -07:00
M Starch
2ee27f82f3
Add Communication Aggregator Component (#4264)
* Add aggregator component

* Add com aggregator to subtopology

* Fix aggregator issues

* Format and SDD

* Add basic UTs

* Fix not-empty check, test

* sp

* Fix author tag

* Bump GDS for aggregation; timeout aggregator

* Bump comQueue event size

* Increase timeout for integration tests

* Update Fw/Buffer/Buffer.hpp

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Svc/ComAggregator/CMakeLists.txt

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Svc/ComAggregator/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Svc/ComAggregator/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Remove unused variable 'good' in action doClear

* A usage note about APID.

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-10-13 16:28:57 -07:00
Will MacCormack
9a7123c190
Little Endian Serialization (#4294)
* Passing the Default BIG Arg to Serialize Functions

* Fails on Ac Files

* Compiles w/ little endian autocode

* Unit Tests Pass

* Little Endian deserializeTo & Unit Test Little Endian SerDes

* Add little-endian SerDes examples to docs

* Add & Respect Endianness for Array Lengths & Remove unneeded Fw:: Prefix

* Switch to enum class Endianness

* Fixes for enum class Endianness

* Run code formatter

* Bump fpp to v3.1.0a4

* Update Fw/Time/Time.hpp

* Update Fw/Time/Time.hpp

---------

Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-10-13 14:15:06 -07:00
Will MacCormack
d385cb45ac
Bump fprime-gds to 4.0.2a8 in requirements.txt (#4299)
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-10-13 13:18:24 -07:00
djbyrne17
2de91b0916
NonASCII characters removed (#4298)
Co-authored-by: djbyrne <djbyrne@jpl.nasa.gov>
2025-10-13 09:41:41 -07:00
Andrei Tumbar
e1098018e2
Bump FPP with unified tool (#4287) 2025-10-09 17:00:24 -07:00
Angelina-2007
e34c019c3b
Fix typos in cross-compiling docs (#4280) 2025-10-09 10:38:41 -07:00
M Starch
74dd80e2b7
Add FPRIME_CMAKE_QUIET option (#4276)
* Add FPRIME_CMAKE_QUIET option

* Remove makefile deadcode

* Attempt CI debug

Add debugging message for FPRIME_SUB_BUILD_JOBS variable.

* Fix argument passing for sub-build jobs

* Update cmake/sub-build/sub-build.cmake

* Update cmake/sub-build/sub-build.cmake

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-10-08 16:30:36 -07:00
M Starch
7aa034c526
Add option for installing static libs (#4277) 2025-10-08 13:43:31 -07:00
M Starch
6c2698cea1
Bump C++ to 14 (#4278) 2025-10-08 13:39:20 -07:00
Thomas Boyer-Chammard
a4579d2fca
Add ErrorNotify port to CCSDS deframers (#4267)
* Add ErrorNotify port to CCSDS deframers

* Rename ErrorType to FrameError

* Update SDDs
2025-10-08 13:38:43 -07:00
Zimri Leisher
896803ad20
Add PUSH_TIME directive (#4275)
* Add push_time dir

* Add docs and UT

* format
2025-10-08 13:32:33 -07:00
Zimri Leisher
35840d549d
Add STEP command to FpySequencer (#4239)
* Remove debug prefix from breakpoint commands, start working on line by line step

* Actually add teh step cmd, some uts, update docs

* Fix step ut

* Split up tlm chans, add more for breakpoint stuff

* format

* Remove update on change from bool telemetry channels
2025-10-08 13:22:03 -07:00
Will MacCormack
589ed5d437
Switch to U64 Logger Tests (#4262)
* Use U64 for LoggerTests

* Switch `%llu` to PRI_U64

* Add back the `%` before PRI_U64

* clang-format LoggerRules.cpp
2025-10-06 13:26:36 -07:00
Rob Bocchino
e9d7f3ab66
Data structure library, phase 2 (#4062)
* Revise RedBlackTree impl docs

* Revise RedBlackTree impl docs

* Revise RedBlackTree impl docs

* Revise RedBlackTree impl docs

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl docs

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Fix typo

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl docs

* Revise RedBlackTree impl docs

* Revise RedBlackTree impl

* Revise RedBlackTreeImpl docs

* Revise Fw/DataStructures

Reformat code

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Fix comments

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise ArrayMap docs

* Remove helper scripts

* Revise tests for Fw/DataStructures

* Fix spelling

* Fix Markdown link

* Fix uninitialized variable in test

* Fix uninitialized variable in test

* Fix "spelling"

Why is the spelling check enforcing arbitrary rules of style?

* Fix comments

* Revise RedBlackTree impl docs

* Start adding RedBlackTree impl

* Revise tests for ArraySetOrMapImpl

* Revise RedBlackTree impl

* Revise comment

* Revise comment

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise ArraySetOrMap impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Add RedBlackTree impl tester

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Fix comments

* Revise RedBlackTree impl

* Fix comments

* Revise comments

* Revise comments

* Revise comments

* Revise statement order for clarity

* Revise unit tests for RedBlackTree impl

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Add build and clean scripts

Working around regressions in the F Prime build system

* Revise build

Fix warnings

* Revise RedBlackTree impl and tests

* Revise tests for RedBlackTree impl

* Revise RedBlackTree impl and tests

* Revise RedBlackTree tests

Remove debug print statements

* Revise RedBlackTree impl tester

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise build script

* Revise RedBlackTree tests

* Revise RedBlackTree tests

* Revise RedBlackTree tests

* Revise RedBlackTree tests

* Revise RedBlackTree tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl test

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise comment

* Revise RedBlackTree impl and tests

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl tests

* Revise RedBlackTree impl

* Revise RedBlackTree impl tests

* Revise formatting

* Format code

* Revise docs

* Revise docs for Fw/DataStructures

* Revise Array and ExternalArray

Add static assertions

* Revise FifoQueue and Stack

Add static assertions

* Revise ArraySet and ArrayMap

Add static assertions

* Revise docs for ExternalRedBlackTreeMap

* Revise docs for ExternalRedBlackTreeSet

* Revise docs for RedBlackTreeMap

* Revise docs for RedBlackTreeSet

* Revise ExternalRedBlackTreeMap tests

* Refactor ExternalStackTester

* Revise ArrayMap tests

* Add RedBlackTreeMap

* Revise RedBlackTreeMap tests

* Revise RedBlackTreeMap

* Add ExternalRedBlackTreeSet

* Add missing file

* Revise SetConstIterator

* Revise ExternalRedBlackTreeSet tests

* Revise ExternalRedBlackTreeSet tests

* Revise ExternalRedBlackTreeSet tests

* Revise ExternalRedBlackTreeSet tests

* Revise ExternalRedBlackTreeSet tests

* Revise ExternalRedBlackTree tests

* Revise ExternalArraySet tests

* Revise ExternalArraySet tests

* Add RedBlackTreeSet

* Revise RedBlackTreeSet tests

* Refactor ArraySetTest

* Revise RedBlackTreeSetOrMapImpl docs

* Revise array initialization

* Revise comments

* Revise Array initialization

* Revise Array design and implementation

* Revert changes to Fw/DataStructures

* Revise Array

* Revise Array

* Revise Array

* Fix formatting

* Add SizedContainer base class

* Revise StackBase

Make it inherit from SizedContainer
Revise stack tests

* Revise MapBase

Make it inherit from SizedContainer
Revise tests

* Revise SetBase

Make it inherit from SizedContainer
Revise tests

* Revise DataStructures design

Add SizedContainer

* Revise SDD for DataStructures

* Revise DataStructures design

* Revise DataStructures design

* Revise DataStructures design

* Revise DataStructures design

* Fix spelling

* Revise zero-arg constructor for Array

* Revise Array interface

Make it consistent with the arrays generated by FPP

* Fix to assertion

* Format code

* Fix spelling

* Fix spelling

* Add -Wno-comment to suppress warnings for now

* Revise comments

* Revise diagrams

* Fix comment warnings on gcc

* Eliminate tabs

* Remove utility scripts

* Revise placement of break statements

* Rename function

getParentDirection --> getDirectionFromParent

* Add comment

* Add svg diagram

* Add svg diagram

* Add svg files

* Revise diagram

* Replace png with svg

* Replace png with svg

* Replace png with svg

* Revise comment

* Revise SDD for red-black tree

* Revise SDD for red-black tree
2025-10-06 13:26:23 -07:00
M Starch
20477ad9c8
Make GenericHub EXCLUDE_FROM_ALL (#4178)
* Make GenericHub EXCLUDE_FROM_ALL

* Add a build stage for Svc_GenericHub

CppCheck requires every target to be built.

* sp

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-10-06 10:48:05 -07:00
Andrei Tumbar
498546eac9
Bump FPP to 3.1.0a2 (#4263) 2025-10-06 10:19:51 -07:00
Ian Brault
c7048d0b9c
Fix for PosixFileTest UT failure (#4254)
Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
2025-10-06 10:19:08 -07:00
kevin-f-ortega
0a945a55c9
must be explicit when using unions otherwise size mispatch could occur (#4256)
* must be explicit when using unions otherwise size mispatch could occur

* fixed formatting
2025-10-06 10:18:20 -07:00
Cel Skeggs
7fbe13086a
Clear up encoding and newline errors (#4252)
* Require and add newlines at EOF in all C++ code

* Fix use of UTF-8 encoding in ci/config.xml

* Add missing newlines to ends of other files
2025-10-02 13:34:25 -07:00
Thomas Boyer-Chammard
1786ffee01
Update CI to use latest macOS intel runners (#4251) 2025-10-02 13:27:47 -07:00
Zimri Leisher
9139148de2
FpySequencer Add push tlm val and time dir (#4230)
* Add push tlm val and time dir

* Update sdd with latest directives

* format

* Rework overflow check
2025-09-30 13:47:43 -07:00
Steven Doran
43ed537106
CWE 453 cmd buffer assert (#4198)
* Initial fix for CWE-453-CmdBufferAssert

* Added EVR throttle; updated ut

* Updated unit tests

* Updated UT to check for TLM update

* Implemented finding from pull request

* Removed Test Directory

* Update model and SDD

* Move telemetry to rate group to prevent flood

* Fix Ref topology

* Format

* sp

---------

Co-authored-by: bitWarrior <bitWarrior@protonmail.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-09-30 13:26:04 -07:00
Ian Brault
157f0f4d23
Fix inconsistencies in Drv.LinuxUartDriver SDD (#4237)
Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
2025-09-30 11:20:54 -07:00
kevin-f-ortega
3fa2ed9716
Bump fprime-gds dependency (#4236) 2025-09-30 11:19:55 -07:00
Thomas Boyer-Chammard
0e40726440
Add nomenclature document (#4200)
* Add nomenclature document

* whitespaces

* whitespaces

* fix spelling

* Update nomenclature with software slug representation

Added software slug representation for F Prime.

* sp

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-09-29 13:48:44 -07:00
Pavly Gerges (pavl_g)
6433f694c7
RateGroup Docs Enhancements (#4196)
* Update rate-group.md

* Update expect.txt

* Added a word to the dictionary.
2025-09-26 15:01:57 -07:00
M Starch
8b1d627139
Add improvements to ComQueue (#4190)
* Move dequeued ComBuffer to persistent memory

* Add ordering notes to com interface docs

* Add buffer ownership tracking

* Assert dequeue status for serialized buffer

Added status check for dequeue operation to ensure successful serialization.

* Fix static_assert -> static_cast

* Fix format
2025-09-25 15:05:08 -07:00
M Starch
73ab9621e4
Ci zephyr (#4141)
* Add reusable action and workflow for CI and set up

* Add branch for testing

* Call correct workflow

* Remove superfluous input (tmp)

* Switch to fprime-actions

* Add with

* Actions typo

* Add plugin package installation

* Add build stage

* Fix container

* Remove container

* Trial of West

* Add custom setup

* Add push event

* Fix event data mining for push

* Fix push payload usage

* Fix branch detection

* Fix bash-foo

* Fix resuable project CI

* Add custom runner set up

* Typo

* Add intgration step

* Fix archive download

* Debug commands

* Download after setup

* Fix download path

* adding workflow for pico2 zephyr

* updated reusable workflow to clean up when done, otherwise garbase is left and it causes issues with subsequent runs

* fixing formatting because it matters

* Remove erroneous clean-up

* sp

* Add make space step

* Fix review requests

---------

Co-authored-by: Kevin F. Ortega <kevin.f.ortega@jpl.nasa.gov>
2025-09-25 13:29:58 -07:00
kevin-f-ortega
8ad0b830e8
regex is a bit wrong. It never would work with 'Os/File.hpp' (#4193) 2025-09-25 12:34:31 -07:00
Thomas Boyer-Chammard
9141f01919
Fix Intermittent UT failure in FprimeDeframer (#4177)
* Fix random UT failure in FprimeDeframer

* Update UTs and docs to reflect expectations
2025-09-23 09:28:30 -04:00
chuynh4duarte
b377be2a9f
Update Int to match PR4079 and clean-up Int Misc (#4111)
* update seq_gen to match PR 4079

* comment-out check specific number of events.  re-run multi without cause error

* fixed format

* change warn_hi to greater_or_equal_to 1 and put back 2 extra AppendFile

---------

Co-authored-by: Cindy T Huynh <chuynh@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-09-22 10:21:39 -07:00
Mishaal
bae7d2573c
Socket automatic reconnections in dedicated thread (#4136)
* Initial addition of dedicated reconnect task in SocketComponentHelper

* Updates to fix UT errors, address FIXMEs, update comments

* Additional FIXMEs and doc updates

* Spelling fix

* Format

* Format and some delay updates

* Address second request FIXMEs (remove)

* Unconditional stop & join in UDP tester cleanup

* Address FIXMEs and update Task to init singleton in a thread and address sanitizer safe manner

* Spelling

* Address PR review comments
2025-09-22 10:09:35 -07:00
jp
40142d7d39
Add system resources integration test (#4126) 2025-09-22 08:40:45 -07:00
Vince Woo
3422cfa117
Mark legacy serialize and deserialize methods as DEPRECATED. Upgrade remaining references to legacy methods. (#4145)
* Mark legacy serialize and deserialize functions as deprecated. Clean up of remaining legacy references.

* Upgrading serialization in FppTestProject and Ref

* Fixed formatting issues
2025-09-22 07:57:34 -07:00
Mishaal
01e3d70925
Add support to set socket options for IP sockets (#4146)
* Add setsockopt support

* Format

* format and spelling in cfg
2025-09-22 07:27:06 -07:00
Andrei Tumbar
5bee1a1151
Add Fw::TimeInterval constructor for computing delta between start/en… (#4172)
* Add Fw::TimeInterval constructor for computing delta between start/end time

* Format code

* Make the constructor better
2025-09-22 07:17:10 -07:00
Rob Royce
241e74ea1d
Fix grammatical error in F' introduction (#4174) 2025-09-21 13:12:20 -07:00
Andrei Tumbar
b28709cbdb
FPP 3.1.0a1 (#4161) 2025-09-17 14:14:14 -07:00
kevin-f-ortega
38f0c1f3b2
Update supported platforms document (#4152)
* moving feather m4 to the supported target table

* udpated dates
2025-09-15 16:36:05 -07:00
M Starch
e21fa7b109
Add Svc.BufferAllocation FPP interface (#4148)
* Add Fw::Buffer allocation interface

* Update Svc/Interfaces/Allocation.fpp

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Rename BufferAllocation.fpp interface file

* Update input file for Svc_Interfaces module

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-09-15 16:35:24 -07:00
Thomas Boyer-Chammard
ade6cc5ff3
Make APID and FwPacketDescriptorType the same width (#4076)
* Make APID same width as FwPacketDescriptorType

* Rename ComCfg.APID to ComCfg.Apid

* Fix FprimeDeframer UTs

* FpySequencer stack based architecture (#3975)

* Some work towards stack based arch

* Bring fp/int conv up to date

* Get compiling with stack based arch

* Start trying to fix UTs

* Start adding store/load dirs

* Add push val dir

* UTs are running

* UTs passing

* Make exit stack based

* Fix more uts

* Fix final UTs

* sp

* Fix overflow potential err

* Fix another overflow

* same error fix

* Update sdd

* sp

* Fix undefined behavior with bitshift of signed integer

* sp

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>

* Fix AI Policy link in PR template (#4019)

* Update NOTICE.txt references (#4045)

With the removal of the Autocoders directory, we also remove the pyparsestring usage.

* Reformat FppTest (#4048)

* Update Drv IP stack to use FwSizeType instead of U32 (#4013)

* Update IP stack source to use SizeType instead of I/U32

* Update UTs reflecting U32/I32 change to SizeType

* Static cast sizes per review

* Fix commented out thing

* Basic data structure library, phase 1 (#3927)

* Revise SDD for SetBase

* Revise SDD for SetBase

* Revise SDD for Fw/DataStructures

* Revise SDD for FifoQueue

* Revise SDD for Fw/DataStructures

* Revise SDD for MapBase

* Revise SDD for StackBase

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Add StackBase.hpp

* Add ExternalStack.hpp

* Add Stack.hpp

* Add ExternalStackTest

* Revise Stack tests

* Revise ExternalStack

* Revise ExternalStackTest

* Revise ExternalStackTest

* Revise ExternalStackTest

* Revise ExternalStackTest

* Add StackTest

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Add MapIterator

* Add SetIterator

* Add SetOrMapIterator

* Add MapBase.hpp

* Revise SDD for Fw/DataStructures

* Revise SDD for ArraySetOrMapImpl

* Revise SDD for ArraySetOrMapImpl

* Revise SDD for ExternalArray

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Revise MapBase

* Revise MapBase

* Revise comments

* Revise SDD for ArraySetOrMapImpl

* Revise Fw/DataStructures

* Add ArraySetOrMapImpl

* Add ExternalArrayMap

* Revise ExternalArrayMap

* Revise Fw/DataStructures

* Revise SetBase

* Revise SDD for Fw/DataStructures

* Revise SDD for ExternalArraySet

* Revise SDD for ExternalArraySet

* Revise SDD for ArraySetOrMapImpl

* Revise Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Revise Fw/DataStructures tests

* Revise unit tests for Fw/DataStructures

* Revise tests for ArraySetOrMapImpl

* Revise unit tests for Fw/DataStructures

* Revise unit tests for Fw/DataStructures

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for Fw/DataStructures

* Revise SDD for SetOrMapIterator

* Add ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise design for sets and maps

* Revert changes to design

* Revise unit tests for Fw/DataStructures

* Revise unit tests for Fw/DataStructures

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise unit tests for ArraySetOrMapImpl

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest and MapTest

* Revise MapTestScenarios

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise array set and map

Remove at function from interface.
It breaks the array or set abstraction.
It provides little value, since one can use the iterator
provided by SetBase or MapBase to range over the elements.

* Revise ExternalArrayMapTest

* Add ExternalArraySetTest

* Revise ExternalArraySet and ExternalArrayMap

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest and ExternalArrayMapTest

* Revise ArraySetOrMapImplTest

* Revise ExternalArrayMapTest

* Revise ExternalArraySetTest

* Revise SDD for ArrayMap

* Revise SDD for ArraySet

* Revise SDD for ArraySet

* Add ArrayMap

* Revise ArrayMapTest

* Revise Fw/DataStructures

* Revise SDDs for ArrayMap and ArraySet

* Revise Fw/DataStructures

* Refactor map test scenarios

* Refactor data structures tests

* Refactor SetTestScenarios

* Refactor FifoQueueTestScenarios

* Refactor ExternalFifoQueueTest

* Revise Fifo Queue tests

* Refactor ExternalFifoQueueTest

* Revise comments

* Revise Stack tests

* Revise Stack tests

* Refactor Stack tests

* Revise Stack tests

* Revise Array

Remove getStaticSize

* Refactor Fifo tests

* Refactor ArraySetOrMapImplTest

* Revise data structures design

Rename Iterator to Entry

* Revise data structures implementation

Rename Iterator to Entry

* Revise data structures impl and test

Rename Iterator to Entry throughout

* Revise data structures implementation

Rename SetOrMapEntry to SetOrMapImplEntry

* Revise data structure implementation

Rename Entry to ImplEntry

* Revise data structures design

Rename symbols to match implementation

* Revise design for data structures

Add ConstIterator to Map

* Revise ArraySetOrMapImpl

Add ConstIterator

* Add iterators to DS implementation

* Revise map iteration

* Revise unit tests

Use iterators for maps

* Revise iterators

* Revise iterators

* Rename MapEntry to MapConstEntry

* Revise map interface

* Rename SetOrMapImplEntry to SetOrMapImplConstEntry

* Revert "Rename SetOrMapImplEntry to SetOrMapImplConstEntry"

This reverts commit cc6371d03c8f65fa130212d589812cf4ab3714fe.

* Rename SetEntry to SetConstEntry

* Add SetConstIterator

* Revise SetBase and unit tests

Use iterators

* Revise set interface

* Revise comments

* Reformat code

* Revise array set and map impl

Remove forward links

* Revise data structures tests

* Revise Set iterator

* Remove SetConstEntry

* Refactor SetOrMapImplEntry

* Pull in changes from rb-tree branch

* Revise MapBase

* Revise MapBase and docs

* Revise MapBase

* Revise MapBase

* Revise iterators

* Revise MapConstIterator docs

* Rename MapConstEntry to MapEntry

* Revise MapEntry

* Fix MapBase docs

* Revise MapConstIterator

* Revise MapEntry

* Revise MapConstIterator docs

* Revise docs for ExternalArrayMap

* Revise ArrayMap docs

* Revise ArraySetOrMapImpl

* Revise SetOrMapImplEntry

* Revise MapEntry

* Revise map and set interfaces

* Revert changes to map interface

* Rename MapEntry to MapEntryBase

* Revise type aliases

* Reformat code

* Revise SetBase

* Revise map interface

* Revise set and map interface

* Revise ExternalArraySet docs

* Revise ArraySet

* Revise ArraySet docs

* Revise SetConstIterator

* Revise SetBase

* Revise SetBase docs

* Revise SetBase

* Revise ArraySet

* Revise ArraySet docs

* Revise ExternalArraySet docs

* Add SetOrMapImplEntry

* Revise ArraySetOrMapImpl

* Revise Fw/DataStructures

Reformat code

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Fix comments

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise ArrayMap docs

* Remove helper scripts

* Revise tests for Fw/DataStructures

* Fix spelling

* Fix Markdown link

* Fix uninitialized variable in test

* Fix uninitialized variable in test

* Fix "spelling"

Why is the spelling check enforcing arbitrary rules of style?

* Fix comments

* Revise tests for ArraySetOrMapImpl

* Revise comment

* Revise ArraySetOrMap impl

* Revise formatting

* Revise docs

* Revise docs for Fw/DataStructures

* Revise Array and ExternalArray

Add static assertions

* Revise FifoQueue and Stack

Add static assertions

* Revise ArraySet and ArrayMap

Add static assertions

* Revise ArrayMap tests

* Revise ExternalArraySet tests

* Refactor ArraySetTest

* Revise array initialization

* Revise comments

* Revise Array initialization

* Revise Array design and implementation

* Revert changes to Fw/DataStructures

* Revise Array

* Revise Array

* Revise Array

* Fix formatting

* Add SizedContainer base class

* Revise StackBase

Make it inherit from SizedContainer
Revise stack tests

* Revise MapBase

Make it inherit from SizedContainer
Revise tests

* Revise SetBase

Make it inherit from SizedContainer
Revise tests

* Revise DataStructures design

Add SizedContainer

* Revise SDD for DataStructures

* Revise DataStructures design

* Revise DataStructures design

* Revise DataStructures design

* Revise DataStructures design

* Fix spelling

* Revise zero-arg constructor for Array

* Revise Array interface

Make it consistent with the arrays generated by FPP

* Fix to assertion

* FpySequencer arithmetic (#4025)

* Some work towards stack based arch

* Bring fp/int conv up to date

* Get compiling with stack based arch

* Start trying to fix UTs

* Start adding store/load dirs

* Add push val dir

* UTs are running

* UTs passing

* Make exit stack based

* Fix more uts

* Fix final UTs

* sp

* Fix overflow potential err

* Fix another overflow

* same error fix

* Format

* Also add to format checker

* Add math directives

* Add integer extension and truncation

* Also check correct size on stack

* Fix comment

* Push cmd response to stack

* Cast cmd response code to i32

* Add stack cmd, memcmp, discard dirs

* Fix some bugs with stack cmd

* Fix lil bug in sgtack cmd

* same bug

* Fix another bug sry

* Update sdd

* sp

* Fix undefined behavior with bitshift of signed integer

* sp

* Fix lil bug in timeout detection of stack cmd

* Switch format check to do all Svc dirs

* Reformat, and fix packet descriptor serialize bug

* Add UTs for all of arith ops

* Add tests for disc, memcmp, stack cmd

* Add deser tests for those three dirs

* sp

* Format

* Replace magic numbers with sizeofs

* Add currentStatementIdx helper function

* Format

* Split imod into smod and umod

* sp

* Add fmod, copy python behavior for fmod and smod

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>

* Update supported platforms (#4071)

* improved step to contribute back

* added delivery date for targeted platforms

* added tbd since we are not sure at the moment

* fixed column data

* updating list of supported targets. This reflects how F Prime runs on these hardware with zephyr.

* alphabetized list and added link for freertos

* fix spelling

* rename Apple M* to Apple Silicon

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Add ground derived channels how-to guide (#4074)

* Initial derived channel work

* Write ground-derived channels

* Update plugin handler

* Updating publishChannel case

Updated method name to follow naming conventions.

* Fix method name to use snake_case in documentation

* Add environment setup to CONTRIBUTING.md (#4078)

* Fix typo `cp` to `cd` in CONTRIBUTING.md

* Mention Python venv requirements for running tests

* Add logic for assert failure short circuiting in `AssertFatalAdapter` (#4042)

* Add logic for assertion short circuiting

- Add guard logic to AssertFatalAdapter to prevent a cascading FW_ASSERT chain from occurring
- If any assert checks fail while handling an in-progress assert check failure, reportAssert will log the
additional assert and execute the system-specific assert handler before returning

* Update assert guard logic to counter based

- Instead of using a bool guard to determine when to off-ramp from a series of FW_ASSERT check failures,
use a counter that is configurable in a program's FpConfig.h file

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>

* Add subtopology documentation (#4072)

* Add subtopology guide

* fix typo and how-to

* Add reference link

* Add event ID filters to text logger components (#4028)

* Add event ID filter to PassiveConsoleTextLogger

* Add event ID filter to ActiveTextLogger

* Add const qualifier to filtered event list pointers

* Fix assert argument types

* Fix clang format errors

* Fix copy-paste error on include file

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Add missing initialization to ActiveTextLogger constructor

---------

Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>

* Bump GDS to v4.0.2a3 (#4079)

* Bump to v4.0.2a2 (GDS)

* Fix integration tests

* Fix requirements.txt

* Allow FPP arrays of arbitrary size (#4073)

* Revise array tests

Update constructor calls to conform to new code gen
Format the code

* Reformat FppTest

* Revise requirements.txt

* Update requirements.txt

* Update fpp version

* Revise Ref to conform to FPP changes

* Remove trailing spaces

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update project structure in cookiecutters CI (#3991)

* Update project structure

* Fix sourcing path

* fix paths

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Fix #3397 (#4086)

* Add test driven development how-to (#4090)

* Add test driven development how-to

* sp; review

* Add reusable InT test scripts (#3923)

* add deployment function

* update file to use config json file

* remove unuse function

* fix typos

* fixed spelling

* update to use get_mnemonic

* rm shellcmd from fileManager and add health & systemResources testcase

* check memory usage and number of CPUs

* remove Ref.PingReceiver and fixed typos

* fixed spelling fileDownlink,health,systemResources and add config.json file

* Update config.json

* replace ActiveLogger to EventManager

* Updated config.json use lowercase CdhCore and FileHandling(fileDownlink,fileManager,prmDb) and ComCcsds(cmdSeq) etc

* update test_cmd_version to compare version of telemetry channel vs. evr version

* extend max_delay to work with Raspberry pi

* rename config.json to int_config.json

* delete Ref/config.json new file name int_config.json

* add time.sleep between AppendFile cmd to work with rasberry Pi

* fix int_config.json and add new Int DpMgr, DpWriter and DpCatalog

* add comments to confirm /tmp/1MiB.txt and /tmp/test_seq.seq exist before execute script

* add send uplink files

* Rename config.json, fix spelling

* python formatting

---------

Co-authored-by: Cindy T Huynh <chuynh@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
Co-authored-by: Kevin F. Ortega <kevin.f.ortega@jpl.nasa.gov>

* Modify LinuxTimer interface for consistency (#4087)

* Use Fw::TimeInterval in LinuxTimer

* Fix Linux FD typo

* Fix interval timer UT

* Format

* Fix assert casts

* Fix ComLogger UTs

* Fix FppTest microseconds

* Fix casting

* Fix overflow

* FpySequencer U32 stack size + some error telemetry (#4065)

* Switch everything that references stack size or offset to U32

* Add dir err tlm

* Rename tlm point to be consistent

* Update state tlm type to enumstoretype

* Make new Fpy::StackSizeType alias

* Add explanation for why we chose U32

* Fix one more static cast

* Bump schema vers to 2

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>

* Add Framing subtopologies and use them within Com subtopologies (#4113)

* Update ComX subtopologies to not include ComStub and update Ref

* Cosmetic updates

* Working FramingCcsds subtopology used in ComCcsds

* Revert Ref to use ComCcsds

* Move FramingSubtopology into ComCcsds build module

* Working ComFprime subtopology

* Cosmetic updates

* formatting

* Incorporate student feedback for ground derived channels (#4117)

* Update fprime-gds version to 4.0.2a4 (#4118)

* Revise subtopology development documentation (#4119)

* Revise subtopology development documentation

* Document subtopology configuration process

Added detailed instructions for configuring subtopologies, including module setup and CMake integration.

* Enhance documentation on subtopology structure

Added recommendations for including documentation and optional files in subtopology.

* fix spelling

* fix spelling v2 final

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Add SDD for ComCcsds subtopology (#4128)

* Create SDD for ComCcsds subtopology

* Update Svc/Subtopologies/ComCcsds/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Svc/Subtopologies/ComCcsds/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Svc/Subtopologies/ComCcsds/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Revise CCSDS subtopology entries and limitations

Updated descriptions for CCSDS subtopologies and clarified limitations.

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Create SDD for CdhCore subtopology (#4121)

* Create SDD for CdhCore subtopology

Added a comprehensive Software Design Document (SDD) for the CdhCore subtopology, detailing requirements, design, usage, configuration, and traceability.

* sp

* Update SDD with review feedback

Added section for rate-group connection points and updated instance requirements.

* Feedback updates on common port patters, health, and worker (#4115)

* Feedback updates on common port patters, health, and worker

* Fix typos and improve clarity in documentation

* Fix typo in health-checking documentation - pt 2

Corrected a typo in the description of Svc.Health regarding configurable timeouts.

* Fix typo in manager-worker documentation - pt 3

* Fix formatting in health-checking documentation

* Add Software Design Document for FileHandling subtopology (#4125)

* Add FPP state machine How-To (#4096)

* Add FPP state machine How-To

* Fix state definitions in state diagram for newlines

* sp

Clarified wording regarding state transitions in the documentation.

* Missing `.`

Co-authored-by: Rob Bocchino <bocchino@icloud.com>

* Review updates

* Update links in define-state-machines.md

* sp

---------

Co-authored-by: Rob Bocchino <bocchino@icloud.com>

* Add Software Design Document for ComFprime subtopology (#4127)

* Add Software Design Document for ComFprime subtopology

* sp

* fix spelling and same feedback as ComCcsds

* Update instance summary in sdd.md documentation

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Add file size and subdirectory support to FileManager directory listing feature (#4041)

* Enhancement: Added file size and subdirectory support to FileManager directory listing feature

* Refactor to directory listing feature using rategroup 2 component

* Spelling fixes to expect.txt, config feilds for schedin call, fixes on comments/types

* Fix for spellcheck

* Replace fixed size with FileNameStringSize for commands

* Fix minor nits

* Formatting

* Remove fileManager instance, use FileHandling.fileManager

* Fix review feedback

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>

* Revise Communication Adapter Interface documentation (#4133)

Updated reference to the Communication Adapter Interface in the documentation to reflect changes in the interface file names and added usage instructions.

* Add ActivePhaser to Svc (#3974)

* Initial open source review of active phaser

* Start working on ActivePhaser's FPP model

* Add ActivePhaser implementation

* Start working on unit tests

* Fill in test logic

* Add comments

* Guard against writing outside of container

* Add comment

* Update comments

* Fix comment on overflow

* Comment on the use of actual_start and others

* Add comments and max connection count

* Add comments

* Phaser updates

* Add telemetry channels

* Update comments, fix FPP, update API calls in tester

* Apply formatter

* Minor comment change

* Fix spelling

* First draft of SDD

* Revert "Add telemetry channels"

This reverts commit 1690e51e125477d032e07fa8cd3882d6db2b8b3b.

* PRIVATE -> private

* Add friend class declaration for ActivePhaserTester

* Fix FIXMEs where possible

* Formatting

* Fix minor UT issues

* Remove (void)

---------

Co-authored-by: ZIIIKT <shaokail@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Michael D Starch <Michael.D.Starch@jpl.nasa.gov>

* Fix other UTs

* Bump GDS dependency to latest v4.0.2a5

* Bump fprime-gds to v4.0.2a6

* Update dictionary command in seqgen tests

---------

Co-authored-by: Zimri Leisher <zimri.leisher@gmail.com>
Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
Co-authored-by: kevin-f-ortega <kevin.f.ortega@gmail.com>
Co-authored-by: Philip Romano <pjromano94@gmail.com>
Co-authored-by: Kyle Jones <kylej@jpl.nasa.gov>
Co-authored-by: Ian Brault <ian@brault.dev>
Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
Co-authored-by: chuynh4duarte <chuynh4duarte@gmail.com>
Co-authored-by: Cindy T Huynh <chuynh@jpl.nasa.gov>
Co-authored-by: Kevin F. Ortega <kevin.f.ortega@jpl.nasa.gov>
Co-authored-by: Rob Bocchino <bocchino@icloud.com>
Co-authored-by: Isaac Garibay <144189484+Isaac-G5900@users.noreply.github.com>
Co-authored-by: Shaokai (Jerry) Lin <shaokai@berkeley.edu>
Co-authored-by: ZIIIKT <shaokail@jpl.nasa.gov>
Co-authored-by: Michael D Starch <Michael.D.Starch@jpl.nasa.gov>
2025-09-12 14:41:44 -07:00
Thomas Boyer-Chammard
6190d9610b
Update custom framing How-To guide (#4144) 2025-09-12 11:52:41 -07:00
Rob Bocchino
9871fd5608
Call destructors when ExternalArray releases memory for which it has called constructors (#4143)
* Revise SDD for ExternalArray

Add element destructor calls

* Revise ExternalArray

Destroy array elements allocated as bare memory

* Refactor ExternalArray

* Refactor ExternalArray

* Revise commment

* Revise comment

* Revise SDD for ExternalArray
2025-09-11 19:16:45 -07:00
Thomas Boyer-Chammard
942c9eb6ac
Bump fprime-tools (#4142) 2025-09-11 16:28:26 -07:00
Copilot
965109bc50
Add SDD documentation for LinuxUartDriver component (#4124)
* Initial plan

* Add complete SDD documentation for LinuxUartDriver component

Co-authored-by: LeStarch <995330+LeStarch@users.noreply.github.com>

* Address all SDD review comments: numbering, requirement IDs, FPP examples

Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>

* manual fixes

* Remove one level of section numbering in LinuxUartDriver SDD

Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>

* woop woop

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: LeStarch <995330+LeStarch@users.noreply.github.com>
Co-authored-by: thomas-bc <49786685+thomas-bc@users.noreply.github.com>
2025-09-11 14:52:52 -07:00
Thomas Boyer-Chammard
054c51ad3e
Revise install instructions with latest project structure (#4139) 2025-09-11 14:51:08 -07:00
Vince Woo
4f381110a1
Fixing LinuxSpiDriver issues; Adding function argument check and completing read-after-write checks (#4137)
* Fixing read-after-write checks for SPI configuration. Adding UT.

* Add assert to validate the read and write buffers are the same size in SpiReadWrite_handler

* Corrected WARNING_LOW -> WARNING_LO

* Fixing event Strings and invalid SpiFrequency

* Reverting changes to LinuxSpiDriverTester

* Removing redundant variable write_clock
2025-09-10 18:26:02 -07:00
Thomas Boyer-Chammard
31919e6931
Fix test logic for TcDeframer CRC check (#4138) 2025-09-10 17:58:01 -07:00
Thomas Boyer-Chammard
ba65039fff
Finish code formatting (#4134) 2025-09-10 15:02:07 -07:00
Shaokai (Jerry) Lin
c8e2d44877
Add ActivePhaser to Svc (#3974)
* Initial open source review of active phaser

* Start working on ActivePhaser's FPP model

* Add ActivePhaser implementation

* Start working on unit tests

* Fill in test logic

* Add comments

* Guard against writing outside of container

* Add comment

* Update comments

* Fix comment on overflow

* Comment on the use of actual_start and others

* Add comments and max connection count

* Add comments

* Phaser updates

* Add telemetry channels

* Update comments, fix FPP, update API calls in tester

* Apply formatter

* Minor comment change

* Fix spelling

* First draft of SDD

* Revert "Add telemetry channels"

This reverts commit 1690e51e125477d032e07fa8cd3882d6db2b8b3b.

* PRIVATE -> private

* Add friend class declaration for ActivePhaserTester

* Fix FIXMEs where possible

* Formatting

* Fix minor UT issues

* Remove (void)

---------

Co-authored-by: ZIIIKT <shaokail@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Michael D Starch <Michael.D.Starch@jpl.nasa.gov>
2025-09-10 09:39:39 -07:00
M Starch
82fff1abc8
Revise Communication Adapter Interface documentation (#4133)
Updated reference to the Communication Adapter Interface in the documentation to reflect changes in the interface file names and added usage instructions.
2025-09-09 21:36:26 -07:00
Isaac Garibay
fff0e0bf77
Add file size and subdirectory support to FileManager directory listing feature (#4041)
* Enhancement: Added file size and subdirectory support to FileManager directory listing feature

* Refactor to directory listing feature using rategroup 2 component

* Spelling fixes to expect.txt, config feilds for schedin call, fixes on comments/types

* Fix for spellcheck

* Replace fixed size with FileNameStringSize for commands

* Fix minor nits

* Formatting

* Remove fileManager instance, use FileHandling.fileManager

* Fix review feedback

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-09-09 14:46:07 -07:00
M Starch
1ee55a0c90
Add Software Design Document for ComFprime subtopology (#4127)
* Add Software Design Document for ComFprime subtopology

* sp

* fix spelling and same feedback as ComCcsds

* Update instance summary in sdd.md documentation

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-09-09 13:08:02 -07:00
M Starch
aabfa56193
Add FPP state machine How-To (#4096)
* Add FPP state machine How-To

* Fix state definitions in state diagram for newlines

* sp

Clarified wording regarding state transitions in the documentation.

* Missing `.`

Co-authored-by: Rob Bocchino <bocchino@icloud.com>

* Review updates

* Update links in define-state-machines.md

* sp

---------

Co-authored-by: Rob Bocchino <bocchino@icloud.com>
2025-09-09 12:31:21 -07:00
M Starch
3e41e2052b
Add Software Design Document for FileHandling subtopology (#4125) 2025-09-09 09:27:38 -07:00
M Starch
4c0092751c
Feedback updates on common port patters, health, and worker (#4115)
* Feedback updates on common port patters, health, and worker

* Fix typos and improve clarity in documentation

* Fix typo in health-checking documentation - pt 2

Corrected a typo in the description of Svc.Health regarding configurable timeouts.

* Fix typo in manager-worker documentation - pt 3

* Fix formatting in health-checking documentation
2025-09-08 18:09:23 -07:00
M Starch
d9ecb8b637
Create SDD for CdhCore subtopology (#4121)
* Create SDD for CdhCore subtopology

Added a comprehensive Software Design Document (SDD) for the CdhCore subtopology, detailing requirements, design, usage, configuration, and traceability.

* sp

* Update SDD with review feedback

Added section for rate-group connection points and updated instance requirements.
2025-09-08 18:04:07 -07:00
M Starch
4429614ea4
Add SDD for ComCcsds subtopology (#4128)
* Create SDD for ComCcsds subtopology

* Update Svc/Subtopologies/ComCcsds/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Svc/Subtopologies/ComCcsds/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Update Svc/Subtopologies/ComCcsds/docs/sdd.md

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Revise CCSDS subtopology entries and limitations

Updated descriptions for CCSDS subtopologies and clarified limitations.

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-09-08 17:53:50 -07:00
M Starch
9cb948ed5d
Revise subtopology development documentation (#4119)
* Revise subtopology development documentation

* Document subtopology configuration process

Added detailed instructions for configuring subtopologies, including module setup and CMake integration.

* Enhance documentation on subtopology structure

Added recommendations for including documentation and optional files in subtopology.

* fix spelling

* fix spelling v2 final

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-09-08 10:41:06 -07:00
M Starch
0dbc4febbc
Update fprime-gds version to 4.0.2a4 (#4118) 2025-09-04 17:05:39 -07:00
M Starch
bce0b5de79
Incorporate student feedback for ground derived channels (#4117) 2025-09-04 13:27:51 -07:00
Thomas Boyer-Chammard
d014f30a96
Add Framing subtopologies and use them within Com subtopologies (#4113)
* Update ComX subtopologies to not include ComStub and update Ref

* Cosmetic updates

* Working FramingCcsds subtopology used in ComCcsds

* Revert Ref to use ComCcsds

* Move FramingSubtopology into ComCcsds build module

* Working ComFprime subtopology

* Cosmetic updates

* formatting
2025-09-03 18:04:37 -07:00
Zimri Leisher
77f286f3ed
FpySequencer U32 stack size + some error telemetry (#4065)
* Switch everything that references stack size or offset to U32

* Add dir err tlm

* Rename tlm point to be consistent

* Update state tlm type to enumstoretype

* Make new Fpy::StackSizeType alias

* Add explanation for why we chose U32

* Fix one more static cast

* Bump schema vers to 2

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-09-03 15:53:28 -07:00
M Starch
10f2b49d3f
Modify LinuxTimer interface for consistency (#4087)
* Use Fw::TimeInterval in LinuxTimer

* Fix Linux FD typo

* Fix interval timer UT

* Format

* Fix assert casts

* Fix ComLogger UTs

* Fix FppTest microseconds

* Fix casting

* Fix overflow
2025-09-02 15:22:07 -07:00
chuynh4duarte
8b9ac2197d
Add reusable InT test scripts (#3923)
* add deployment function

* update file to use config json file

* remove unuse function

* fix typos

* fixed spelling

* update to use get_mnemonic

* rm shellcmd from fileManager and add health & systemResources testcase

* check memory usage and number of CPUs

* remove Ref.PingReceiver and fixed typos

* fixed spelling fileDownlink,health,systemResources and add config.json file

* Update config.json

* replace ActiveLogger to EventManager

* Updated config.json use lowercase CdhCore and FileHandling(fileDownlink,fileManager,prmDb) and ComCcsds(cmdSeq) etc

* update test_cmd_version to compare version of telemetry channel vs. evr version

* extend max_delay to work with Raspberry pi

* rename config.json to int_config.json

* delete Ref/config.json new file name int_config.json

* add time.sleep between AppendFile cmd to work with rasberry Pi

* fix int_config.json and add new Int DpMgr, DpWriter and DpCatalog

* add comments to confirm /tmp/1MiB.txt and /tmp/test_seq.seq exist before execute script

* add send uplink files

* Rename config.json, fix spelling

* python formatting

---------

Co-authored-by: Cindy T Huynh <chuynh@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
Co-authored-by: Kevin F. Ortega <kevin.f.ortega@jpl.nasa.gov>
2025-08-29 10:29:39 -07:00
M Starch
b90345e9df
Add test driven development how-to (#4090)
* Add test driven development how-to

* sp; review
2025-08-29 10:28:55 -07:00
M Starch
976ad2b28e
Fix #3397 (#4086) 2025-08-27 18:11:14 -07:00
M Starch
42c665f080
Update project structure in cookiecutters CI (#3991)
* Update project structure

* Fix sourcing path

* fix paths

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-08-27 15:42:51 -07:00
Rob Bocchino
9ec8c559de
Allow FPP arrays of arbitrary size (#4073)
* Revise array tests

Update constructor calls to conform to new code gen
Format the code

* Reformat FppTest

* Revise requirements.txt

* Update requirements.txt

* Update fpp version

* Revise Ref to conform to FPP changes

* Remove trailing spaces

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-08-27 15:24:32 -07:00
M Starch
287a0211eb
Bump GDS to v4.0.2a3 (#4079)
* Bump to v4.0.2a2 (GDS)

* Fix integration tests

* Fix requirements.txt
2025-08-27 14:25:41 -07:00
Ian Brault
d911fb903f
Add event ID filters to text logger components (#4028)
* Add event ID filter to PassiveConsoleTextLogger

* Add event ID filter to ActiveTextLogger

* Add const qualifier to filtered event list pointers

* Fix assert argument types

* Fix clang format errors

* Fix copy-paste error on include file

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Add missing initialization to ActiveTextLogger constructor

---------

Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-08-27 12:22:53 -07:00
Thomas Boyer-Chammard
373f81d0f3
Add subtopology documentation (#4072)
* Add subtopology guide

* fix typo and how-to

* Add reference link
2025-08-27 12:13:51 -07:00
Kyle Jones
513582f420
Add logic for assert failure short circuiting in AssertFatalAdapter (#4042)
* Add logic for assertion short circuiting

- Add guard logic to AssertFatalAdapter to prevent a cascading FW_ASSERT chain from occurring
- If any assert checks fail while handling an in-progress assert check failure, reportAssert will log the
additional assert and execute the system-specific assert handler before returning

* Update assert guard logic to counter based

- Instead of using a bool guard to determine when to off-ramp from a series of FW_ASSERT check failures,
use a counter that is configurable in a program's FpConfig.h file

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-08-27 09:56:06 -07:00
Philip Romano
a20535ea42
Add environment setup to CONTRIBUTING.md (#4078)
* Fix typo `cp` to `cd` in CONTRIBUTING.md

* Mention Python venv requirements for running tests
2025-08-26 17:33:24 -07:00
M Starch
475f323525
Add ground derived channels how-to guide (#4074)
* Initial derived channel work

* Write ground-derived channels

* Update plugin handler

* Updating publishChannel case

Updated method name to follow naming conventions.

* Fix method name to use snake_case in documentation
2025-08-26 14:41:55 -07:00
kevin-f-ortega
94f67e4e21
Update supported platforms (#4071)
* improved step to contribute back

* added delivery date for targeted platforms

* added tbd since we are not sure at the moment

* fixed column data

* updating list of supported targets. This reflects how F Prime runs on these hardware with zephyr.

* alphabetized list and added link for freertos

* fix spelling

* rename Apple M* to Apple Silicon

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-08-25 17:32:20 -07:00
Zimri Leisher
f4439a8cc9
FpySequencer arithmetic (#4025)
* Some work towards stack based arch

* Bring fp/int conv up to date

* Get compiling with stack based arch

* Start trying to fix UTs

* Start adding store/load dirs

* Add push val dir

* UTs are running

* UTs passing

* Make exit stack based

* Fix more uts

* Fix final UTs

* sp

* Fix overflow potential err

* Fix another overflow

* same error fix

* Format

* Also add to format checker

* Add math directives

* Add integer extension and truncation

* Also check correct size on stack

* Fix comment

* Push cmd response to stack

* Cast cmd response code to i32

* Add stack cmd, memcmp, discard dirs

* Fix some bugs with stack cmd

* Fix lil bug in sgtack cmd

* same bug

* Fix another bug sry

* Update sdd

* sp

* Fix undefined behavior with bitshift of signed integer

* sp

* Fix lil bug in timeout detection of stack cmd

* Switch format check to do all Svc dirs

* Reformat, and fix packet descriptor serialize bug

* Add UTs for all of arith ops

* Add tests for disc, memcmp, stack cmd

* Add deser tests for those three dirs

* sp

* Format

* Replace magic numbers with sizeofs

* Add currentStatementIdx helper function

* Format

* Split imod into smod and umod

* sp

* Add fmod, copy python behavior for fmod and smod

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-08-21 14:08:40 -07:00
Rob Bocchino
bdade025d0
Basic data structure library, phase 1 (#3927)
* Revise SDD for SetBase

* Revise SDD for SetBase

* Revise SDD for Fw/DataStructures

* Revise SDD for FifoQueue

* Revise SDD for Fw/DataStructures

* Revise SDD for MapBase

* Revise SDD for StackBase

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Add StackBase.hpp

* Add ExternalStack.hpp

* Add Stack.hpp

* Add ExternalStackTest

* Revise Stack tests

* Revise ExternalStack

* Revise ExternalStackTest

* Revise ExternalStackTest

* Revise ExternalStackTest

* Revise ExternalStackTest

* Add StackTest

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Add MapIterator

* Add SetIterator

* Add SetOrMapIterator

* Add MapBase.hpp

* Revise SDD for Fw/DataStructures

* Revise SDD for ArraySetOrMapImpl

* Revise SDD for ArraySetOrMapImpl

* Revise SDD for ExternalArray

* Revise SDD for Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Revise MapBase

* Revise MapBase

* Revise comments

* Revise SDD for ArraySetOrMapImpl

* Revise Fw/DataStructures

* Add ArraySetOrMapImpl

* Add ExternalArrayMap

* Revise ExternalArrayMap

* Revise Fw/DataStructures

* Revise SetBase

* Revise SDD for Fw/DataStructures

* Revise SDD for ExternalArraySet

* Revise SDD for ExternalArraySet

* Revise SDD for ArraySetOrMapImpl

* Revise Fw/DataStructures

* Revise SDD for Fw/DataStructures

* Revise Fw/DataStructures tests

* Revise unit tests for Fw/DataStructures

* Revise tests for ArraySetOrMapImpl

* Revise unit tests for Fw/DataStructures

* Revise unit tests for Fw/DataStructures

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for ArraySetOrMapImpl

* Revise unit tests for Fw/DataStructures

* Revise SDD for SetOrMapIterator

* Add ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise design for sets and maps

* Revert changes to design

* Revise unit tests for Fw/DataStructures

* Revise unit tests for Fw/DataStructures

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise unit tests for ArraySetOrMapImpl

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest and MapTest

* Revise MapTestScenarios

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise ExternalArrayMapTest

* Revise array set and map

Remove at function from interface.
It breaks the array or set abstraction.
It provides little value, since one can use the iterator
provided by SetBase or MapBase to range over the elements.

* Revise ExternalArrayMapTest

* Add ExternalArraySetTest

* Revise ExternalArraySet and ExternalArrayMap

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest

* Revise ExternalArraySetTest and ExternalArrayMapTest

* Revise ArraySetOrMapImplTest

* Revise ExternalArrayMapTest

* Revise ExternalArraySetTest

* Revise SDD for ArrayMap

* Revise SDD for ArraySet

* Revise SDD for ArraySet

* Add ArrayMap

* Revise ArrayMapTest

* Revise Fw/DataStructures

* Revise SDDs for ArrayMap and ArraySet

* Revise Fw/DataStructures

* Refactor map test scenarios

* Refactor data structures tests

* Refactor SetTestScenarios

* Refactor FifoQueueTestScenarios

* Refactor ExternalFifoQueueTest

* Revise Fifo Queue tests

* Refactor ExternalFifoQueueTest

* Revise comments

* Revise Stack tests

* Revise Stack tests

* Refactor Stack tests

* Revise Stack tests

* Revise Array

Remove getStaticSize

* Refactor Fifo tests

* Refactor ArraySetOrMapImplTest

* Revise data structures design

Rename Iterator to Entry

* Revise data structures implementation

Rename Iterator to Entry

* Revise data structures impl and test

Rename Iterator to Entry throughout

* Revise data structures implementation

Rename SetOrMapEntry to SetOrMapImplEntry

* Revise data structure implementation

Rename Entry to ImplEntry

* Revise data structures design

Rename symbols to match implementation

* Revise design for data structures

Add ConstIterator to Map

* Revise ArraySetOrMapImpl

Add ConstIterator

* Add iterators to DS implementation

* Revise map iteration

* Revise unit tests

Use iterators for maps

* Revise iterators

* Revise iterators

* Rename MapEntry to MapConstEntry

* Revise map interface

* Rename SetOrMapImplEntry to SetOrMapImplConstEntry

* Revert "Rename SetOrMapImplEntry to SetOrMapImplConstEntry"

This reverts commit cc6371d03c8f65fa130212d589812cf4ab3714fe.

* Rename SetEntry to SetConstEntry

* Add SetConstIterator

* Revise SetBase and unit tests

Use iterators

* Revise set interface

* Revise comments

* Reformat code

* Revise array set and map impl

Remove forward links

* Revise data structures tests

* Revise Set iterator

* Remove SetConstEntry

* Refactor SetOrMapImplEntry

* Pull in changes from rb-tree branch

* Revise MapBase

* Revise MapBase and docs

* Revise MapBase

* Revise MapBase

* Revise iterators

* Revise MapConstIterator docs

* Rename MapConstEntry to MapEntry

* Revise MapEntry

* Fix MapBase docs

* Revise MapConstIterator

* Revise MapEntry

* Revise MapConstIterator docs

* Revise docs for ExternalArrayMap

* Revise ArrayMap docs

* Revise ArraySetOrMapImpl

* Revise SetOrMapImplEntry

* Revise MapEntry

* Revise map and set interfaces

* Revert changes to map interface

* Rename MapEntry to MapEntryBase

* Revise type aliases

* Reformat code

* Revise SetBase

* Revise map interface

* Revise set and map interface

* Revise ExternalArraySet docs

* Revise ArraySet

* Revise ArraySet docs

* Revise SetConstIterator

* Revise SetBase

* Revise SetBase docs

* Revise SetBase

* Revise ArraySet

* Revise ArraySet docs

* Revise ExternalArraySet docs

* Add SetOrMapImplEntry

* Revise ArraySetOrMapImpl

* Revise Fw/DataStructures

Reformat code

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise Fw/DataStructures

Fix compile errors on Linux

* Fix comments

* Revise Fw/DataStructures

Fix compile errors on Linux

* Revise ArrayMap docs

* Remove helper scripts

* Revise tests for Fw/DataStructures

* Fix spelling

* Fix Markdown link

* Fix uninitialized variable in test

* Fix uninitialized variable in test

* Fix "spelling"

Why is the spelling check enforcing arbitrary rules of style?

* Fix comments

* Revise tests for ArraySetOrMapImpl

* Revise comment

* Revise ArraySetOrMap impl

* Revise formatting

* Revise docs

* Revise docs for Fw/DataStructures

* Revise Array and ExternalArray

Add static assertions

* Revise FifoQueue and Stack

Add static assertions

* Revise ArraySet and ArrayMap

Add static assertions

* Revise ArrayMap tests

* Revise ExternalArraySet tests

* Refactor ArraySetTest

* Revise array initialization

* Revise comments

* Revise Array initialization

* Revise Array design and implementation

* Revert changes to Fw/DataStructures

* Revise Array

* Revise Array

* Revise Array

* Fix formatting

* Add SizedContainer base class

* Revise StackBase

Make it inherit from SizedContainer
Revise stack tests

* Revise MapBase

Make it inherit from SizedContainer
Revise tests

* Revise SetBase

Make it inherit from SizedContainer
Revise tests

* Revise DataStructures design

Add SizedContainer

* Revise SDD for DataStructures

* Revise DataStructures design

* Revise DataStructures design

* Revise DataStructures design

* Revise DataStructures design

* Fix spelling

* Revise zero-arg constructor for Array

* Revise Array interface

Make it consistent with the arrays generated by FPP

* Fix to assertion
2025-08-21 13:56:35 -07:00
Thomas Boyer-Chammard
6915c93c10
Update Drv IP stack to use FwSizeType instead of U32 (#4013)
* Update IP stack source to use SizeType instead of I/U32

* Update UTs reflecting U32/I32 change to SizeType

* Static cast sizes per review

* Fix commented out thing
2025-08-21 08:55:17 -07:00
Rob Bocchino
7972392cf4
Reformat FppTest (#4048) 2025-08-19 17:48:16 -07:00
M Starch
d6cd606e66
Update NOTICE.txt references (#4045)
With the removal of the Autocoders directory, we also remove the pyparsestring usage.
2025-08-19 10:54:26 -07:00
Thomas Boyer-Chammard
a070ee768a
Fix AI Policy link in PR template (#4019) 2025-08-13 14:25:03 -07:00
Zimri Leisher
30a3902e3e
FpySequencer stack based architecture (#3975)
* Some work towards stack based arch

* Bring fp/int conv up to date

* Get compiling with stack based arch

* Start trying to fix UTs

* Start adding store/load dirs

* Add push val dir

* UTs are running

* UTs passing

* Make exit stack based

* Fix more uts

* Fix final UTs

* sp

* Fix overflow potential err

* Fix another overflow

* same error fix

* Update sdd

* sp

* Fix undefined behavior with bitshift of signed integer

* sp

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-08-13 09:51:30 -07:00
Ethan Chee
2dea8abedf
Add static_cast to ambiguous serialize call in FpySequencer (#4008) 2025-08-10 13:46:44 -07:00
Thomas Boyer-Chammard
abb09e4a68
Bump Tools and GDS (#4000)
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-08-06 17:42:06 -07:00
Thomas Boyer-Chammard
4e5bb71460
Fix HelloWorld CI following update to v4.0 (#3997) 2025-08-06 16:02:15 -07:00
Amber Borjigin
b72d866d19
Generative AI documentation Added (#3932)
* fixing error #3897

* Generative AI documentation added

* Update GENERATIVE_AI.md

* Update GENERATIVE_AI.md

* Update pull_request_template.md

resolving comments

* Update OsTime.cpp

resolving comment

* updating expect.txt to have "GPT"

* Update GENERATIVE_AI.md

Co-authored-by: Rob Bocchino <bocchino@icloud.com>

* Fix relative link and display

* updates to GENERATIVE_AI.md

* Fix merge

* Update GENERATIVE_AI.md

* Update cross-compilation.md

* reverting back to AI b/c branch confusion

* updating disclosure and file name

* Update to current in fprime devel

* Fix relative link and display

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Rob Bocchino <bocchino@icloud.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-08-06 15:32:52 -07:00
M Starch
4deda3d75f
Update to FPP v3.0.0, Tools v4.0.0, and GDS v4.0.0 (#3995)
* Update to FPP v3.0.0

* Bump GDS and tools version
2025-08-06 13:50:58 -07:00
Vince Woo
f38010abca
(De)Serialization clean up of temporary workarounds (#3971)
* Staging DEPRECATE changes in preparation for new FPP alpha. Removed backwards compat hacks. Updated some uses of the legacy functions that were missed originally.

* Remove declaration of serialize and deserialize from RawTime as those should be inherited now

* Removing FW_SERIALIZE_UNIMPLEMENTED and FW_DESERIALIZE_UNIMPLEMENTED from SerializeStatus

* Removing superfluous comma

* Missed AmpcsEvrLogPacket. Fixing a minor whitespace issue in Serializable.

* Un-deprecating serialize/deserialize for this release

* Restoring DEPRECATED for the noLength functions

* Pulling in fpp 3.0.0a17. Fixing some lingering issues with refactoring.

* Format files

* Update fprime-fpp package

* Fixing some lingering issues with serialization modernization.

* Fixing weird merge issue with AmpcsEvrLogPacket

* More clang issue fixes

* Still pesky clang formatting issues. Superfluous whitespace.

* Removing redundant virtuals for overriden methods

* Incorporating PR comments

* clang formatted Serializable.hpp

* Removing redundant serialize and deserialize methods in TestAbsType. Inherit from parent.

---------

Co-authored-by: thomas-bc <thomas.boyerchammard@gmail.com>
2025-08-06 11:50:32 -07:00
Thomas Boyer-Chammard
89bccfa438
Differentiate sync/async ByteStreamDriver and update ComStub to work with both (#3987)
* Update ByteStream interface, interface implementations (and UTs) and ComStub

* Update ComStub UTs

* Fix RHEL8 static cast failure

* spelling

* Update Async driver to async port

* Make code more readable... part 1

* Refactor code for human readability

* Update docs

* Remove unused helper
2025-08-06 11:21:06 -07:00
M Starch
96f445f6ef
Update teardown ordering (#3990) 2025-08-06 11:19:08 -07:00
Joaquim Silveira
ab16b2aabf
feat: removed unnecessary assert (#3973) 2025-08-06 09:37:20 -07:00
Thomas Boyer-Chammard
be7e4ea098
Fix F Prime location in LedBlinker CI (#3988)
* Fix F Prime location in LedBlinker CI

* Fix framing-selection
2025-08-05 18:51:01 -07:00
M Starch
21faffa6f8
CMake documentation refactor (#3981)
* CMake documentation refactor

* sp

* Update cmake-implementations.md
2025-08-05 16:52:14 -07:00
Justine West
dfaf496263
Add DP Demo for testing DPs and fprime-dp-writer (#3951)
* Initial DpDemo component, added test for decoding DPs

* Updated Dp demo to include additional types, arrays, and struct records

* Added struct member array to DP demo

* Remove unused tlm

* Cleanup after merging devel

* Add deepdiff to requirements, fix formatting, update spelling

* fpp v3.0.0a16

* fprime-gds v4.0.0a10

* Add 3 array record cases to DP demo

* Remove comments

* Remove deepdiff

* Formatting, update spelling

* FPP v3.0.0a18

* Spelling

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-08-05 12:28:00 -07:00
M Starch
d460468b1b
Rate drive sent/receive telemetry (#3980)
* Rate drive sent/receive telemetry

* Format

* Make telemetry std::atomic
2025-08-05 09:37:45 -07:00
Thomas Boyer-Chammard
c69ff72110
Format Svc and add to CI (#3978)
* Format Svc and add to CI

* Fix comlogger include

* fix assert UTs

* Fix static analysis warning

* formatting
2025-08-04 16:21:47 -07:00
Amber Borjigin
e7840dee81
Update cross-compilation.md (#3979) 2025-08-04 15:41:32 -07:00
M Starch
5ce0c5ada8
Bump fprime-tools version (#3972)
* Bump fprime-tools version

* Fix relative path problem
2025-08-04 14:05:54 -07:00
M Starch
feb1418a0f
Fix LinuxUartDriver bytes count (#3948)
* Add bytes sent telemetry

* Add bytes received

* Fix missing m_

* Casting

* formatting

---------

Co-authored-by: Joseph AD <223160513+bojops@users.noreply.github.com>
Co-authored-by: Bobbie AD <223160241+bagamerguy@users.noreply.github.com>
2025-08-04 13:50:17 -07:00
Thomas Boyer-Chammard
ab58cf18fb
Format Fw and add to CI (#3976)
* Format Fw and add to CI

* Fix include of HPP file instead of H in extern C

* Fix format strings
2025-08-04 12:56:02 -07:00
Mishaal
02afd01545
Fix warnings reported by clang-tidy 20.1 (#3949)
* Clang 20.1 UT Errors

* CI fixes

* Remove m_rng and use STest

* 1 more update to STest

* Resolve spellcheck conflict

* Resolve spellcheck conflict

* Init severityString to null ptr

* Fix CPP formatting

* Format QueueRules.cpp

---------

Co-authored-by: thomas-bc <thomas.boyerchammard@gmail.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-08-01 17:21:07 -07:00
Thomas Boyer-Chammard
60e7cb7993
Remove XML dependencies from requirements (#3961)
* Remove XML dependencies from requirements

* Upgrade fprime-tools

* Fix locate_fpp_tools version check
2025-08-01 16:24:06 -07:00
Andrei Tumbar
bf7d9866cf
Improve backward compatibility [de]serialize[From/To] fallback on Fw::Serializable and Fw::Buffer (#3962) 2025-08-01 13:28:32 -07:00
Amber Borjigin
29b9f2b4bf
Bump GDS to latest release (#3964)
* Bump GDS to latest release 

Fixes #3963

* Set LEDBlinker to FPrime Framing

* Set Rasbperry Pi Integration Test Framer

* Remove spurious 'g'

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-08-01 08:52:22 -07:00
Justine West
67be6defa0
Update data types doc (#3957)
* Update data types docs

* Move alias type to its own section
2025-07-31 15:52:15 -07:00
Thomas Boyer-Chammard
e17d42a9ff
Format Drv module (#3960)
* Format Drv module

* Add Drv to format CI check

* Fix double // in include path
2025-07-31 15:49:45 -07:00
Thomas Boyer-Chammard
578e61f1da
Format Os Module (#3959)
* Format Os module

* Add Os to format-check CI

* Remove double semi-colon
2025-07-31 15:40:30 -07:00
Kyle Jones
26aad95ec0
Updates Types.fpp to use optimized sizes for enumerations (#3956)
- Update enumerations in Types.fpp to use U8 instead of the default I32; the full I32 size is not needed for these simple enumerations
2025-07-31 15:14:19 -07:00
Thomas Boyer-Chammard
3dc73f9d72
Update GDS and Tools requirements for v4.0.0a2 (#3953)
* Update GDS and Tools requirements for v4.0.0a2

* Disable UT run in Hello World CI
2025-07-30 12:01:14 -07:00
Moises Mata
268e168f23
Restructure core subtopologies and add Svc_Subtopologies target (#3904)
* Modify Com/Ccsds/Fprime ComDriverConfig & TopologyDefs for easier ComDriver config

* Fix BaseID collision

* Removed restrict platform, UART/TCP driver configs different files, CMake switch depending on FPRIME_HAS_SOCKETS

* Add Exclude_FROM_ALL to all subtopology cmake modules

* remove exclude from ComCcsds (needed for Ref)

* Remove exclude from all for testing

* Exclude_from_all only on comLoggerTee, comFprime (not used in Ref)

* Added Svc_Subtopologies target

* Use add_custom_target, spelling fix

* Add Configs to Svc_Subtopologies target

* Removed comDriver as instance within subtopologies, now within project topology

* Take out cmdSeq from ComSubtopologies, put in FileHandling

* Added Subtopology States for all, common pattern users can follow

* Fix Extra newline

* Moved Phased comDriver code into RefTopology.cpp

* Update metadata

check-spelling run (pull_request_target) for subtopology-config-phasing-updates

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Fixed call to default stack size

* Moved cmdSeq from FileHandling subtopology to Ref Root Topology

* Fix integration test

* Remove unneeded Os includes in RefTopology.cpp

* Fix BaseIds

* Add comment for BaseIDs, comDriver configuration order fix

* Restructure of enums within Com Subtopologies

* Correct include for ComCcsds enum headers

* Using namespace syntax change

* Fix BaseIds

* Update metadata

check-spelling run (pull_request_target) for subtopology-config-phasing-updates

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Remove unneeded Dependency

* Add enum at the top

* Fix RefTopology.cpp

* Update Comment

---------

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
Co-authored-by: Moises Mata <moisesmata@users.noreply.github.com>
2025-07-30 10:25:29 -07:00
Ian Brault
1fe6a7cb04
Account for string length serialization in static asserts (#3937)
Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
2025-07-28 09:43:28 -07:00
M Starch
0b92e8ecee
Revert "Stub std::atomic implementation (#3909)" (#3934) 2025-07-24 17:04:45 -07:00
Vince Woo
379d3059d9
Renaming serialize/deserialize methods to serializeTo/serializeFrom and deserializeTo/deserializeFrom (#3880)
* Deprecating serialize/deserialize methods for clearer serializeTo/serializeFrom and deserializeTo/deserializeFrom methods to indicate direction.

* Cleaned up some GCC directives that was used for an experimenting. Fixed some bugs in Serializable.

* Un-deprecating serialize/deserialize methods to decouple the required FPP changes

* Further modenized more child classes. Added some backwards compatibility fall-back logic to aid in FPP decoupling.

* Fixing clang formatting violation

* Removing redundant virtual keyword since the functions are already overrides

* Incorporating PR comments

* Fixing clang format issue

* Incorporating PR comments

* Updating documentation for new serialize/deserialize methods
2025-07-24 15:32:03 -07:00
M Starch
e4cd846cdf
Make .fppi changes trigger re-generation (#3933) 2025-07-24 10:03:43 -07:00
Mike McPherson
723524c0d8
Add calls to cmdResponse_out for OsTime commands (#3926)
* Add calls to cmdResponse_out for both OK and EXECUTION_ERROR conditions Fixes #3897

* Change to correct method name
2025-07-24 08:15:23 -07:00
Cel Skeggs
29c537f076
Add lightweight SpscQueue class (#3871)
* Add lightweight AtomicQueue class

* Improve naming of SpscQueue

* Fix spell checking for SPSC

---------

Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
2025-07-23 17:54:07 -07:00
Cel Skeggs
93209da55b
Generate dictionaries on deployment targets (#3910)
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-07-23 17:46:48 -07:00
Mishaal
7b6e9a2e16
Stub std::atomic implementation (#3909)
* Add a simple single-thread only stub for std::atomic

* Add EOF newlines

* Move files to a new directory under Stub and add register_fprime_implementation for StandardAtomic
2025-07-23 15:25:11 -07:00
M Starch
968746083b
Replace struct get/set with get_/set_ (#3917)
* Replace struct get/set with get_/set_

* Bump FPP to a16
2025-07-23 14:18:13 -07:00
Mishaal
65355c5d29
Remove PRIVATE PROTECTED and STATIC access overrides (#3821)
* Remove PRIVATE PROTECTED and STATIC access overrides

* Bump up requirements version

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-07-23 10:58:58 -07:00
Thomas Boyer-Chammard
7ec2bb9a76
Rename ActiveLogger to EventManager (#3920)
* Rename ActiveLogger to EventManager

* Spelling and link fixes

* Formatting and CMake API

* Remove UT_AUTO_HELPERS
2025-07-23 10:41:24 -07:00
Mishaal
0bb6d59230
Rework fpp test (#3912)
* Add FppTestProject level

* Fix FPP Test Project UT errors

* Add back in FppTest deployment & make empty main in source.cpp

* Remove Wold-style-cast to see if that fixes CI issues

* Update add_compile_options

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-07-22 19:34:56 -07:00
kevin-f-ortega
f409488672
Added config needed to run InT scripts (#3915) 2025-07-22 19:07:43 -07:00
M Starch
cca4e1261c
Remove RPI project in lieu of the LED workshop (#3908) 2025-07-22 15:31:22 -07:00
Mishaal
bbcfb15a3f
Reset PROTECTED/PRIVATE/STATIC override flags (#3815)
* Reset PROTECTED/PRIVATE/STATIC override flags

* Update FPP version to 3.0.0.a14
2025-07-22 11:27:12 -07:00
Cel Skeggs
d06ff66e3d
Restrict TCP subtopologies to supported platforms (#3903) 2025-07-22 10:04:23 -07:00
Moises Mata
2e7bdd50ac
Add ComLoggerTee Core Subtopology (#3867)
* Added ComLogTSplit subtopology, compiles but needs testing within a larger topology

* Added ComLogTSplit Subtopology
- Takes com in from tlm send and uses a com splitter to split between comQueue and comLogger
- Uses the instance format, will be compatible with fprime-util new --subtopology-instance in fprime-tools update

* Update metadata

check-spelling run (push) for add-com-logger-subtopology

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Syntax fixes to include and add_fprime_subdirectory

* Remove uneeded base address in config

* Fix BaseID clashes

* Fix ComLogTSplit PingEntries Namespace

* Update metadata

check-spelling run (pull_request_target) for add-com-logger-subtopology

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Removed un-needed mallocator include in RefTopology.cpp

* Update BASE_IDS in Ref, Subtopologies. ComLogTSplit -> ComLoggerTee

* Update metadata

check-spelling run (pull_request_target) for add-com-logger-subtopology

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Removed unneeded headers is RefTopologyDefs.hpp

* ComFprime fix: subtopology state references and configObjects phased code

* Queue size bigger in ComFprime

* Add missing tearDownComponents phase to comQueue(comFprime) component in ComFprime.

---------

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
Co-authored-by: Moises Mata <moisesmata@users.noreply.github.com>
2025-07-21 17:28:51 -07:00
Mishaal
ef5f255628
Update F' Time handling with FPP struct and clean up TIME flags, and remove Time Context comparison (#3844)
* Update F' Time handling with FPP struct and clean up TIME flags

* Update documentation to indicate required time base options

* Remove time context comparison from Time compare method and FpySequencer

* UT updates

* Remove time add/sub context assertions, upload context compare logic and UTs, and doc updates

* Update Fw::Time SDD serializables section

* Markdown format fix

* Markdown format fix

* Markdown format fix

* Markdown format fix

* Bump FPP to v3.0.0a14

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-07-21 16:13:33 -07:00
Cel Skeggs
dbcf09aec9
Make Os.RawTime comparable for equality (#3902)
This allows Os.RawTime to be used in FPP structs.
2025-07-21 15:31:43 -07:00
M Starch
31b55dbac9
Issue 3745 (#3843)
* Add register_fprime_* tracking to CMake

* Add deployment dependency tracking

* Add deployment convienence target

* Bump to fprime tools release that supports external checks

* Fix UT roll-up when no deployment UTs exist

* Restore --all functionality of root directory

* Fix check all
2025-07-21 15:31:07 -07:00
Ian Brault
25bb3b32ea
Add a repository dirtiness indicator to the auto-generated version information (#3899)
* Add --dirty flag to the git command used in the version autocoder

* Additionally add --broken flag to the git command used in the version autocoder

* format

---------

Co-authored-by: Ian Brault <ian.r.brault@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-07-21 10:57:08 -07:00
Vince Woo
c6a2cca280
Adding FW_CASSERT_1 macro for C (#3896)
* Adding FW_CASSERT_1 macro for C

* Splitting assert failure case into separate test. Adding TestAssetHook to properly test assertion failures.

* Fixed TestAssertHook implementation
2025-07-21 10:25:45 -07:00
Thomas Boyer-Chammard
51f18e06c4
Update clang-format dependency with ARM32 support (#3901) 2025-07-21 10:22:29 -07:00
M Starch
6f475a5bbd
Linux should not default to stubbed drivers (#3840)
* Linux should not default to stubbed drivers

* Update bytes type to be FwSizeType

* Fix RPI build errors
2025-07-18 13:36:00 -07:00
M Starch
da4dc9d92d
Add CMake package file for F Prime (#3898) 2025-07-18 12:56:11 -07:00
Vince Woo
b217fc79a6
Fixed invalid ASSERT (#3894) 2025-07-18 10:39:15 -07:00
Mishaal
9211a047e8
Updates for FPPTest corresponding to UT cmake update for protected/private (#3810)
* Updates for FppTest/dp and FppTest/component corresponding to UT cmake update for protected/private

* Refactor Fpp/state_machine/internal_instance/state teststo be in their own Tester classes

* Standardize headers

* Remove old ifndef from BasicGuardTester.hpp

* More cleanup of BasicGuardTester

* Remove extra /dp files (leftover from rename) and fix a header comment typo

* Revert accidentally checked in cmake

* Enable UT_AUTO_HELPERS for FppTest/dp

* Revert FppTest/state_machine/internal_instance/state

* Update state_machine/internal_instance/state/ component names to append Tester

* pdate state_machine/internal_instance/choice/ component names

* Update state_machine/internal_instance/initial/ component names

* Reformat code

---------

Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
2025-07-18 09:36:46 -07:00
kevin-f-ortega
6cd812658b
Update supported platforms (#3881)
* improved step to contribute back

* added delivery date for targeted platforms

* added tbd since we are not sure at the moment

* fixed column data
2025-07-18 09:31:08 -07:00
Cel Skeggs
d131e54f77
Fix framework UT shutoff regression (#3883)
These lines were inadvertently removed in commit 80bb781.
2025-07-18 09:29:59 -07:00
M Starch
52412392be
Bump to fprime-tools v4.0.0a6 (Fix CI) (#3863)
* Bump to fprime-tools v4.0.0a4

* Bump to fixed v4.0.0a5

* Debug CI step

* Fix CI pt 1

* Fix CI pt 2

* Fix CI pt 3

* Fix other platform * reference
2025-07-15 09:53:23 -07:00
Zimri Leisher
a91f24cb38
Add float to int conversion directives, some misc changes (#3847)
* Add fptoi and itofp dirs

* Fix F32 literal

* Add some file read stage telemetry to err msgs

* Update default register count to 128

* Fix NOT directive to behave properly with if

* Make fptoi and itofp signed/unsigned

* fix warning

* Fix another warning

* Fix sp
2025-07-13 11:22:33 -07:00
kevin-f-ortega
2690e31bff
Clean up supported platforms documentation (#3873) 2025-07-10 19:34:32 -07:00
Justine West
6349bf85c2
Add newline before table (#3858) 2025-07-08 10:51:43 -07:00
Zimri Leisher
5c896379e5
Add fpext, fptrunc directives (#3845)
* Add fpext, fptrunc, combine with not into unary op, tests pass

* Some UTs, switch to using memcpy

* Add UTs for all binary and unary ops

* Some more UTs

* sp

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-07-03 16:23:03 -07:00
Mishaal
ebaf92b2c6
Make Fw::TimeInterval an FPP Struct (#3834)
* Update Fw/Time/TimeInterval to use an FPP struct

* Spelling; add TimeInterval UTs; remove UT-only stdout << method which is autocoded now for TimeInterval

* Add TimeInterval sub tests

* Re-factor tests into TestMain/Tester format files, separating Time and TimeInterval

* Add TimeIntervalTester as friend, for consistency

* Address build errors

* Update fpp comments

* Update TimeInterval to use FPP struct as underlying member variable type, only

* Upate CMake for build errors
2025-07-03 14:16:36 -07:00
Zimri Leisher
e3376dca9e
FpySequencer floating point comparisons (#3820)
* Add a little work on fp cmps

* Lil more work on fp cmp

* Finish flt stuff, add UT

* sp

* Much cleaner binary cmps

* Add final UTs

* sp

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-07-03 14:16:22 -07:00
Zimri Leisher
be4def9676
Add seqstart/done ports to FpySequencer (#3826)
* Add seqstart/done ports

* Some more UTs

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-07-03 13:43:56 -07:00
Zimri Leisher
513c9f2191
Rename prm tlm (#3836)
Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-07-03 13:11:25 -07:00
Zimri Leisher
05f8a608ba
Fix exit not handled, add UT (#3837)
Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-07-03 13:10:30 -07:00
Justine West
6e1d91215c
Update requirements to include fpp v3.0.0a13 and fprime-gds v4.0.0a7 (#3813)
* fpp 3.0.0a13 and fprime-gds 4.0.0a6

* fprime-gds v4.0.0a7
2025-06-30 16:55:47 -07:00
Vince Woo
5d8aaa4689
Deprecated 'bool noLength' versions of serialize and deserialize. (#3819)
* Deprecated 'bool noLength' versions of serialize and deserialize.

* Reverting some superfluous whitespace changes.

* Reinstation implementation of deprecated functions

* Fixing weird whitespacing

* Whitespace still didn't look right
2025-06-30 14:23:18 -07:00
Sahil Siddiq
b33473bb90
CMake: Copy hashes.txt to build-artifact (#3771)
* CMake: Copy hashes.txt to build-artifact

* Removing dictionary regression

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-06-30 14:04:22 -07:00
M Starch
f6c6780bdf
Fix queue size regression (#3827) 2025-06-30 13:48:20 -07:00
Mishaal
b363b825ee
Updates for Svc/FpySquencer corresponding to UT cmake update for protected/private (#3812)
* FpySqeuencer updates for cmake UT private/protected

* Add missing setState fix
2025-06-30 10:25:21 -07:00
Tyler Russin
189e2a883f
Update hello world link (#3823) 2025-06-30 10:23:28 -07:00
Mishaal
42fcf90a80
STATIC -> static (#3814) 2025-06-30 10:19:11 -07:00
Moises Mata
d69b7a10d1
Add Core Subtopologies: ComFprime, ComCcsds, DataProducts, FileHandling (#3768)
* Added led-blinker workflow for aarch64-linux platform

* Update runner label

* Added Tags to RPI self hosted workflows, sparse-checkout-cone-mode false

* Add subtopologies to Svc/ restructing of Ref to include CDH subtopology

* CDHCore Subtopology added under Svc and integrated into Ref

* Health instance within CDHCore references CDHCoreConfig for queue size

* Update metadata

check-spelling run (push) for add-subtopologies

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Added AssertFatalAdapter Version PassiveTextLogger to Subtopology, config clarity improvements

* Comms subtopology without cmdSeq created, integrated in Ref

* Added cmdSeq to Comms Subtopology, integrated into Ref

* Add FileHandling Subtopology, initial structure

* Fixed Spelling, Flie -> File

* Update metadata

check-spelling run (push) for add-subtopologies

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Added working FileHandling, DataProducts subtopology, integrated into Ref

* prmDb part of FileHandling, fatalHandler part of CDHCore

* Update metadata

check-spelling run (push) for add-subtopologies

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Update comment for clarity

* Initial move to phasing components

* Fixing Phasing: Adding initial Phasing for CDHCore, DataProducts, FileHandling

* Renaming topologydefs.hpp, phasing fully working on all four subtopologies, needs cleaning up

* Cleanup with Ports_ComPacketQueue, definition only in Comms.fpp now

* Base project with all 4 subtopologies, integrated into Ref, and passing CI

* Initial Commit with all Subtopologies in Svc/Subtopologies

* Added posixtime back in to Ref Deployment (Accidentally Deleted)

* Updates to match new subtopology structure, integrate CCSDS into Ref

* Changes to CommCCSDS that go with last changes

* Standardize subtopology structure and naming to PascalCase

* Namespace fixe for ComFprime

* CDHCore->Cdhcore for consistency

* Rename CDHCore to CdhCore for consistency

* Update metadata

check-spelling run (pull_request_target) for add-subtopologies

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Reorder on teardown phases for Com Subtopolgies

* Cpp check style fix

* Fix: Add missing tearDownComponents cleanup for DataProducts dpBufferManager

* Delete old comments, test using same mallocator for all subtopologies

* fix: Deallocated DataProducts BufferMgr

* Fix DataProducts subtopology memory cleanup

* Fix: Dataproducts subtopology teardown order

* Added tearDownComponents(state)

* Consolidate all cleanup to teardowncomponents

* Fix memory leaks: restore teardown phases

* Removal of redundant teardowncomponents()

* Revert "Removal of redundant teardowncomponents()"

This reverts commit 29d4ff8242574f1afc1bb6aacdf5cfef4d79987d.

* Fix formatting, remove commented out code

* Swap hardcoded numbers to config constants in subtopologies

* register_fprime_config() in config modules, isolated ComDriver into a separate config fpp file

* Added explicit CMake Module Names and Depends between Subtopologies and their Configs

* Fixed CCSDS case, more config constants

* Added explicit depends for each subtopology config

* added mallocator config, subtopology state structure

* Update subtopology config names for clarity, fixes #3571

* Fix reference to dpBuffer config Constants

---------

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
Co-authored-by: Moises Mata <moisesmata@users.noreply.github.com>
2025-06-26 15:00:57 -07:00
Thomas Boyer-Chammard
c602046f4b
Format Svc/Ccsds and add to CI (#3811)
* Format Svc/Ccsds package

* Add check to CI
2025-06-26 13:38:20 -07:00
Thomas Boyer-Chammard
628672a42f
Update CMake Library integration guide based on student review (#3804) 2025-06-26 13:21:02 -07:00
Zimri Leisher
50d3d4e492
FpySequencer V0.3 (#3702)
* Start combining dirs and cmd

* Much closer to combining dir and cmd

* Finish making cmds work

* Add directive error codes, fix UT

* Add deser lvar directive

* Add comparison operators

* Add unsigned/signed inequality ops

* Rename store to setreg

* First UT with a binary comparison op!

* Remove printfs

* Doc commnt

* Add and/not, and/or under binary cmp

* Fix a couple bugs in sequencer

* Add exit directive'

* Make exit actually end sequence if positive

* A little more work on UTS

* Fix UTs

* Add deser lvar UT

* Add exit, not, set reg, and binary cmp UTs

* Rename lvar to sreg

* Get the last few old refs to lvar

* sp

* Fix typo

* Fix typo

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-06-26 11:38:19 -07:00
Vince Woo
3894ddc22e
Refactor Drv::Ip::UdpSocket to clean up state members and remove dependency on dynamic memory (#3728)
* Refactor UdpSocket to remove SocketState and the use of dynamic memory allocation.

* Replacing some ASSERTs with proper SocketIpStatus. Adding some input argument validation. Adding some better logging.

* Refactoring UdpSocket to remove redundant m_recv_port and m_recv_hostname members

* Fixing some documentation and renaming a variable to be more consistent

* Adding ADDRSTRLEN to spelling expect

* Incorporating PR fixes and adding a new UT for zero length datagram

* Replacing a strcpy with a Fw::StringUtils::string_copy

* Removing incorrect UDP statuses in empty datagram test

* Fixing bug in implementation of UdpSocket by overriding IpSocket implementation of send and recv to properly handle 0-length datagrams

* Incorporating PR fixes. Adding function argument checks for send/recv.

* Fixing build errors

* Incorporating PR comments

* Forgot to add change for IpSocket

* Fixing asserts and removing virtual from recv that we shouldn't have to override.

* Spelling
2025-06-26 10:37:50 -07:00
Thomas Boyer-Chammard
0a9c057013
Switch Fw::Buffer size to FwSizeType instead of U32 (#3802)
* Switch Fw::Buffer size to FwSizeType instead of U32

* Fix LinuxUartDriver

* Fix bufferRepeater size usage

* Add Linux Drv static casts and checks

* Address review comments

* Ahhh !!!! C++ formatting ! It's starting...
2025-06-26 09:37:54 -07:00
Vince Woo
d2b59cbde1
Fixing a bug in the shared setup_helper to make the wait_on_started configurable by the calling test (#3806) 2025-06-26 09:12:38 -07:00
Mishaal
e7141c1132
Updates for Svc/DpManager corresponding to UT cmake udpate for protected/private (#3799) 2025-06-25 14:05:08 -07:00
Mishaal
25b8c1467e
Updates for Svc/PassiveRateGroup corresponding to UT cmake udpate for protected/private (#3796) 2025-06-25 14:04:12 -07:00
Mishaal
3e7067dd6f
Updates for Svc/CmdDispatcher corresponding to UT cmake udpate for protected/private (#3795) 2025-06-25 14:03:43 -07:00
Mishaal
048e80c848
Updates for Svc/DpWriter corresponding to UT cmake udpate for protected/private (#3800) 2025-06-25 14:01:35 -07:00
Mishaal
74c799e5ac
Updates for Svc/BufferAccumulator corresponding to UT cmake update for protected/private (#3786)
* Updates for Svc/BufferAccumulator corresponding to UT cmake udpate for protected/private

* Rename dispatchOne to doDispatch for consistency
2025-06-25 14:00:51 -07:00
Mishaal
07f418b286
Updates for Svc/ActiveRateGroup corresponding to UT cmake update for protected/private (#3779)
* Updates for Svc/ActiveRateGroup corresponding to UT cmake update for protected/private by updating driver name and updating ActiveRateGroupImplTester to ActiveRateGroupTester

* Spelling
2025-06-25 14:00:03 -07:00
Mishaal
959d19d86d
Updates for Svc/CmdSequencer corresponding to UT cmake udpate for protected/private (#3798) 2025-06-25 13:59:09 -07:00
Mishaal
b77e23113f
Updates for Svc/Health corresponding to UT cmake update for protected/private (#3797)
* Updates for Svc/Health corresponding to UT cmake udpate for protected/private

* Add new file
2025-06-25 13:57:33 -07:00
Mishaal
e5f768ea05
Updates for Svc/ActiveLogger corresponding to UT cmake update for protected/private (#3773)
* Updates for Svc/ActiveLogger corresponding to UT cmake udpate for protected/private

* Add explicit for ActiveLoggerTester constructor
2025-06-25 13:40:50 -07:00
Mishaal
d399ccbcf1
Updates for Svc/PrmDb corresponding to UT cmake update for protected/private (#3446) (#3772)
* Updates for Svc/PrmDb corresponding to UT cmake update for protected/private by updating driver name and updating PrmDbImplTester to PrmDbTester

* Spelling
2025-06-25 13:39:14 -07:00
dependabot[bot]
c2510b11ad
Bump urllib3 from 1.26.20 to 2.5.0 (#3767)
* Bump urllib3 from 1.26.20 to 2.5.0

Bumps [urllib3](https://github.com/urllib3/urllib3) from 1.26.20 to 2.5.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/1.26.20...2.5.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.5.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update fprime-tools to 4.0.0a3 for urllib3 requirement

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-06-25 10:59:57 -07:00
Thomas Boyer-Chammard
6bdeb5ad05
Use concurrency groups in CI to prevent overfilling the queue (#3794)
* Add concurrency group strategy to CI

* test push cancel ?

* Rephrase
2025-06-24 12:36:46 -07:00
Thomas Boyer-Chammard
1a07c847b1
Add code formatting check to CI (#3778)
* Format Fw/Buffer Fw/Cmd and Fw/Com

* add code format check

* fix branch to pull from

* debug

* uninstall before install

* Use pip3

* debug with tmate

* put fprime-tools dep in req.txt

* test

* req hash

* setup python first

* use nasa pointer

* Revert "Format Fw/Buffer Fw/Cmd and Fw/Com"

This reverts commit b4968ec6805006a99bd2a01c0a28fe6fb5f6430f.

* Format Fw/Buffer Fw/Cmd and Fw/Com

* Update to fprime-tools 4.0.0a2

* Use env var for readability

* naming

* Add clang-format to requirements.txt

* Skip clang-format requirement on armv7l platform
2025-06-24 12:18:34 -07:00
M Starch
1e0ea6cb20
Designate base config from non-base config (#3787) 2025-06-24 11:08:33 -07:00
Andrei Tumbar
5723115f5e
Add FPP Interfaces (#3709)
* Interfaces

* Point to new fpp alpha release

* Fix the fprime-gds version

* Update for framer/deframer work

* Fix cmake tests

* Clean up annotations

* Clean up final fpp
2025-06-24 09:08:44 -07:00
Moises Mata
679cab7732
Rename CCSDS to Ccsds following PascalCase conventions (#3788) 2025-06-23 16:00:16 -07:00
Mishaal
0ec96fbea7
PRIVATE -> private for Fw/Dp (#3753)
* PRIVATE -> private for Fw/Dp/DpContainer.hpp

* Add newline to DpContainerTester.hpp

* Update FPP Test to use DpContainerHelper; spelling fix; remove commented out code

* Move DpContainerTester to Fw namespace; refactor DpContainer protected checks into DpContainerTester itself
2025-06-20 14:28:34 -07:00
Mishaal
9992e71dc4
PRIVATE -> private and PROTECTED -> protected in last remaining UTs (#3765)
* PRIVATE -> private and PROTECTED -> protected in last remaining cases in Fw and Svc

* Fix UT errors and clean up refactorted SerializeBufferBaseTester methods

* Comment clean up
2025-06-20 14:28:20 -07:00
0xb-s
f5ba060b89
feat: use config header for CRC filename size (#3708)
* Create CRCCheckerConfig.hpp

* Update CMakeLists.txt

* Update CRCChecker.hpp

* use a constant instead of  #define

* Update CRCCheckerConfig.hpp

* Update CRCChecker.hpp

* Remove spurious configuration

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-06-18 11:30:12 -07:00
Moises Mata
da13651862
CDHCore Subtopology improvements (#3751)
* Simplified config naming scheme, FatalHandler back in CDHCore

* Remove unneeded add_dependencies in TestDeployment CMakeLists.txt

* Changed config name to CDHCore config
2025-06-18 11:29:15 -07:00
Mishaal
5a04997fe4
PRIVATE -> private for Utils/Types/CircularBuffer.hpp (#3743)
* PRIVATE -> private in CircularBuffer.hpp and corresponding updates

* Spelling (aleem)

* Remove commented out test code
2025-06-18 09:32:32 -07:00
Mishaal
0a7974c107
PRIVATE -> private in Fw/Time (#3755) 2025-06-18 09:30:58 -07:00
Mishaal
401b6f72d4
PRIVATE -> private for Fw/FilePacket (#3756) 2025-06-18 09:25:01 -07:00
kevin-f-ortega
13f3677480
Bugfixes and updates to requirements.txt (#3757)
* updating to newer cmake since some toolchains need this new version

* bugfix

* bugfix. need to set the size otherwise there is a possibility buffer's allocated size is larger than expected. This is true when using a staticmemory allocator where the static memory is e.g. 256 but the requested size is 128.

* need to static cast
2025-06-18 09:12:50 -07:00
Mishaal
66ea65ad39
PRIVATE -> private for Svc/DpCatalog (#3742) 2025-06-17 16:24:52 -07:00
Cel Skeggs
39519baaac
Fix compilation when FW_QUEUE_REGISTRATION == 0 (#3746)
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-06-17 16:24:34 -07:00
Mishaal
ec1544933d
PRVIATE -> private for Os/Task.hpp (#3752) 2025-06-17 16:24:12 -07:00
Mishaal
26db6ce8d7
PRIVATE -> private for Fw/Buffer.hpp (#3754) 2025-06-17 16:20:39 -07:00
M Starch
58cfd95407
Fix subtopology dictionary installation (#3744) 2025-06-17 11:55:43 -07:00
Mishaal
9c5c024113
PRIVATE->private and PROTECTED->protected updates in Svc/FpySequencer (#3737)
* PRIVATE->private and PROTECTED->protected updates in Svc/FpySequencer

* Clean up new UT public/private helpers

* sp

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-06-17 10:22:48 -07:00
M Starch
90a52693c5
CMake Refactor: Explicity Setting Autocoder Outputs (#3735)
* Create test case revealing issue

* Refactored autocoders for clearer outputs, tests, chaining

* Testing header generation

* Adding test for rerunning autocoders

* Fix dictionary generation and installation

* Fix CMake tests by removing module-info.txt
2025-06-16 17:55:38 -07:00
M Starch
292476b0c0
Purge PlatformIntType and PlatformUIntType (#3719)
* Purging PlatformIntType and PlatformUIntType

* CI fixes

* Fixing review requirements

* Fix CI error

* Fix CI cmake test regression

* Fix RHEL8 regression
2025-06-16 17:44:24 -07:00
Justine West
98a51bc8b0
Add constants to dictionary spec (#3692)
* Add constants to dictionary spec

* Update enum section to use enum value

* Update dictionary content section to include array of constants.

* Remove kind field from constant

* Add note on how integer constants are output to the dictionary

* Add table of required defs with names, kinds, locations, and purpose
2025-06-16 16:31:46 -07:00
kevin-f-ortega
7f73f012e2
Update supported platforms (#3710)
* updated supported platforms docs

* Fixed Tip box

* clear up doc

* fixed spelling

* Added nice title so the website can pick that up

* correcting step

* updated per pr reviews

* being more consistent with the word deployment. these sentences should actually use reference project instead of reference deployment -- as discussed with the fprime core team
2025-06-16 16:29:08 -07:00
Justine West
be91bfadf1
Support non-default Fw type config (ie: U16, U64) (#3714)
* Add FwBaseIdType, updates ActiveLogger, CmdDispatcher, TlmPacketizer to use Fw types, update unit tests

* Update unit tests, rename FwBaseIdType to FwIdType

* Cleanup

* Change type of sizeOfZeros

* Add FwIdType to TestConfigDeployment overriden config

* Add annotation

* Update Ref linuxTimer base id
2025-06-16 16:06:36 -07:00
Moises Mata
ea96da0792
Add Core Subtopologies: CDHCore (#3720)
* Added led-blinker workflow for aarch64-linux platform

* Update runner label

* Added Tags to RPI self hosted workflows, sparse-checkout-cone-mode false

* Add subtopologies to Svc/ restructing of Ref to include CDH subtopology

* CDHCore Subtopology added under Svc and integrated into Ref

* Health instance within CDHCore references CDHCoreConfig for queue size

* Update metadata

check-spelling run (push) for add-subtopologies

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Added AssertFatalAdapter Version PassiveTextLogger to Subtopology, config clarity improvements

* Comms subtopology without cmdSeq created, integrated in Ref

* Added cmdSeq to Comms Subtopology, integrated into Ref

* Add FileHandling Subtopology, initial structure

* Fixed Spelling, Flie -> File

* Update metadata

check-spelling run (push) for add-subtopologies

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Added working FileHandling, DataProducts subtopology, integrated into Ref

* prmDb part of FileHandling, fatalHandler part of CDHCore

* Update metadata

check-spelling run (push) for add-subtopologies

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Update comment for clarity

* Initial move to phasing components

* Fixing Phasing: Adding initial Phasing for CDHCore, DataProducts, FileHandling

* Renaming topologydefs.hpp, phasing fully working on all four subtopologies, needs cleaning up

* Cleanup with Ports_ComPacketQueue, definition only in Comms.fpp now

* CDHCore subtopology added and integrated within Ref deployment

* Fixed to work with CCSDS, added comment on RefPackets, fatalHandler within CDHCore config

* Add correct stackSize in CDHCoreconfig

* CDHCore Subtopology, parameterization done through config overrides
 - Subtopology with core CDH functionality within Svc
 - integrated within Ref Deployment
 - PingEntries.hpp within CDHCore/ that provides default values for PingEntries
 - Default TlmChan, option to use TlmPacketizer through changing CDHCoreConfig.fpp

* Fixed priority values in CDHCoreConfig, removed FatalHandler from CDHCore

* Update metadata

check-spelling run (pull_request_target) for add-cdhcore-subtopology

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* Added CDHCore as a dependency for TestDeployment, in CMakeLists.txt

* Changed Structure in RefTopologyDefs.hpp to make simpler

* Reverted to prior RefTopologydefs.hpp Structure

---------

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
Co-authored-by: Moises Mata <moisesmata@users.noreply.github.com>
2025-06-16 15:26:35 -07:00
Vince Woo
20d1b54de4
Fix directory detection bug in Os::FileSystem::getPathType (#3727)
* Fixing directory detection bug.

* Removed some superfluous whitespace

* Adding branch path for non-directory and non-file to return PathType::OTHER. Fixing a spelling mistake.

* Moving getPathType to OS specific FileSystem implementations

* Incorporating PR comments and cleaning up comments

* Reverting unnecessary comment changes

* Incorporating fixes for static analysis findings
2025-06-16 15:22:16 -07:00
Thomas Boyer-Chammard
06ae4bc1fb
Add CI build for RHEL8 environment (#3731)
* Add RHEL8 container to CI

* Trigger on ci/ branches

* remove trigger on examples

* Attempt to install deps in container

* remove sudo

* git safe directory

* install libasan

* Add libasan libubsan

* fix spelling

* Add test user for UT run
2025-06-16 14:27:04 -07:00
Thomas Boyer-Chammard
14bac5f350
Fix miscellaneous items following #3684 CCSDS (#3726)
* De-conflict Ref instance IDs

* Assert Space Packet data length at least 1

* Fix TcDeframer SDD
2025-06-11 17:35:12 -07:00
M Starch
bcd4641c91
Scrub XML references from docs (#3718)
* Scrubbing XML

* sp
2025-06-11 14:14:02 -07:00
Thomas Boyer-Chammard
728a022e9c
Add support for CCSDS TC/TM and SpacePacket protocols (#3684)
* First pass at Svc + TcpClient implementation

* Tmp work

* Revert FileUplink changes

* Add copy (with allocation/deallocation) to FprimeRouter to simplify buffer management

* Update FprimeRouter UTs

* Update FprimeDeframer UTs

* Update FrameAccumulator UTs

* Update ComStub UTs

* Update missing Drv and UTs

* Update ComInterface to use ComDataWithContext on output

* Update Ref/RPI topology

* Fix spelling

* Fix test typo

* Update Udp component and UTs

* Rename data ports and standardize "Return" naming pattern

* Fix variable name

* Adapt UTs

* Update Communication Adapter Interface docs

* Full SDD updates

* Spelling &  nits and details

* Put formatting back to original

* Added SpacePacket, TC and TM framers/deframers + Ref topology. Working with GDS wohooo

* TODOs and code cleanup

* Add APID enum to ComCfg.fpp and route based on received APID

* Increment counts per frame/apid

* Remove duplicate files

* Document and implement services/functions provided by the TCDeframer

* Add events, todos and notes

* fill TM frame with idle packet

* Add ApidMapper component and map APID - FwPacketDescriptor

* Refactor to new CMake API

* Update Types and Add TCDeframer tests

* Update type usage namespacing

* Finish TCDeframer UTs

* Add TMFramer tests and refine VcId handling

* Tests and code cleanup

* Define ComPacketType in FPP

* Map FW_PACKET_FILE to downlink specific APID

* Remove sequence number check

* Add packet loss notification to space packet

* Tests WIP

* WIP

* Use SpacePacket header type in TMFramer idle packet

* SpacePacketDeframer tests and untracked APID detection

* Add APID (=PacketDescriptor) extraction to FprimeDeframer

* Use ApidManager on uplink to validate seq count (is central authority for APID - SeqCount)

* Code cleanup

* Much cleaner ApidManager as a service, not in the middle of framing

* Even better ApidManager

* Add SpacePacketFramer UTs

* Set up rule based testing for ApidManager

* Code cleanup and fix TMFramer UT

* First pass at SDDs and stuff

* SDD fixes

* ApidManager Rule-based testing

* Improve TMFramer code coverage, docs and comments

* Types cleanup

* Add CRC check to CcsdsTCFrameDetector

* Add unit tests for CcsdsTCFrameDetector

* Fix Ref topology

* Fix old PacketType usage

* Fix ComQueue UTs

* Fix CI warnings

* Add test for CRC corruption in frame detector

* Spelling

* Remove ApidDemo component from topology

* Fix more static analysis

* Clean up ApidManager tests and fix static analysis warnings

* Fix UTs on RHEL8

* Fix SDD links

* Fix more static analysis on UTs

* More spelling fixes

* Improve SDDs and comments

* Update metadata

check-spelling run (pull_request_target) for ccsds-protocols

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
on-behalf-of: @check-spelling <check-spelling-bot@check-spelling.dev>

* More SDD updates

* Attempt UT fixes

* First pass of review comments

* Fix length token is minus 1 inconsistency

* Review recs: static assert frame size, docs, TM buffer asserts

* Add fprime-gds.yml to Ref for GDS with framing selection

* Update requirements.txt for GDS 4.0.0a3 (CCSDS protocols)

* Update UTs to reflect last update

* Drop Python 3.8 support

* Update FprimeRouter UTs for new APID routing

* Fix spelling and RHEL8 cast warnings

* Fix spelling again...

* Deserialize APID in FprimeDeframer only if it is valid

* Fix googletest warning??

* static casting that u8 yall

* Use width FPP constants

* Add SDD links

* Switch TMFramer/TCDeframer capitalization to TmFramer/TcDeframer

* Use git mv to rename files and directory

* oops forgot rename a test file

* review changes: add annotations on all FPP ports

---------

Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
Co-authored-by: Thomas Boyer-Chammard <thomas-bc@users.noreply.github.com>
2025-06-11 11:04:38 -07:00
Mishaal
2b5d067bc8
PRIVATE->private and PROTECTED->protected updates in Os/File.hpp (#3446) (#3701)
* PRIVATE->private and PROTECTED->protected updates in Os/File.hpp (#3446)

* Fix typo (declation -> declaration)
2025-06-11 09:48:28 -07:00
Vince Woo
bda0b25215
Adding support for UDP ephemeral ports (#3691)
* Fixing immplementation of UDP epehmeral support and adding two tests cases to TestUdp

* Updating SDD. Fixing configureSend so it can be passed a port of 0.

* Actually adding SDD this time. Also fixed some incorrect wording in hpp file.

* Removing unnecessary period

* Removing redundant test. All the functionality can be tested in the same test.

* Removing redundant code path.

* Incorporating some fixes for static analysis findings

* Revert "Incorporating some fixes for static analysis findings"

This reverts commit 644fbbe4e9fb797c765a2e13ef8c4f057e838edf.

* Incorporating some fixes to static analyzer findings.

* Fixing typo

* Changing use of char to CHAR

* Adding documentation for ephemeral ports to Drv/Ip SDD. Fixing configureSend so that it maintains the configured timeout_seconds and timeout_microseconds.

* Adding netinet to spelling expect list.

* Changing the use of socklen_t to U32

* Incorporating PR suggestion

* Reverting back to using socklen_t for address length
2025-06-11 09:47:39 -07:00
Ethan Chee
ec777b88b9
Fix ambiguous error when serializing FwPacketDescriptorType (#3707)
* Fix ambiguous error for .serialize overloads

* change to U32 cast

* change to FwPacketDescriptorType cast
2025-06-10 10:58:38 -07:00
dependabot[bot]
a703d81776
Bump requests from 2.32.3 to 2.32.4 (#3711)
Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.32.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-10 10:21:52 -07:00
kevin-f-ortega
7f5710ace0
Fix copy paste error in comments (#3705) 2025-06-06 15:26:48 -07:00
M Starch
394e34c095
GDS Alpha 2 (#3699) 2025-06-05 15:35:33 -07:00
Vince Woo
426ba86977
Adding note about explicitly identifying ports that need priority in SDD (#3697)
* Adding note about explicitly identifying ports that need priority in SDD

* Corrected type: FDD -> FPP
2025-06-05 12:38:34 -07:00
Mishaal
9b19bdd5a6
PRIVATE->private and PROTECTED->protected updates in Svc/BufferAccumulator (#3446) (#3696) 2025-06-05 12:34:34 -07:00
Mishaal
05258331fc
PRIVATE->private and PROTECTED->protected updates in Svc/CmdSequencer (#3695)
* PRIVATE->private and PROTECTED->protected updates in Svc/BufferLogger (nasa#3446)

* Add comments about fwd declaration (nasa#3446)

* PRIVATE->private and PROTECTED->protected updates in Svc/CmdSequencer (#3446)
2025-06-04 19:30:41 -07:00
Timothy Canham
719faac6f2
Move BlockDriver to Ref example (#3651)
* Moved BlockDrv to Ref

* Fixed unit tests

* Updated LinuxTimer component name

* Fixed unit tests

* Re-removed LinuxTimerImpl.hpp

* Fixed a bunch of doc references to Drv/BlockDriver

* Spelling fix

* Added linux to spelling expect

* Doc fixes, have Svc/LinuxTimer use tick interface

* Added to change log

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-06-04 10:38:29 -07:00
Mishaal
69ae75e7eb
PRIVATE->private and PROTECTED->protected updates in Svc/BufferLogger (#3690)
* PRIVATE->private and PROTECTED->protected updates in Svc/BufferLogger (nasa#3446)

* Add comments about fwd declaration (nasa#3446)
2025-06-03 19:13:18 -07:00
M Starch
80bb78178d
Remove XML usage (#3685)
* XML purge - Wahoo!

* Fixing CI discovered issues

* Fixing CMake tests

(The XML dragon hath been slain)
2025-06-03 17:11:42 -07:00
Mishaal
f330d608e5
PRIVATE->private and PROTECTED->protected updates in FppTest/state_machine (nasa#3446) (#3687)
* PRIVATE->private and PROTECTED->protected updates in FppTest/state_machine/internal_instance/choice/ (nasa#3446)

* PRIVATE->private and PROTECTED->protected updates in FppTest/state_machine/internal_instance/initial/ (nasa#3446)

* PRIVATE->private and PROTECTED->protected updates in FppTest/state_machine/internal_instance/state/ (nasa#3446)
2025-06-03 12:44:04 -07:00
Mishaal
5a0acd1dc0
PRIVATE->private and PROTECTED->protected updates in FppTest/component (nasa#3446) (#3686) 2025-06-03 12:43:37 -07:00
Mishaal
d5aecb8299
PRIVATE->private and PROTECTED->protected updates in RPI (nasa#3446) (#3683) 2025-06-02 13:00:35 -07:00
Mishaal
c3f021b5eb
PRIVATE->private and PROTECTED->protected updates in Os, partial (nasa#3446) (#3682) 2025-06-02 12:14:55 -07:00
dependabot[bot]
c413ae54b1
Bump setuptools for dependabot warning (#3630)
* Bump setuptools from 75.3.0 to 78.1.1

Bumps [setuptools](https://github.com/pypa/setuptools) from 75.3.0 to 78.1.1.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v75.3.0...v78.1.1)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 78.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fixing for Python 3.8 as well

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-06-02 11:31:21 -07:00
Mishaal
51725bfa08
PRIVATE->private and PROTECTED->protected updates in Ref (nasa#3446) (#3681) 2025-06-02 11:24:23 -07:00
Zimri Leisher
de7107e3dc
Add seqRunIn port (#3680)
Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-06-02 11:07:25 -07:00
Mishaal
8ead55ada7
PRIVATE->private and PROTECTED->protected updates in multiple Fw subdirectories (#3672)
* PRIVATE->private and PROTECTED->protected updates in multiple Fw subdirectories (nasa#3446)

* Add cone-mode fix to sparse-checkout

* add another sparse-checkout fix

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-06-02 10:47:41 -07:00
Moises Mata
62572554c9
Adding aarch64-linux workflow (#3671)
* Added led-blinker workflow for aarch64-linux platform

* Update runner label

* Added Tags to RPI self hosted workflows, sparse-checkout-cone-mode false
2025-06-02 09:37:31 -07:00
Mishaal
7339ce9547
PRIVATE->private and PROTECTED->protected updates in multiple Svc subdirectories (nasa#3446) (#3669) 2025-06-02 08:45:45 -07:00
Mishaal
c947828a8e
PRIVATE->private and PROTECTED->protected updates in Svc/ComLogger (#3446) (#3661) 2025-05-28 13:44:25 -07:00
Thomas Boyer-Chammard
b594dac0a3
Add How-To guide for adding a Custom Framing Protocol (#3635)
* Add How-To Implement a Custom Framing Protocol guide

* Nitpicks

* Fix link

* Clarify and extend docs
2025-05-28 10:19:05 -07:00
M Starch
de50149d91
Move snprintf selection to platform so platforms can override (#3655) 2025-05-28 10:04:37 -07:00
Emmanuel Ferdman
24534f7e8d
Display cmake target on error (#3654)
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-05-27 19:59:52 -07:00
Mishaal
3987931a52
PRIVATE->private updates in CFDP (#3446) (#3657) 2025-05-27 19:58:28 -07:00
Mishaal
e05067ac43
PRIVATE->private and PROTECTED->protected updates in Drv (#3446) (#3658) 2025-05-27 19:58:02 -07:00
Mishaal
56a3020865
PRIVATE->private and PROTECTED->protected updates in Svc/Fprime* and Svc/Frame* (#3446) (#3660) 2025-05-27 19:56:44 -07:00
Mishaal
abc9b52376
PRIVATE->private and PROTECTED->protected updates in Svc/File* (#3446) (#3659) 2025-05-27 19:55:55 -07:00
M Starch
378a7a3e6f
Initial refactor to allow implementations as object libraries (#3642)
* Initial refactor to allow implementations as object libraries

* Initial review fixes

* Fixing linux builds

* Formatting

* sp

* Removing commented-out code

* Fixing UT_AUTO_HELPER regression

* CI fixes

* Review fixes
2025-05-23 14:36:05 -07:00
Remzell Maranan
f440784de8
Add Ninja python package in requirements (#3627) 2025-05-22 11:07:39 -07:00
Thomas Boyer-Chammard
32582d7e9a
Add UT_AUTO_HELPERS control word to new CMake API (#3648)
* Add hotfix

* Review recommendation
2025-05-22 11:07:25 -07:00
Mishaal
eea6aca8fa
Switch the type of the Task priority to FwTaskPriorityType (#3617)
* Change the type of the Task priority to FwTaskPriorityType

* Fix missed UT arg update

---------

Co-authored-by: Mishaal Aleem <aleem@fprime-fsw-0.jpl.nasa.gov>
Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
2025-05-21 14:24:49 -07:00
Andrei Tumbar
836a0444a6
Array toString() delimited with comma (#3626)
* Array toString() delimited with comma

* Bump FPP
2025-05-21 14:24:11 -07:00
Thomas Boyer-Chammard
952e7cf5ef
Update requirements.txt for release v4.0.0a1 (#3623)
* Update requirements.txt for release v4.0.0a1

* put fprime-fpp-* packages back
2025-05-15 12:03:11 -07:00
kevin-f-ortega
24a89bf6f0
Update Os File UTs (#3619)
* bugfixes to uts. the old way was generating out of range offsets

* bugfixes

* adding more helpful messages and bugfix to ut for when mode is OPEN_APPEND

* removed unnecessary prints

* ci fixes and updates based on review

* fix for static analyzer

* sp

* should appease ci

* append moves the file pointer before write not on open

* typo

* cleaned up code

* open with append will still have the state position to 0
2025-05-15 10:15:53 -07:00
Brian Campuzano
2542b604b4
Extern params (#3608)
* Initial prototype of external parameter types

* Change external parameter interface to be an abstract base class

* Renamed external parameter delegate

* Sync parameter delegate interfaces with GNC

* Finshed interface sync with GNC

* Fixed missing include

* Added external parameter delgate documentation

* Added parameter base ID to the parameter external delegate interface

* Added external parameters to FPP component UTs

* Add external parameter UTs and got them to build

* Completed external paramter UTs

* Updated parameter delegate to accept a serial buffer base instead of a parameter buffer

* Renamed to fix spelling

* Bumped Fpp version

* Added external parameters documentation to the user's guide

* Fixed config include path

* Updated spelling expect file for external parameter names

* Revise FppTest

Add static casts in assertions to avoid conversion warnings

* Bumped FPP version to the 10th alpha release of 3.0.0

* Revise FppTest

Sort file lists

---------

Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
2025-05-15 10:09:57 -07:00
M Starch
99da827ffb
Making configuration files trigger configure (#3620) 2025-05-15 09:51:27 -07:00
Cel Skeggs
7e7861e462
Add port to OsTime to set the current time (#3607) 2025-05-15 09:19:56 -07:00
M Starch
23d259a095
Add GOVERNANCE Document (#3609)
* Shining the light of open-source standards

* sp

* More spelling
2025-05-14 12:35:58 -07:00
Zimri Leisher
29989caf3f
FpySequencer 0.2 (#3552)
* Add goto, if, setlocalvar, and debugging

* Finish off debug stuff, add more UTs, start work on UT seq builder

* Some more work on UTs

* Finish UTing RunState

* Much more UT of validation

* Test allocbuff

* Add a couple more Uts

* Some formatting and more UT coverage

* Fix docstirng

* Fix rpi conversion bug

* Fix mac warning

* Fix sp

* sp

* Update some docs

* Switch to using fixtures

* Add gettlmval and gettlmtime

* Update docstrings of getprm/gettlm ports

* Add TlmGet port to tlmpacketizer

* Add get_prm_val

* Fix tlmchan gettlm

* Combine tlmval and time into one

* Update tlm packetizer with TlmValid

* Update tlm chan with TlmValid

* PR feedback

* Fix rpi build

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-05-14 12:30:56 -07:00
M Starch
6acc176acc
Remove unused property (#3606) 2025-05-14 11:09:45 -07:00
M Starch
e63bc77c2d
Remove regeneration from AC files that are themselves regenerated (#3602) 2025-05-14 09:54:57 -07:00
Cel Skeggs
a7d9db1780
Fix memory leak in ComStub when reads fail (#3600)
drvReceiveIn passes ownership of recvBuffer, but ComStub only took care
of deallocating the buffer if the read operation succeeded.
2025-05-14 09:19:44 -07:00
Rob Bocchino
64ae5cf1a8
Update FPP version (#3595) 2025-05-14 08:33:45 -07:00
Cel Skeggs
7fcd01a547
Fix version check error message (#3596) 2025-05-14 08:33:06 -07:00
AlesKus
ae2940b6c0
Fix ISR handler invocation in Drv::BlockDriver (#3586) 2025-05-12 15:18:08 -07:00
M Starch
0d55b14848
Allow new configuration for F Prime (#3563)
* WIP defaulted config

* New configuration call

* Config archives use -fPIC when supporting BUILD_SHARED_LIBS

* Moving config to default/config

* Fixing CMake UTs

* register_fprime_config tests

* Re-enabling shared libraries except for macOS

* Better testing and comments

* More configuration clean-up

* More review fixes

* Fixing multiple locations bug

* sp

* Fixing config assembler name

* Python formatting

* Initial review suggestions

* Reverting snprintf fix

* Merge conflict test failures

* Linux CMake UT fixs
2025-05-10 12:24:35 -07:00
M Starch
6be3d3a9b7
Add Several CMake Tests to Prove Previous Fixes (#3579)
* Adding deployment dependency test. Fixes: #3494

* Adding Generic toolchain test. Fixes: #2636

* Formatting

* Remove test code.

* formatting
2025-05-09 17:06:15 -07:00
Thomas Boyer-Chammard
d1a9b2374a
Fix cookiecutter test workflow (#3583)
* Fix target_repo usage

* Rename file

* Add base-ref logic to get-branch
2025-05-09 17:02:46 -07:00
M Starch
6e812a9e8b
Prefixing variables to prevent shadowing. Fixes: #3370 (#3585) 2025-05-09 17:02:37 -07:00
M Starch
d1f7f1155e
Resolve Source Paths in CMake (#3576)
* Resolving paths, relative path test. Fixes: #2965, #3575

* Fixing CMake UTs

* formatting

* sp
2025-05-09 16:33:37 -07:00
kevin-f-ortega
d26b2382a2
Add file status (#3569)
* adding status for when Os::File should report no more resources

* formatting

* new enum values must also be added to the model fpp file
2025-05-09 16:33:22 -07:00
M Starch
4ecc916dd9
Removing CMake from installation guide. Fixes #3501 (#3574) 2025-05-09 12:14:00 -07:00
Cel Skeggs
4a68adddfe
Improve one possible error on bucket exhaustion (#3567)
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-05-09 12:07:17 -07:00
AlesKus
cac5166268
Clarify invocation of seqCmdStatus port in CmdDispatcher (#3557)
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-05-08 18:26:29 -07:00
M Starch
717731e592
Improve GDS plugin documentation (#3551)
* Improving plugin documentation

* Update docs/reference/gds-plugins/data-handler.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Add GDS Plugins to Reference section

* Review comments

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-05-08 14:48:55 -07:00
Ashley Nilo
9dbe931ae8
Update User Manual and Tutorials Indexes (#3573) 2025-05-08 13:59:31 -07:00
Cel Skeggs
6f7995fe60
Clarify allocation failure error (#3566)
* Clarify allocation failure error

It's not useful to report an UNKNOWN_ERROR when the cause is known.

* Adding model to CPP enum check

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-05-08 13:47:55 -07:00
Thomas Boyer-Chammard
4a082e2b00
Fix project-builder by checking out submodules (#3570)
* Fix project-builder by checking out submodules

* use recursive

* use recursive again...
2025-05-08 12:57:35 -07:00
Thomas Boyer-Chammard
e2bd5f7dc7
Add How To guide for integrating third-party libraries (#3489)
* Add How-To guide for integrating external libraries

* Fix formatting

* Call out "ready to be included!" and fix links

* Remove dead paragraph

* Fix spelling and misc

* Add common considerations for choosing approach

* Add section breaks

* Fix spelling

* Links and such

* Fix spelling

* Add round of review feedback

* Spelling

* Add review changes

* Remove How-To prefix
2025-05-08 10:56:55 -07:00
Thomas Boyer-Chammard
c3b2e04880
Use data return pattern on Uplink and standardize port names (#3546)
* First pass at Svc + TcpClient implementation

* Revert FileUplink changes

* Add copy (with allocation/deallocation) to FprimeRouter to simplify buffer management

* Update FprimeRouter UTs

* Update FprimeDeframer UTs

* Update FrameAccumulator UTs

* Update ComStub UTs

* Update missing Drv and UTs

* Update ComInterface to use ComDataWithContext on output

* Update Ref/RPI topology

* Fix spelling

* Fix test typo

* Update Udp component and UTs

* Rename data ports and standardize "Return" naming pattern

* Fix variable name

* Adapt UTs

* Update Communication Adapter Interface docs

* Full SDD updates

* Spelling &  nits and details

* Put formatting back to original

* Update Deframer interface to include bufferReturn

* Address review comments
2025-05-08 10:54:54 -07:00
Thomas Boyer-Chammard
53320cd6a5
Update docs link to match line numbers (#3560) 2025-05-06 19:12:17 -07:00
Ashley Nilo
9c8593b705
Add docs nav for tutorials back to mkdocs.yml (#3556)
* Added nav for tutorials back to mkdocs.yml

* formatting

* formatting

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-05-05 18:06:25 -07:00
Thomas Boyer-Chammard
c2ad6e8f3b
Fix ComStub UTs type warnings (#3550) 2025-05-01 10:40:58 -07:00
Thomas Boyer-Chammard
fcc4deb70f
Add ByteStreamDriverInterface docs section (#3549) 2025-05-01 10:27:00 -07:00
Thomas Boyer-Chammard
928559c7b2
Remove old help-text from GDS guide (#3541)
* Remove old help-text from GDS guide

* Removing empty help text block

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-05-01 09:53:09 -07:00
kevin-f-ortega
11faa6f004
Add docs for driver interfaces (#3542)
* adding docs for driver interfaces

* fixed spelling
2025-05-01 09:46:55 -07:00
kevin-f-ortega
6e0b70d5fe
Add initial list of supported and future supported platforms (#3348)
* adding initial list of supported and future supported platforms

* typo

* added supported platforms to mkdocs

* Added expected spelling

* removed

* addressing mkdocs conflict

* addressed pr comments

* Fix spelling

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-04-29 18:06:35 -07:00
AlesKus
374060ed12
Fix sign-compare warning in Os::Posix::File, Svc::ComQueue, and Svc::TlmPacketizer (#3515) 2025-04-29 18:05:00 -07:00
Thomas Boyer-Chammard
8ddbef6810
Fix hashes.txt generation by getting build_root (#3523)
* Fix hashes.txt generation by getting build_root

* Fix SRC test

* Fix get_nearest_build_root bug

* Fix for build root errror

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-04-29 17:48:15 -07:00
kevin-f-ortega
09ea55bc8f
Add upper-bound limit to for loop in Os::FileSystem (#3535)
* Adding upper-bound limit to forloop in order to avoid inf loop

* applying code formatter
2025-04-29 17:08:38 -07:00
Thomas Boyer-Chammard
d0246f148b
Add Framer FPP interface, implement FprimeFramer and adapt ComQueue (#3486)
* Initial FprimeFramer and FprimePacketizer

* Code clarity + set up UTs

* Rework ComQueue and ComStub to use DataWithContext

* Add packets to RefPackets.fppi

* Fix ComQueue tests

* Add hotfix to FileDownlink instead of ComQueue

* Fix cancelPacket as well

* Fix ComQueue UTs by removing hotfix

* Refactor DataWithContext to use an FPP object for context instead of Fw.Buffer

* Touch up testing

* Add docs

* more docs

* More docs

* Rework buffer deallocation pattern to pass-through ComQueue

* Update ComStub UTs

* Restore original FileDownlink.cpp

* Formatting tweak

* Update deprecated getSerializeRepr() calls

* deserialization methods

* Fix spelling

* add cast for safety

* CMakefile change

* Bump ComQueue depth

* Update RPI deployment with new Downlink stack

* Rename comQueueIn port to comPktQueueIn

* Fix comQueueIn to comPktQueueIn change

* Remove legacy Svc.Framer

* Fix CMake UTs

* Fix RPI topology config

* Fix FprimeProtocol.fpp module

* Fix namespacing

* Use const reference for FrameContext port

* Review comments EXCEPT port passback refactor

* Rework ComStub with new ByteStream

* New ByteStream - ComInterface model

* Rework TcpClient / TcpServer with new bytestream

* Adapt UDP component for new ByteStream

* Adapt FrameAccumulator for new ByteStream

* Adapt FprimeFramer for new ByteStream

* Update Ref topology with new ByteStream model

* Remove all legacy deallocates from Drivers; reintroduce DEPRECATED model types

* Fix spelling and include error

* More spelling....

* RPI and RpiDemo fixes

* Fix conversion warning on RPI

* static_cast for short int on RPI

* Standardize port names

* Remove legacy Drv types and merge RECV/SEND enum type, delete StreamCrossover

* Update SDDs

* Update SDDs

* Fix ComInterface <-> Framer interfaction, clarify comments and fix annotations

* Switch ComStub from ASSERT to log failure and return buffer

* Add history size check + clarify test handler overrides

* Fix RPI topology to wire comStub on Uplink

* Rename comm to comDriver in RPI topology

* Update communication adapter interface docs
2025-04-29 16:40:36 -07:00
Rob Bocchino
a9da1b9955
Fix array allocation in Frame Accumulator (#3525)
Avoid use of placement new with array types
2025-04-25 14:19:14 -07:00
Vince Woo
1ebf6af4b2
Adding wait to ensure that the TcpServerComponent is started before continuing the test. (#3528) 2025-04-25 14:15:59 -07:00
Ashley Nilo
548012bbf9
Auto-generate nav with mkdocs-awesome-nav (#3460)
* Awesome Nav Changes

* Awesome Nav Changes

* Bring up to date with latest

* This is AWESOME

* Rename files for ordering

* Remove How-To prefix in titles

* Fix spelling

* Remove old sdd_processing.py script

---------

Co-authored-by: thomas-bc <thomas.boyer.chammard@jpl.nasa.gov>
2025-04-25 14:15:20 -07:00
Andrei Tumbar
b615bd2e7e
FppTest: Type Alias (#3470)
* clear

* Add component tests

* spelling

* Point FPP packages to latest alpha release

* Add gitignored file

* Clean up naming and use internal preallocated string buffers

* Clean up comments

---------

Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
2025-04-21 16:46:06 -07:00
Zimri Leisher
6e2fb1fe4b
FpySequencer Version 0.1: Feature Parity (#3334)
* Add initiali fpy sequencer

* Get ready to use internal state machines

* Start modeling state machine in fpp

* Little more work on fpy sequencer

* Little more drafting on fpy sequencer

* State machine review with bocchino

* Remove unnecessary sm stuff

* Update docstgrings

* Start implementing actions for SM

* Little more work on fpy seq

* Get compiling again, rework how errors are handled, start actually reading header from disk

* Much more work on getting the state machine up and working

* Little more work

* More changes to SM. Mostly combine validation into one state

* A little more work on the readXYZ funcs

* Start working on the actual runtime!

* Little more work on sending out cmds

* Some work on handling statement results

* Get waits working hopefully. Also refactor cmd signals and responses

* remove the two states for cmd vs directive

* Some progress in converting to fprime types

* Get seq compiling with new fprime types

* refactor validation a little

* Fix final bugs with seq parsing. First seq rangits add to ref

* Add StatementARgBuf

* Add some tlm, get wait directives working

* Check timebase/ctx, increase allocated size

* Some fixes for removing NATIVE_X

* use handlestmt result

* Fix some types, clean up some errors, add tlm

* Move more stuff to RUN state

* Start pulling seq dirs into internal ports

* Use internal interfaces for directives

* Add timeout to dispatcher

* Fix a lil bug with seq too large

* Sequencer working! Passing all int tests

* Add seq path tlm, timeout, return signals in directives

* Fix several pr feedback items

* More pr feedback

* More fixes from PR feedback

* Remove printf

* Add basic unit tests

* Respond to more feedback

* Do most feedback from comments

* Little more event fixes, add more docs

* Some work on proper cmd response off nominal behavior

* Add all events and conditions to cmdresponsein

* Small fix to unexpected cmd repsonse, remove from ref

* Fix some small compiler warnings

* Fix one more warning

* Fix a comment

* spelling

* Remove unused types from test

* Cast  assert arg

---------

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-04-21 14:04:16 -07:00
Thomas Boyer-Chammard
7900510998
Fix installation of ALIAS targets in CMake (#3514) 2025-04-17 18:29:52 -07:00
M Starch
aad0e6e0d7
Config blank slate (#3487)
* Initial refactor of CMake build target

* Changing config CMake to new style

* Initial step towards restoring UTs

* Working on CMake UTs

* Fixing UTs - no shared

* Rebasing nasa/fprime

* sp

* Fixing inital CI issues

* Fixing more CI errors through PIP-supplied CMake

* More CI fixes

* Adding external links to recursive link

* CI fixes, and function comments
2025-04-17 11:46:37 -07:00
kubiak-jpl
b30a02c475
Add OsTime component (#3355)
* OsTime proof of concept

* Updated documentation and unit tests

* Add no epoch test

* Add kubiak to expect.txt

* Updates to OsTime to support setEpoch port and data structure locking

* Address analyzer warnings

* Fix one more CI warning

* Remove use of void

* Rework timing assertions

* Fix spelling of epoch

* Move OsTimeEpoch port inside a Ports directory

* Update OsTime tests to use RawTimeTester

* Increase config FW_RAW_TIME_HANDLE_MAX_SIZE to 32 bytes to support Fw::Time objects

* Reduce scope of OsTime Epoch Mutex

* sp

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-04-16 14:53:56 -07:00
Thomas Boyer-Chammard
20dc425cc8
Fix FileDownlink conversion warning (#3493) 2025-04-16 11:58:02 -07:00
Thomas Boyer-Chammard
2d3e09b337
Add FW_PACKET_FILE descriptor to FileDownlink and FileUplink packets (#3488)
* FileDownlink FileUplink changes

* Fix static analysis...

* Update tests to account for packet descriptor

* Update with new serializer/deserializer

* Address Review comment

* formatting

* Add casts and normalize offset method
2025-04-16 10:23:21 -07:00
Vince Woo
a2141d98fb
Deprecate Fw::Buffer::getSerializeRepr in favor of 'getSerializer' and 'getDeserializer' (#3431)
* Deprecating Fw::Buffer::getSerializeRepr in favour of Fw::Buffer::getSerializer and Fw::Buffer::getDeserializer (#2714)

* Addressing PR comments.

* Add workflow for running fpp-to-json on Ref (#3430)

* Add workflow for running fpp-to-json on Ref

* Update working dirs

* Add FPP v3.0.0a4

* fpp v3.0.0a5

* Use setup action

* Rename workflow for better display

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>

* Return cmd repsonse and UT check (#3438)

Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>

* Update Ref to use FPP telemetry packets (#3440)

* Revise Ref app

Convert Ref packets to FPP

* Remove header include for XML packets

* Remove trailing spaces

* Delete RefPackets.xml

* Update Ref packets

* Update fpp version

* Update fpp version

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>

* Refactored type organization (#3422)

* Refactored type organization

* Creating better configuration/types header hierarchy

* Replace FpConfig type aliases with FPP generated aliases

* Add the aliases to the FPP model

* Config + Type Aliases builds

* Renamed Fw/Types.h,hpp to Fw/FPrimeBasicTypes.h,hpp

* Updating to FPP-a7

* Adding newline

* sp

* Fixing minor nit from review

* Spurious ;

---------

Co-authored-by: Andrei Tumbar <andrei.tumbar@jpl.nasa.gov>

* Deprecating Fw::Buffer::getSerializeRepr in favour of Fw::Buffer::getSerializer and Fw::Buffer::getDeserializer (#2714)

* Incorporating PR suggested fixes

* Adding the setting of m_serLoc and m_deserLoc to the copy constructor. Moving those members from private to protected.

* Adding m_serLoc and m_deserLoc copying to = operator function. Fixing FPP tests to explicitly move deserialize location to offset.

* File typo (#3464)

* typo. SeekType does not have a CURRENT value but it does have a RELATIVE value

* applied formatter

* Incorporating PR comments

* Incorporating PR comments

---------

Co-authored-by: Justine West <35715959+jwest115@users.noreply.github.com>
Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
Co-authored-by: Zimri Leisher <zimri.leisher@gmail.com>
Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
Co-authored-by: Rob Bocchino <bocchino@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: Andrei Tumbar <andrei.tumbar@jpl.nasa.gov>
Co-authored-by: kevin-f-ortega <kevin.f.ortega@gmail.com>
2025-04-15 14:42:44 -07:00
Justine West
395ff76a7a
Add System Reference to CI (#3466)
* Initial workflow for system reference ext build

* add default branch to checkout

* fix directory

* try to fix path

* fix

* undo prev change

* debugging

* remove system ref path

* add rpi toolchain dir to path

* fix step

* rename var

* update path

* update path

* update toolchain version

* add ply

* add pkg config path to env

* update dirs

* fix pkgconfig path

* fix typo

* remove -j arg

* try with my branch

* cleanup

* one more test

* undo prev change

* Update spelling

* Update default branch
2025-04-15 11:41:00 -07:00
kevin-f-ortega
637e812d59
removed extra zeros from baudrates (#3469) 2025-04-10 11:10:14 -07:00
kevin-f-ortega
a8d66d28f6
File typo (#3464)
* typo. SeekType does not have a CURRENT value but it does have a RELATIVE value

* applied formatter
2025-04-09 12:31:27 -07:00
M Starch
0659f0940b
Refactored type organization (#3422)
* Refactored type organization

* Creating better configuration/types header hierarchy

* Replace FpConfig type aliases with FPP generated aliases

* Add the aliases to the FPP model

* Config + Type Aliases builds

* Renamed Fw/Types.h,hpp to Fw/FPrimeBasicTypes.h,hpp

* Updating to FPP-a7

* Adding newline

* sp

* Fixing minor nit from review

* Spurious ;

---------

Co-authored-by: Andrei Tumbar <andrei.tumbar@jpl.nasa.gov>
2025-04-03 12:11:36 -07:00
Rob Bocchino
dcfc109b5b
Update Ref to use FPP telemetry packets (#3440)
* Revise Ref app

Convert Ref packets to FPP

* Remove header include for XML packets

* Remove trailing spaces

* Delete RefPackets.xml

* Update Ref packets

* Update fpp version

* Update fpp version

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-04-03 10:36:00 -07:00
Zimri Leisher
93510e1425
Return cmd repsonse and UT check (#3438)
Co-authored-by: Zimri Leisher <zimri.leisher@fireflyspace.com>
2025-04-03 10:04:38 -07:00
Justine West
645e3b4cf6
Add workflow for running fpp-to-json on Ref (#3430)
* Add workflow for running fpp-to-json on Ref

* Update working dirs

* Add FPP v3.0.0a4

* fpp v3.0.0a5

* Use setup action

* Rename workflow for better display

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-04-03 09:49:05 -07:00
Rob Bocchino
8a4bef243b
Fix warnings in FppTest build (#3434)
* Fix FppTest warnings

* Revise FppTest warnings

* Fix conversion warnings in FppTest

* Fix FppTest warnings

* Revise comments

* Fix FppTest warnings on F Prime dev machine

* Add missing header include
2025-04-02 11:02:06 -07:00
M Starch
f912e1bd75
Issue 3285 reducing signed size type in os file (#3402)
* Remove FwSignedSizeType from file

* Restoring FwSignedSizeType to seek offsets

* Fixing usages and UTs

* Fixes on Linux

* CI fix

* CI round 3

* CI rev 4

* Fixing code scan errors

* Review fixes - pt 1

* Failed to save
2025-03-28 11:47:07 -07:00
Vince Woo
630c30768d
Fixing compilation error for FW_RELATIVE_PATH_ASSERT and FW_FILE_ID_ASSERT assert levels when ASSERT_RELATIVE_PATH or FW_FILE_ID are not defined. (#3418)
* Adding fallbacks FILE_ID and RELATIVE_PATH asserts. Unit tests implemented but the FILE_ID test is broken. (#2988)

* Consolidating UTs into AssertTypesTest and fixing minor bug in Fw/Test/UnitTestAssert.cpp

* Fixing minor typo in comment
2025-03-28 11:20:44 -07:00
M Starch
2dcd21902d
Testing with configured fixed-size types (#3409)
* Testing with configured fixed-size types

* Linux fixes

* Final settings

* Removing FwNativeIntType
2025-03-28 11:11:13 -07:00
Tyler Russin
c7828f504d
Update Ref Application README (#3423) 2025-03-28 09:47:57 -07:00
Thomas Boyer-Chammard
795abf02db
Add apt-get update call to all workflows using apt-get (#3415) 2025-03-26 15:11:56 -07:00
Rob Bocchino
abeb39bdb1
Update FPP to v3.0.0a3 (#3393)
* Revise String.hpp

Remove explicit keyword

* Revise FppTest

Update FPP version
Re-enable commented-out ports

* Revise ActiveTest

* Revise FppTest for components

* Revise FppTest tests for components

* Revise FppTest for components

* Revise FppTest

* Revise FppTest

* Revise FppTest

* Fix warnings on fprime dev machine

* Update fpp version

* Remove external keyword from constructors
2025-03-26 14:07:42 -07:00
Cel Skeggs
5287d2f584
Clarify dependency for FW_ENABLE_TEXT_LOGGING (#3391) 2025-03-22 15:10:14 -07:00
Thomas Boyer-Chammard
fdbcc4962a
Fix UT_MOD_DEPS usage in Fw (#3392)
* Add minor improvements to deal with external libraries

* Fix UT_MOD_DEPS usage

* Revert "Add minor improvements to deal with external libraries"

This reverts commit 44803631eee9d152a00bbaabc42124b8404f56de.
2025-03-22 15:09:05 -07:00
M Starch
58f4f96915
Remove NATIVE_INT_TYPE, NATIVE_UINT_TYPE, and POINTER_CAST from Svc (#3374)
* Remove NATIVE_* types from FileUplink

* Remove NATIVE_* types from RateGroupDriver

* Remove NATIVE_* types from ComLogger

* Addressing init function usage of NATIVE_ types

* NATIVE_ types from command dispatcher

* NATIVE_ types from ComQueue

* NATIVE_ types from CmdSplitter

* U32 -> FwOpcodeType in CmdDispatcher

* NATIVE_ types in BufferManager

* NATIVE_ types in LinuxTimer

* NATIVE_ types from BufferAccumulator and renabling UT

* NATIVE_ types from TlmChan

* NATIVE_ types from BufferRepeater

* NATIVE_ types from Active/Passive Rate Group

* NATIVE_ types from ComSplitter and ComStub

* NATIVE_ types from ActiveLogger and fixed ActiveRateGroup sdd

* NATIVE_ types from Dp*

* NATIVE_ types from FileManager and ActiveLogger (missed)

* NATIVE_ types from BufferLogger, FileDownlink, StaticMemory

* Deleting UdpSender/UdpReceiver that lack models and build config

* NATIVE_ types from Health

* NATIVE_ types from CmdSequencer

* NATIVE_ types from TlmPacketizer

* Fixing unit test issues

* POINTER_CAST from Svc

* CI fixes

* CI fixes (Linux)

* Fixing Ref/RPI for RG context

* CI (sp)

* Fixing RPI build for time conversions

* CI fixes (RPI)

* Self review comments

* Removing UDP sender/receiver config

* Review recommendations - pt 1
2025-03-17 09:58:56 -07:00
M Starch
53bf4265af
Removing NATIVE_ and POINTER_CAST from FppTest, Utils, cmake, config,… (#3378)
* Removing NATIVE_ and POINTER_CAST from FppTest, Utils, cmake, config, and docs

* Review response - pt 1

* Review comments - pt 2
2025-03-17 09:50:40 -07:00
M Starch
6ddf665cfe
Fixes #3204 by removing NATIVE_ and POINTER_CAST from Drv (#3380)
* Fixes #3204 by removing NATIVE_ and POINTER_CAST from Drv

* Fix CI checks
2025-03-14 16:56:16 -07:00
M Starch
637be256c4
Assert numerical type invariants. Fixes: #3207 (#3382)
* Assert numerical type invariants. Fixes: #3207

* Review suggestions
2025-03-14 16:54:09 -07:00
M Starch
eebd2c17b4
Adding warning about the use of PlatformPointerCast. Fixes: #251 (#3381) 2025-03-13 15:53:01 -07:00
Vince Woo
69ba64b59c
Adding format specifier aliases for primitives. Updating documentation. (#3199) (#3375)
* Adding format specifier aliases for primitives. Updating documentation. (#3199)

* Changing double format to 'lf' for better compatibility for scanf

* Adding UTs. Removing PRI_F32 as C/C++ always promotes floats to doubles.
2025-03-13 14:00:41 -07:00
Thomas Boyer-Chammard
dcc3436200
Split Deframer into FrameAccumulator, Deframer, and Router (#3250)
* Split Router out of Deframer - initial implementation

* Rename variable to packetBuffer and resolve conversion warnings

* Add test cases for each incoming packet type

* Adjust comments and stuff

* Update Ref topology with Router

* WIP - FrameAccumulator

* Add lightweight deframer

* Working frame detector, accumulator, and fprime packet

* CCSDS implementation and better checksums

* Fixing overly small start word to use SCID as well

* Fixing frame accumulator for new structure

* Minor cleanup to frame detectors

* Add CCSDS Deframers and F´ minimal deframer

* Clean up comments

* Update Ref topology with Accumulator/Deframer/Router

* Update buffer manager

* Upgrade Router.cpp to latest Fw::Logger

* Update RPI deployment to use FrameAccumulator/Router

* Remove CCSDS Deframers

* Add first pass at UTs

* add buffer accumulation testing

* start SDD and rename author

* Fix static analysis warnings and add comments to UTs

* Spelling

* Add FprimeFrameDetector UTs

* Fix CI issue

* Fix test component creation

* Add first pass at SDDs

* Rename FrameAccumulator allocation ports

* Add review comments

* Functional one-off detection

* Fix algorithms and rename Deframer to FprimeDeframer

* Remove file

* Remove templated detectors

* Improve test code

* Rename frame Footer to Trailer, and improve SDDs

* finish renaming footer to trailer and add implementation note

* Fix spelling and CI warning

* Fix test code

* More CI and spelling fixes

* Add back virtual destructor

* appease pedantic warnings

* Fix declaration ordering for safe destruction

* Run formatting and add a few comments

* Add RouterInterface.fppi and use it in Router

* review changes round 1

* Rename Router to FprimeRouter and add test for unconnected unknownDataOut port

* Finish renaming Router -> FprimeRouter

* Use get-target-branch for cookiecutters tests and fix spelling

* fix a few comments, CI warning and formatting

* Update types for compatibility with updated FwSizeType

* Move FprimeProtocol.fpp to Svc/ and update non-compliant UINT types

* Code review recommendations

* Move FrameAccumulator destruction to cleanup() code

* Add frame validation to FprimeDeframer

* Add cleanup() call to test code

* Fix static analysis warnings

* Resolve type warnings and add multiple events in FprimeDeframer

* latest latest v3

---------

Co-authored-by: Michael D Starch <Michael.D.Starch@jpl.nasa.gov>
2025-03-12 16:05:09 -07:00
Rob Bocchino
da11b3a7c5
Improve warning flags in builds (#3319)
* Update fpp version

Add more warnings to FppTest

* Update fpp version

Add warnings to build

* Enable warnings in unit tests

Fix warnings

* Clean up test code

* Update fpp version

Remove workarounds in unit test builds

* Update fpp version

Fix warnings

* Revise DpManager tests

Remove conversion warnings

* Revise DpWriter tests

Remove conversion warnings

* Refactor Hash

Provide a size type to remove dependencies on NATIVE_INT_TYPE,
which is going away.

* Revise top-level CMakeLists.txt

* Fix warnings in Ref

* Fix warnings in Ref, RPI

* Revise warning flags

* Revise code to eliminate warnings

* Revise code to fix warnings

* Revise code to fix warnings

* Revise code to fix warnings

* Revise Serializable.cpp

* Revise Serializable.cpp

* Revise warning flags

* Fix warnings in test code

* Fix warnings

* Fix warnings

* Fix warnings and static analysis errors

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Turn off -Wshadow for unit tests

* Revise comments

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Fix warnings

* Enable -Wshadow for main ut builds

* Revise compile options

* Remove commented-out code

* Update STest

Eliminate warnings

* Fix warning

* Fix warnings

* Fix warning

* Fix warning

* Fix warning

* Revise comments

* Revise static cast expression

* Cast return type to void

* Remove unneeded cast

* Fix warnings that appear on the F Prime dev machine

* Fix more warnings

* Enable more warnings

* Update fpp version

* Remove commented-out compiler flags

* Enable warning flag in CmdDispatcher

* Disable -Wconversion in gtest

* Revise compiler warning flags

* Revise compiler options

* Revise compiler flags

* Revise compiler flags

* Revise compiler flags

* Revise compiler flags

* Revise Buffer

* Fix comments

* Fix warning flags

* Fix compiler warning flags

* Fix compiler warnings

* Fix compiler warning flags

* Fix compiler warnings

* Fix compiler warning flags

* Fix compiler warning flags

* Fix compiler warning flags

* Fix compiler warning flags

* Fix compiler warning flags

* Fix compiler warning flags

* Fix compiler warning flags

* Fix compiler warning flags

* Revise compiler warning flags

* Restore deleted test

* Fixing UT_TARGET collision

---------

Co-authored-by: Robert L Bocchino <bocchino@fprime-fsw-0.jpl.nasa.gov>
Co-authored-by: Michael D Starch <Michael.D.Starch@jpl.nasa.gov>
Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-03-12 12:04:43 -07:00
dependabot[bot]
6fe53a86e5
Bump jinja2 from 3.1.5 to 3.1.6 (#3342)
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.5 to 3.1.6.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.5...3.1.6)

---
updated-dependencies:
- dependency-name: jinja2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-10 10:07:54 -07:00
M Starch
ec08d43dd3
Removes NATIVE_INT_TYPE, NATIVE_UINT_TYPE, and POINTER_CAST from Fw (#3286)
* NATIVE_INT_TYPE use in toString

* NATIVE_INT_TYPE use in SimpleObjRegistry

* NATIVE_INT_TYPE use in Asserts

* NATIVE_INT_TYPE use in Fw/Comp

* NATIVE_INT_TYPE use in getCapacity

* NATIVE_INT_TYPE use in getEntries

* NATIVE_INT_TYPE use in size/length

* NATIVE_INT_TYPE use in FILE_NAME_ARG

* NATIVE_INT_TYPE use in Fw (misc)

* NATIVE_INT_TYPE use in identifier

* NATIVE_INT_TYPE use in Fw (misc II)

* POINTER_CAST in Buffer

* POINTER_CAST in Serializable

* sp

* Removing no longer used DefaultTypes.hpp

* Fixes to accomidate Fw refactor

* Unit-test and CI fixes

* Fixing review comments - pt 1
2025-03-04 14:42:48 -08:00
M Starch
83d5448389
Improve clarity in ROSES Discussions template (#3297)
* Adding hyphen

* More forme updates
2025-02-28 15:35:14 -08:00
M Starch
e11c075958
Fix ROSES Discussions template (#3296)
* Fixing template for pattern request

* Adding hyphen
2025-02-28 15:29:57 -08:00
M Starch
b96f6b1c0e
Fix template for ROSES pattern request (#3295) 2025-02-28 15:25:43 -08:00
M Starch
d74cc84347
Rename PATTERN-SUGGESTION.yml to pattern_request.yml (#3294) 2025-02-28 15:06:51 -08:00
Justine West
e13d0303b1
Add final to component impl classes (#3292) 2025-02-28 15:05:15 -08:00
M Starch
51bcbaafde
Draft of ROSES pattern form (#3291)
* Draft of ROSES pattern form

* Fix typo and add link

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-02-28 14:53:32 -08:00
Cel Skeggs
b7d74db30d
Improve error checking in mutex stub (#3167)
* Improve error checking in mutex stub

The default mutex stub is intended to be usable on any platform,
even platforms that do not have threads and cannot block. This stub is
inappropriate for applications that need to contend over mutexes.
However, if inadvertently used in applications in a way that would
result in mutex contention, they would silently allow incorrect and
dangerous behavior. (Notably, they allowed multiple threads to enter the
same critical section.)

The new implementation still works on all platforms, and never blocks.
However, it ensures that only one thread enters each critical section at
a time. Attempting to acquire a mutex that is already taken will result
in a failure to acquire the mutex, and likely an assertion. Because this
should only occur in the case of a coding defect, this is an improvement
over the previous implementation.

* Note mutex identity in lock/unlock status assert

When a mutex fails to be taken or released, and it causes an assertion
to trip, this change makes sure that enough information is provided to
uniquely identify which mutex was at fault.

* Fix assertion cast argument types to be generic
2025-02-27 17:27:27 -08:00
matt392code
f44260dd69
Add F Prime terminology translation guide (#3260)
* Create fprime-translations.md

LeStarch on Feb 13, 2025
CollaboratorAuthor
@matt392code these tables you posted are exactly what we need for this issue. Do you want to pull those tables into a PR?
Create:
docs/user-guide/framework/fprime-translations.md
Add all of the tables you put at the top (everything up to "Example Translations").
I will need to go through and edit some of the data, but want to let you get credit for the initial work.

* Reviewing output

* Adding tranlation guide to mkdocs.yml

* Add links and fix typo

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
Co-authored-by: chammard <thomas.boyer.chammard@jpl.nasa.gov>
2025-02-27 11:12:47 -08:00
Cel Skeggs
ff5b64daff
Add new Fw.Ready port for coordinating startup (#3261) 2025-02-27 11:12:14 -08:00
Thomas Boyer-Chammard
ed0eb98868
Update fprime-examples CI to use nasa repo (#3284)
* Update fprime-examples CI to use nasa repo

* Add `-j8` to project-builder workflow
2025-02-27 11:05:51 -08:00
kevin-f-ortega
a7f9bc7460
Add NOT_SUPPORTED to OS' statues (#3281)
* adding not-supported status because sometimes it's useful to report not supported

* updating shadow enums to match actual enum
2025-02-26 15:42:40 -08:00
M Starch
d25775f7b2
Updates calculateCrc documentation for file pointer (#3279) 2025-02-26 11:58:43 -08:00
M Starch
67976f01c1
Fix depend-a-bot vulnerabilities (#3271) 2025-02-25 17:42:47 -08:00
Thomas Boyer-Chammard
847e4e3781
Add CI check for fprime-examples repo (#3234)
* Add fprime-examples repo to CI

* Rename other workflows for consistency

* Rename more CI workflows

* Add correct F´ location

* Address review comments

* Revert to External Repo (External Build might suggest the build process is external)
2025-02-25 16:51:27 -08:00
Justine West
2fa6270520
Add telemetry packets to JSON dictionary spec (#3221)
* added telem packets to JSON dictionary spec

* add telemetry packet examples, cleanup examples

* fix examples

* fix typo

* rename groups to sets

* Add newline after tables, use camel case for component instance names

* update description of deploymentName field

* update deploymentName field description

* fix example
2025-02-25 16:50:40 -08:00
kevin-f-ortega
1d90e02135
removing priority for now in order to avoid incorrect message order when using pseudo-priority queues. (#3268) 2025-02-25 16:45:27 -08:00
M Starch
d11d85c121
Adding fpp-to-layout now that base is fixed (#3270) 2025-02-25 16:45:13 -08:00
M Starch
cab2fb4f02
Fixing fprime-tools to v3.6.1 hotsting release (#3269) 2025-02-25 16:01:49 -08:00
Justine West
78eea477d5
Add type aliases to JSON dictionary spec (#3254)
* add alias type to dictionary json spec

* Update table of contents
2025-02-25 13:46:46 -08:00
M Starch
414f04aff4
Applying GDS Hotfix v3.6.1 (#3265) 2025-02-25 13:21:00 -08:00
M Starch
7c9cba4631
Adding health checking pattern documentation (#3228)
* Adding health checking pattern documentation

* Fixing [!NOTE]

* Review suggestions
2025-02-24 15:26:01 -08:00
Cel Skeggs
df260a2d1e
Improve BufferManager assertion context args (#3223)
* Improve BufferManager assertion context args

Previously, in some cases, no information or context was provided when
this assertion tripped, which made it harder to identify the cause.
Include more information in several cases.

* Fix assertion argument cast to be generic

* Adding casts for explicit conversion

---------

Co-authored-by: M Starch <LeStarch@googlemail.com>
2025-02-24 14:51:45 -08:00
M Starch
172c7a0643
Adding manager-worker pattern documentation (#3227)
* Adding manager-worker pattern documentation

* Fixing [!NOTE]

* Reworking for review suggestions

* Review fixes
2025-02-24 13:41:50 -08:00
Cel Skeggs
416466b3ad
Remove include of internal glibc header (#3248)
This header does not exist on musl because it is not a standard header.
2025-02-24 13:08:12 -08:00
M Starch
34a4e2c96d
NUM_PORTS -> FwIndexType (#3239) 2025-02-14 15:08:48 -08:00
M Starch
1308b29e2d
Fixing UT constants to use correct types (#3237) 2025-02-14 13:58:45 -08:00
M Starch
fa9a3d7958
Converting NATIVE_INT_TYPE in assert casts (#3238) 2025-02-14 13:56:43 -08:00
M Starch
a5c853b9cf
NATIVE_INT_TYPE portNum to FwIndexType portNum (#3236) 2025-02-14 12:25:12 -08:00
M Starch
0a822b577a
Port patterns (#3132)
* Synchronous cancel guide, and Fw.Signal implementation

Fixing name in CMakeList for Fw.Signal

Draft of other port patterns

More port patterns with reoganized structure

Adding completion status port

Proof-read ports paterns doc

Fixing expert review elements w/ common port patterns

Updating links to point to devel examples

* Fixing path from old to new

* Fix relative links

* Update mkdocs.yml and ordering

* Fixing [!NOTE]

---------

Co-authored-by: Thomas Boyer-Chammard <49786685+thomas-bc@users.noreply.github.com>
2025-02-13 15:49:56 -08:00
Thomas Boyer-Chammard
3f61f887e4
Restructure user manual for holding design patterns (#3222)
* Doc restructure with design-patterns and build-system sections

* Restore advanced.md and uts.md

* Link in UTs

* Fix link

* Remove card layout from user manual landing page

* Add back the cards
2025-02-13 13:54:43 -08:00
3406 changed files with 124209 additions and 145434 deletions

View File

@ -2,4 +2,5 @@
BasedOnStyle: Chromium
IndentWidth: 4
ColumnLimit: 120
AccessModifierOffset: -2
AccessModifierOffset: -2
InsertNewlineAtEOF: true

View File

@ -6,6 +6,6 @@ Checks: >
modernize-redundant-void-arg,
modernize-use-bool-literals,
modernize-use-nullptr,
readability-braces-around-statements
-clang-analyzer-security.insecureAPI.rand,
readability-braces-around-statements,
-clang-analyzer-security.insecureAPI.rand
WarningsAsErrors: '*'

View File

@ -0,0 +1,34 @@
title: "[Summarize the pattern. Be as clear and concise as possible.] "
labels: ["ROSES"]
body:
- type: markdown
attributes:
value: |
> [!TIP]
> The **Title** may be the only thing the community sees when voting on your pattern.
This work is funded through [NASA ROSES](https://github.com/nasa/fprime/discussions/3041).
- type: textarea
id: pattern
attributes:
label: Pattern
description: "Describe what you want documented."
validations:
required: true
- type: markdown
attributes:
value: |
> [!TIP]
> Describe the **Pattern** without trying to sell it. Describe what you need.
- type: textarea
id: rationale
attributes:
label: Rationale
description: "(Optional) Describe why you want it documented. Sell it to the community."
validations:
required: false
- type: markdown
attributes:
value: |
> [!TIP]
> Use the **Rationale** to sell your idea to the community. Describe why you need this.

View File

@ -1,5 +1,7 @@
set timeout 180
spawn fprime-bootstrap project
expect -re {.*Project name.*}
expect -re {.*Project repository name.*}
send "my-project\r"
expect -re {.*Project top-level namespace.*}
send "MyProject\r"
expect eof

View File

@ -2,6 +2,8 @@ set timeout 60
spawn fprime-util new --deployment
expect -re {Deployment name.*}
send "MyDeployment\r"
expect -re {Deployment namespace.*}
send "MyNamespace\r"
expect -re {.*Select communication driver type}
send "1\r"
expect -re "Add .*MyDeployment.*"

View File

@ -101,3 +101,4 @@
^\QSvc/FileUplink/test/ut/dest.bin\E$
ignore$
mlc-config.json
Autocoders/

File diff suppressed because it is too large Load Diff

View File

@ -137,3 +137,12 @@ TeX/AMS
# ignore long runs of a single character:
\b([A-Za-z])\g{-1}{3,}\b
##########################################
###### F Prime specific patterns ######
##########################################
# .get...() .set...() autocoded functions
\.get\w+\(
\.set\w+\(

View File

@ -3,20 +3,25 @@
|**_Related Issue(s)_**| |
|**_Has Unit Tests (y/n)_**| |
|**_Documentation Included (y/n)_**| |
|**_Generative AI was used in this contribution (y/n)_**| |
---
## Change Description
A description of the changes contained in the PR.
<!-- A description of the changes contained in the PR. -->
## Rationale
A rationale for this change. e.g. fixes bug, or most projects need XYZ feature.
<!-- A rationale for this change. e.g. fixes bug, or most projects need XYZ feature. -->
## Testing/Review Recommendations
Fill in testing procedures, specific items to focus on for review, or other info to help the team verify these changes are flight-quality.
<!-- Fill in testing procedures, specific items to focus on for review, or other info to help the team verify these changes are flight-quality. -->
## Future Work
Note any additional work that will be done relating to this issue.
<!-- Note any additional work that will be done relating to this issue. -->
## AI Usage (see [policy](https://github.com/nasa/fprime/blob/devel/AI_POLICY.md))
<!-- If AI was used, please describe how it was utilized (e.g., code generation, documentation, testing, debugging assistance, etc.). -->

View File

@ -1,6 +1,6 @@
# This is a basic workflow to help you get started with Actions
name: macOS-CI
name: CI [macOS]
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
@ -15,6 +15,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:

92
.github/workflows/build-test-rhel8.yml vendored Normal file
View File

@ -0,0 +1,92 @@
# Run suite of CI builds and tests in a RHEL8 container
name: CI [RHEL8]
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
Framework:
runs-on: ubuntu-latest
container:
image: redhat/ubi8:8.10
steps:
- name: "Install dependencies"
run: |
dnf install -y git python3.12 python3.12-pip llvm-toolset libasan libubsan
git config --global --add safe.directory ${GITHUB_WORKSPACE}
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- uses: ./.github/actions/setup
- name: Build Framework
run: |
fprime-util generate -DFPRIME_ENABLE_JSON_MODEL_GENERATION=ON
fprime-util build --all -j4
Ref:
runs-on: ubuntu-latest
container:
image: redhat/ubi8:8.10
steps:
- name: "Install dependencies"
run: |
dnf install -y git python3.12 python3.12-pip llvm-toolset libasan libubsan
git config --global --add safe.directory ${GITHUB_WORKSPACE}
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- uses: ./.github/actions/setup
- name: Build Ref
run: |
cd Ref
fprime-util generate -DFPRIME_ENABLE_JSON_MODEL_GENERATION=ON
fprime-util build -j4
UTs:
runs-on: ubuntu-latest
container:
image: redhat/ubi8:8.10
steps:
- name: "Install dependencies"
run: |
dnf install -y git python3.12 python3.12-pip llvm-toolset libasan libubsan
git config --global --add safe.directory ${GITHUB_WORKSPACE}
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- uses: ./.github/actions/setup
# Some UTs require a non-root user to run properly due to using file permissions in tests
# This issue shows up on RHEL8 containers
- name: Setup test environment for permission tests
run: |
useradd -m -u 1001 -s /bin/bash test-user
chown -R test-user:test-user .
- name: UT Build and Run
run: |
su test-user -c "
fprime-util generate --ut &&
fprime-util build --all --ut -j4 &&
fprime-util check --all -j4
"

View File

@ -1,83 +0,0 @@
# This is a basic workflow to help you get started with Actions
name: RPI-CI
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
env:
RPI_TOOLCHAIN_DIR: /tmp/rpi-toolchain
DICTIONARY_PATH: build-artifacts/raspberrypi/RPI/dict/RPITopologyDictionary.json
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
RPI:
runs-on: ubuntu-22.04
steps:
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- uses: ./.github/actions/setup
- name: Setup RPI Toolchain
uses: fprime-community/setup-rpi-sysroot@main
- name: F prime CI step
run: ./ci/tests/RPI.bash
- name: Copy Tests
run: mkdir -p artifact/RPI; cp -rp RPI/test RPI/build-artifacts artifact/RPI; cp -rp ci artifact
# Build Artifacts
- name: 'RPI Build Output'
uses: actions/upload-artifact@v4
with:
name: rpi-build
path: artifact
retention-days: 5
# Archive the outputs
- name: 'Archive Logs'
uses: actions/upload-artifact@v4
if: always()
with:
name: rpi-logs
path: ci-logs.tar.gz
retention-days: 5
RPI-Integration:
runs-on: self-hosted
needs: RPI
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: 'requirements.txt'
- name: "Setup environment"
run: |
python -m venv venv
. venv/bin/activate
pip install -r requirements.txt
- name: RPI Build Download
uses: actions/download-artifact@v4
with:
name: rpi-build
- name: RPI Integration Tests
run: |
chmod +x RPI/build-artifacts/raspberrypi/RPI/bin/RPI
. venv/bin/activate
/bin/bash ci/tests/RPI-Ints.bash
# Archive the outputs
- name: 'Archive Logs'
uses: actions/upload-artifact@v4
if: always()
with:
name: pi-int-logs
path: ci-logs.tar.gz
retention-days: 5
# Clean-Up moved to post script to prevent collisions

View File

@ -1,6 +1,6 @@
# This is a basic workflow to help you get started with Actions
name: CI
name: CI [ubuntu]
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
@ -15,6 +15,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:

View File

@ -13,7 +13,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
@ -26,14 +29,6 @@ jobs:
fetch-depth: 0
submodules: true
- uses: ./.github/actions/setup
# Specifically install CMake minimum version
- name: Minimum CMake Install
shell: bash
run: |
export CMAKE_TAR_FILE="https://cmake.org/files/v3.16/cmake-3.16.0-Linux-x86_64.tar.gz"
export CMAKE_INSTALL_DIRECTORY="${GITHUB_WORKSPACE}/tools-override"
mkdir -p "${GITHUB_WORKSPACE}/tools-override"
curl -Ls "${CMAKE_TAR_FILE}" | tar -zC "${CMAKE_INSTALL_DIRECTORY}" --strip-components=1 -x
- name: CMake Tests
working-directory: ./cmake/test
shell: bash

View File

@ -1,7 +1,7 @@
# Semantic code analysis with CodeQL
# see https://github.com/github/codeql-action
name: "JPL Coding Standard Scan"
name: "Code Scan: JPL Coding Standard"
on:
push:
@ -14,6 +14,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
analyze:

View File

@ -1,7 +1,7 @@
# Semantic code analysis with CodeQL
# see https://github.com/github/codeql-action
name: "CodeQL Security Scan"
name: "Code Scan: CodeQL Security"
on:
push:
@ -14,6 +14,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
analyze:

View File

@ -1,93 +0,0 @@
name: Cookiecutters Tests
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# This workflow tests the project bootstrapping and cookiecutter templates by creating
# a new project, deployment and component and building them
# This uses the `expect` utility to feed input into the various cookiecutter prompts
jobs:
Validate:
runs-on: ubuntu-latest
steps:
# Checkout only the bootstrap.expect file, since the full F´ repo will be
# checked out as part of the fprime-bootstrap process
- name: "Retrieve bootstrap.expect file"
uses: actions/checkout@v4
with:
sparse-checkout: |
.github/actions/cookiecutter-check/bootstrap.expect
sparse-checkout-cone-mode: false
fetch-depth: 0
- name: "Setup Python"
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: "Install expect and fprime-bootstrap@devel"
run: |
sudo apt-get install expect
pip install git+https://github.com/fprime-community/fprime-bootstrap@devel
- name: "Bootstrap Project"
run: |
expect .github/actions/cookiecutter-check/bootstrap.expect
# Overlay fprime@current_rev in new project so that we build with it in the tests
# current_rev is devel on the devel branch and the PR revision in PR checks
- name: "Overlay fprime@current_rev in new project"
uses: actions/checkout@v4
with:
submodules: true
path: ./MyProject/lib/fprime
fetch-depth: 0
- name: "Update dependencies and install fprime-tools@devel"
run: |
cd MyProject
. fprime-venv/bin/activate
pip install -U -r ./lib/fprime/requirements.txt
pip install git+https://github.com/nasa/fprime-tools@devel
- name: "Version Check"
run: |
cd MyProject
. fprime-venv/bin/activate
fprime-util version-check
- name: "Test Generate and Build Project"
run: |
cd MyProject
. fprime-venv/bin/activate
fprime-util generate
fprime-util build -j4
- name: "Test New Deployment and Build"
run: |
cd MyProject
. fprime-venv/bin/activate
expect ./lib/fprime/.github/actions/cookiecutter-check/deployment.expect
cd MyDeployment
fprime-util build -j4
- name: "Test New Component and Build"
run: |
cd MyProject
. fprime-venv/bin/activate
expect ./lib/fprime/.github/actions/cookiecutter-check/component.expect
cd MyComponent
fprime-util build -j4

View File

@ -1,5 +1,5 @@
# Adapted from https://github.com/nasa/cFS/blob/c36aa2c1df0fb47a3838577908af3d0d0ab0ef54/.github/workflows/static-analysis.yml
name: "Cppcheck Scan"
name: "Code Scan: CppCheck"
on:
push:
@ -12,6 +12,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
cppcheck:
@ -31,7 +35,7 @@ jobs:
- uses: ./.github/actions/setup
- name: Install cppcheck
run: sudo apt-get install cppcheck xsltproc -y
run: sudo apt-get update && sudo apt-get install cppcheck xsltproc -y
- name: Install sarif tool
run: npm i -g @microsoft/sarif-multitool
@ -43,6 +47,10 @@ jobs:
run: |
fprime-util generate -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
fprime-util build --all --jobs "$(nproc || printf '%s\n' 1)"
# Add EXCLUDE_FROM_ALL targets as we need to explicitly build them
fprime-util build --target Svc_Subtopologies --jobs "$(nproc || printf '%s\n' 1)"
fprime-util build --target Svc_GenericHub --jobs "$(nproc || printf '%s\n' 1)"
echo CPPCHECK_OPTS=--project="$GITHUB_WORKSPACE/build-fprime-automatic-native/compile_commands.json" >> $GITHUB_ENV
- name: Run cppcheck

View File

@ -1,4 +1,4 @@
name: "Cpplint Scan"
name: "Code Scan: Cpplint"
on:
push:
@ -11,6 +11,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
cpplint:
@ -33,7 +37,7 @@ jobs:
run: pip install cpplint
- name: Install xsltproc
run: sudo apt-get install xsltproc -y
run: sudo apt-get update && sudo apt-get install xsltproc -y
- name: Install sarif tool
run: npm i -g @microsoft/sarif-multitool

View File

@ -0,0 +1,113 @@
# Cross-compile https://github.com/fprime-community/fprime-workshop-led-blinker
# Runs integration tests on aarch64-linux
name: "External Repo: AArch64 Linux LedBlinker"
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
env:
AARCH64_TOOLCHAIN_DIR: /tmp/aarch64-toolchain
AARCH64_TOOLCHAIN_URL: https://developer.arm.com/-/media/Files/downloads/gnu-a/10.2-2020.11/binrel/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu.tar.xz
ARM_TOOLS_PATH: /tmp/aarch64-toolchain
FPRIME_LOCATION: ./lib/fprime
jobs:
get-branch:
name: "Get target branch"
uses: ./.github/workflows/reusable-get-pr-branch.yml
with:
target_repository: fprime-community/fprime-workshop-led-blinker
cross-compilation:
name: "Cross Compilation"
runs-on: ubuntu-22.04
needs: get-branch
steps:
- name: "Checkout target repository"
uses: actions/checkout@v4
with:
submodules: false
repository: fprime-community/fprime-workshop-led-blinker
ref: ${{ needs.get-branch.outputs.target-branch }}
- name: "Overlay current F´ revision"
uses: actions/checkout@v4
with:
submodules: true
path: ${{ env.FPRIME_LOCATION }}
fetch-depth: 0
- uses: ./lib/fprime/.github/actions/setup
with:
location: ${{ env.FPRIME_LOCATION }}
- name: "Download and Setup AArch64 Linux Toolchain"
run: |
mkdir -p ${AARCH64_TOOLCHAIN_DIR}
wget -q ${AARCH64_TOOLCHAIN_URL}
tar -xf $(basename ${AARCH64_TOOLCHAIN_URL}) -C ${AARCH64_TOOLCHAIN_DIR} --strip-components 1
echo "${AARCH64_TOOLCHAIN_DIR}/bin" >> $GITHUB_PATH
- name: "Generate AArch64 Linux Build Cache"
run: |
fprime-util generate aarch64-linux
- name: "Build AArch64 Linux"
run: |
fprime-util build aarch64-linux
- name: "Prepare artifacts"
run: |
mkdir -p aarch64-linux-artifacts
cp -r ./build-artifacts aarch64-linux-artifacts
cp -r LedBlinker/Components/Led/test/int aarch64-linux-artifacts
- name: "Archive Build Artifacts"
uses: actions/upload-artifact@v4
with:
name: aarch64-linux-artifacts
path: aarch64-linux-artifacts
retention-days: 5
aarch64-integration:
name: "AArch64 Linux Integration Tests"
runs-on: [self-hosted, aarch64-linux]
needs: cross-compilation
steps:
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
sparse-checkout: "requirements.txt"
sparse-checkout-cone-mode: false
- name: "Setup environment"
run: |
python -m venv venv
. venv/bin/activate
pip install -r requirements.txt
- name: "Artifacts Download"
uses: actions/download-artifact@v4
with:
name: aarch64-linux-artifacts
- name: Run Integration Tests
run: |
DEPLOYMENT=LedBlinker_LedBlinkerDeployment
. venv/bin/activate
mkdir -p ci-logs
chmod +x ./build-artifacts/aarch64-linux/${DEPLOYMENT}/bin/${DEPLOYMENT}
fprime-gds --ip-client -d ./build-artifacts/aarch64-linux/${DEPLOYMENT} --logs ./ci-logs &
sleep 10
pytest --dictionary ./build-artifacts/aarch64-linux/${DEPLOYMENT}/dict/LedBlinkerDeploymentTopologyDictionary.json ./int/led_integration_tests.py
- name: "Archive logs"
uses: actions/upload-artifact@v4
if: always()
with:
name: aarch64-linux-logs
path: ci-logs
retention-days: 5

View File

@ -0,0 +1,38 @@
# Builds and runs UTs on https://github.com/fprime-community/fprime-examples
name: "External Repo: fprime-examples"
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
- '.gitignore'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
get-branch:
name: "Get target branch"
uses: ./.github/workflows/reusable-get-pr-branch.yml
with:
target_repository: nasa/fprime-examples
run:
needs: get-branch
name: ""
uses: ./.github/workflows/reusable-project-builder.yml
with:
target_repository: nasa/fprime-examples
build_location: FlightExamples
run_unit_tests: true
target_ref: ${{ needs.get-branch.outputs.target-branch }}
fprime_location: ./FlightExamples/lib/fprime

View File

@ -1,6 +1,6 @@
# Builds and runs UTs on https://github.com/fprime-community/fprime-tutorial-hello-world
name: "Tutorial: HelloWorld"
name: "External Repo: Tutorial: HelloWorld"
on:
push:
@ -13,6 +13,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
get-branch:
@ -27,6 +31,7 @@ jobs:
uses: ./.github/workflows/reusable-project-builder.yml
with:
target_repository: fprime-community/fprime-tutorial-hello-world
build_location: HelloWorldDeployment
run_unit_tests: true
fprime_location: ./lib/fprime
build_location: Hello/HelloWorldDeployment
run_unit_tests: false # no UTs in HelloWorld project
target_ref: ${{ needs.get-branch.outputs.target-branch }}

View File

@ -1,6 +1,6 @@
# Builds and runs UTs on https://github.com/fprime-community/fprime-workshop-led-blinker
name: "Tutorial: LedBlinker"
name: "External Repo: Tutorial: LedBlinker"
on:
push:
@ -13,6 +13,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
get-branch:
@ -27,6 +31,7 @@ jobs:
uses: ./.github/workflows/reusable-project-builder.yml
with:
target_repository: fprime-community/fprime-workshop-led-blinker
build_location: LedBlinker
fprime_location: lib/fprime
build_location: LedBlinker/LedBlinkerDeployment
run_unit_tests: true
target_ref: ${{ needs.get-branch.outputs.target-branch }}

View File

@ -1,6 +1,6 @@
# Builds and runs UTs on https://github.com/fprime-community/fprime-tutorial-math-component
name: "Tutorial: MathComponent"
name: "External Repo: Tutorial: MathComponent"
on:
push:
@ -13,6 +13,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
get-branch:
@ -27,6 +31,7 @@ jobs:
uses: ./.github/workflows/reusable-project-builder.yml
with:
target_repository: fprime-community/fprime-tutorial-math-component
build_location: MathDeployment
build_location: MathProject/MathDeployment
fprime_location: ./lib/fprime
run_unit_tests: true
target_ref: ${{ needs.get-branch.outputs.target-branch }}

View File

@ -0,0 +1,115 @@
name: "External Repo: Cookiecutters Tests"
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
# This workflow tests the project bootstrapping and cookiecutter templates by creating
# a new project, deployment and component and building them
# This uses the `expect` utility to feed input into the various cookiecutter prompts
jobs:
# -------- Retrieve target branches for fprime-tools and fprime-bootstrap --------
get-tools-branch:
name: "Get fprime-tools target branch"
uses: ./.github/workflows/reusable-get-pr-branch.yml
with:
target_repository: nasa/fprime-tools
get-bootstrap-branch:
name: "Get fprime-bootstrap target branch"
uses: ./.github/workflows/reusable-get-pr-branch.yml
with:
target_repository: fprime-community/fprime-bootstrap
# -------- Install target versions of the cookiecutter templates and validate -------
Validate:
runs-on: ubuntu-latest
needs: [ get-tools-branch, get-bootstrap-branch ]
steps:
# Checkout only the bootstrap.expect file, since the full F´ repo will be
# checked out as part of the fprime-bootstrap process
- name: "Retrieve bootstrap.expect file"
uses: actions/checkout@v4
with:
sparse-checkout: |
.github/actions/cookiecutter-check/bootstrap.expect
sparse-checkout-cone-mode: false
fetch-depth: 0
- name: "Setup Python"
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: "Install expect and fprime-bootstrap"
run: |
sudo apt-get update
sudo apt-get install expect
pip install git+https://github.com/fprime-community/fprime-bootstrap@${{ needs.get-bootstrap-branch.outputs.target-branch }}
- name: "Bootstrap Project"
run: |
expect .github/actions/cookiecutter-check/bootstrap.expect
# Overlay fprime@current_rev in new project so that we build with it in the tests
# current_rev is devel on the devel branch and the PR revision in PR checks
- name: "Overlay fprime@current_rev in new project"
uses: actions/checkout@v4
with:
submodules: true
path: ./my-project/lib/fprime
fetch-depth: 0
- name: "Update dependencies and install fprime-tools"
run: |
cd my-project
. fprime-venv/bin/activate
pip install -U -r ./requirements.txt
pip install git+https://github.com/nasa/fprime-tools@${{ needs.get-tools-branch.outputs.target-branch }}
- name: "Version Check"
run: |
cd my-project
. fprime-venv/bin/activate
fprime-util version-check
- name: "Test Generate and Build Project"
run: |
cd my-project
. fprime-venv/bin/activate
fprime-util generate
fprime-util build -j4
- name: "Test New Deployment and Build"
run: |
cd my-project
. fprime-venv/bin/activate
cd MyProject
expect ../lib/fprime/.github/actions/cookiecutter-check/deployment.expect
cd MyDeployment
fprime-util build -j4
- name: "Test New Component and Build"
run: |
cd my-project
. fprime-venv/bin/activate
cd MyProject
expect ../lib/fprime/.github/actions/cookiecutter-check/component.expect
cd MyComponent
fprime-util build -j4

View File

@ -0,0 +1,36 @@
# Cross-compile https://github.com/fprime-community/fprime-zephyr-reference
name: "External Repo: Zephyr Reference (Pico 2)"
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
get-branch:
name: "Get target branch"
uses: ./.github/workflows/reusable-get-pr-branch.yml
with:
target_repository: fprime-community/fprime-zephyr-reference
build:
name: "Zephyr Build"
needs: get-branch
uses: ./.github/workflows/reusable-project-ci.yml
with:
target_repository: fprime-community/fprime-zephyr-reference
target_ref: ${{ needs.get-branch.outputs.target-branch }}
ci_config_file: ./lib/fprime-zephyr/ci/sample-configs/pico2.yml

View File

@ -0,0 +1,36 @@
# Cross-compile https://github.com/fprime-community/fprime-zephyr-reference
name: "External Repo: Zephyr Reference (Teensy 4.1)"
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
get-branch:
name: "Get target branch"
uses: ./.github/workflows/reusable-get-pr-branch.yml
with:
target_repository: fprime-community/fprime-zephyr-reference
build:
name: "Zephyr Build"
needs: get-branch
uses: ./.github/workflows/reusable-project-ci.yml
with:
target_repository: fprime-community/fprime-zephyr-reference
target_ref: ${{ needs.get-branch.outputs.target-branch }}
ci_config_file: ./lib/fprime-zephyr/ci/sample-configs/teensy41.yml

View File

@ -1,7 +1,7 @@
# Cross-compile https://github.com/fprime-community/fprime-workshop-led-blinker
# Runs integration tests on RaspberryPi
name: "RPI LedBlinker"
name: "External Repo: RPI LedBlinker"
on:
push:
@ -14,9 +14,14 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
env:
RPI_TOOLCHAIN_DIR: /tmp/rpi-toolchain
FPRIME_LOCATION: ./lib/fprime
jobs:
get-branch:
@ -40,11 +45,11 @@ jobs:
uses: actions/checkout@v4
with:
submodules: true
path: ./fprime
path: ${{ env.FPRIME_LOCATION }}
fetch-depth: 0
- uses: ./fprime/.github/actions/setup
- uses: ./lib/fprime/.github/actions/setup
with:
location: ./fprime
location: ${{ env.FPRIME_LOCATION }}
- name: "Setup RPI Toolchain"
uses: fprime-community/setup-rpi-sysroot@main
- name: "Generate RPI Build Cache"
@ -52,13 +57,14 @@ jobs:
fprime-util generate raspberrypi
- name: "Build RPI"
run: |
cd LedBlinker/LedBlinkerDeployment
fprime-util build raspberrypi
- name: "Prepare artifacts"
run: |
mkdir -p rpi-artifacts
cp -r ./build-artifacts rpi-artifacts
cp -r Components/Led/test/int rpi-artifacts
- name: 'Archive Build Artifacts'
cp -r LedBlinker/Components/Led/test/int rpi-artifacts
- name: "Archive Build Artifacts"
uses: actions/upload-artifact@v4
with:
name: rpi-artifacts
@ -67,13 +73,14 @@ jobs:
RPI-integration:
name: "RPI Integration Tests"
runs-on: self-hosted
runs-on: [self-hosted, raspberrypi]
needs: cross-compilation
steps:
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
sparse-checkout: 'requirements.txt'
sparse-checkout: "requirements.txt"
sparse-checkout-cone-mode: false
- name: "Setup environment"
run: |
python -m venv venv
@ -85,13 +92,14 @@ jobs:
name: rpi-artifacts
- name: Run Integration Tests
run: |
DEPLOYMENT=LedBlinker_LedBlinkerDeployment
. venv/bin/activate
mkdir -p ci-logs
chmod +x ./build-artifacts/raspberrypi/LedBlinker/bin/LedBlinker
fprime-gds --ip-client -d ./build-artifacts/raspberrypi/LedBlinker --logs ./ci-logs &
chmod +x ./build-artifacts/raspberrypi/${DEPLOYMENT}/bin/${DEPLOYMENT}
fprime-gds --ip-client -d ./build-artifacts/raspberrypi/${DEPLOYMENT} --logs ./ci-logs &
sleep 10
pytest --dictionary ./build-artifacts/raspberrypi/LedBlinker/dict/LedBlinkerTopologyDictionary.json ./int/led_integration_tests.py
- name: 'Archive logs'
pytest --dictionary ./build-artifacts/raspberrypi/${DEPLOYMENT}/dict/LedBlinkerDeploymentTopologyDictionary.json ./int/led_integration_tests.py
- name: "Archive logs"
uses: actions/upload-artifact@v4
if: always()
with:

View File

@ -0,0 +1,79 @@
# Cross-compile https://github.com/fprime-community/fprime-system-reference
name: "External Repo: System Reference"
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
env:
RPI_TOOLCHAIN_DIR: /tmp/rpi-toolchain
PKG_CONFIG_PATH: ${{ github.workspace }}/libcamera/build/lib/pkgconfig/
jobs:
get-branch:
name: "Get target branch"
uses: ./.github/workflows/reusable-get-pr-branch.yml
with:
target_repository: fprime-community/fprime-system-reference
default_target_ref: main
cross-compilation:
name: "Cross Compilation"
runs-on: ubuntu-22.04
needs: get-branch
steps:
- name: "Checkout target repository"
uses: actions/checkout@v4
with:
submodules: true
repository: fprime-community/fprime-system-reference
ref: ${{ needs.get-branch.outputs.target-branch }}
- name: "Overlay current F´ revision"
uses: actions/checkout@v4
with:
submodules: true
path: ./fprime
fetch-depth: 0
- uses: ./fprime/.github/actions/setup
with:
location: ./fprime
- name: "Install meson and ninja"
run: |
pip3 install meson ninja ply
shell: bash
- name: "Setup RPI Toolchain"
uses: fprime-community/setup-rpi-sysroot@main
with:
# libcamera requires 8+
toolchain: "https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz"
- name: "Add RPI Toolchain to PATH"
run: |
echo "PATH=$RPI_TOOLCHAIN_DIR/bin:$PATH" >> $GITHUB_ENV
- name: Build libcamera
run: |
cd libcamera
meson setup build -Dprefix=${{ github.workspace }}/libcamera/build/ -Dpipelines=rpi/vc4 -Dipas=rpi/vc4 --cross-file ../libcamera-aarch32.txt
cd build
ninja
ninja install
- name: "Generate System Reference build cache"
working-directory: SystemReference
run: |
fprime-util generate raspberrypi
- name: "Build System Reference"
working-directory: SystemReference
run: |
fprime-util build raspberrypi

47
.github/workflows/format-check.yml vendored Normal file
View File

@ -0,0 +1,47 @@
name: "Code Format Check"
on:
push:
branches: [ devel, release/**, ci/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
jobs:
cpp-formatting:
name: C++ Formatting
runs-on: ubuntu-22.04
steps:
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- name: "Setup Python"
uses: actions/setup-python@v5
with:
python-version: 3.12
- uses: ./.github/actions/setup
- name: "Check C++ Formatting"
env:
# Svc is currently listing all but Svc/FpySequencer
CHECKED_DIRS: >-
CFDP
default
Drv
FppTestProject
Fw
Os
Ref
Svc
TestUtils
Utils
run: |
fprime-util format --check --dirs $CHECKED_DIRS
shell: bash

View File

@ -11,6 +11,10 @@ on:
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
fpptest:
@ -27,17 +31,17 @@ jobs:
pip3 install -r ./requirements.txt
shell: bash
- name: "Generate UT build cache"
working-directory: ./FppTest
working-directory: ./FppTestProject
run: |
fprime-util generate --ut
fprime-util generate --ut -DFPRIME_ENABLE_JSON_MODEL_GENERATION=ON
shell: bash
- name: "Build UTs"
working-directory: ./FppTest
working-directory: ./FppTestProject/FppTest
run: |
fprime-util build --ut
shell: bash
- name: "Run UTs"
working-directory: ./FppTest
working-directory: ./FppTestProject/FppTest
run: |
fprime-util check
shell: bash
@ -46,5 +50,5 @@ jobs:
if: always()
with:
name: FppTest-Logs
path: ./FppTest/build-fprime-automatic-native-ut/Testing/Temporary/*.log
path: ./FppTestProject/build-fprime-automatic-native-ut/Testing/Temporary/*.log
retention-days: 5

40
.github/workflows/fpp-to-json.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: "fpp-to-json Test"
on:
push:
branches: [ devel, release/** ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
paths-ignore:
- 'docs/**'
- '**.md'
- '.github/actions/spelling/**'
- '.github/ISSUE_TEMPLATE/**'
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
fpp-to-json-ref:
name: Ref Deployment
runs-on: ubuntu-22.04
steps:
- name: "Checkout F´ Repository"
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true
- uses: ./.github/actions/setup
- name: "Generate Ref Deployment"
working-directory: ./Ref
run: |
fprime-util generate -DFPRIME_ENABLE_JSON_MODEL_GENERATION=ON
shell: bash
- name: "Run fpp-to-json on Ref topology"
working-directory: ./Ref/Top
run: |
DEPENDENCIES=$(fpp-depend ../build-fprime-automatic-native/locs.fpp *.fpp)
fpp-to-json ${DEPENDENCIES} *.fpp
shell: bash

View File

@ -5,6 +5,10 @@ on:
branches: [devel, docs/new-website]
pull_request:
branches: [devel]
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
markdown-link-check:
@ -16,6 +20,7 @@ jobs:
- name: 'Generate Doxygen and CMake docs'
run: |
sudo apt-get update
sudo apt-get install -y doxygen
./docs/doxygen/generate_docs.bash

View File

@ -6,19 +6,23 @@ name: Python Dependency Check
on:
push:
paths:
- 'requirements.txt'
- "requirements.txt"
pull_request:
paths:
- 'requirements.txt'
- "requirements.txt"
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
pip-install:
runs-on: ${{ matrix.runner }}
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
# macos-13 is the last Intel-family runner; macos-latest is ARM
runner: [macos-13, macos-latest, ubuntu-22.04, ubuntu-latest]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
# Purposefully test on both ARM and Intel macOS (macos-latest is ARM)
runner: [macos-15-intel, macos-latest, ubuntu-22.04, ubuntu-latest]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}

View File

@ -6,6 +6,10 @@ on:
pull_request:
# The branches below must be a subset of the branches above
branches: [ devel, release/** ]
# Cancel in-progress runs if a newer run is started on a given PR
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'devel') && !contains(github.ref, 'release/')}}
jobs:
format:
@ -13,10 +17,10 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Setup Python 3.8
- name: Setup Python 3.11
uses: actions/setup-python@v5
with:
python-version: 3.8
python-version: 3.11
- name: Check formatting
run: |
pip install click==8.0.4 black==21.6b0

View File

@ -1,5 +1,10 @@
# If the event that triggered this action is a PR and has a matching `pr-<number>` branch on
# target_repository, then return the name of that branch. Otherwise, return default_target_ref.
# Will return a target branch in the following priority
# - If the event that triggered this action is a PR and has a matching `pr-<number>` branch on
# target_repository, then return the name of that branch.
# - If the name of the branch the PR is trying to merge into has a matching branch name on target_repo,
# then return that branch name. (this is useful for example for release/ branches, to have a tracking release branch on the other repo)
# - Otherwise, return default_target_ref.
#
# See the CONTRIBUTING.md for info on why this is used.
name: 'Get PR Branch'
@ -12,7 +17,7 @@ on:
type: string
required: true
default_target_ref:
description: 'Ref to use if the PR branch is not found'
description: 'Ref to use if no target branch is found'
type: string
required: false
default: devel
@ -29,14 +34,19 @@ jobs:
- name: "Get target branch"
id: get_target_branch
run: |
response_code=`curl -w '%{response_code}' https://api.github.com/repos/${{ inputs.target_repository }}/branches/pr-${{ github.event.number }} -o /dev/null`
if [[ "${{ github.event_name }}" == "pull_request" && "$response_code" == "200" ]]; then
BRANCH_NAME="${GITHUB_REF#refs/heads/}"
echo "Looking for 'pr-${{ github.event.number }}'/'${BRANCH_NAME}'"
response_code_pr=`curl -w '%{response_code}' https://api.github.com/repos/${{ inputs.target_repository }}/branches/pr-${{ github.event.number }} -o /dev/null`
response_code_branch=`curl -w '%{response_code}' https://api.github.com/repos/${{ inputs.target_repository }}/branches/${BRANCH_NAME} -o /dev/null`
if [[ "${{ github.event_name }}" == "pull_request" && "$response_code_pr" == "200" ]]; then
echo "TARGET_BRANCH=pr-${{ github.event.number }}" >> $GITHUB_OUTPUT
echo "PR branch found, using pr-${{ github.event.number }}"
elif [[ "$response_code_branch" == "200" ]]; then
echo "TARGET_BRANCH=${BRANCH_NAME}" >> $GITHUB_OUTPUT
echo "Base branch found, using ${BRANCH_NAME}"
else
echo "TARGET_BRANCH=${{ inputs.default_target_ref }}" >> $GITHUB_OUTPUT
echo "PR branch not found, using ${{ inputs.default_target_ref }}"
fi
shell: bash

View File

@ -49,7 +49,7 @@ jobs:
- name: "Checkout target repository"
uses: actions/checkout@v4
with:
submodules: false
submodules: recursive
repository: ${{ inputs.target_repository }}
ref: ${{ inputs.target_ref }}
- name: "Overlay current F´ revision"
@ -69,7 +69,7 @@ jobs:
- name: "Build"
working-directory: ${{ inputs.build_location }}
run: |
fprime-util build ${{ runner.debug == '1' && '--verbose' || '' }} ${{ inputs.target_platform }}
fprime-util build -j8 ${{ runner.debug == '1' && '--verbose' || '' }} ${{ inputs.target_platform }}
shell: bash
runUT:
@ -80,7 +80,7 @@ jobs:
- name: "Checkout target repository"
uses: actions/checkout@v4
with:
submodules: false
submodules: recursive
repository: ${{ inputs.target_repository }}
ref: ${{ inputs.target_ref }}
- name: "Overlay current F´ revision"
@ -100,11 +100,11 @@ jobs:
- name: "Build UTs"
working-directory: ${{ inputs.build_location }}
run: |
fprime-util build --ut ${{ runner.debug == '1' && '--verbose' || '' }} ${{ inputs.target_platform }}
fprime-util build --ut -j8 ${{ runner.debug == '1' && '--verbose' || '' }} ${{ inputs.target_platform }}
shell: bash
- name: "Run Unit Tests"
working-directory: ${{ inputs.build_location }}
run: |
fprime-util check ${{ runner.debug == '1' && '--verbose' || '' }} ${{ inputs.target_platform }}
fprime-util check -j8 ${{ runner.debug == '1' && '--verbose' || '' }} ${{ inputs.target_platform }}
shell: bash

View File

@ -0,0 +1,85 @@
# This workflow is intended for reuse by other workflows and will not run directly (no triggers).
# The behavior is to run the steps of fprime-ci.
name: "F´ CI - Reusable Workflow"
on:
workflow_call:
inputs:
target_repository:
description: "Additional external repository to checkout (<owner>/<repo>)"
required: true
type: string
fprime_location:
description: "Relative path from the external project root to its F´ submodule"
required: false
type: string
default: "./lib/fprime"
target_ref:
description: "Branch on target to checkout"
required: false
type: string
default: "devel"
ci_config_file:
required: true
type: string
run_unit_tests:
description: "Run an additional job in parallel to run unit tests."
required: false
type: boolean
default: true
runs_on:
description: "Platform to run on. Defaults to ubuntu-22.04"
required: false
type: string
default: "ubuntu-22.04"
runs_on_int:
description: "Platform to run integration tests on. Defaults to: apple-ci"
required: false
type: string
default: "apple-ci"
runs_on_ut:
description: "Platform to run UTs on. Defaults to ubuntu-22.04"
required: false
type: string
default: "ubuntu-22.04"
jobs:
build:
runs-on: ${{ inputs.runs_on }}
name: "Build"
steps:
- name: "Make Space"
uses: nasa/fprime-actions/make-space@devel
- name: "Set up target repository"
uses: nasa/fprime-actions/external-repository-setup@devel
with:
target_repository: ${{ inputs.target_repository }}
fprime_location: ${{ inputs.fprime_location }}
target_ref: ${{ inputs.target_ref }}
stage: build
- name: "Build Binary"
run: |
CCACHE_DISABLE=1 fprime-ci -c ${{ inputs.ci_config_file }} --add-stage build
- name: Archive Results
uses: actions/upload-artifact@v4
with:
name: archive.tar.gz
path: ./archive.tar.gz
integration-tests:
needs: build
name: "Integration Tests"
runs-on: ${{ inputs.runs_on_int }}
steps:
- name: "Set up target repository"
uses: nasa/fprime-actions/external-repository-setup@devel
with:
target_repository: ${{ inputs.target_repository }}
fprime_location: ${{ inputs.fprime_location }}
target_ref: ${{ inputs.target_ref }}
stage: int
- name: Pull Archive Results
uses: actions/download-artifact@v4
with:
name: archive.tar.gz
- name: "Integration tests"
run: |
fprime-ci -c ${{ inputs.ci_config_file }} --skip-stage build

6
.gitignore vendored
View File

@ -1,5 +1,6 @@
build/
build*/
build-fprime-*/
build-artifacts/
gtest/
docs-cache/
CMakePresets.json
@ -25,7 +26,9 @@ RemoteSystemsTempFiles
*.stackdump
Dict
*.core
*.swp
**/coverage/
*.gcov
!**/test/ut/output/*.gcov
GTestBase.*
@ -67,7 +70,6 @@ py_dict
build-fprime-automatic*
/Ref/bin
/RPI/bin
/ci-venv/
/ci-logs*
/ci-Framework-logs*

52
.nav.yml Normal file
View File

@ -0,0 +1,52 @@
# This file is used to generate the navigation structure for the documentation website
# The website uses MkDocs Material and this file is used by the mkdocs-awesome-nav plugin
# https://github.com/lukasgeiter/mkdocs-awesome-nav
#
# Paths prefixed with ../ are not publicly available
nav:
- Home: '../'
- Overview: '../overview'
- Getting Started:
- 'Getting Started': docs/getting-started/index.md
- 'Installation and Troubleshooting': docs/getting-started/installing-fprime.md
- Documentation:
- docs/index.md
- Tutorials:
- Tutorials Index: docs/tutorials/index.md
- 'Hello World': tutorials-hello-world/docs/hello-world.md
- 'LED Blinker': tutorials-led-blinker/docs/led-blinker.md
- 'MathComponent': tutorials-math-component/docs/math-component.md
- 'Cross-Compilation Setup': docs/tutorials/cross-compilation.md
- 'Arduino LED Blinker': tutorials-arduino-led-blinker/docs/arduino-led-blinker.md
- User Manual:
- User Manual Index: docs/user-manual/index.md
- Overview: docs/user-manual/overview/
- Framework: docs/user-manual/framework/
- FPP: 'https://nasa.github.io/fpp/fpp-users-guide.html'
- GDS: docs/user-manual/gds
- Design Pattens: docs/user-manual/design-patterns/
- Build System: docs/user-manual/build-system/
- Security: docs/user-manual/security/
- How To: docs/how-to
- Reference:
- docs/reference/index.md
- APIs:
- C++: docs/reference/api/cpp/html/
- CMake: docs/reference/api/cmake/
- Component SDDs:
- Svc:
- "Svc/**/docs/sdd.md"
- Fw:
- DataStructures:
- "Fw/DataStructures/docs/**.md"
- "Fw/**/docs/sdd.md"
- Drv:
- "Drv/**/docs/sdd.md"
- Specifications:
- FPP Language Spec: 'https://nasa.github.io/fpp/fpp-spec.html'
- GDS Plugins: docs/reference/gds-plugins/
- "docs/reference/*.md"
- Support: '../support'
- Events: '../events'
- News: "../news"

84
AI_POLICY.md Normal file
View File

@ -0,0 +1,84 @@
# F´ Generative AI Usage Guidelines
We're excited about the potential of generative AI to help make [F´](https://github.com/nasa/fprime) development more productive, enjoyable, and accessible! Whether you're using AI to write code, improve documentation, or learn about complex systems, we welcome the thoughtful use of these powerful tools in your F´ contributions.
This guide shares our community's approach to using generative AI effectively and responsibly. You'll find practical tips, best practices, and simple guidelines to help you get the most out of AI tools while maintaining the quality standards that make F´ great.
## Our Position on Generative AI
F´ embraces technological advancement and innovation. Generative AI tools can assist with:
- Code generation and refactoring
- Documentation creation and improvement
- Test case development
- Debugging assistance
- Design pattern suggestions
- Learning and understanding our codebases
However, the use of generative AI must align with our commitment to high technical standards, quality, and the collaborative nature of open source development.
## Disclosure
To maintain transparency and enable effective code review, contributors **must disclose all generative AI usage**.
This includes contributions in the forms of **Pull Requests**, **Issues** or **Discussions**.
### Pull Request Submissions for Contributors
1. **Fill-In the "AI Used (y/n)" table entry** in the pull request template disclosing whether Gen AI was used in the pull request
2. **Provide details in the "AI Usage" section** describing how generative AI was utilized
### What to Disclose
Include information about:
- **Type of assistance**: Code generation, documentation, debugging, testing, refactoring, etc.
- **Scope of usage**: Which files, functions, or sections were AI-assisted
- **Tool(s) used**: Name of the AI system(s) employed (e.g., GitHub Copilot, ChatGPT, etc.)
- **Level of modification**: Whether AI-generated content was used as-is, modified, or used as inspiration
### What AI Cannot Replace
- **Domain expertise** in flight software and embedded systems
- **Understanding of F Prime architecture** and design patterns
- **Critical thinking** about system requirements and constraints
- **Human judgment** on safety-critical decisions
- **Community collaboration** and peer review processes
## Best Practices
### Providing Guidelines to AI Tools
When working with generative AI, provide clear rules and context to improve code quality and consistency. For Example:
- **Reference F´ Style Guidelines**: Include the [F´ Style Guidelines](https://github.com/nasa/fprime/wiki/F%C2%B4-Style-Guidelines) in your prompts
- **Enforce coding standards**: Instruct AI to avoid "magic numbers" and use descriptive variable names or comments
- **Provide project context**: Share relevant F´ architectural patterns and component structures
### Quality and Responsibility
- **Review all AI-generated code** thoroughly before submission
- **Verify necessity and relevance** - Remove verbose or unnecessary AI-generated content
- **Be concise** - Edit AI output to be clear and to-the-point
- **Ensure compliance** with F Prime coding standards and style guidelines
- **Verify correctness** and test all AI-assisted implementations
- **Maintain authorship responsibility** - you are accountable for all submitted code regardless of its origin
### Security
- **Be cautious with external dependencies** suggested by AI tools
- **Validate security implications** of AI-generated code, especially for flight software
### Code Review Considerations
- **Provide context** to reviewers about AI usage to enable informed evaluation
- **Be prepared to explain** AI-generated logic and design decisions
- **Accept feedback gracefully** - AI-generated code is not exempt from revision requests
- **Document complex AI-assisted algorithms** clearly for future maintainers
## Getting Help
If you have questions about appropriate AI usage or need guidance on disclosure:
- Open a [Discussion](https://github.com/nasa/fprime/discussions) for community input
- Contact the Community Managers for specific guidance

View File

@ -1,2 +0,0 @@
# Add autocoder subdirectories
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/Python/")

View File

@ -1,9 +0,0 @@
# Set python autocoder directory
set(PYTHON_AUTOCODER_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE INTERNAL "Directory for Python autocoder")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/src/")
# Tests build for UTs only
if (BUILD_TESTING AND NOT __FPRIME_NO_UT_GEN__)
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/templates/")
add_fprime_subdirectory("${CMAKE_CURRENT_LIST_DIR}/test/")
endif()

View File

@ -1,155 +0,0 @@
# Autocoders Python Source
## Autocoder tools
### codegen.py
Takes component, port type, serializable, topology, or enum XML files as input and produces FPrime Autocoded Ac.cpp/hpp files. Codegen is also set up to generate *Impl_[hpp,cpp] template implementation template files with -t/--template, unit test component files with -u/--unit-test, logger files through -l/--loggers and -L/--logger-output-file, dependency files through -d/--dependency-file, dictionary files through -g/--default_dict, -x/--xml_topology_dict, -T/--default_topology_dict, -a/--ampcs_dict, and -A/--ampcs_topology_dict, HTML docs through -H/--html_docs, Markdown docs through -m/--md_docs, and reports on component interfaces through -r/--gen_report.
### cosmosgen.py
Takes a topology XML file as input and generates all the configuration files necessary to add a deployment to Ball Aerospace's COSMOS suite of tools for sending and receiving commands and telemetry. The output directory defaults to $BUILD_ROOT/COSMOS. You can also delete a deployment from the COSMOS directory by using "-r DEPLOYMENT_NAME". Full documentation can be found in Autocoders/Python/src/fprime_ac/utils/cosmos/.
### JSONDictionaryGen.py
Takes a topology XML file as input and produces a JSON dictionary with naming convention "Deployment" + Dictionary.json. The JSON dictionary is generated within the directory where JSONDictionaryGen was run, but this can be overridden by inputting a new output directory in -p/--path.
### testgen.py
Testgen generates a test component in the same way that codegen does. It takes a component XML file as input and generates Tester.cpp/hpp, TesterBase.cpp/hpp, GTestBase.cpp/hpp, and a TestMain.cpp. TestMain.cpp and Tester.cpp/hpp won't be overwritten if they already exist. Rather, one should use command line option -m/--maincpp to overwrite TestMain.cpp and -f/--force_tester to overwrite Tester.cpp and Tester.hpp. Testgen supports absolute paths to inputted files, so you are able to call testgen on any file and the test component will be generated in the directory that testgen was called from.
### gds_dictgen.py
GDS Dictgen is a tool for generating GDS XML Dictionaries that are named *TopologyAppDictionary.xml. The tool takes topology XML as input, and the generated dictionary contains all enums, serializables, commands, events, channels, and parameters present within the topology. GDS Dictgen supports absolute paths to inputted files, so you are able to call GDS dictgen on any file and the dictionary will be generated in the directory that GDS dictgen was called from.
### pymod_dictgen.py
Pymod Dictgen is a tool for generating python modules for the GDS. The tool takes topology XML as input, and it generates command, event, channel, and parameter python modules within their own respective directories. The output path can be changed with command line option -o/--dict_dir. Pymod dictgen supports absolute paths to inputted files, so you are able to call testgen on any file and the directories will be generated in the directory that pymod dictgen was called from.
### implgen.py
Implgen is a tool that takes in component XML and generates ComponentImpl.cpp/hpp files. It is formatted in a very similar way to testgen.py. It generates the Impl files within whatever directory it was ran, and it has its own pytest in Autocoders/Python/test/implgen. Implgen also allows for absolute paths.
### tlmLayout.py
Takes as input a telemetry layout in tab-delimited format and generates .hpp files of the packet layout(s) and a table that can be used to form the packet(s).
## Autocoders Python directory structure
### bin/
Directory containing all 7 autocoder tools and a few scripts to invoke them.
### doc/
Directory containing telemetry packet / layout documentation. It also contains a changelog and a readme for the autocoder, but both are outdated.
### schema/
Directory containing all autocoder RelaxNG and Schematron XML schemas. Schemas are found within the default directory. The sample_XML_files directory contains sample XML files for the schemas that are run using the testSchemas.py test. These sample XML files were made for the RelaxNG schemas, but they have not been updated for the schematron schemas, so they may not work with them.
### src/
Directory containing all python code for the autocoder tools. Codegen uses the visitor pattern to generate its output files, and the generators for the visitor pattern are found in generators while the visitors are found in generators/visitors. Generators/templates contains all the cheetah templates required to run the autocoder. In a fresh repo, these should be built either by making F Prime, making the autocoder unit tests, or manually running cheetah compile within the templates directory. The parsers directory contains all the custom autocoder XML parser modules that the autocoder uses to create models from raw F Prime XML. Lastly, utils/cosmos contains the modules used by the cosmosgen tool. There is a readme file within this directory that explains what all of this code does.
#### src/generators/
| File | Description |
| ------------------------- | ---------------------------------------------------------------------------- |
| AbstractGenerator.py | Defines the interface for each portion or the code to be generated |
| ChannelBody.py | Main entry point of channel class body |
| ChannelHeader.py | Main entry point of channel class header |
| CommandBody.py | Main entry point of command class body |
| CommandHeader.py | Main entry point of command class header |
| DictBody.py | Main entry point of dict class body |
| DictHeader.py | Main entry point of dict class header |
| DictStart.py | Main entry point of start of dict class code |
| EventBody.py | Main entry point of event class body |
| EventHeader.py | Main entry point of event class header |
| FinishSource.py | Main entry point of end of file code |
| formatters.py | Contains various routines to output formatted strings for code generation |
| GenFactory.py | Factory for instancing the interface and connecting appropriate visitors |
| HtmlDocPage.py | Main entry point for generation of html documentation for grnd interfaces |
| HtmlStartPage.py | Main entry point for generation of html documentation for grnd interfaces |
| Includes1.py | Main entry point for generation of a first set of include statements |
| Includes2.py | Main entry point for generation of a second set of include statements |
| InitFiles.py | Main entry point for generation of initializing code |
| InstanceDictBody.py | Main entry point for generation of instance dict body |
| InstanceDictHeader.py | Main entry point for generation of instance dict header |
| InstanceDictStart.py | Main entry point for generation of start of instance dict class code |
| MdDocPage.py | Main entry point of markdown documentation for ground interfaces |
| MdStartPage.py | Main entry point for start of code for markdown documentation |
| Namespace.py | Main entry point for generation of initialization code |
| Private.py | Main entry point for generation of private code within a class |
| Protected.py | Main entry point for generation of private code within a class |
| Public.py | Main entry point for generation of private code within a class |
| StartChannel.py | Main entry point for start of code for channel class |
| StartCommand.py | Main entry point for start of code for command class |
| StartEvent.py | Main entry point for start of code for event class |
| StartSource.py | Main entry point for start of code |
#### src/models/
| File | Description |
| --- | ----------- |
| Arg.py | Argument meta-model that is instanced as an association to port instances |
| Channel.py | Channel meta-model - list of channels |
| Command.py | Command meta-model - list of commands |
| CompFactory.py | Factory class for instancing the component and building port and arg config |
| Component.py | Component meta-model and main interface for code generation queries |
| Event.py | Event meta-model - list of event |
| InternalInterface.py | Internal interface meta-model - list of internal interfaces |
| ModelParser.py | Contains various routines for parsing the meta-model object and returning lists, dicts, etc. for visitors to utilize in mapping to code |
| Parameter.py | Parameter meta-model - list of parameters |
| Port.py | Port meta-model contained within a component class |
| PortFactory.py | Factory class for instancing the port interface type and building up port and arg config |
| Serialize.py | Serializable meta-model |
| TopoFactory.py | Factory class for instancing topology meta-model |
| Topology.py | Topology meta-model and main interface for code generation queries |
#### src/parsers/
| File | Description |
| --- | ----------- |
| AbstractParser.py | Defines the shared interfaces for parsing, validation and getter methods for component, port, and topology xml |
| XmlComponentParser.py | Parses XML component description files |
| XmlEnumParser.py | Parses XML enum description files |
| XmlParser.py | Parent class of the rest of the XmlParser classes |
| XmlPortsParser.py | Parses XML port description files |
| XmlSerializeParser.py | Parses XML serialize description files |
| XmlTopologyParser.py | Parses XML topology description files |
#### src/utils/
| File | Description |
| --- | ----------- |
| ac_cli_helpers.py | Contains helper methods to parse arguments and to run the autocoder CLI and pass any arguments it needs |
| AddSysPath.py | Contains a function that adds a directory to the Python sys.path value - copied from Python cookbook |
| CaltechHeader.py | Contains the caltech header that should be used in autocoder classes |
| ConfigManager.py | Simple configuration class patterned after the Keck observation sequencer GUI and the Tahoe CalVal pipeline |
| DictTypeConverter.py | Contains methods to convert types to dictionary types and to replace special characters in format strings |
| DiffAndRename.py | Mainly used for difference and rename routines |
| DumpObj.py | Contains methods to print nicely formatted overviews of objects |
| EnumDictCheck.py | A structure used to report enumeration size errors |
| EnumGenerator.py | Generator to produce serializable enums |
| Logger.py | Sets up the logging for all other scripts based on the Python logging module - not a standalone file |
| ParseC.py | Contains a set of Python functions that parse C code |
| pyparsing.py | Python parser methods created externally by Paul T. McGuire |
| TopDictGenerator.py | Generator that produces a topology dictionary from parsed XML |
| TypesList.py | Contains types_list and port_types_list which contain types allowed in commands/telemetry/parameters/events |
| VersionFile.py | Check if file exists, and creates a backup copy using an appended versioning string - copied directly from the language cookbook |
| XmlParser.py | General XML parser class based on the Python xml2obj recipe |
### templates/
Directory containing a sample unit test for testing components. There are sample F Prime XML files, a sample Impl.cpp file, and the ut itself.
### test/
Directory containing all unit tests invoked by the cmake system. List of working unit tests are present within CMakeLists.txt. The directories testgen, dictgen, schematron, and enum_xml contain pytests which should be run using pytest rather than cmake. Testgen and enum_xml additionally contain unit tests, but they are set up within cmake to be built as utilities rather than unit tests, so they will not be invoked when running all unit tests in cmake. Dependencies and file i/o within these unit tests prevent them from being successfully run outside of their pytests, so this should be kept this way.
### CMakeLists.txt
Cmake file that is present in all parts of directory tree to be built by cmake. If cmake was invoked with type testing, templates and test get built. The src directory is always built as well.
### Requirements
The Autocoder's requirements are covered by installing the F´ software package. This is covered by the installation process.
## Schematron
In Autocoders/Python/schema/default there are various schematron .rng files mixed with the normal F Prime RelaxNG .rng schema files. The schematron files validate xml in the same way as the RelaxNG schemas (within the XmlParser classes), but these schematron files will only generate command line errors, not exceptions like the schema files will. Here is a short description of each file:
| Schematron File | Description |
| ------------------------- | ---------------------------------------------------------------------------- |
| top_uniqueness_schematron.rng | Compares base_id attributes of all instance xml elements by checking that the values within their base_id_window don't overlap |
| active_comp_schematron.rng | Checks that all active component xml elements have a child port element that is of type async_input |
| enum_value_schematron.rng | Checks that if one enum item xml element has an attribute "value" then all enum item xml elements have an attribute "value". It also checks uniqueness of these values |
| comp_uniqueness_schematron.rng | Checks that all ID's and opcodes for their respective elements within a component xml element are unique - this is the same as the bottom four schematron files but this file only runs on component xml tags |
| command_op_schematron.rng | Checks uniqueness of command opcodes in command xml elements |
| event_id_schematron.rng | Checks uniqueness of event id's in event xml elements |
| channel_id_schematron.rng | Checks uniqueness of channel id's in channel xml elements |
| parameter_id_schematron.rng | Checks uniqueness of parameter id's in parameter xml elements |
### Schematron Syntax
The root element of a schematron file is a schema tag with attribute xmlns set to "http://purl.oclc.org/dsdl/schematron". You are able to define any number of patterns with any number of rules within these files, where a pattern is a set of rules and a rule defines a set of asserts that all run on an xml element where the element's name is defined in the rule's context attribute. Schematron asserts use XPath syntax. It is helpful to find XPath cheat sheets online and have them open when defining a schematron assert.

View File

@ -1,2 +0,0 @@
isf_dict
ampcs_dict

File diff suppressed because it is too large Load Diff

View File

@ -1,748 +0,0 @@
#!/usr/bin/env python3
# ===============================================================================
# NAME: TlmLayout.py
#
# DESCRIPTION: Takes as input a telemetry layout in tab-delimited format and
# generates .hpp of the packet layout(s) and a table that can be
# used to form the packet(s)
#
# USAGE:
#
# AUTHOR: Len Day
# EMAIL: len.day@jpl.nasa.gov
# DATE CREATED : 09/28/15
#
# Copyright 2015, California Institute of Technology.
# ALL RIGHTS RESERVED. U.S. Government Sponsorship acknowledged.
# ===============================================================================
#
# Python standard modules
#
import argparse
import copy
import csv
from Cheetah.Template import Template
#
# Python extension modules and custom interfaces
#
#
# Universal globals used within module go here.
# (DO NOT USE MANY!)
#
tlm_input_line_num = 0
tlm_max_packet_bytes = 0
tlm_packet_list = []
tlm_duration = None
tlm_period = None
tlm_packet_id_schedule_list = []
tlm_packet_max_ids_list = []
tlm_packet_to_chan_list = []
# ===============================================================================
#
class HeaderItem:
def __init__(self):
self.m_type = ""
self.m_id = 0
self.m_bit_start = 0
self.m_bits = 0
self.m_comment = ""
class Item:
def __init__(self):
self.m_is_reserve = False
self.m_is_constant = False
self.m_name = ""
self.m_id = 0
self.m_data_type = ""
self.m_constant_value = 0
self.m_bit_start = 0
self.m_bits = 0
self.m_comment = ""
# The information for a telemetry packet is accumulated in a Packet class
# instance, then the packet_complete method is called when it is complete
class Packet:
def init(self):
self.m_name = ""
self.m_id = 0
self.m_id_comment = ""
self.m_bit_index = 0
self.m_bytes = 0
self.m_num_fixed_fields = 0
self.m_num_variable_fields = 0
self.m_max_field_bits = 0
self.num_header_general_fields = 0
self.m_header_list = []
self.m_item_list = []
# Additional packet information needed
# for scheduling and multiplexing to an address
#
self.m_chan = None
#
self.m_freq = None
self.m_offset = None
def __init__(self):
self.init()
# errors encountered parsing the file use err_msg to output the
# error and exit.
def err_msg(self, msg):
global tlm_input_line_num
print(msg, "at input line ", tlm_input_line_num)
exit(1)
def duration(self, line):
global tlm_duration
tlm_duration = float(line[1])
def run_period(self, line):
global tlm_period
tlm_period = float(line[1])
def frequency(self, line):
"""
Frequency of packet is always in Hz. so no units given.
"""
self.m_freq = float(line[1])
def offset(self, line):
"""
Offset of packet is essentially it's phase within duration.
If no units detected just count cycle slots.
If "s" for seconds is detected then compute cycle slots here.
NOTE: One and only one offset per ID can currently be specified.
"""
if "s" in line[1].lower():
self.m_offset = int(
(float(line[1].split()[0].strip()) / (1.0 / tlm_period)) + 0.5
)
else:
self.m_offset = int(line[1])
def channel(self, line):
"""
Channel number. This is a channel number assigned to
the packet of type ID. It is typically used for mapping
of packet ID's types to 1553 sub-addresses.
"""
self.m_chan = int(line[1])
# Comment records are ignored
def comment(self, line):
pass # Ignored
# Process and save a packet record. This completed processing of the
# previous packet (if any)
def packet(self, line):
self.packet_complete()
self.init()
# Process and save a header record
def header(self, line):
if len(line) < 2:
self.err_msg("Missing parameter for header")
he = HeaderItem()
he.m_bit_start = self.m_bit_index
kw = line[1].lower()
if kw == "id":
if len(line) < 5:
self.err_msg("Missing parameter for header ID")
he.m_type = "HEADER_FIELD_ID"
s = line[4].strip()
if not s.isdigit():
self.err_msg("Illegal value for number of bits: '" + s + "'")
he.m_bits = int(s)
self.m_bit_index += he.m_bits
elif kw == "time":
he.m_type = "HEADER_FIELD_TIME"
he.m_bits = 48
self.m_bit_index += he.m_bits
elif kw == "sequence":
if len(line) < 6:
self.err_msg("Missing parameter for header sequence")
he.m_type = "HEADER_FIELD_SEQUENCE"
s = line[4].strip()
if not s.isdigit():
self.err_msg("Illegal value for number of bits: '" + s + "'")
he.m_bits = int(s)
self.m_bit_index += he.m_bits
elif kw == "field":
if len(line) < 4:
self.err_msg("Missing parameter for header field")
he.m_type = "HEADER_FIELD_FIELD"
s = line[2].strip()
if not s.isdigit():
self.err_msg("Illegal value for ID: '" + s + "'")
he.m_id = int(s)
s = line[4].strip()
if not s.isdigit():
self.err_msg("Illegal value for number of bits: '" + s + "'")
he.m_bits = int(s)
self.m_bit_index += he.m_bits
self.num_header_general_fields += 1
else:
self.err_msg("Illegal keyword for header: '" + line[1] + "'")
if len(line) > 5:
he.m_comment = line[5]
self.m_header_list.append(he)
# Process and save the packet identifier record
def identifier(self, line):
if len(line) < 3:
self.err_msg("Missing parameter(s) for identifier")
self.m_name = line[1].strip()
if not self.m_name:
self.err_msg("Name cannot be blank")
if len(self.m_name.split()) > 1:
self.err_msg("Name must not contain spaces")
if self.m_name.find("/") >= 0:
self.err_msg("Name must not contain '/'")
if self.m_name.find("\\") >= 0:
self.err_msg("Name must not contain '\\'")
s = line[2].strip()
if not s.isdigit():
self.err_msg("Illegal value for identifier: '" + s + "'")
self.m_id = int(s)
if self.m_id < 0:
self.err_msg("Negative value for identifier: '" + line[2] + "'")
if len(line) > 5:
self.m_id_comment = line[5]
# Process and save an item record
def item(self, line):
self.m_num_variable_fields += 1
it = Item()
it.m_bit_start = self.m_bit_index
if len(line) < 5:
self.err_msg("Missing parameter(s) for item")
it.m_name = line[1].strip()
if not it.m_name:
self.err_msg("Name cannot be blank")
if len(it.m_name.split()) > 1:
self.err_msg("Name must not contain spaces")
s = line[2].strip()
if not s.isdigit():
self.err_msg("Illegal value for identifier: '" + s + "'")
it.m_id = int(s)
it.m_data_type = line[3].strip()
s = line[4].strip()
if not s.isdigit():
self.err_msg("Illegal value for number of bits: '" + s + "'")
it.m_bits = int(s)
self.m_bit_index += it.m_bits
if len(line) > 5:
it.m_comment = line[5]
self.m_item_list.append(it)
# Process and save a reserve record
def reserve(self, line):
it = Item()
it.m_bit_start = self.m_bit_index
if len(line) < 5:
self.err_msg("Missing parameter for reserve")
it.m_is_reserve = True
s = line[4].strip()
if not s.isdigit():
self.err_msg("Illegal value for number of bits: '" + s + "'")
it.m_bits = int(s)
if it.m_bits < 1:
self.err_msg("Illegal value for number of bits: '" + s + "'")
self.m_bit_index += it.m_bits
if len(line) > 5:
it.m_comment = line[5]
self.m_item_list.append(it)
# Process and save an align record
def align(self, line):
it = Item()
it.m_bit_start = self.m_bit_index
if len(line) < 2:
self.err_msg("Missing parameter for align")
it.m_is_reserve = True
s = line[1].strip()
if not s.isdigit():
self.err_msg("Illegal value for number of bits: '" + s + "'")
bits = int(s)
if bits not in (8, 16, 32, 64):
self.err_msg("Illegal value for number of bits: '" + s + "'")
if self.m_bit_index % bits:
bits = bits - (self.m_bit_index % bits)
else:
return # Already aligned
it.m_bits = bits
self.m_bit_index += it.m_bits
if len(line) > 5:
it.m_comment = line[5]
self.m_item_list.append(it)
# Process and save a constant record
def constant(self, line):
self.m_num_fixed_fields += 1
it = Item()
it.m_bit_start = self.m_bit_index
if len(line) < 5:
self.err_msg("Missing parameter for constant")
it.m_is_constant = True
it.m_name = line[1].strip()
if not it.m_name:
self.err_msg("Name cannot be blank")
if len(it.m_name.split()) > 1:
self.err_msg("Name must not contain spaces")
it.m_data_type = line[2].strip()
it.m_data_type = it.m_data_type.lower()
if it.m_data_type not in ("integer", "float", "text"):
self.err_msg("Invalid date type: '" + it.m_data_type + "'")
it.m_constant_value = line[3]
if it.m_data_type == "integer":
it.m_constant_value = it.m_constant_value.strip()
if not it.m_constant_value.isdigit():
self.err_msg("Invalid numeric value: '" + it.m_constant_value + "'")
it.m_constant_value = int(it.m_constant_value)
elif it.m_data_type == "float":
it.m_constant_value = it.m_constant_value.strip()
try:
f = float(it.m_constant_value)
except ValueError:
self.err_msg(
"Invalid floating point value: '" + it.m_constant_value + "'"
)
it.m_constant_value = f
s = line[4].strip()
if not s.isdigit():
self.err_msg("Illegal value for number of bits: '" + s + "'")
bits = int(s)
if bits < 1:
self.err_msg("Illegal value for number of bits: '" + s + "'")
it.m_bits = bits
self.m_bit_index += it.m_bits
if len(line) > 5:
it.m_comment = line[5]
self.m_item_list.append(it)
# packet_complete() is called when a packet definition is complete to save
# the packet
def packet_complete(self):
global tlm_input_line_num
global tlm_packet_list
global tlm_max_packet_bytes
global tlm_duration
global tlm_period
global verbose
if not self.m_header_list and not self.m_item_list:
return
self.m_bytes = (self.m_bit_index + 7) / 8
if self.m_bytes > tlm_max_packet_bytes:
tlm_max_packet_bytes = self.m_bytes
for field in self.m_header_list:
if field.m_bits > self.m_max_field_bits:
self.m_max_field_bits = field.m_bits
for item in self.m_item_list:
if not item.m_is_reserve and not item.m_is_constant:
if item.m_bits > self.m_max_field_bits:
self.m_max_field_bits = item.m_bits
if verbose:
if tlm_duration is not None:
print("Duration (in seconds only): %f" % tlm_duration)
if tlm_period is not None:
print("Run or Sample Period (in hz. only): %f" % tlm_period)
if self.m_freq is not None:
print("Packet frequency (Hz.): " + str(self.m_freq))
if self.m_offset is not None:
print("Packet offset: " + str(self.m_offset))
print(
"packet size in bits: "
+ str(self.m_bit_index)
+ " ("
+ str(self.m_bit_index / 8)
+ " bytes)"
)
print(
"Number of fixed-value fields:"
+ str(self.m_num_fixed_fields)
+ ", variable fields: "
+ str(self.m_num_variable_fields)
)
print("name: ", self.m_name)
print("packet ID: ", self.m_id, ", comment: ", self.m_id_comment)
print(
"Number of items in packet header list: ",
len(self.m_header_list),
)
print(
"Number of general items in packet header list: ",
self.num_header_general_fields,
)
print(
"Maximum field size in bits: ", self.m_max_field_bits
)
for field in self.m_header_list:
print("\tType: ", field.m_type)
print("\tID: ", field.m_id)
print("\tStart bit: ", field.m_bit_start)
print("\tSize in bits: ", field.m_bits)
print("\tComment: ", field.m_comment)
print("")
print("Number of items in packet item list: ", len(self.m_item_list))
for i, item in enumerate(self.m_item_list, start=1):
print("Item # ", i)
print("\tis_reserve: ", item.m_is_reserve)
print("\tis_constant: ", item.m_is_constant)
print("\tname: ", item.m_name)
print("\tid: ", item.m_id)
print("\tdata type: ", item.m_data_type)
print("\tconstant value: ", item.m_constant_value)
print("\tstart bit: ", item.m_bit_start)
print("\tbits: ", item.m_bits)
print("\tcomment: ", item.m_comment)
print()
if self.m_name == "":
self.err_msg("Preceding packet has no name")
p = copy.deepcopy(self)
tlm_packet_list.append(p)
# The CsvLine class parses a single line and saves the info in the
# packet member. When a packet record is found the previously defined
# packet is saved.
class CsvLine:
def __init__(self):
global tlm_duration
self.packet = Packet()
self.keywords = {
"duration": self.packet.duration,
"runperiod": self.packet.run_period,
"frequency": self.packet.frequency,
"offset": self.packet.offset,
"channel": self.packet.channel,
"comment": self.packet.comment,
"packet": self.packet.packet,
"header": self.packet.header,
"identifier": self.packet.identifier,
"item": self.packet.item,
"reserve": self.packet.reserve,
"align": self.packet.align,
"constant": self.packet.constant,
}
# process() is called with a single line already tokenized as a list
def process(self, line):
global tlm_input_line_num
if not line:
return
nonblank = False
for i in range(len(line)):
s = line[i].strip()
if len(s):
nonblank = True
break
if not nonblank:
return
kw = line[0].lower()
if kw in self.keywords:
self.keywords[kw](line)
else:
print("Invalid keyword '" + line[0] + "' at line ", tlm_input_line_num)
exit(1)
def finish(self):
self.packet.packet_complete()
# CsvFile reads the input file and processes each line
class CsvFile:
def __init__(self):
self.line = CsvLine()
def process(self, name):
global tlm_input_line_num
try:
m_fp = open(name)
except OSError:
print(f"Error opening {name}")
exit()
m_reader = csv.reader(m_fp, dialect="excel")
for line in m_reader:
tlm_input_line_num += 1
self.line.process(line)
self.line.finish()
m_fp.close()
def sched_cycle_ids_max(max_cycle):
"""
Return a list of the maximum times an ID is assigned to a cycle slot.
"""
cycle_max_list = [0 for _ in range(max_cycle)]
cycle_offset = None
i = 0
if tlm_period is None:
return []
for p in tlm_packet_list:
if (p.m_freq is not None) and (p.m_offset is not None):
cycle_offset = int(((1.0 / p.m_freq) / (1.0 / tlm_period)) + 0.5)
offset = p.m_offset
else:
cycle_offset = None
if cycle_offset is not None:
for i in range(max_cycle):
if i % cycle_offset == 0:
if (i + offset) < max_cycle:
cycle_max_list[i + offset] += 1
# print p.m_id, p.m_freq, p.m_offset
# print cycle_offset
# print cycle_max_list
return cycle_max_list
def sched_cycle_ids(max_cycle):
"""
Return a list of cycle slots where each slot is a list of IDs assigned in that slot.
Note the list returned by sched_cycle_ids_max is the number of IDs per cycle slot.
"""
cycle_id_list = [list() for _ in range(max_cycle)]
cycle_offset = None
if tlm_period is None:
return []
for p in tlm_packet_list:
if (p.m_freq is not None) and (p.m_offset is not None):
cycle_offset = int(((1.0 / p.m_freq) / (1.0 / tlm_period)) + 0.5)
offset = p.m_offset
else:
cycle_offset = None
if cycle_offset is not None:
for i in range(max_cycle):
if i % cycle_offset == 0:
if (i + offset) < max_cycle:
cycle_id_list[i + offset].append(p.m_id)
# print p.m_id, p.m_freq, p.m_offset
for id in cycle_id_list:
if len(id) == 0:
id.append(-1)
# j = 0
# for i in cycle_id_list:
# print "%d: %s" % (j, i)
# j += 1
return cycle_id_list
def sched_id_arr_size(cycle_id_list):
"""
Return total size for the scheduled ID array.
"""
id_list_size = 0
for l in cycle_id_list:
s = len(l)
if s == 0:
id_list_size += 1
else:
id_list_size += s
return id_list_size
def id_to_channel_map():
"""
Return an association list of ID to channel number assignments.
NOTE: the channel number is intended to be 1553 sub-address.
"""
def output_cpp(output_file, template_file):
global tlm_duration
global tlm_period
global tlm_packet_list
global tlm_max_packet_bytes
t = Template(file=template_file)
t.tlm_packet_list = tlm_packet_list
# Generate schedule code if both duration and period defined
if (tlm_duration is not None) and (tlm_period is not None):
t.tlm_max_cycles = int(tlm_duration * tlm_period)
else:
t.tlm_max_cycles = None
t.tlm_cycle_max_list = sched_cycle_ids_max(t.tlm_max_cycles)
t.tlm_cycle_id_list = sched_cycle_ids(t.tlm_max_cycles)
# Create ID to channel mapping
t.tlm_cycle_id_arr_size = sched_id_arr_size(t.tlm_cycle_id_list)
t.tlm_max_packet_bytes = tlm_max_packet_bytes
t.tlm_max_num_chan = sum([pkt.m_chan is not None for pkt in tlm_packet_list])
# Create duration and period values
t.tlm_max_num_freq = sum([pkt.m_freq is not None for pkt in tlm_packet_list])
if tlm_duration is not None:
t.tlm_duration = tlm_duration
else:
t.tlm_duration = -1.0
#
if tlm_period is not None:
t.tlm_period = tlm_period
else:
t.tlm_period = -1
f = open(output_file, "w")
print(t, file=f)
def output_html():
global tlm_packet_list
def output_dict():
global tlm_packet_list
def output(cpp_output_file, template_file):
output_cpp(cpp_output_file, template_file)
output_html()
output_dict()
def main():
global verbose
parser = argparse.ArgumentParser(description="Process a telemetry definition file")
parser.add_argument(
"-v", "--verbose", action="store_true", help="Enable verbose mode"
)
parser.add_argument(
"--cpp",
action="store",
required=True,
help="Required. Fully-qualified output cpp file name",
)
parser.add_argument(
"--template",
action="store",
required=True,
help="Required. Fully-qualified file name of the cheetah template used by this script (normally in Autocoders/Python/src/fprime_ac/utils/TlmPacketDefBase.tmpl)",
)
parser.add_argument(
"input_file", nargs="+", help="One or more input tab-delimited csv file names"
)
args = parser.parse_args()
verbose = args.verbose
cpp_output_file = args.cpp
template_file = args.template
f = CsvFile()
for file in args.input_file:
f.process(file)
output(cpp_output_file, template_file)
if __name__ == "__main__":
main()

View File

@ -1,646 +0,0 @@
#!/usr/bin/env python
# ===============================================================================
# NAME: tlm_packet_gen.py
#
# DESCRIPTION: A tool for generating telemetry packet data structures for use with Svc/TlmPacketizer.
# Logic borrowed from gds_dictgen.py
#
# AUTHOR: Tim Canham
# EMAIL: timothy.canham@jpl.nasa.gov
# DATE CREATED: September 8, 2019
#
# Copyright 2019, California Institute of Technology.
# ALL RIGHTS RESERVED. U.S. Government Sponsorship acknowledged.
# ===============================================================================
import logging
import os
import sys
from optparse import OptionParser
from Cheetah.Template import Template
# Meta-model for Component only generation
from fprime_ac.models import TopoFactory
# Parsers to read the XML
from fprime_ac.parsers import (
XmlArrayParser,
XmlEnumParser,
XmlSerializeParser,
XmlTopologyParser,
)
from fprime_ac.utils.buildroot import (
get_nearest_build_root,
search_for_file,
set_build_roots,
)
from lxml import etree
header_file_template = """
\#ifndef ${packet_list_name}_header_h
\#define ${packet_list_name}_header_h
\#include <Svc/TlmPacketizer/TlmPacketizerTypes.hpp>
namespace ${packet_list_namespace} {
// set of packets to send
extern const Svc::TlmPacketizerPacketList ${packet_list_name}Pkts;
// set of channels to ignore
extern const Svc::TlmPacketizerPacket ${packet_list_name}Ignore;
}
\#endif // ${packet_list_name}_header_h
"""
impl_file_template = """
\#include <Svc/TlmPacketizer/TlmPacketizerTypes.hpp>
\#include <${output_header}>
\#include <FpConfig.hpp>
\#include <FpConfig.hpp>
\#include <Fw/Time/Time.hpp>
// Verify packets not too large for ComBuffer
// if this macro gives a compile error, that means the packets are too large
void check_func(void) {
static_assert((${max_size} <= (FW_COM_BUFFER_MAX_SIZE - Fw::Time::SERIALIZED_SIZE - sizeof(FwTlmPacketizeIdType) - sizeof(FwPacketDescriptorType))), "PacketsTooBig");
}
namespace ${packet_list_namespace} {
#for $packet,$id,$level,$channel_list in $packet_list
static const Svc::TlmPacketizerChannelEntry ${packet}List[] = {
#for $channel_id,$channel_size,$channel_name in $channel_list:
{$channel_id, $channel_size}, // $channel_name
#end for
};
static const Svc::TlmPacketizerPacket ${packet} = { ${packet}List, $id, $level, FW_NUM_ARRAY_ELEMENTS(${packet}List) };
#end for
const Svc::TlmPacketizerPacketList ${packet_list_name}Pkts = {
{
#for $packet,$id,$level,$channel_list in $packet_list
&${packet},
#end for
},
$len($packet_list)
};
static const Svc::TlmPacketizerChannelEntry ignoreList[] = {
#for $channel_id,$channel_name in $ignore_list:
{$channel_id, 0}, // $channel_name
#end for
};
const Svc::TlmPacketizerPacket ${packet_list_name}Ignore = { ignoreList, 0, 0, FW_NUM_ARRAY_ELEMENTS(ignoreList) };
} // end namespace ${packet_list_namespace}
"""
# Global logger init. below.
PRINT = logging.getLogger("output")
DEBUG = logging.getLogger("debug")
PACKET_VIEW_DIR = "./Packet-Views"
class TlmPacketParseValueError(ValueError):
pass
class TlmPacketParseIOError(ValueError):
pass
class TlmPacketParser(object):
def __init__(self, verbose=False, dependency=None):
self.verbose = verbose
self.dependency = dependency
self.size_dict = {}
def add_type_size(self, type, size):
PRINT.debug("Type: %s size: %d" % (type, size))
self.size_dict[type] = size
def get_type_size(self, type_name, size):
# switch based on type
if type_name == "string":
return int(size) + 2 # plus 2 to store the string length
elif type_name == "I8":
return 1
elif type_name == "I16":
return 2
elif type_name == "I32":
return 4
elif type_name == "I64":
return 8
elif type_name == "U8":
return 1
elif type_name == "U16":
return 2
elif type_name == "U32":
return 4
elif type_name == "U64":
return 8
elif type_name == "F32":
return 4
elif type_name == "F64":
return 8
elif type_name == "bool":
return 1
else:
return None
def generate_channel_size_dict(self, the_parsed_topology_xml, xml_filename):
"""
Generates GDS XML dictionary from parsed topology XML
"""
if self.verbose:
print(f"Topology xml type description file: {xml_filename}")
model = TopoFactory.TopoFactory.getInstance()
topology_model = model.create(the_parsed_topology_xml, generate_list_file=False)
# uses the topology model to process the items
# create list of used parsed component xmls
parsed_xml_dict = {}
# deployment = the_parsed_topology_xml.get_deployment()
for comp in the_parsed_topology_xml.get_instances():
if comp.get_type() in topology_model.get_base_id_dict():
parsed_xml_dict[comp.get_type()] = comp.get_comp_xml()
else:
PRINT.info(
"Components with type {} aren't in the topology model.".format(
comp.get_type()
)
)
xml_list = []
for parsed_xml_type in parsed_xml_dict:
if parsed_xml_dict[parsed_xml_type] is None:
print(
"ERROR: XML of type {} is being used, but has not been parsed correctly. Check if file exists or add xml file with the 'import_component_type' tag to the Topology file.".format(
parsed_xml_type
)
)
raise Exception()
xml_list.append(parsed_xml_dict[parsed_xml_type])
topology_model.set_instance_xml_list(xml_list)
ch_size_dict = {}
for comp in the_parsed_topology_xml.get_instances():
comp_name = comp.get_name()
comp_id = int(comp.get_base_id(), 0)
comp_type = comp.get_type()
if self.verbose:
PRINT.debug("Processing %s" % comp_name)
# check for included XML types
self.process_enum_files(parsed_xml_dict[comp_type].get_enum_type_files())
self.process_array_files(parsed_xml_dict[comp_type].get_array_type_files())
self.process_serializable_files(
parsed_xml_dict[comp_type].get_serializable_type_files()
)
# check for channels
if parsed_xml_dict[comp_type].get_channels() is not None:
for chan in parsed_xml_dict[comp_type].get_channels():
channel_name = f"{comp_name}.{chan.get_name()}"
if self.verbose:
print("Processing Channel %s" % channel_name)
chan_type = chan.get_type()
# if channel is enum
if type(chan_type) == type(tuple()):
chan_size = 4
# if channel type is string
# elif chan_type == "string":
# chan_size = int(chan.get_size()) + 2 # FIXME: buffer size storage size magic number - needs to be turned into a constant
# if channel is serializable
elif chan_type in self.size_dict:
chan_size = self.size_dict[chan_type]
else:
chan_size = self.get_type_size(chan_type, chan.get_size())
if chan_size is None:
print(
'Component %s channel %s type "%s" not found!'
% (comp_name, channel_name, chan_type)
)
sys.exit(-1)
chan_id = int(chan.get_ids()[0], 0) + comp_id
if self.verbose:
print("Channel %s size %d" % (channel_name, chan_size))
ch_size_dict[channel_name] = (chan_id, chan_size)
return ch_size_dict
def gen_packet_file(self, xml_filename):
view_path = PACKET_VIEW_DIR
if not os.path.exists(view_path):
os.mkdir(view_path)
# Make sure files
if not os.path.isfile(xml_filename):
raise TlmPacketParseIOError("File %s does not exist!" % xml_filename)
fd = open(xml_filename, "r")
xml_parser = etree.XMLParser(remove_comments=True)
element_tree = etree.parse(fd, parser=xml_parser)
channel_size_dict = None
ht = Template(header_file_template)
it = Template(impl_file_template)
if element_tree.getroot().tag == "packets":
list_name = element_tree.getroot().attrib["name"]
list_namespace = element_tree.getroot().attrib["namespace"]
max_size = int(element_tree.getroot().attrib["size"])
# fill in template fields for header
ht.packet_list_name = list_name
ht.packet_list_namespace = list_namespace
# fill in template fields for implementation file
it.packet_list_name = list_name
it.packet_list_namespace = list_namespace
it.max_size = max_size
packet_list_container = []
packetized_channel_list = []
it.ignore_list = []
id_list = [] # check for duplicates
ignore_name_list = []
size_dict = {}
ht.num_packets = 0
total_packet_size = 0
levels = []
view_path = PACKET_VIEW_DIR
# find the topology import
for entry in element_tree.getroot():
# read in topology file
if entry.tag == "import_topology":
top_file = search_for_file("Topology", entry.text)
if top_file is None:
raise TlmPacketParseIOError(
"import file %s not found" % entry.text
)
the_parsed_topology_xml = XmlTopologyParser.XmlTopologyParser(
top_file
)
deployment = the_parsed_topology_xml.get_deployment()
if self.verbose:
print("Found assembly or deployment named: %s\n" % deployment)
channel_size_dict = self.generate_channel_size_dict(
the_parsed_topology_xml, xml_filename
)
elif entry.tag == "packet":
if channel_size_dict is None:
raise TlmPacketParseValueError(
"%s: Topology import must be before packet definitions"
% xml_filename
)
packet_size = 0
packet_name = entry.attrib["name"]
# Open a text file for a GDS view
vfd = open("%s/%s.txt" % (view_path, packet_name), "w")
packet_id = entry.attrib["id"]
packet_level = entry.attrib["level"]
print("Packetizing %s (%s)" % (packet_name, packet_id))
if packet_id in id_list:
raise TlmPacketParseValueError(
"Duplicate packet id %s" % packet_id
)
else:
id_list.append(packet_id)
channel_list = []
for channel in entry:
channel_name = channel.attrib["name"]
# TKC 11/20/2024 - In order to work with the ground system,
# we have to strip off the leading module. This is a
# band-aid until FPP packets are done
name_parts = channel_name.split(".")
if len(name_parts) != 3:
raise TlmPacketParseValueError(
'Channel %s must be of the format "module.component.channel_name"'
% channel_name
)
(module, component, channel) = name_parts
channel_name = "%s.%s" % (component, channel)
if not channel_name in channel_size_dict:
raise TlmPacketParseValueError(
"Channel %s does not exist" % channel_name
)
(channel_id, channel_size) = channel_size_dict[channel_name]
packet_size += channel_size
if self.verbose:
print(
" -Channel %s ID %d size %d"
% (channel_name, channel_id, channel_size)
)
channel_list.append((channel_id, channel_size, channel_name))
packetized_channel_list.append(channel_name)
vfd.write("%s\n" % channel_name)
packet_list_container.append(
(packet_name, packet_id, packet_level, channel_list)
)
ht.num_packets += 1
packet_size += (
11 + 2 + 4
) # raw packet size + time tag + packet id + packet descriptor
if packet_size > max_size:
raise TlmPacketParseValueError(
"Packet %s is too large. Size: %d max: %d"
% (packet_name, packet_size, max_size)
)
print("Packet %s size %d/%d" % (packet_name, packet_size, max_size))
total_packet_size += packet_size
if packet_level in size_dict:
size_dict[packet_level] = size_dict[packet_level] + packet_size
else:
size_dict[packet_level] = packet_size
if not packet_level in levels:
levels.append(packet_level)
vfd.close()
elif entry.tag == "ignore":
if channel_size_dict is None:
raise TlmPacketParseValueError(
"%s: Topology import must be before packet definitions"
% xml_filename
)
for channel in entry:
channel_name = channel.attrib["name"]
# TKC 11/20/2024 - In order to work with the ground system,
# we have to strip off the leading module. This is a
# band-aid until FPP packets are done
name_parts = channel_name.split(".")
if len(name_parts) != 3:
raise TlmPacketParseValueError(
'Channel %s must be of the format "module.component.channel_name"'
% channel_name
)
(module, component, channel) = name_parts
channel_name = "%s.%s" % (component, channel)
if not channel_name in channel_size_dict:
raise TlmPacketParseValueError(
"Channel %s does not exist" % channel_name
)
(channel_id, channel_size) = channel_size_dict[channel_name]
it.ignore_list.append((channel_id, channel_name))
if self.verbose:
print(
"Channel %s (%d) ignored" % (channel_name, channel_id)
)
ignore_name_list.append(channel_name)
else:
raise TlmPacketParseValueError("Invalid packet tag %s" % entry.tag)
if self.verbose:
print("Entry: %s" % entry.tag)
else:
raise TlmPacketParseValueError(
"Invalid xml type %s" % element_tree.getroot().tag
)
output_file_base = os.path.splitext(os.path.basename(xml_filename))[0]
nearest_build_root = get_nearest_build_root(xml_filename)
file_dir = os.path.relpath(os.path.dirname(xml_filename), nearest_build_root)
missing_channels = False
for channel in channel_size_dict:
if (
not channel in packetized_channel_list
and not channel in ignore_name_list
):
(channel_id, channel_size) = channel_size_dict[channel]
print(
"Channel %s (%d) not packetized or ignored." % (channel, channel_id)
)
missing_channels = True
if missing_channels:
raise TlmPacketParseValueError("Channels missing from packets")
header = "%sAc.hpp" % output_file_base
source = "%sAc.cpp" % output_file_base
print("Generating %s and %s" % (header, source))
levels.sort()
for level in levels:
print(
"Level: %s Bytes: %d bits: %d"
% (level, size_dict[level], size_dict[level] * 8)
)
print(
"Number of packets: %d\nTotal packet bytes: %d bits: %d"
% (ht.num_packets, total_packet_size, total_packet_size * 8)
)
it.packet_list = packet_list_container
it.output_header = "%s/%sAc.hpp" % (file_dir, output_file_base)
open(header, "w").write(str(ht))
open(source, "w").write(str(it))
target_directory = os.getcwd().replace("\\", os.sep)
header_target = target_directory + os.sep + header
source_target = target_directory + os.sep + source
# write dependency file
if self.dependency is not None:
dependency_file_txt = "\n%s %s: %s\n" % (
source_target,
header_target,
top_file,
)
open(self.dependency, "w").write(dependency_file_txt)
def process_serializable_files(self, serializable_file_list):
for serializable_file in serializable_file_list:
serializable_file = search_for_file("Serializable", serializable_file)
serializable_model = XmlSerializeParser.XmlSerializeParser(
serializable_file
)
# process XML includes
self.process_enum_files(serializable_model.get_include_enums())
self.process_array_files(serializable_model.get_include_arrays())
self.process_serializable_files(serializable_model.get_includes())
serializable_type = (
serializable_model.get_namespace()
+ "::"
+ serializable_model.get_name()
)
serializable_size = 0
for (
member_name,
member_type,
member_array_size,
member_size,
member_format_specifier,
member_comment,
_,
) in serializable_model.get_members():
# if enumeration
if type(member_type) == type(tuple()):
type_size = 4 # Fixme: can we put this in a constant somewhere?
elif (
member_type in self.size_dict.keys()
): # See if it is a registered type
type_size = self.size_dict[member_type]
else:
type_size = self.get_type_size(member_type, member_size)
if type_size is None:
print(
"Illegal type %s in serializable %s"
% (member_type, serializable_type)
)
sys.exit(-1)
if member_array_size != None:
serializable_size += int(member_array_size) * type_size
else:
serializable_size += type_size
self.add_type_size(serializable_type, serializable_size)
if self.verbose:
print(
"Serializable %s size %d" % (serializable_type, serializable_size)
)
def process_enum_files(self, enum_file_list):
for enum_file in enum_file_list:
enum_file = search_for_file("Enumeration", enum_file)
enum_model = XmlEnumParser.XmlEnumParser(enum_file)
enum_type = enum_model.get_namespace() + "::" + enum_model.get_name()
self.add_type_size(
enum_type, 4
) # Fixme: can we put this in a constant somewhere?
def process_array_files(self, array_file_list):
for array_file in array_file_list:
array_file = search_for_file("Array", array_file)
array_model = XmlArrayParser.XmlArrayParser(array_file)
# process any XML includes
self.process_enum_files(array_model.get_include_enum_files())
self.process_array_files(array_model.get_include_array_files())
self.process_serializable_files(array_model.get_includes())
array_type = array_model.get_namespace() + "::" + array_model.get_name()
array_size = int(array_model.get_size())
elem_type = array_model.get_type()
elem_type_size = None
if type(elem_type) == type(tuple()):
elem_type_size = 4 # Fixme: can we put this in a constant somewhere?
elif elem_type in self.size_dict.keys(): # See if it is a registered type
elem_type_size = self.size_dict[elem_type]
else:
elem_type_size = self.get_type_size(elem_type, 1) # Fixme: strings?
if elem_type_size is None:
print("Illegal type %s in array %s" % (elem_type, array_type))
sys.exit(-1)
self.add_type_size(array_type, elem_type_size * array_size)
def pinit():
"""
Initialize the option parser and return it.
"""
usage = "usage: %prog [options] [xml_topology_filename]"
parser = OptionParser(usage)
parser.add_option(
"-b",
"--build_root",
dest="build_root_overwrite",
type="string",
help="Overwrite environment variable BUILD_ROOT",
default=None,
)
parser.add_option(
"-v",
"--verbose",
dest="verbose_flag",
help="Enable verbose mode showing more runtime detail (def: False)",
action="store_true",
default=False,
)
parser.add_option(
"-d",
"--dependency-file",
dest="dependency_file",
type="string",
help="Generate dependency file for make",
default=None,
)
return parser
def main():
"""
Main program.
"""
global VERBOSE # prevent local creation of variable
global BUILD_ROOT # environmental variable if set
Parser = pinit()
(opt, args) = Parser.parse_args()
# opt.verbose_flag = True
#
# Parse the input Topology XML filename
#
if len(args) == 0:
print(f"Usage: {sys.argv[0]} [options] xml_filename")
return
elif len(args) == 1:
xml_filename = os.path.abspath(args[0])
else:
print("ERROR: Too many filenames, should only have one")
return
print("Processing packet file %s" % xml_filename)
set_build_roots(os.environ.get("BUILD_ROOT"))
packet_parser = TlmPacketParser(opt.verbose_flag, opt.dependency_file)
try:
packet_parser.gen_packet_file(xml_filename)
except TlmPacketParseValueError as e:
print("Packet XML parsing error: %s" % e)
sys.exit(-1)
except TlmPacketParseIOError as e:
print("Packet XML file error: %s" % e)
sys.exit(-1)
sys.exit(0)
if __name__ == "__main__":
main()

View File

@ -1,14 +0,0 @@
#!/usr/bin/bash
script_dir=$(dirname $0)
# $0 = this script
# $1 = packet file
# $2 = deployment build cache (ex. Ref/build-fprime-automatic-native)
export PYTHONPATH=$script_dir/../src
export BUILD_ROOT=$script_dir/../../../:$2:$2/F-Prime
echo "BUILD_ROOT=$BUILD_ROOT"
# get python from the path
python3 $script_dir/tlm_packet_gen.py $1

View File

@ -1,20 +0,0 @@
####
# pathmaker.py:
#
# The purpose of this file is to setup the F prime path automatically as part of a run of F prime. This should prevent
# the user from needing to do the same thing, and allow for a pure-Python way of running F prime tools.
####
import os
import sys
def setup_fprime_autocoder_path():
"""
Sets up the system path to include F prime autocoder directories. This is useful for all AC scripts.
"""
FW_PACKAGE = os.path.join(
os.path.dirname(__file__), "..", "..", "..", "Fw", "Python", "src"
)
AC_PACKAGE = os.path.join(os.path.dirname(__file__), "..", "..", "src")
sys.path.append(FW_PACKAGE)
sys.path.append(AC_PACKAGE)

View File

@ -1,8 +0,0 @@
ChangeLog File for Autocoders
=============================
8 August 2013
This file is manually maintained and intended to capture changes
with the Autocoders module over time.
8 August 2013
Promoted changes for new design pattern generation upstream to ISF_Development.

View File

@ -1,27 +0,0 @@
codegen.py Autocoder Tool to support F1 code generation
=======================================================
(Last updated 8 August 2013)
The codegen.py code generation produces four types of ISF codes.
These are: Component, Ports, Serializable, and Topology construction.
Each type of code has its own unique custom XML syntax. To date
there is no schema for the XML so users should use the examples
under the test folder for guidance.
codegen.py required two external Python packages to function,
which are lxml and cheetah.
To install lxml go to http://lxml.de/installation.html for download and
install instructions. You might like to use the pip tool for installing
and a version is already in accurev and located at Autocoders/Python/utils/pip-1.2.1.
The other package you will need is the cheetah template language although I
think the yacgen.py will actually run without it. Really Cheetah is just
used to generate the template Python. I do not do the conversion at run-time
but precompile all templates and version control both templates and generated
python. Anyway, documentation on Cheetah is located at
http://www.cheetahtemplate.org/index.html and one can download the
software from this site as well. Cheetah is also in accurev and is
located at Autocoders/Python/utils/Cheetah-2.4.4.

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +0,0 @@
AMPCS schemas have been removed from the open source release.
If a JPL project would like to re-add them, see a member of the
F` team.

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="ASYNC_PORT">
<rule context="component">
<assert test="(//component/@kind = 'active' and (count(//component/ports/port/@kind[. = 'async_input']) + count(//component/commands/command/@kind[. = 'async']) + count(//component/internal_interfaces/internal_interface) ) >= 1) or not (//component/@kind = 'active')">
Active components should have at least 1 port of kind async_input or internal_interface.
</assert>
</rule>
</pattern>
</schema>

View File

@ -1,110 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<start>
<ref name="array_root_define"/>
</start>
<define name="array_root_define">
<element name="array">
<a:documentation>Component root tag.</a:documentation>
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Name of the array.</a:documentation>
<text/>
</attribute>
<!-- Optional attributes -->
<optional>
<attribute name="namespace">
<a:documentation>Namespace of the serializable object.</a:documentation>
<text/>
</attribute>
</optional>
<!-- Elements -->
<interleave>
<optional>
<!-- Optional Comments -->
<ref name="comment_define"/>
</optional>
<zeroOrMore>
<element name="include_header">
<a:documentation>Defines the header file of the interface.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_serializable_type">
<a:documentation>Imports serializable types.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_enum_type">
<a:documentation>Imports enum types.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_array_type">
<a:documentation>Import array XML files.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<element name="format">
<a:documentation>Used to format data into readable content on the ground system software.
</a:documentation>
<text/>
</element>
<element name="type">
<optional>
<attribute name="size">
<a:documentation>Optional string size in addition to required array size.</a:documentation>
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="typeid">
<a:documentation>ID for the object. If not declared, autocoder generates one. Must be
unique across all array files.
</a:documentation>
<ref name="id_define"/>
</attribute>
</optional>
<a:documentation>Type of the array.</a:documentation>
<text/>
</element>
<element name="size">
<a:documentation>Size of the array.</a:documentation>
<data type="integer"/>
</element>
<element name="default">
<oneOrMore>
<element name="value">
<text/>
</element>
</oneOrMore>
</element>
</interleave>
</element>
</define>
</grammar>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="DEFAULT_VALUES">
<rule context="array">
<assert test="count(current()/default/value) = current()/size">Size greater than number of default values.
</assert>
</rule>
</pattern>
</schema>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="UNIQUE_ID_CHAN">
<rule context="channel">
<assert test="count(//channel/@id[. = current()/@id]) = 1">Channel ID's should be unique.</assert>
</rule>
</pattern>
</schema>

View File

@ -1,112 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<start>
<ref name="channel_root_define"/>
</start>
<define name="channel_root_define">
<element name="telemetry">
<optional>
<attribute name="telemetry_base">
<a:documentation>Base at which IDs start from.</a:documentation>
<ref name="base_code_define"/>
</attribute>
</optional>
<oneOrMore>
<ref name="channel_definition"/>
</oneOrMore>
</element>
</define>
<define name="channel_definition">
<element name="channel">
<a:documentation>Definition for a telemetry channel.</a:documentation>
<!-- Required Attributes -->
<attribute name="id">
<a:documentation>ID for the telemetry channel.</a:documentation>
<ref name="id_define"/>
</attribute>
<attribute name="name">
<a:documentation>Name of the telemetry channel.</a:documentation>
<text/>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="update">
<a:documentation>Defines when the channel updates.</a:documentation>
<ref name="channel_update_define"/>
</attribute>
</optional>
<optional>
<attribute name="abbrev">
<a:documentation>Required for AMPCS dictionary generation.</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name="format_string">
<a:documentation>Used to format data into readable content on the ground system software.
</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name="high_yellow">
<data type="decimal"/>
</attribute>
</optional>
<optional>
<attribute name="high_red">
<data type="decimal"/>
</attribute>
</optional>
<optional>
<attribute name="high_orange">
<data type="decimal"/>
</attribute>
</optional>
<optional>
<attribute name="low_yellow">
<data type="decimal"/>
</attribute>
</optional>
<optional>
<attribute name="low_red">
<data type="decimal"/>
</attribute>
</optional>
<optional>
<attribute name="low_orange">
<data type="decimal"/>
</attribute>
</optional>
<interleave>
<ref name="type_size_choice_define"/>
<optional>
<ref name="comment_define"/>
</optional>
</interleave>
</element>
</define>
</grammar>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="UNIQUE_OPCODE_CMD">
<rule context="command">
<assert test="count(//command/@opcode[. = current()/@opcode]) = 1">Command opcodes should be unique.
</assert>
</rule>
</pattern>
</schema>

View File

@ -1,82 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<start>
<ref name="command_root_define"/>
</start>
<define name="command_root_define">
<element name="commands">
<optional>
<attribute name="opcode_base">
<a:documentation>Base at which the opcodes start from.</a:documentation>
<ref name="base_code_define"/>
</attribute>
</optional>
<oneOrMore>
<element name="command">
<!-- Required Attributes -->
<attribute name="kind">
<a:documentation>Command kind.</a:documentation>
<ref name="command_kind_define"/>
</attribute>
<attribute name="opcode">
<a:documentation>Command opcode.</a:documentation>
<ref name="id_define"/>
</attribute>
<attribute name="mnemonic">
<a:documentation>Command mnemonic.</a:documentation>
<text/>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="priority">
<a:documentation>Priority of the command.</a:documentation>
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="full">
<a:documentation>Describes what to do with incoming items if full.</a:documentation>
<ref name="full_items_define"/>
</attribute>
</optional>
<a:documentation>Defines optional comments and arguments within commands.</a:documentation>
<interleave>
<zeroOrMore>
<ref name="comment_define"/>
</zeroOrMore>
<optional>
<ref name="args_define"/>
</optional>
</interleave>
</element>
</oneOrMore>
</element>
</define>
<define name="args_define">
<element name="args">
<a:documentation>Command arguments.</a:documentation>
<zeroOrMore>
<ref name="external_arg_define"/>
</zeroOrMore>
</element>
</define>
</grammar>

View File

@ -1,370 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<!-- Definitions for items that can only have specific values -->
<define name="full_items_define">
<a:documentation>Valid values for the full tag.</a:documentation>
<choice>
<value>drop</value>
<value>assert</value>
<value>block</value>
</choice>
</define>
<define name="pass_by_define">
<a:documentation>Defines how the variable is being passed.</a:documentation>
<choice>
<value>reference</value>
<value>pointer</value>
</choice>
</define>
<define name="component_role_define">
<a:documentation>Choice for component roles.</a:documentation>
<choice>
<value>LogEvent</value>
<value>LogTextEvent</value>
<value>TimeGet</value>
<value>ParamSet</value>
<value>ParamGet</value>
<value>Telemetry</value>
<value>CmdRegistration</value>
<value>Cmd</value>
<value>CmdResponse</value>
</choice>
</define>
<define name="channel_update_define">
<a:documentation>Choice between always and on_change. This is used in the channel 'update' tag.
</a:documentation>
<choice>
<value>always</value>
<value>on_change</value>
</choice>
</define>
<define name="severity_define">
<a:documentation>Set of valid severity values. This is used for an event 'severity' tag.</a:documentation>
<choice>
<value>COMMAND</value>
<value>ACTIVITY_LO</value>
<value>ACTIVITY_HI</value>
<value>WARNING_LO</value>
<value>WARNING_HI</value>
<value>DIAGNOSTIC</value>
<value>FATAL</value>
</choice>
</define>
<define name="command_kind_define">
<a:documentation>Choice between different command kinds.</a:documentation>
<choice>
<value>async</value>
<value>sync</value>
<value>guarded</value>
</choice>
</define>
<define name="component_types_define">
<a:documentation>Choice between active, passive, or queued.</a:documentation>
<choice>
<value>active</value>
<value>passive</value>
<value>queued</value>
</choice>
</define>
<define name="port_types_define">
<a:documentation>Choice between different port types.</a:documentation>
<choice>
<value>input</value>
<value>sync_input</value>
<value>guarded_input</value>
<value>async_input</value>
<value>model_input</value>
<value>output</value>
</choice>
</define>
<!-- Data types that require regular expressions -->
<define name="id_or_system_var_define">
<a:documentation>Data types for items that can either be numbers or references to system variables that have
numbers.
</a:documentation>
<choice>
<ref name="system_var_define"/>
<ref name="id_define"/>
</choice>
</define>
<define name="base_code_define">
<a:documentation>Made for base codes, ie 0x100,0x200</a:documentation>
<choice>
<ref name="system_var_define"/>
<data type="string">
<param name="pattern">(((0?x[0-9A-Fa-f]+)|\d+)(,?))+</param>
</data>
</choice>
</define>
<define name="system_var_define">
<a:documentation>Data type for items that are system variables.</a:documentation>
<data type="string">
<param name="pattern">$[\w|_|\-]+</param>
</data>
</define>
<define name="id_define">
<a:documentation>Defines an ID data type. Acceptable values formats include "10" , "0xA" , "xA".
</a:documentation>
<data type="string">
<param name="pattern">((0?x[0-9A-Fa-f]+)|\d+)</param>
</data>
</define>
<!-- Repeated element defines -->
<define name="comment_define">
<element name="comment">
<a:documentation>Simple comment tag with no attributes.</a:documentation>
<text/>
</element>
</define>
<define name="enum_define">
<element name="enum">
<attribute name="name">
<a:documentation>Enum Name.</a:documentation>
<text/>
</attribute>
<oneOrMore>
<element name='item'>
<attribute name="name">
<a:documentation>Name of the enum item.</a:documentation>
<text/>
</attribute>
<optional>
<attribute name="value">
<a:documentation>The value being sent through the enum item.</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name="comment">
<a:documentation>Comment about the enum item.</a:documentation>
<text/>
</attribute>
</optional>
</element>
</oneOrMore>
</element>
</define>
<define name="arg_define">
<a:documentation>Arguments with the pass by attribute.</a:documentation>
<element name="arg">
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Name of the argument.</a:documentation>
<text/>
</attribute>
<optional>
<attribute name="pass_by">
<a:documentation>Defines how the arguments are passed.</a:documentation>
<ref name="pass_by_define"/>
</attribute>
</optional>
<optional>
<attribute name="comment">
<a:documentation>Comments about the argument.</a:documentation>
<data type="string"/>
</attribute>
</optional>
<!-- The interleave is used to mix together Attribute typed paired with an enum element if type = ENUM and a comment block -->
<interleave>
<ref name="type_size_choice_define"/>
<optional>
<ref name="comment_define"/>
</optional>
</interleave>
</element>
</define>
<define name="return_define">
<a:documentation>Return with the pass by attribute</a:documentation>
<element name="return">
<!-- Required Attributes -->
<optional>
<attribute name="name">
<a:documentation>Name of the argument.</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name="pass_by">
<a:documentation>Defines how the arguments are passed.</a:documentation>
<ref name="pass_by_define"/>
</attribute>
</optional>
<optional>
<attribute name="comment">
<a:documentation>Comments about the argument.</a:documentation>
<data type="string"/>
</attribute>
</optional>
<!-- The interleave is used to mix together Attribute typed paired with an enum element if type = ENUM and a comment block -->
<interleave>
<ref name="type_size_choice_define"/>
<optional>
<ref name="comment_define"/>
</optional>
</interleave>
</element>
</define>
<define name="external_arg_define">
<a:documentation>Arguments without the pass by attributes. Used for events, commands, and telemetry.
</a:documentation>
<element name="arg">
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Name of the argument.</a:documentation>
<text/>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="comment">
<a:documentation>Comments about the argument.</a:documentation>
<data type="string"/>
</attribute>
</optional>
<!-- The interleave is used to mix together Attribute typed paired with an enum element if type = ENUM and a comment block -->
<interleave>
<ref name="type_size_choice_define"/>
<optional>
<ref name="comment_define"/>
</optional>
</interleave>
</element>
</define>
<define name="type_size_choice_define">
<!-- This is a common choice within many elements. -->
<choice>
<!-- Choice one: Type = string or buffer and size is also an attribute -->
<group>
<choice>
<!-- Choice between 'type' and 'data_type'. This is to preserve compatibility with the telemetry channels -->
<attribute name="type">
<a:documentation>The type of data being passed through the argument.</a:documentation>
<choice>
<value>string</value>
<value>buffer</value>
</choice>
</attribute>
<attribute name="data_type">
<a:documentation>The type of data being passed through the argument.</a:documentation>
<choice>
<value>string</value>
<value>buffer</value>
</choice>
</attribute>
</choice>
<attribute name="size">
<a:documentation>The size of the argument.</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
<optional>
<attribute name="array_size">
<a:documentation>The length of the array.</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
</optional>
</group>
<!--Choice two: Type = ENUM and Enum element inside block -->
<group>
<choice>
<!-- Choice between 'type' and 'data_type'. This is to preserve compatibility with the telemetry channels -->
<attribute name="type">
<a:documentation>The type of data being passed through the argument.</a:documentation>
<value>ENUM</value>
</attribute>
<attribute name="data_type">
<a:documentation>The type of data being passed through the argument.</a:documentation>
<value>ENUM</value>
</attribute>
</choice>
<ref name="enum_define"/>
</group>
<!-- Choice three: Type != ENUM and Type != string and nothing inside block -->
<group>
<choice>
<!-- Choice between 'type' and 'data_type'. This is to preserve compatibility with the telemetry channels -->
<attribute name="type">
<a:documentation>The type of data being passed through the argument.</a:documentation>
<!-- Any string BUT ENUM -->
<data type="string">
<except>
<choice>
<value>ENUM</value>
<value>string</value>
</choice>
</except>
</data>
</attribute>
<attribute name="data_type">
<a:documentation>The type of data being passed through the argument.</a:documentation>
<!-- Any string BUT ENUM -->
<data type="string">
<except>
<choice>
<value>ENUM</value>
<value>string</value>
</choice>
</except>
</data>
</attribute>
</choice>
<optional>
<attribute name="array_size">
<a:documentation>The length of the array.</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
</optional>
</group>
</choice>
</define>
</grammar>

View File

@ -1,189 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<define name="positive_integer_define">
<a:documentation>Positive, non-zero, whole numbers.</a:documentation>
<data type="integer">
<param name="minInclusive">1</param>
</data>
</define>
<!-- Raw C++ Type Defines -->
<define name="int8_t_define">
<a:documentation>Signed 8 bit integer.</a:documentation>
<data type="int">
<param name="minInclusive">-128</param>
<param name="maxInclusive">127</param>
</data>
</define>
<define name="uint8_t_define">
<a:documentation>Unsigned 8 bit integer</a:documentation>
<data type="unsignedByte">
<param name="minInclusive">0</param>
<param name="maxInclusive">255</param>
</data>
</define>
<define name="int16_t_define">
<a:documentation>Signed 16 bit integer.</a:documentation>
<data type="int">
<param name="minInclusive">-32768</param>
<param name="maxInclusive">32767</param>
</data>
</define>
<define name="uint16_t_define">
<a:documentation>Unsigned 16 bit integer</a:documentation>
<data type="int">
<param name="minInclusive">0</param>
<param name="maxInclusive">65535</param>
</data>
</define>
<define name="int32_t_define">
<a:documentation>Signed 32 bit integer.</a:documentation>
<data type="integer">
<param name="minInclusive">-2147483648</param>
<param name="maxInclusive">2147483647</param>
</data>
</define>
<define name="uint32_t_define">
<a:documentation>Unsigned 32 bit integer</a:documentation>
<data type="integer">
<param name="minInclusive">0</param>
<param name="maxInclusive">4294967295</param>
</data>
</define>
<define name="int64_t_define">
<a:documentation>Signed 64 bit integer.</a:documentation>
<data type="integer">
<param name="minInclusive">-9223372036854775808</param>
<param name="maxInclusive">9223372036854775807</param>
</data>
</define>
<define name="uint64_t_define">
<a:documentation>Unsigned 64 bit integer</a:documentation>
<data type="integer">
<param name="minInclusive">0</param>
<param name="maxInclusive">18446744073709551615</param>
</data>
</define>
<!-- User C++ Type defines (Found from BasicTypes.hpp) -->
<define name="not_user_cpp_type_define">
<a:documentation>Ensures data is not of the names of any other user defined C++ name.</a:documentation>
<data type="string">
<except>
<choice>
<value>int32_t</value>
<value>uint32_t</value>
<value>I8</value>
<value>U8</value>
<value>I16</value>
<value>U16</value>
<value>I32</value>
<value>U32</value>
<value>I64</value>
<value>U64</value>
<value>F32</value>
<value>F64</value>
<value>NATIVE_INT_TYPE</value>
<value>NATIVE_UINT_TYPE</value>
<value>string</value>
</choice>
</except>
</data>
</define>
<define name="NATIVE_INT_TYPE_define">
<a:documentation>native integer type declaration</a:documentation>
<ref name="int32_t_define">
</ref>
</define>
<define name="NATIVE_UINT_TYPE_define">
<a:documentation>native unsigned integer type declaration</a:documentation>
<ref name="uint32_t_define">
</ref>
</define>
<define name="I8_define">
<a:documentation>8-bit signed integer</a:documentation>
<ref name="int8_t_define">
</ref>
</define>
<define name="U8_define">
<a:documentation>8-bit unsigned integer</a:documentation>
<ref name="uint8_t_define">
</ref>
</define>
<define name="BYTE_define">
<a:documentation>byte type</a:documentation>
<ref name="U8_define">
</ref>
</define>
<define name="I16_define">
<ref name="int16_t_define">
<a:documentation>16-bit signed integer</a:documentation>
</ref>
</define>
<define name="U16_define">
<a:documentation>16-bit unsigned integer</a:documentation>
<ref name="uint16_t_define">
</ref>
</define>
<define name="I32_define">
<a:documentation>32-bit signed integer</a:documentation>
<ref name="int32_t_define">
</ref>
</define>
<define name="U32_define">
<a:documentation>16-bit unsigned integer</a:documentation>
<ref name="uint32_t_define">
</ref>
</define>
<define name="I64_define">
<a:documentation>64-bit unsigned integer</a:documentation>
<ref name="int64_t_define">
</ref>
</define>
<define name="U64_define">
<a:documentation>64-bit unsigned integer</a:documentation>
<ref name="uint64_t_define">
</ref>
</define>
<define name="F32_define">
<a:documentation>32 bit float</a:documentation>
<!--
Use text instead of "float" here
"Float" does not accept the C++ syntax for F32 literal values, e.g., 1.0f
<data type="float">
</data>
-->
<text/>
</define>
<define name="F64_define">
<a:documentation>64 bit float</a:documentation>
<data type="double">
</data>
</define>
</grammar>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="UNIQUE_OP_COMP_CMD">
<rule context="command">
<assert test="count(//command/@opcode[. = current()/@opcode]) = 1">Command opcodes should be unique.
</assert>
</rule>
</pattern>
<pattern id="UNIQUE_ID_COMP_PARAM">
<rule context="parameter">
<assert test="count(//parameter/@id[. = current()/@id]) = 1">Parameter ID's should be unique.</assert>
</rule>
</pattern>
<pattern id="UNIQUE_ID_COMP_EVR">
<rule context="event">
<assert test="count(//event/@id[. = current()/@id]) = 1">Event ID's should be unique.</assert>
</rule>
</pattern>
<pattern id="UNIQUE_ID_COMP_CHAN">
<rule context="channel">
<assert test="count(//channel/@id[. = current()/@id]) = 1">Channel ID's should be unique.</assert>
</rule>
</pattern>
</schema>

View File

@ -1,218 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
xmlns:elements="common_elements.rng"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<start>
<element name="component">
<a:documentation>Component root tag.</a:documentation>
<ref name="component_define"/>
</element>
</start>
<define name="component_define">
<!-- Required attributes -->
<attribute name="name">
<a:documentation>Name of the component.</a:documentation>
<text/>
</attribute>
<attribute name="kind">
<a:documentation>Choice between active, passive, and queued.</a:documentation>
<ref name="component_types_define"/>
</attribute>
<!-- Optional attributes -->
<optional>
<attribute name="namespace">
<a:documentation>The namespace in which the component is located in.</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name="modeler">
<data type="boolean"/>
</attribute>
</optional>
<interleave>
<!-- Import external XML files. -->
<zeroOrMore>
<ref name="import_port_define"/>
</zeroOrMore>
<zeroOrMore>
<ref name="import_dict_define"/>
</zeroOrMore>
<zeroOrMore>
<ref name="import_header_define"/>
</zeroOrMore>
<zeroOrMore>
<ref name="import_serializable_define"/>
</zeroOrMore>
<zeroOrMore>
<ref name="import_enum_define"/>
</zeroOrMore>
<zeroOrMore>
<ref name="import_array_define"/>
</zeroOrMore>
<!-- Optional elements -->
<optional>
<ref name="ports_define"/>
</optional>
<optional>
<ref name="comment_define"/>
</optional>
<!-- These elements can be imported from their own XML files -->
<optional>
<externalRef href="channel_schema.rng"/>
</optional>
<optional>
<externalRef href="event_schema.rng"/>
</optional>
<optional>
<externalRef href="command_schema.rng"/>
</optional>
<optional>
<externalRef href="internal_interface_schema.rng"/>
</optional>
<optional>
<externalRef href="parameters_schema.rng"/>
</optional>
</interleave>
</define>
<define name="ports_define">
<element name="ports">
<a:documentation>A collection of ports.</a:documentation>
<oneOrMore>
<ref name="port_define"/>
</oneOrMore>
</element>
</define>
<define name="port_define">
<element name="port">
<a:documentation>Element that specifies eternal interfaces that can connect and be connected to.
</a:documentation>
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Name of the port.</a:documentation>
<text/>
</attribute>
<attribute name="data_type">
<a:documentation>Type of data that is being accessed/sent from the port.</a:documentation>
<text/>
</attribute>
<attribute name="kind">
<a:documentation>Defines if port is an input or an output port.</a:documentation>
<ref name="port_types_define"/>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="max_number">
<a:documentation>Defines how many connections can be established to this port.</a:documentation>
<ref name="id_or_system_var_define"/>
</attribute>
</optional>
<optional>
<attribute name="role">
<a:documentation>Specifies what role this port plays or what this port is connected to.
</a:documentation>
<ref name="component_role_define"/>
</attribute>
</optional>
<optional>
<attribute name="priority">
<a:documentation>Priority of port.</a:documentation>
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="full">
<a:documentation>Describes what to do with incoming items if full.</a:documentation>
<elements:ref name="full_items_define"></elements:ref>
</attribute>
</optional>
<!-- Optional Element -->
<optional>
<a:documentation>Optional element that can be inside the port tags.</a:documentation>
<ref name="comment_define"/>
</optional>
</element>
</define>
<define name="import_port_define">
<element name="import_port_type">
<a:documentation>Path to port XML definition.</a:documentation>
<data type="anyURI"/>
</element>
</define>
<define name="import_dict_define">
<element name="import_dictionary">
<a:documentation>Path to events,commands,or telemetry XML files.</a:documentation>
<data type="anyURI"/>
</element>
</define>
<define name="import_header_define">
<element name="include_header">
<a:documentation>Path to header file.</a:documentation>
<data type="anyURI"/>
</element>
</define>
<define name="import_serializable_define">
<element name="import_serializable_type">
<a:documentation>Path to serializable types</a:documentation>
<data type="anyURI"/>
</element>
</define>
<define name="import_enum_define">
<element name="import_enum_type">
<a:documentation>Path to enum types</a:documentation>
<data type="anyURI"/>
</element>
</define>
<define name="import_array_define">
<element name="import_array_type">
<a:documentation>Import array XML files.</a:documentation>
<data type="anyURI"/>
</element>
</define>
</grammar>

View File

@ -1,3 +0,0 @@
AMPCS schemas have been removed from the open source release.
If a JPL project would like to re-add them, see a member of the
F` team.

View File

@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<start>
<ref name="enum_root_define"/>
</start>
<define name="enum_root_define">
<element name="enum">
<a:documentation>Component root tag.</a:documentation>
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Name of the enum.</a:documentation>
<text/>
</attribute>
<!-- Optional attributes -->
<optional>
<attribute name="namespace">
<a:documentation>Namespace of the serializable object.</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name = "default">
<a:documentation>Default value of the enum.</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name = "serialize_type">
<a:documentation>Serialization type of the enum.</a:documentation>
<text/>
</attribute>
</optional>
<!-- Elements -->
<interleave>
<optional>
<!-- Optional Comments -->
<ref name="comment_define"/>
</optional>
<oneOrMore>
<ref name="item_definition"/>
</oneOrMore>
</interleave>
</element>
</define>
<define name="item_definition">
<element name="item">
<a:documentation>Definition for a telemetry channel.</a:documentation>
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Name of the item.</a:documentation>
<text/>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="value">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="comment">
<text/>
</attribute>
</optional>
</element>
</define>
</grammar>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="VALUE_EXISTS">
<rule context="item">
<assert test="count(//item[@value]) = count(//item) or count(//item[@value]) = 0">Either all enum items
should have a value or none should
</assert>
</rule>
</pattern>
<pattern id="VALUE_UNIQUE">
<rule context="item">
<assert test="count(//item/@value[. = current()/@value]) = 1">Enum item values should be unique</assert>
</rule>
</pattern>
</schema>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="UNIQUE_ID_EVR">
<rule context="event">
<assert test="count(//event/@id[. = current()/@id]) = 1">Event ID's should be unique.</assert>
</rule>
</pattern>
</schema>

View File

@ -1,86 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<start>
<ref name="event_root_define"/>
</start>
<define name="event_root_define">
<element name="events">
<a:documentation>Defines different events for a component.</a:documentation>
<optional>
<attribute name="event_base">
<a:documentation>Base at which ids start from.</a:documentation>
<ref name="base_code_define"/>
</attribute>
</optional>
<oneOrMore>
<ref name="event_define"/>
</oneOrMore>
</element>
</define>
<define name="event_define">
<element name="event">
<a:documentation>Defines a specific event for a component.</a:documentation>
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Name of the event.</a:documentation>
<text/>
</attribute>
<attribute name="id">
<a:documentation>Event ID.</a:documentation>
<ref name="id_define"/>
</attribute>
<attribute name="severity">
<a:documentation>Severity of event.</a:documentation>
<ref name="severity_define"/>
</attribute>
<attribute name="format_string">
<a:documentation>Output string that will be shown in ground system software.</a:documentation>
<text/>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="throttle">
<a:documentation>Determines how many of the events are generated before the program stops them.
</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
</optional>
<interleave>
<optional>
<ref name="comment_define"/>
</optional>
<optional>
<ref name="args_define"/>
</optional>
</interleave>
</element>
</define>
<define name="args_define">
<element name="args">
<zeroOrMore>
<ref name="external_arg_define"/>
</zeroOrMore>
</element>
</define>
</grammar>

View File

@ -1,108 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<!-- This is a common file for both interface_schema and internal_interface_schema. These two were originally merged into this file, but had to be split as a workaround to keep the same definitions but not validate component files that had the interface tag in it. -->
<include href="common_elements.rng"/>
<start>
<ref name="interface_root_define"/>
</start>
<define name="interface_root_define">
<a:documentation>Used for interface files.</a:documentation>
<choice>
<!--Choice between interface or port root tag.-->
<element name="interface">
<a:documentation>Allows for one interface.</a:documentation>
<ref name="interface_define"/>
</element>
<element name="port">
<a:documentation>Allows for one interface.</a:documentation>
<ref name="interface_define"/>
</element>
</choice>
</define>
<define name="interface_define">
<interleave>
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Interface name.</a:documentation>
<text/>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="priority">
<data type="integer"/>
</attribute>
</optional>
<optional>
<attribute name="namespace">
<a:documentation>Namespace in which the interface is in.</a:documentation>
<text/>
</attribute>
</optional>
<!-- Elements -->
<zeroOrMore>
<element name="include_header">
<a:documentation>Defines the header file of the interface.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_serializable_type">
<a:documentation>Imports serializable types.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_enum_type">
<a:documentation>Imports enum types.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_array_type">
<a:documentation>Import array XML files.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<ref name="args_define"/>
</zeroOrMore>
<optional>
<ref name="return_define"/>
</optional>
<optional>
<ref name="comment_define"/>
</optional>
</interleave>
</define>
<define name="args_define">
<element name="args">
<a:documentation>One or more arguments.</a:documentation>
<zeroOrMore>
<ref name="arg_define"/>
</zeroOrMore>
</element>
</define>
</grammar>

View File

@ -1,78 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<!-- This is a common file for both interface_schema and internal_interface_schema. These two were originally merged into this file, but had to be split as a workaround to keep the same definitions but not validate component files that had the interface tag in it. -->
<include href="common_elements.rng"/>
<start>
<ref name="internal_interface_root_define"/>
</start>
<define name="internal_interface_root_define">
<a:documentation>Used for interfaces within components.</a:documentation>
<element name="internal_interfaces">
<a:documentation>Allows for multiple interfaces.</a:documentation>
<oneOrMore>
<element name="internal_interface">
<ref name="interface_define"/>
</element>
</oneOrMore>
</element>
</define>
<define name="interface_define">
<interleave>
<!-- Required Attributes -->
<attribute name="name">
<a:documentation>Interface name.</a:documentation>
<text/>
</attribute>
<!-- Optional Attributes -->
<optional>
<a:documentation>Describes what to do if items are full.</a:documentation>
<attribute name="full">
<ref name="full_items_define"/>
</attribute>
</optional>
<optional>
<attribute name="priority">
<data type="integer"/>
</attribute>
</optional>
<!-- Elements -->
<zeroOrMore>
<element name="include_header">
<a:documentation>Defines the header file of the interface.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<ref name="args_define"/>
</zeroOrMore>
<optional>
<ref name="comment_define"/>
</optional>
</interleave>
</define>
<define name="args_define">
<element name="args">
<a:documentation>One or more arguments.</a:documentation>
<zeroOrMore>
<ref name="arg_define"/>
</zeroOrMore>
</element>
</define>
</grammar>

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="UNIQUE_ID_PARAM">
<rule context="parameter">
<assert test="count(//parameter/@id[. = current()/@id]) = 1">Channel ID's should be unique.</assert>
</rule>
</pattern>
</schema>

View File

@ -1,265 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<start>
<ref name="parameters_root_define"/>
</start>
<define name="parameters_root_define">
<element name="parameters">
<!-- Attributes -->
<optional>
<attribute name="parameter_base">
<ref name="base_code_define"/>
</attribute>
</optional>
<optional>
<attribute name="opcode_base">
<ref name="base_code_define"/>
</attribute>
</optional>
<!-- Elements -->
<oneOrMore>
<ref name="parameter_define"/>
</oneOrMore>
</element>
</define>
<define name="parameter_define">
<element name="parameter">
<a:documentation>Parameter definition.</a:documentation>
<!-- Attributes -->
<attribute name="id">
<a:documentation>ID of the attribute.</a:documentation>
<ref name="id_define"/>
</attribute>
<attribute name="set_opcode">
<a:documentation>Opcode for setting the parameter.</a:documentation>
<ref name="id_define"/>
</attribute>
<attribute name="save_opcode">
<a:documentation>Opcode for saving the parameter.</a:documentation>
<ref name="id_define"/>
</attribute>
<attribute name="name">
<a:documentation>Parameter name</a:documentation>
<text/>
</attribute>
<ref name="data_type_and_default_define"/>
<!-- Elements -->
<optional>
<ref name="comment_define"/>
</optional>
</element>
</define>
<define name="data_type_and_default_define">
<!-- If the data_type attribute isn't one that is explicitly specified, the default case will make it pass. -->
<a:documentation>Makes attribute pair choices to match data type with default value.</a:documentation>
<choice>
<group>
<a:documentation>Default pair.</a:documentation>
<attribute name="data_type">
<ref name="not_user_cpp_type_define"/>
</attribute>
<optional>
<attribute name="default">
<text/>
</attribute>
</optional>
</group>
<group>
<a:documentation>Enum pair.</a:documentation>
<attribute name="data_type">
<value>ENUM</value>
</attribute>
<optional>
<attribute name="default">
</attribute>
</optional>
<optional>
<ref name="enum_define"/>
</optional>
</group>
<group>
<a:documentation>String pair.</a:documentation>
<attribute name="data_type">
<value>string</value>
</attribute>
<optional>
<attribute name="default">
<data type="string"/>
</attribute>
</optional>
<attribute name="size">
<ref name="positive_integer_define"/>
</attribute>
</group>
<group>
<a:documentation>I8 pair.</a:documentation>
<attribute name="data_type">
<value>I8</value>
</attribute>
<optional>
<attribute name="default">
<ref name="I8_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>U8 pair.</a:documentation>
<attribute name="data_type">
<value>U8</value>
</attribute>
<optional>
<attribute name="default">
<ref name="U8_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>I16 pair.</a:documentation>
<attribute name="data_type">
<value>I16</value>
</attribute>
<optional>
<attribute name="default">
<ref name="I16_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>U16 pair.</a:documentation>
<attribute name="data_type">
<value>U16</value>
</attribute>
<optional>
<attribute name="default">
<ref name="U16_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>I32 pair.</a:documentation>
<attribute name="data_type">
<value>I32</value>
</attribute>
<optional>
<attribute name="default">
<ref name="I32_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>U32 pair.</a:documentation>
<attribute name="data_type">
<value>U32</value>
</attribute>
<optional>
<attribute name="default">
<ref name="U32_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>I64 pair.</a:documentation>
<attribute name="data_type">
<value>I64</value>
</attribute>
<optional>
<attribute name="default">
<ref name="I64_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>U64 pair.</a:documentation>
<attribute name="data_type">
<value>U64</value>
</attribute>
<optional>
<attribute name="default">
<ref name="U64_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>F32 pair.</a:documentation>
<attribute name="data_type">
<value>F32</value>
</attribute>
<optional>
<attribute name="default">
<ref name="F32_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>F64 pair.</a:documentation>
<attribute name="data_type">
<value>F64</value>
</attribute>
<optional>
<attribute name="default">
<ref name="F64_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>NATIVE_INT_TYPE pair.</a:documentation>
<attribute name="data_type">
<value>NATIVE_INT_TYPE</value>
</attribute>
<optional>
<attribute name="default">
<ref name="NATIVE_INT_TYPE_define"/>
</attribute>
</optional>
</group>
<group>
<a:documentation>NATIVE_UINT_TYPE pair.</a:documentation>
<attribute name="data_type">
<value>NATIVE_UINT_TYPE</value>
</attribute>
<optional>
<attribute name="default">
<ref name="NATIVE_UINT_TYPE_define"/>
</attribute>
</optional>
</group>
</choice>
</define>
</grammar>

View File

@ -1,132 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<start>
<element name="serializable">
<!-- Required attributes -->
<attribute name="name">
<a:documentation>Name of the serializable object.</a:documentation>
<text/>
</attribute>
<!-- Optional attributes -->
<optional>
<attribute name="namespace">
<a:documentation>Namespace of the serializable object.</a:documentation>
<text/>
</attribute>
</optional>
<optional>
<attribute name="typeid">
<a:documentation>ID for the object. If not declared, the autocoder generates one. Must be unique
across all serializable files.
</a:documentation>
<ref name="id_define"/>
</attribute>
</optional>
<interleave>
<!-- Required elements -->
<ref name="members_define"/>
<!-- Optional elements -->
<zeroOrMore>
<element name="import_serializable_type">
<a:documentation>Import more serializable objects.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="include_header">
<a:documentation>Import header files.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_enum_type">
<a:documentation>Import enum XML files.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<zeroOrMore>
<element name="import_array_type">
<a:documentation>Import array XML files.</a:documentation>
<data type="anyURI"/>
</element>
</zeroOrMore>
<optional>
<!-- Optional Comments -->
<ref name="comment_define"/>
</optional>
</interleave>
</element>
</start>
<define name="members_define">
<!-- 'members' is just a tag that hold multiple 'member' tags -->
<element name="members">
<a:documentation>A collection of member items to define the serializable object.</a:documentation>
<oneOrMore>
<ref name="member_define"/>
</oneOrMore>
</element>
</define>
<define name="member_define">
<!-- Defines each item that one of these objects can store -->
<element name="member">
<a:documentation>Item define in the serializable object.</a:documentation>
<!-- Required attributes -->
<attribute name="name">
<a:documentation>Name of the member item.</a:documentation>
<text/>
</attribute>
<!-- Optional attributes -->
<optional>
<a:documentation>Optional comment.</a:documentation>
<attribute name="comment">
<text/>
</attribute>
</optional>
<optional>
<a:documentation>Format string</a:documentation>
<attribute name="format">
<text/>
</attribute>
</optional>
<!-- Optional element -->
<interleave>
<optional>
<a:documentation>Optional default value.</a:documentation>
<element name="default">
<text/>
</element>
</optional>
<!-- Type, size, and internal enum define are defined within this ref -->
<ref name="type_size_choice_define"/>
</interleave>
</element>
</define>
</grammar>

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://purl.oclc.org/dsdl/schematron">
<pattern id="UNIQUE_WINDOW_ID">
<rule context="instance">
<assert test="count(//instance[((./@base_id+./@base_id_window)>current()/@base_id and (current()/@base_id+current()/@base_id_window)>(./@base_id))])=1 or (count(//instance[((./@base_id+./@base_id_window)=current()/@base_id and (current()/@base_id+current()/@base_id_window)=(./@base_id))])=1)">
Range of id's for every instance should be non-overlapping.
</assert>
</rule>
</pattern>
</schema>

View File

@ -1,239 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar
xmlns="http://relaxng.org/ns/structure/1.0"
xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<include href="common_elements.rng"/>
<include href="common_types.rng"/>
<a:documentation>Test outside START</a:documentation>
<start>
<!-- Specifies that the root tag can either be "deployment" or "assembly". -->
<a:documentation>Test inside START</a:documentation>
<choice>
<element name="deployment">
<ref name="root_definition"/>
</element>
<element name="assembly">
<ref name="root_definition"/>
</element>
</choice>
</start>
<define name="root_definition">
<!-- Actual attributes and elements inside the root tag. -->
<!-- Attributes -->
<optional>
<attribute name="name">
<a:documentation>Name of the project.</a:documentation>
</attribute>
</optional>
<optional>
<attribute name="base_id">
<a:documentation>Specifies the base ID for the project.</a:documentation>
<ref name="id_define"/>
</attribute>
</optional>
<optional>
<choice>
<attribute name="base_id_window">
<a:documentation>Specifies the default ID range to use for the project. If this value is set to
zero, ISFGen will find an appropriate range from the component XML files. Attribute tag
'base_id_range' can also be used.
</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
<attribute name="base_id_range">
<a:documentation>Specifies the default ID range to use for the project. If this value is set to
zero, ISFGen will find an appropriate range from the component XML files. Attribute tag
'base_id_window' can also be used.
</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
</choice>
</optional>
<optional>
<attribute name="prepend_instance_name">
<a:documentation>If True, instance names will be prepended onto command,channel,and event generated
dictionaries in single instance scenarios.
</a:documentation>
<data type="boolean"/>
</attribute>
</optional>
<optional>
<attribute name="deployment">
<a:documentation>Name of the deployment.</a:documentation>
</attribute>
</optional>
<!-- Elements_ -->
<interleave>
<optional>
<ref name="comment_define"/>
</optional>
<zeroOrMore>
<a:documentation>Import of component type XML files.</a:documentation>
<ref name="import_definition"/>
</zeroOrMore>
<oneOrMore>
<a:documentation>Declares instances of objects.</a:documentation>
<ref name="instance_definition"/>
</oneOrMore>
<oneOrMore>
<a:documentation>Creates connections between objects and their ports.</a:documentation>
<ref name="connection_definition"/>
</oneOrMore>
</interleave>
</define>
<define name="import_definition">
<!-- Definition for "import_component_type" tags.-->
<element name="import_component_type">
<a:documentation>Value should be a path to a component XML file that is used as an instance.
</a:documentation>
<data type="anyURI"/>
</element>
</define>
<define name="instance_definition">
<!-- Defines attributes for "instance" tags. -->
<element name="instance">
<a:documentation>Instance of component within the model.</a:documentation>
<!-- Needed Attributes -->
<attribute name="namespace">
<a:documentation>Specifies the name space for the instance object.</a:documentation>
</attribute>
<attribute name="name">
<a:documentation>Specifies the name for the instance object.</a:documentation>
</attribute>
<attribute name="type">
<a:documentation>Specifies the type of the instance object.</a:documentation>
</attribute>
<!-- Optional Attributes -->
<optional>
<attribute name="dict_short_name">
<a:documentation>Specifies a name that can be used instead of the "name" attribute in ISFGen
dictionaries.
</a:documentation>
</attribute>
</optional>
<optional>
<attribute name="kind">
<a:documentation>Specifies the kind of component.</a:documentation>
<ref name="component_types_define"/>
</attribute>
</optional>
<optional>
<attribute name="base_id">
<a:documentation>Specifies a base ID for this instance.</a:documentation>
<ref name="id_define"/>
</attribute>
</optional>
<optional>
<choice>
<attribute name="base_id_window">
<a:documentation>Specifies an ID range the instance will occupy, starting at the base ID. Can
alternatively use the "base_id_range" tag.
</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
<attribute name="base_id_range">
<a:documentation>Specifies an ID range the instance will occupy, starting at the base ID. Can
alternatively use the "base_id_window" tag.
</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
</choice>
</optional>
</element>
</define>
<define name="connection_definition">
<element name="connection">
<a:documentation>Creates a new connection between source and target objects.</a:documentation>
<!-- Attributes -->
<attribute name="name">
<a:documentation>Specifies a unique connection name. EX: Connection1</a:documentation>
</attribute>
<optional>
<attribute name="type">
<a:documentation>Specifies connection type.</a:documentation>
</attribute>
</optional>
<!-- Elements -->
<interleave>
<optional>
<ref name="comment_define"/>
</optional>
<element name="source">
<a:documentation>Source Connection End.</a:documentation>
<ref name="connection_end_define"/>
</element>
<element name="target">
<a:documentation>Target Connection End</a:documentation>
<ref name="connection_end_define"/>
</element>
</interleave>
</element>
</define>
<define name="connection_end_define">
<!-- Specifies attributes for both target and source components.-->
<a:documentation>Specifies information about a connection end.</a:documentation>
<!-- Required attributes -->
<attribute name="component">
<a:documentation>Specifies the instance name of the connection end's component. Name must match an "name"
attribute from specified "instance" tags.
</a:documentation>
</attribute>
<attribute name="port">
<a:documentation>Specifies the port name on the object that the connection is attached to.</a:documentation>
<text/>
</attribute>
<attribute name="type">
<a:documentation>Specifies the type of the connection end. Generally, this type will match the "target"
type, unless connected to a port of type serial.
</a:documentation>
<text/>
</attribute>
<!-- Optional attributes -->
<optional>
<attribute name="num">
<a:documentation>Specifies the multiplicity or index of a port that is being connected to. Generally,
this value will be zero unless multiple indexes of the port exist.
</a:documentation>
<data type="nonNegativeInteger"/>
</attribute>
</optional>
</define>
</grammar>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<telemetry telemetry_base="x1">
<channel id="0x0" name="ChanOne" update="always" data_type="I8" high_orange="30">
<comment>Channel One</comment>
</channel>
<channel id = "x1" name = "ChanTwo" update="on_change" data_type="ENUM">
<comment>Channel Two Coordinates</comment>
<enum name="coor">
<item name="x" comment="x coor"></item>
<item name="y"/>
</enum>
</channel>
<channel id="2" name="ChanThree" data_type="string" size = '10'>
<comment>Channel Three</comment>
</channel>
</telemetry>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<telemetry telemetry_base="x1">
<channel id="0x0" name="ChanOne" update="always" data_type="I8" high_orange="med">
<comment>Channel One</comment>
</channel>
<channel id = "x1" name = "ChanTwo" update="on_change" data_type="ENUM">
<comment>Channel Two Coordinates</comment>
<enum name="coor">
<item name="x" comment="x coor"></item>
<item name="y"/>
</enum>
</channel>
<channel id="2" name="ChanThree" data_type="string">
<comment>Channel Three</comment>
</channel>
</telemetry>

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<telemetry telemetry_base="x1">
<channel id="0x0" name="ChanOne" update="always" data_type="I8" high_orange="30">
</channel>
<channel id = "x1" name = "ChanTwo" update="on_change" data_type="ENUM">
<comment>Channel Two Coordinates</comment>
<enum name="coor">
<item name="x" comment="x coor"></item>
<item name="y"/>
</enum>
</channel>
<channel id="2" name="ChanThree" data_type="string">
<comment>Channel Three</comment>
</channel>
</telemetry>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<telemetry telemetry_base="x1">
<channel id="0x0" name="ChanOne" update="always" high_orange="30">
<comment>Channel One</comment>
</channel>
<channel id = "x1" name = "ChanTwo" update="on_change" data_type="ENUM">
<comment>Channel Two Coordinates</comment>
<enum name="coor">
<item name="x" comment="x coor"></item>
<item name="y"/>
</enum>
</channel>
<channel id="2" name="ChanThree" data_type="string">
<comment>Channel Three</comment>
</channel>
</telemetry>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<telemetry telemetry_base="x1">
<channel id="0x0" name="ChanOne" update="always" data_type="I8" high_orange="30">
<comment>Channel One</comment>
</channel>
<channel id = "x1" name = "ChanTwo" update="on_change" data_type="ENUM">
<comment>Channel Two Coordinates</comment>
</channel>
<channel id="2" name="ChanThree" data_type="string">
<comment>Channel Three</comment>
</channel>
</telemetry>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<commands opcode_base="$OPCODEBASE">
<command kind="async" opcode="0" mnemonic="Flight Command Zero">
<comment>Flight Command Zero executes very simple command.</comment>
</command>
<command kind = "sync" opcode="1" mnemonic="Flight Command One">
<comment>Flight Command One executes complex command.</comment>
<args>
<arg name="Throttle" type="I8" size="8" comment="Throttle Value">
<comment>Controls the throttle value.</comment>
</arg>
<arg name="Rotation" type = "ENUM">
<enum name="RotationValues">
<item name="Yaw" value="-1"></item>
<item name="Pitch" value = "0" comment = "Around y."/>
<item name = "Role" comment = "Around z."></item>
</enum>
</arg>
<arg name="Display" type="string" size="15">
<comment>Message to pop up onto onboard flight 8 bit display.</comment>
</arg>
</args>
</command>
<command kind="async" opcode="2" mnemonic="Flight Command Two"></command>
</commands>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<commands opcode_base="$OPCODEBASE">
<command kind="async" opcode="0" mnemonic="Flight Command Zero" size = "10">
<comment>Flight Command Zero executes very simple command.</comment>
</command>
<command kind = "sync" opcode="1" mnemonic="Flight Command One">
<comment>Flight Command One executes complex command.</comment>
<args>
<arg name="Throttle" type="I8" size="8" pass_by="reference" comment="Throttle Value">
<comment>Controls the throttle value.</comment>
</arg>
<arg name="Rotation" type = "ENUM">
<enum name="RotationValues">
<item name="Yaw" value="-1"></item>
<item name="Pitch" value = "0" comment = "Around y."/>
<item name = "Role" comment = "Around z."></item>
</enum>
</arg>
<arg name="Display" type="string" size="15">
<comment>Message to pop up onto onboard flight 8 bit display.</comment>
</arg>
</args>
</command>
<command kind="async-sync" opcode="2" mnemonic="Flight Command Two"></command>
</commands>

View File

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<commands opcode_base="$OPCODEBASE">
<command kind="async" opcode="0" mnemonic="Flight Command Zero" size = "10">
<comment>Flight Command Zero executes very simple command.</comment>
</command>
<command kind = "sync" opcode="1" mnemonic="Flight Command One">
<comment>Flight Command One executes complex command.</comment>
<args>
<arg name="Throttle" type="I8" size="8" pass_by="reference" comment="Throttle Value">
<comment>Controls the throttle value.</comment>
</arg>
<arg name="Rotation" type = "ENUM">
<comment>Enum is missing here!</comment>
</arg>
<arg name="Display" type="string" size="15">
<comment>Message to pop up onto onboard flight 8 bit display.</comment>
</arg>
</args>
</command>
<command kind="async" opcode="2" mnemonic="Flight Command Two"></command>
</commands>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<commands opcode_base="$OPCODEBASE">
<command kind="async" opcode="0" mnemonic="Flight Command Zero" size = "-10">
<comment>Flight Command Zero executes very simple command.</comment>
</command>
<command kind = "sync" opcode="1" mnemonic="Flight Command One">
<comment>Flight Command One executes complex command.</comment>
<args>
<arg name="Throttle" type="I8" size="8" pass_by="reference" comment="Throttle Value">
<comment>Controls the throttle value.</comment>
</arg>
<arg name="Rotation" type = "ENUM">
<enum name="RotationValues">
<item name="Yaw" value="-1"></item>
<item name="Pitch" value = "0" comment = "Around y."/>
<item name = "Role" comment = "Around z."></item>
</enum>
</arg>
<arg name="Display" type="string" size="15">
<comment>Message to pop up onto onboard flight 8 bit display.</comment>
</arg>
</args>
</command>
<command kind="async" opcode="2" mnemonic="Flight Command Two"></command>
</commands>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<commands opcode_base="$OPCODEBASE">
<command kind="async" opcode="0" mnemonic="Flight Command Zero" size = "10">
<comment>Flight Command Zero executes very simple command.</comment>
</command>
<command kind = "sync" opcode="1" mnemonic="Flight Command One">
<comment>Flight Command One executes complex command.</comment>
<args>
<arg name="Throttle" type="I8" size="8" pass_by="reference" comment="Throttle Value">
<comment>Controls the throttle value.</comment>
</arg>
<arg name="Rotation" type = "ENUM">
<enum name="RotationValues">
<item name="Yaw" value="-1"></item>
<item name="Pitch" value = "0" comment = "Around y."/>
<item name = "Role" comment = "Around z."></item>
</enum>
</arg>
<arg name="Display" type="string">
<comment>Message to pop up onto onboard flight 8 bit display.</comment>
</arg>
</args>
</command>
<command kind="async" opcode="2" mnemonic="Flight Command Two"></command>
</commands>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<component name = "test" kind="active" namespace="SRC">
<import_dictionary>test/one</import_dictionary>
<import_port_type>test/two</import_port_type>
<include_header>test/three</include_header>
<ports>
<port name="inputOne" kind="async_input" data_type="string"></port>
<port name="outputOne" kind="output" data_type="U16"></port>
</ports>
</component>

Some files were not shown because too many files have changed in this diff Show More