Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement generic runtime configuration registry for CFE #1979

Closed
jphickey opened this issue Sep 24, 2021 · 1 comment · Fixed by #1980
Closed

Implement generic runtime configuration registry for CFE #1979

jphickey opened this issue Sep 24, 2021 · 1 comment · Fixed by #1980
Assignees
Milestone

Comments

@jphickey
Copy link
Contributor

jphickey commented Sep 24, 2021

Is your feature request related to a problem? Please describe.
Rather than compiling-in various values (e.g. via cfe_platform_cfg.h or cfe_mission_cfg.h) it would be more flexible and more useful to put many of these configuration items into some type of simple runtime registry.

The registry would be a simple key/value store, where the key is the configurable item ID, and the value is either an integer or a pointer to a global data object (ideally const, to avoid sharing/concurrent access issues).

The registry can be somewhat dynamic, allowing registry items to be easily added/extended. Default values and text-based descriptions can also be potentially included.

Describe the solution you'd like
User API that works something like:

  • uint32 CFE_ES_RegistryGetInt(uint32 Key);
  • const void* CFE_ES_RegistryGetPointer(uint32 Key);

Additional context
This would reduce dependency on cfe_platform_cfg.h and cfe_mission_cfg.h for keeping this type of value, and also provide a place for the version info currently in cfe_version.h. Thereby consolidating the current bunch of different types of info with different access methods into one generic registry with a common, simple access method.

Similar model exists in UNIX/POSIX in the sysconf facility - so certain platform-specific values do not need to be compiled into binaries, thereby improving binary portability (i.e. compile once for a CPU arch, run anywhere that has that arch). This would make the long-desired feature of separate CFE core and app builds closer to reality.

Of course Windows has its well-known registry, which is huge and unwieldy - this should not turn into that. More like UNIX sysconf, but with pointers/strings also supported, not just integers.

Other issues with #define-ed config values:

  • Value is effectively compiled-into the binary, so if the value ever changes, modular binaries become incompatible (but this is not actively detected - its a subtle, silent incompatibility).
  • Works OK for integers, but not as well for strings, even less well for structured data
  • Requires that the cfe_mission_cfg.h / cfe_platform_cfg.h be kept in sync with the source code. New variables added in new builds must be manually propagated to the user build.

Requester Info
Joseph Hickey, Vantage Systems, Inc.

@jphickey jphickey self-assigned this Sep 24, 2021
@jphickey jphickey changed the title Need some type of generic runtime configuration registry for CFE (ES?) Implement generic runtime configuration registry for CFE Sep 24, 2021
@jphickey
Copy link
Contributor Author

Currently thinking to make the registry read-only and fully configured by ES during boot (could be a TBL-based load potentially). Unless there is a use-case/strong need for making values change-able, it seems to introduce more complexity. Or at least any "set" APIs could be reserved for boot-time use, and become fixed thereafter.

jphickey added a commit to jphickey/cFE that referenced this issue Sep 27, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
jphickey added a commit to jphickey/cFE that referenced this issue Sep 27, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
jphickey added a commit to jphickey/cFE that referenced this issue Sep 27, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
jphickey added a commit to jphickey/cFE that referenced this issue Sep 27, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
jphickey added a commit to jphickey/cFE that referenced this issue Sep 27, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
jphickey added a commit to jphickey/cFE that referenced this issue Sep 28, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
jphickey added a commit to jphickey/cFE that referenced this issue Sep 28, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
jphickey added a commit to jphickey/cFE that referenced this issue Sep 29, 2021
Adds a new module called "config" that tracks simple
key/value pairs.  All values are const.

As a proof of concept, all version information is mirrored
into this key store, and ES is updated to use this instead
of the GLOBAL_CONFIGDATA when generating events.
astrogeco added a commit to astrogeco/cFE that referenced this issue Nov 3, 2021
…istry

Fix nasa#1979, implement abstract config registry module
astrogeco added a commit to astrogeco/cFE that referenced this issue Nov 3, 2021
…gistry

Fix nasa#1979, implement abstract config registry module
astrogeco added a commit to astrogeco/cFE that referenced this issue Nov 3, 2021
…gistry

Fix nasa#1979, implement abstract config registry module
@skliper skliper added this to the Draco milestone Mar 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants