Documentation

v4.0.0

Date
Versionv4.0.0

Release subject ## TODO

Enhancements

Fixes

Changes

  • 3ab24c9 release: add two-phase prepare/publish workflow
  • 27e7b61 cp: notify app when the PD id is collected
  • 5f3248d pd: name the engine-continuation reply exemption
  • 4d1eca8 multipart: public mp-outcome enum and shared SC reserve
  • 8407bde cp: pre-land trs_dev's link-vs-activity seams
  • 06f38d8 cp: purify FSM transition tables
  • 4fd3cee cp: route NAK(SEQ_NUM) through the transition path
  • fcb6887 common: single owner for feature-engine teardown
  • 2365429 cp: drop dead PROBE state and EVENT_SEND request bit
  • 7c5b830 pd: abort in-flight bio op on CP link loss
  • 7d10f58 Revert "chore: Switch c-utils submodule URL to relative path"
  • 786244f chore: Switch c-utils submodule URL to relative path
  • 0229c59 python: fix PivData doctest bytes literal
  • a622663 platformio: sync osdp_config.h with new BIO/PIV/CP defines
  • 5a7b289 ci: report tests via job summary, drop checks:write
  • 72d5b70 ci: publish per-case unit-test JUnit report
  • 4c6dbcf tests: Report each sub-test as its own case
  • 17a98c8 tests: add suite selection, parallel runners, and JUnit
  • 8213d79 notify: Replace notification arg0/arg1 with typed payloads
  • acdd0e4 Add opt-in multipart support for BIOREADR reply
  • 7ae8097 tests: Add end-to-end pytest for the smartcard commands
  • 3b69f8a cp: Zero arg1 in PD status notifications
  • b9ecd53 python: Bind the smartcard/PIV commands and reply events
  • 6b22bf3 Add challenge/response authenticate command (osdp_CRAUTH)
  • fcb7408 Add general authenticate command (osdp_GENAUTH)
  • 1c61bb1 Add PIV data retrieval command (osdp_PIVDATA)
  • 021c3cf mp: tests: Close multipart engine and file receiver test gaps
  • 7827bd8 mp: Sweep multipart dead state and stale comments
  • fa4adaf mp: Encapsulate multipart state transitions in the engine
  • 64fb81d mp: python: Marshal multipart notification fields both ways
  • ab45303 mp: Handle multipart early-term explicitly in file transfer
  • fd81d33 mp: Report declared size in PD-side MP_START
  • 6f2b54d mp: Add multipart lifecycle notifications
  • dd2ac74 mp: tests: Add multipart engine and file keep-alive tests
  • 01cf8f9 Add multipart engine and migrate file transfer
  • 0976872 tests: Fix flaky busy test and CI build noise
  • a027f78 cp: bound the BUSY retry loop
  • 8720017 phy: retry BUSY-interrupted commands with original sequence
  • c1fad2c tests: add a channel interceptor hook to the mock channel
  • a714f1c tests/interop: Add command/event transport and secure-channel checks
  • 675a2f1 tests: keep inline reply events off the callback stack
  • 382caea python: add TDSET command bindings
  • 6caa17e osdp: add TDSET command support
  • 4658a4a Use OSDP_PD_CAP_SENTINEL to terminate capability arrays
  • 425b728 osdp: type enum-valued struct fields as their enum
  • cebab08 osdp: validate reader_no against READERS capability
  • 93d618d Mark CMD_RMODE and CMD_TDSET as deprecated
  • 9c90882 osdp: rework status reports as one byte per entity, capped by capability
  • 0e4ff22 osdp: document OSDP_STATUS_REPORT_MAX_LEN macro
  • dbe3310 docs: point READMEs to doc.osdp.dev as source of truth
  • f4cb917 Drop the internal-symbol reference from the public header
  • 4b80a19 python: Link the examples and README to the doc site
  • 670398f Reject commands carrying an undefined control code
  • 0a82f3e python: Assert the enum-typed fields are int-sized
  • a6faa65 python: Tolerate control codes we do not name
  • 50c9fb4 python: Flesh out the package classifiers
  • 71ebaa6 release: Read the python version from pyproject.toml
  • 37fc776 tests: Pin _sys.pyi to the constants the extension exports
  • 836212a python: Derive the control codes and payload limits from C
  • cf799c7 Name the command control codes
  • d354a34 tests: Cover the protocol space the suite never reached
  • b6584d9 tests: Cover the binding error paths
  • 6b31a16 python: Surface channel errors out of refresh()
  • f1a0545 python: Fix a use-after-free in register_file_ops
  • 47ba3a5 python: Raise instead of returning on a bad argument
  • 76aa68c python: Fix a crash when the PD is built without capabilities
  • 26d939e tests: Shorten the PD online timeout for pytest runs
  • fcac4f6 tests: Add a coverage runner for the python bindings
  • fe57559 python: Reject a malformed scbk in the PD constructor
  • a270d8c python: Expose the last two PD capability codes
  • 83c1115 python: Rewrite the osdp_sys docstrings
  • aae794f python: Drop redundant defaults from the doc examples
  • 8e316dc examples: Lean on the command and event field defaults
  • e3126a6 examples: Report a Wiegand card read from the PD app
  • 4d65b8c python: Check the arglist allocation in the PD command callback
  • 5671f34 python: Fix event dict leak in the CP event callback
  • 2b2fc0d python: Make command/event marshalling table-driven
  • e61b393 python: Raise on command marshal failure
  • 346c4ec python: Generate Doxygen XML for the bindings
  • 1e48c22 python: Replace command and event dicts with typed dataclasses
  • 6e218e2 python: Fix and type the KeyStore helper
  • b78aaa9 python: Carry the status report in a status command
  • 0d8f763 python: Check for conversion errors when parsing ints
  • c3673e1 python: Fix refcount bug in the PD command callback
  • a37c343 Make command and event buffer lengths overridable
  • 36f60c4 Don't downgrade to checksum when the PD does CRC
  • 8a5c516 pd: Allow osdp_OSTATR as an inline reply to osdp_OUT
  • c9a13ca Hoist cmd/reply ID byte out of the codec switches
  • 812de50 fixup! Add support for biometric commands and replies
  • a3f2df9 Keep the PD online when it declines a command
  • bfb9adc Add support for biometric commands and replies
  • d21fb90 Send manufacturer replies inline for MFG commands
  • e8f4017 Add support for MFGSTATR and MFGERRR replies
  • be3eda0 doc: Add note about command/event lifetimes
  • 08bccb3 Match cardread length to its 16-bit wire width
  • 1a80a06 Require a tick source on unidentifiable bare-metal targets
  • 0e9d44c utils: Bump submodule for native Arduino platform support
  • 72e1ec7 ci: Add bare-metal ARM compile check
  • c0212a1 Use uint32_t for file transfer sizes and offsets
  • 813c456 Use wrap-safe comparison for the response timeout
  • 2da1a3d Avoid int promotion overflow when shifting wire bytes
  • 865cc46 Widen osdp_pd_info_t flags to uint32_t
  • 0203552 Use fixed-width types for baud rate and file offsets
  • 18477cc ci: Drop redundant publish-pypi workflow
  • b15fb79 utils: Bump submodule to fix workqueue destroy race
  • 9098b76 utils: Bump submodule to fix workqueue use-after-free
  • a8a9134 file: Fix another instance of runtime check placed as assert
  • 16e79d8 file: Fix OOB read due to critical check placed as assert
  • 75613b8 cp: Fix OOB write in cp_decode_response REPLY_KEYPAD/RAW
  • 2a804bc phy: Guard packet length subtraction against underflow
  • d6bd00e phy: Fix framer wedge on fragmented packet header
  • 9ea57d1 python: Drop Python 3.9 from wheel builds
  • 929f395 utils: Bump submodule to fix MSVC wheel build
  • f849b5e python: Update setuptools requirement in /python
  • 68cb2d3 python: Fix wrong typecast in output command
  • 4c4cf60 phy: Keep staged reply's packet_buf in RX release
  • ef30726 tests: Run the unit suite under zero-copy RX
  • c50697b chore: Fix broken build by adding new tests to configure.sh
  • fa0af00 tests: expose and fuzz the frame codecs
  • a8434a2 tests: export internals via test_ aliases, not function pointers
  • 34bae49 utils: Bump submodule to pull in zephyr __weak fix
  • 8d7a243 osdp: Overlay CP/PD static pools when role is exclusive
  • 4192cfa CI: Bump actions/cache from 5 to 6
  • 8277d4d Migrate goToMain references to osdp-dev org
  • 04664ff CI: Bump actions/checkout from 6 to 7
  • 7a23111 CI: Bump pypa/cibuildwheel in the github-actions group
  • abb3a30 python: link bindings to doc.osdp.dev and fix quick start
  • 45d03d8 README: link secure-channel and compatibility guides
  • 8b74b71 CI: Bump docker/setup-qemu-action from 2 to 4
  • c36e526 CI: Bump pypa/cibuildwheel from 3.4.0 to 4.0.0
  • ee2ce78 CI: Bump actions/upload-artifact from 6 to 7
  • cbc9499 SECURITY: Reword policy for clarity and fix typos
  • d3bbc1d README: Bump CMake minimum to 3.14 and mention find_package consumption
  • 5436dd3 cmake: Install headers once, harden uninstall, bump utils submodule
  • 03e159b Makefile: Install headers under include/libosdp/ to match pc Cflags
  • 3cbe8e0 cmake: Wire ctest, warn on tinyaes auto-fallback, fix CPack components
  • 6c8b0c5 cmake: Make find_package(libosdp) work for all crypto backends
  • 6c9344a cmake: Fix install paths and pkg-config consumption
  • 06ee619 doc: Deprecate in-tree doc site builds
  • d1d8baf python: update setuptools requirement in /python
  • c1efe07 CI: Bump actions/checkout from 5 to 6
  • 78ea710 CI: Bump docker/setup-buildx-action from 2 to 4
  • 70221de CI: Bump actions/download-artifact from 7 to 8
  • acb1fa6 CI: Bump actions/cache from 4 to 5
  • c34340e CI: Bump softprops/action-gh-release from 2 to 3
  • 5b2865e CI: Add Dependabot for actions and pip surfaces
  • 5f45087 python: Drop EOL Python 3.8 from wheel builds
  • 3214e90 file: Keep transfer alive when CP app read returns 0
  • 37580a6 phy: Don't reset reply-side state in RX packet release
  • 496bd37 unit-test: Fix stack-use-after-return in hotplug command test
  • ef8586a unit-test: Eliminate spurious warnings from make check
  • d3f7ad8 python: Bundle LICENSE file and tidy packaging
  • 573e421 python: Use SPDX license expression instead of classifier
  • 1587acf unit-test: Fix broken tests and add foreign CP command test
  • a93deec phy: Add a warning if a CP sees another CP's message
  • 0bf084d phy: Skip packets that don't belong to current context
  • 1b780eb Avoid libc surface under BARE_METAL
  • 4d31b21 Log accurate timeout duration
  • e600d30 Fix constness in C++ header methods.
  • b281fee crypto: Zeroize security keys at function exit points
  • b8f1ca7 tests: Fix arg1 check in cp_check_command_status
  • e94678a CI: Add pytests to reusable-ci.yml as a seprate check
  • de84e84 tests: Mirror OSDP_PD_ONLINE_TOUT_MS override in Makefile build
  • 990690c phy: Split packet finalize from channel send
  • dfbf978 API: Rename osdp_event_notification to osdp_notification
  • 218a268 Add test coverage for PD notifications
  • 6e899da file: Abort in-flight transfer on link loss
  • c07d953 PD: Deliver status notifications via the command callback
  • 756046a PD: Track online/offline state based on CP link activity
  • e378637 phy: Drain software rx ring on error-path state reset
  • b79952d tests: Fix flaky hotplug/async_fuzz cascade on macos-14
  • 862b8bc Move some window build into cross-platform build with --lib-only flag
  • c8fce4e API: Fix warnigns in MSVC build due to missing BUILDING_API
  • 3a7176e utils: Bump submodule; Add windows CI builds
  • c01cc92 PD: Fix bug in pd_cap check path which always ACKs
  • deff403 Fix test build failure on windows platforms
  • b65ce5e Fix cross-plarform build failure
  • 20bbbab Fix build failure due to missing LDFLAGS
  • f795700 Enable MSVC's conformwat /Zc:preprocessor
  • 7f4eea5 Add support for crypto backend selection
  • f0990cd API: file: Add support for CP file tx notifications
  • 2a70403 file: Honor OPT_OSDP_STATIC for the per-PD osdp_file slot
  • 78b2357 CP: Reset sequence number to 0 before starting a new SC session
  • 333bb9b Lower the sequence repeat logs to debug level
  • ce15337 Zephyr: More QoL changes for zephyr integration
  • 52abc71 API: Update osdp.hpp to be in sync with osdp.h
  • 77ca576 pytest: Fix crash due to missing baud rate handling in python layers
  • 61fbe31 API: Introduce a new link/protocol metrics tracker
  • 71556a6 PD: Retransmit cached reply on sequence-repeatgc
  • a54c57e utils: Bump submodule to pull ESP platform fix
  • 5d8296a CP: Fix bug in trasmit time accounting comparison
  • 7764466 CP: Yield channel between PD retry probes
  • 3fd5b15 CHANGELOG: Migrate from single file to split files for ease of maintenance
  • 810d33d Better calculate the transmit timeout for packets
  • 0d229b5 CP: Don't update sequence number on command retry probes
  • 14c2111 CI: Rewrite release pipelines to avoid premature publishing of artifacts
  • d68910b Fixed format string mismatch in osdp_diag.c: %d used for size_t argument #283
  • 10d858d utils: Bump submodule to pull in fix for slab_t packing issue
  • 5810411 API: Undefine API_DEPRECATED to fix macos build issue
  • 2f83c91 Update cibuildwheel version to 3.4.0
  • b892a91 CP: Fix PD poll loop after the multi-drop-only change
  • 661900c Fix broken build due to rebase mixups
  • e506db6 API: Introduce a new minimal logger mode
  • 297ac66 SC: Compute MAC progressively block by block
  • e3e0236 Make: Add explicit dependency tracking to avoid false test runs
  • 506debd tests: Rewrite the test harness to be more robust
  • 0422343 Cleanup TX staging buffer call sites
  • dc54993 Remove last remaining stale references
  • 72824b1 RAM Optimization: Move logger_t out of per-pd structs
  • 6d5ca16 Remove packet_capture context from BARE_METAL builds
  • a89c433 Drop state refernces to pd->channel now that we use ctx->channel
  • 772ba9e API: Remove zero-copy-rx fallback path
  • c23e05e utils: Pull in tick_t changes and consume it
  • 50d0357 Remove status_report from PD struct by pre-building response
  • 34cda90 API: Drop inline REPLY_MFGREP support
  • edcc31b refactor: Remove ephemeral data array
  • ad9a64c refactor: pd: Move event handling out of ephemeral_data
  • 1cbb230 refactor: cp: Move event generation out of ephemeral_data
  • 3a331fc refactor: cp: Remove active command store out of ephemeral_data
  • 5f1fa3d refactor: Move comset data out of ephemeral_data
  • 2d92f06 refactor: Move keyset_pending out of ephemeral_data
  • 5567b39 refactor: Move nak code out of ephemeral_data
  • b5823c0 API: Promote APP_OWNEDED_QUEUE_DATA as default behaviour
  • 19596c9 build: Extend the OPT_OSDP_STATIC_PD switch to also include CP
  • 04a0851 API: Hoist channel into struct osdp to support only multi-drop PDs
  • b07d9ff python: Fix pypi upload due unavailability of get/set raised exception < 3.12
  • eb7ebda chore: Fix CI after nodejs 20 actions deprecation