Packages¶
Nine packages, one version number, released together to nuget.org. Take only the layers you need: an ISO-TP application pulls in five of them, a plain demultiplexer one.
1.0.0 – 1.2.3 are withdrawn
These six versions were published as stable before the API had been reviewed against the specifications, and are unlisted and deprecated on nuget.org. 1.3.0 will be the first release whose API is stable; until it is tagged, the public surface can still change. See Versioning.
So there is nothing to install from nuget.org right now. The dotnet add package lines
below have no listed version to resolve until 1.3.0 ships; a withdrawn release comes back
only on an exact version pin, which is not recommended. Build from source in the meantime.
The version badges in the tables below read from the nuget.org feed, so during this window they show a withdrawn version or nothing at all. They become meaningful again with 1.3.0.
Everything targets netstandard2.0 and net10.0, so .NET Framework 4.6.2+, .NET 8 and .NET 10
all work. Every package depends on CanKit.Abstractions where it touches a bus and on nothing
vendor-specific anywhere.
L2 · Infrastructure¶
The layer every protocol stack needs and usually rebuilds: how instances share a bus, on which thread state changes, how a timeout is guaranteed to fire, how an ID is composed.
| Package | What it gives you | Depends on | |
|---|---|---|---|
| CanKit.Pro.RawCan | N independent, filtered, read-only views of one ICanBus, reconfigurable at runtime, plus SendConfirmed for a uniform TX confirmation. |
CanKit.Abstractions | |
| CanKit.Pro.Actor | ProtocolActor: single-mailbox, single-writer execution with an event-driven timer queue and one background-exception channel. |
— | |
| CanKit.Pro.Addressing | Validated 11/29-bit CAN IDs, J1939 PGN/priority/PDU/source-address composition, J1939 NAME and PGN catalogues. | — | |
| CanKit.Pro.Reliability | Deadlines whose expiry is guaranteed to be checked, and a BusStateMonitor that pushes bus-state transitions and recovery. |
CanKit.Abstractions, Actor |
L3 · Transports¶
| Package | What it gives you | Standard | |
|---|---|---|---|
| CanKit.Pro.IsoTp | SF/FF/CF/FC codec, bounds-checked PCI parsing, STmin pacing, and an actor-driven IIsoTpChannel over CAN and CAN FD; functional (1:N) addressing. |
ISO 15765-2 | |
| CanKit.Pro.J1939Tp | TP.BAM broadcast and TP.CM connection mode (RTS/CTS/EndOfMsgAck), multi-session, all timers on the actor. | SAE J1939-21 |
L4 · Application protocols¶
| Package | What it gives you | Standard | |
|---|---|---|---|
| CanKit.Pro.Uds | Client over ISO-TP: session control, security access, read/write by identifier, routine control, upload/download, P2/P2* timing and 0x78 response-pending. | ISO 14229-1 | |
| CanKit.Pro.CANopen | Node with object dictionary, SDO client/server incl. block transfer, static and dynamic PDO mapping, NMT, heartbeat, node guarding, SYNC, EMCY. | CiA 301 | |
| CanKit.Pro.J1939 | Node: address claim with arbitrary-address fallback, PGN send/receive with automatic TP routing, SPN extraction, fixed-rate periodic send. | SAE J1939 |
Who depends on whom¶
Arrows point at dependencies. The L2 packages are leaves or nearly so; everything above composes them and never talks to a vendor SDK.
flowchart BT
ABS["CanKit.Abstractions<br/><small>upstream, nuget.org</small>"]:::upstream
ACT["CanKit.Pro.Actor"]:::l2
ADR["CanKit.Pro.Addressing"]:::l2
RAW["CanKit.Pro.RawCan"]:::l2
REL["CanKit.Pro.Reliability"]:::l2
ISO["CanKit.Pro.IsoTp"]:::l3
JTP["CanKit.Pro.J1939Tp"]:::l3
UDS["CanKit.Pro.Uds"]:::l4
CO["CanKit.Pro.CANopen"]:::l4
J["CanKit.Pro.J1939"]:::l4
RAW --> ABS
REL --> ABS
REL --> ACT
ISO --> RAW & ACT & REL
JTP --> RAW & ACT & REL & ADR
UDS --> ISO
CO --> RAW & ACT & REL
J --> JTP & ADR
classDef upstream stroke:#8a97ab,stroke-width:1.5px,stroke-dasharray:4 3
classDef l2 stroke:#7f9fd0,stroke-width:2.5px
classDef l3 stroke:#1fb6d0,stroke-width:2.5px
classDef l4 stroke:#f5b342,stroke-width:2.5px
Install¶
# CanKit itself: the core plus one adapter for the hardware you talk to
dotnet add package CanKit.Core
dotnet add package CanKit.Adapter.Virtual # loopback, no hardware
# dotnet add package CanKit.Adapter.PCAN # or Kvaser, Vector, SocketCAN, ZLG, ControlCAN
# CanKit.Pro: the protocol you need brings its own infrastructure along
dotnet add package CanKit.Pro.Uds # pulls IsoTp, RawCan, Actor, Reliability
dotnet add package CanKit.Pro.CANopen
dotnet add package CanKit.Pro.J1939 # pulls J1939Tp, Addressing, RawCan, Actor, Reliability
Each package page below is the package's own README, the same text that ships inside the
.nupkg and appears on nuget.org.