All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Starting from v4.0.0, this project adheres to Semantic Versioning.
- Bump allowed
spacepackets
andcfdp
range
- Removed serial port validity check, which does not work for something like symlinks created with udev rules.
Increase allowed version range for cfdp-py
dependency to >=0.1.0, <=0.3
.
- PUS TC 20 (Parameters) FSFW interface: Default values for APID.
- Renamed
FsfwTmTcPrinter.get_validity_buffer
toFsfwTmTcPrinter.get_validity_buffer_str
- Renamed
ObjectId<$TY>.from_bytes
toObjectId<$TY>.from_bytes_typed
to avoid invalid override.
- Added
fsfw.tmtc_printer.get_validity_buffer_str
function.
- Broken FSFW PUS 3, PUS 20, PUS 8 TM unpackers.
- Bumped
spacepackets
to release range >=0.24, <0.25. - Bumped
cfdp-py
to v0.1.1.
- Renamed
DefaultProcedureParams
toTreeCommandingParams
. - Renamed
TcParams
toCommandingParams
. - Renamed
DefaultProcedureInfo
toTreeCommandingProcedure
. - Renamed
add_default_procedure_arguments
toadd_tree_commanding_arguments
. - Renamed
TcProcedureType.DEFAULT
toTcProcedureType.TREE_COMMANDING
. - Replaced
TelemetryListT
byList[bytes]
. - Renamed
TcpSpacePacketsComIF
toTcpSpacepacketsClient
. - Renamed
UdpComIF
toUdpClient
.
CoreServiceList
enumeration.DEFAULT_APID
andDEBUG_MODE
globals.
- TCP client implementation re-worked to be thread-safe. Also added more graceful shut-down handling. Consequently, the thread spawned by the TCP client is not daemonic anymore.
- Fixed bug for acknowledged file transfer cancellation in the destination handler.
- The
tmtccmd.util.countdown
andtmtccmd.util.seqcnt
module were moved to thespacepackets
library. - Most of the
tmtccmd.cfdp
module was moved to thecfdp-py
library.
- Added new command tree mechanism which allows to specify the telecommand structure in a more flexible way. This mechanism deprecated the old service/op code combination. The user can now specify the whole command structure as a tree, and specify commands as a slash separated path through that tree.
- Removed high level CFDP handler and CFDP in CCSDS handler which are not generic enough and do not work in their current form. These handlers might be re-added with a proper implementation which also allow building a CFDP daemon / full CFDP entity more easily.
- Move
tmtccmd.tmtc.base
totmtccmd.tmtc.tm_base
and deprecate it.
- The CFDP source and destination handler can now also handle cancel requests.
- The CFDP source handler can handle acknowleded mode transfers now.
- New
from_seconds
classmethod forCountdown
class.
- All CFDP exceptions are now exposed via the
tmtccmd.cfdp.exceptions
module. - Both CFDP source destination handler now expect a
RemoteEntityCfgTable
for remote configuration setup. - CFDP source and dest handler now both have the
entity_id
property to retrieve the local ID. - CFDP handler transmission mode and CFDP state are separate from each other now. The
transmission mode can be retrieved using a new
transmission_mode
property for both handlers, and theCfdpState
BUSY_CLASS_2_ACKED
andBUSY_CLASS_1_NACKED
variants were merged into aBUSY
variant. - Setting a sequnce of space packet IDs for TCP space packet parsing is now mandatory for the TCP communication interface. This avoids confusing errors during run-time.
- Removed some global usage for the TCP communication interface
- The CFDP source and destination handlers can now only handle one packet at a time. This makes
reasoning about the logic of those handlers, and subsequently extending and adapting them
a lot easier. Multiple packets can still be inserted by calling the
insert_packet
andstate_machine
function consecutively. - Moved all
pus_*
modules located inside thetm
andtc
module to the newpus/tm
pus/tc
submodule. - Renamed all
pus_*
modules tos_*
modules (service) - Renamed
funccmd
PUS modules toaction
. - Unified
tc
andtm
module intotmtc
module. Alltmtccmd.tm
andtmtccmd.tc
imports needs to be replaced withtmtccmd.tmtc
. - The
CheckLimitProvider
abstraction must now be explicitely passed to the CFDP entity instead of being passed via the remote configuration. Countdown
classtimeout
property now returns atimedelta
object to avoid inconsistency of getter and setter property. There is a newtimeout_ms
property to returns the timeout as milliseconds.
- Removed
serial_fixed_frame
module andSerialFixedFrameComIF
class which has been deprecated since v4.0.0a0. SerialCommunicationType
: RemovedFIXED_FRAME_BASED
variant.- Hardcoded AT91 paths in
QEMUComIF
. - Removed deprecated TM modules.
- Various fixes for the
QEMUComIF
. - Fixed the check timer and check limit mechanism for CFDP. The
RemoteEntityCfg
not only expects acheck_limit
integer field which defaults to 2.
- Changed package license from Apache-2.0 to dual Apache-2.0 or MIT.
- spacepackets version v18.0.0
- Bugfix for destination handler: Clear out file data queue when handling it.
- TCP communication interface:
- Frame limit is optional now.
- Small change to allow handling more than 4096 bytes in one polling cycle.
- Renamed
args_to_params_tmtc
toargs_to_all_params_tmtc
andargs_to_params_cfdp
toargs_to_all_params_cfdp
PutRequest
model now stores both destination and source file path as a PythonPath
.
- Added new
cfdp_args_to_cfdp_params
function which only performs the conversion of CFDP argparse arguments to the internalizedCfdpParams
type. - Explicit functions to convert internalized CFDP parameters to a put request:
cfdp_req_to_put_req_get_req
cfdp_req_to_put_req_proxy_put_req
cfdp_req_to_put_req_regular
- Generic
generic_cfdp_params_to_put_request
conversion function which converts the internalized CFDP parameters to a put request based on heuristics.
- Bumped
spacepackets
to v0.18.0rc1
- The
CfdpParams
config wrapper now has an additionalproxy_op
field. - New
cfdp_req_to_put_req_regular
andcfdp_req_to_put_req_proxy_get_req
API to convert standardCfdpParams
instances toPutRequest
s - The CFPD source handler is now able to convert PutRequest metadata fields to options. It is also able to request metadata only PDUs now, allowing it to perform proxy operations.
- Adapted the FSFW specific Housekeeping service API to make HK requests diagnostic agnostic.
The PUS interface has proven to be cumbersome and problematic, so the split between diagnostic
and regular HK packets has been removed in newer version of the FSFW. The new API reflects that.
The old API is still available by using the
*_with_diag
suffix. - The former
PutRequestCfg
dataclass is now namedPutRequest
. The formerPutRequest
class is now namedPutRequestCfgWrapper
and simply wraps aCfdpParams
dataclass. - The CFDP source handler expects the
PutRequest
dataclass instead of a CFDP request wrapper now for theput_request
API.
- The CFDP source handler
start_cfdp_transaction
API was removed. It was only able to process put requests in its current form anyway. Theput_request
method is sufficient for now. - Package version is single-sourced using the
importlib.metadata
variant: Thepyproject.toml
now contains the version information, but the informatio can be retrieved at runtime by using the newversion.get_version
API orimportlib.metadata.version("spacepackets")
. setup.py
which is not required anymore.
add_def_proc_and_cfdp_as_subparsers
returns the subparsers now.
spacepackets
version: v0.17.0
- Moved
tmtccmd.util.tmtc_printer
module totmtccmd.fsfw.tmtc_printer
. Old module references new module, old module marked deprecated. - The
FsfwTmtcPrinter
get_validity_buffer
function is astaticmethod
now.
- Bump of
spacepackets
: Bugfix in spacepacket parser which lead to broken packets in the TCP communication interface.
spacepackets
version: v0.16.0
- Bumped
spacepackets
to v0.16.0 for important bugfix in PDU header format.
- Added FSFW parameter service API to dump parameters.
- Added FSFW parameter service
FsfwParamId
class to uniquely identify a parameter in a FSFW context.
- The FSFW parameter service helper class
Parameter
is now a composition of the raw parameter data and the newFsfwParamId
class. - The
create_load_param_cmd
API now expects aParamter
instead of raw data.
- Dependency specifier for
spacepackets
, dependency specifier for pre v1.0 versions in general.
logging
usage for GUI.
- Improvements for documentation: Added
spacepackets
cross-references.
- Added various parameter helpers in the
pus.s20_fsfw_param
module. This includes helper methods to pack signed values (i8, i16 and i32), float/double vectors and matrices parameters.
Starting from this version, the project will adhere to Semantic Versioning. spacepackets version: v0.15.0
- Renamed
pus.s5_event
andpus.s5_event_defs
topus.s5_fsfw_event
andpus.s5_fsfw_event_defs
to better reflect this module is FSFW specific.
- First sat-rs support modules:
pus.s5_satrs_event
andpus.s5_satrs_event_defs
pack_generic_service_5_test_into
removed, not generic enough.
- Use custom package discovery in
pyproject.toml
similarly how to discovery was handled insetup.cfg
. Auto-Discovery was problematic, package is not discovered correctly.
spacepackets
version 0.14.0
config.args
: Assigning of the COM interface in the args to setup converters is now done in theargs_to_params_generic
function. Otherwise, this feature does not work for the conversion of CFDP arguments.
- Remove
setup.cfg
and move topyproject.toml
. Create new.flake8
file accordingly.
tc.pus_200_fsfw_mode.create_announce_mode_command
added.
spacepackets
version 0.14.0rc3
The usage of the logging
library now is a lot more pythonic and more
aligned to the recommended way to use the logger. The get_console_logger
has become deprecated.
Users are encouraged to create custom application loggers using logging.getLogger(__name__)
.
It is also possible to apply the library log format to an application logger using
tmtccmd.logging.add_colorlog_console_logger
.
- Mark
get_console_logger
as deprecated. - New
tmtccmd.init_logger
method to set up library logger. - The logging default init function does not set up an error file logger anymore.
- (breaking) Rename
set_up_colorlog_logger
toadd_colorlog_console_logger
.
- New
add_error_file_logger
function.
spacepackets
version 0.14.0rc2
tmtccmd.com.ComInterface
: Added two new generic exceptions:ReceptionDecodeError
for generic decoder errors on packet reception.SendError
for generic send errors when sending packets.
tmtccmd.pus.pus_20_fsfw_params_defs
: NewParameterId
andParameter
helper dataclasses. Also addedService20ParamDumpWrapper
helper class to help with the deserialization of parameters. The helper classes can be used both for TC and TM handling. Create new API set to create theParameter
classes for common parameter types.SetupParams
can now already include a COM interface instance.- CLI arguments: Added the
--pp
or--prompt-proc
argument which only has meaning when used together with the listener flag (-l
). It should cause the main application to prompt for a procedure (but still go to listener mode after the procedure).
- (breaking):
tmtccmd.config.hook.TmTcCfgHookBase
renamed totmtccmd.config.hook.HookBase
. - (breaking): The
PostArgsParsingWrapper
constructor now expects aSetupParams
parameter and caches it. Allset_*
methods now do not expect theSetupParams
to be passed explicitely anymore. - (breaking): The
PreArgsParsingWrapper
now expects asetup_params
parameter to be passed to theparse
method. The parameter helper will be cached in the createdPostArgsParsingWrapper
. args_to_params_tmtc
now expects anassign_com_if
method and can assign a COM interface when it is passed. It oftentimes makes sense to determine a valid COM interface (and prompt applicable parameters from the user) before prompting procedure parameters. The new behaviour is the default when using thePostArgsParsingWrapper
.
- (breaking): Renamed
tmtccmd.*.*20_params.py
totmtccmd.*.*20_fsfw_param.py
to reflect these modules are tailored towards usage with the FSFW. - (breaking): Reworked
tmtccmd.tm.pus_20_fsfw_params
by simplifyingService20FsfwTm
significantly. It only implementsAbstractPusTm
now and is a simple wrapper aroundPusTelemetry
, which is exposed as apus_tm
member. - (breaking): Renamed
tm.pus_5_event
totm.pus_5_fsfw_event
to better reflect these modules are tailored towards usage with the FSFW - (breaking): Simplified
Service5Tm
significantly. It only implementsAbstractPusTm
now and is a more simple wrapper aroundPusTelemetry
exposing some FSFW specific functionality. - (breaking): Renamed
tmtccmd.*.*200_fsfw_modes
totmtccmd.*.*200_fsfw_mode
andtmtccmd.*.*20_fsfw_params
totmtccmd.*.*20_fsfw_param
for consistency. tmtccmd.tc.pus_20_params.py
: Create newcrate_fsfw_load_param_cmd
and deprecate the formerpack_fsfw_load_param_cmd
function.
- (breaking):
DefaultPusQueueHelper
:seq_cnt_provider
,pus_verificator
anddefault_pus_apid
(formerlypus_apid
) do not have default values anymore and need to be specified explicitely. - (breaking): Renamed
tmtccmd.config.com.ComIfCfgBase
toComCfgBase
- (breaking):
tmtccmd.com.ComInterface
: Changeget_id
toid
property. - (breaking): TCP (
tmtccmd.com.TcpSpacePacketsComIF
) andtmtccmd.com.UdpComIF
: Removemax_recv_size
argument and replace it with 4096 where it was used. - (breaking): TCP: Renamed
tmtccmd.com.TcpComIF
totmtccmd.com.TcpSpacePacketsComIF
to better reflect this interface sends and expects space packets. - (breaking) TCP: The TCP communication interface now expects a generic
Sequence[PacketId]
instead of a tuple of raw packet IDs. This makes usage more ergonomic. - (possibly breaking): Rename
com_if
module tocom
. - (breaking):
tmtccmd.tc.queue.DefaultPusQueueHelper
: The timestamp length of time tagged telecommands needs to be specified explicitely now (no default value of 4).
- TCP: Actually use the TM polling frequency parameter now in the TM reception thread.
- TCP: The
data_available
API now works properly by always converting the internal unparsed TM queue to the TM packet list and returning its length.
- Added
apid
andseq_count
optional arguments back to generic (not FSFW specific) TC constructors. - Cleaned up telecommand and telemetry code, removed a lot of obsolete functionality
- (breaking)
pus
module: Renamedpus_?...
modules tos?_...
. These modules now re-export all their definitions and everything in their similarly namedtm
andtc
modules. - (breaking)
pus.pus_8_funccmd
: RenamedSubservices
toCustomSubservice
- TC creation API: Replace
generate_...
API withcreate_...
API for consistency - (breaking) Renamed
Subservices
toSubservice
, use singular enum because they are not flag enums. - (breaking)
pus_200_fsfw_mode
: RenameModes
toMode
. - Subservice enumerations: Add missing
TM_...
andTC_...
prefixes where applicable - Use concrete
spacepackets
version 0.14.0rc1
enable_periodic_hk_command
: Remove third obsolete ssc argument
- New
SerialCobsComIF
communication interface to send and received COBS encoded packets.
CoreComInterfaces
: Renamedser_*
interface names toserial_*
.- Split up the
SerialComIF
into distinct classes:SerialFixedFrameComIF
, but this one has also been deprecated now.SerialDleComIF
for sending and receiving DLE encoded packets.
- Switched to compatible release requirement for dependencies.
ComInterface
: Added new abstract methodget_id
, removed__init__
dunder.
- Marked
Service17TmExtended
as deprecated.
- Minor fixes for GUI: Moved communication interface switching to separate worker thread.
- Minor cleaning up
- Added some FSFW specific functionality to retrieve validity lists from a bitfield representation
- Some bugfixes for GUI, improved teardown/close handling
- Add
deprecation
dependency to allow marking functions and classes as deprecated with a decorator - Improve test structure
- Improve documentation
- Add decorators
service_provider
andtmtc_definitions_provider
which avoids some boilerplate code when registering definition provider or packet creation handlers
- Overhaul of application architecture
- Significant simplification of various modules to increase testability
- Test coverage increased
- Reduced number of modules significantly by moving code into the repective
__init__
files where possible - GUI improved, added separate TM listening button
- Documentation improved
- New logo
- Simplified general package structure, remove
src
folder and havetmtccmd
package andtests
package in repo root - First CFDP handler components
- Reduce usage of globals. The end goal is to remove them altogether
- Reduce overall number of spawned threads
- Added Sequence Count handling modules
- Improve internal structure of sequential sender receiver object
- Add some PUS11 Telecommand Scheduling helpers
- Bugfixes for new modules and code
- Minor fix for CI/CD
- Improve
lint.py
: Add prefix and print out executed command - Architectural improvements for the
TmListener
component- Separate functions to set the internal mode
- Moved mode enum outside of class scope
- Call user send callback for both queue commands and regular telecommands
- Added a cached
SequentialCommandSenderReceiver
- Added
CONTINUOUS
mode which will start the receiver thread in theSequentialCommandSenderReceiver
instance and only send one TC
- Added argument in
__start_tmtc_commander_cli
to defer sending of command - Added two functions,
init_and_start_daemons
andperformOperation
, to allow separate calls to initiate the TmTcHandler and send TCs
- Added
send_queue_tc_and_return
function which does only that (and no TM checking) - Added possibility to start a thread which checks TM
- API consolidation for PUS TCs and TMs. Unified the API and made it more consistent
- Bugs in examples
- Improve core API: Changes core functions to setup and run. Requirement to user to create backend. Makes it easier to directly configure the backend and move to a generally more pythonic API
- Refactoring and extending file logging functionalities
- Exposes functions to create a raw PUS logger and a TMTC logger
- Refactor modules to move packet printout and logging to user level
- Simplified hook object, removed 2 static PUS handlers
- Updated CCSDS Handler to make it more easily extensible by creating a new ApidHandler class
- New Pre-Send Callback which is called by backend before sending each telecommand
- Parsing functions to parse the CSV files generated by the FSFW generators. Includes event, object ID and returnvalue files. These parsing functions generate dictionaries.
- New function in Hook base to return return value dictionary
- Return the config dictionary for op codes
- New dependency
prompt-toolkit
- Auto-Complete feature for service and op-code selection using the
prompt-toolkit
packaged
- Added missing super constructor call for HkReplyUnpacked
- Extended Op Code options functionality and actually use it. Allows to set custom timeout or and enter listener mode for certain op codes
- Renamed some TM packets to make it more explicit that these TM handlers are tailored towards usage with the Flight Software Framework (FSFW)
- Better handling for scalar parameter telemetry for service 20. Emit better warnings for unimplemented cases
- Bumped some package requirements.
colorlog
>= 6.6.0spacepackets
>= 0.6pyserial
>= 3.5
- Renamed example folder
- GUI example fixed
- Improved API to specify handling for Service 3 and Service 8 packets in user hook object
- New API to build service/opcode dictionary
- Fixes for Service 8 Telemetry Parser
- Applied consistent formatting with
black
tool - Some bugfixes for PUS packet stack