How dborgards/eds-dcf-net works
Purpose and Runtime
EdsDcfNet is a .NET Standard 2.0 C# library for reading, editing, validating, converting, and writing CANopen CiA DS 306 (EDS, DCF, CPJ) and CiA 311 (XDD, XDC) files. It is a library, not a service or web application. Consumers run it in their own .NET process; repository builds require .NET SDK 10/C# 13.
Core project: src/EdsDcfNet/EdsDcfNet.csproj. Usage entry example: examples/EdsDcfNet.Examples/Program.cs.
Public API and Format Routing
CanOpenFile is the public façade. Its canonical format-specific operations (Eds, Dcf, Cpj, Xdd, Xdc) centralize sync/async file, stream, and string I/O, shared read limits, write options, validation, and legacy API delegation.
• src/EdsDcfNet/CanOpenFile.cs
• src/EdsDcfNet/FormatCanOpenOperations.cs
• src/EdsDcfNet/EdsCanOpenOperations.cs
Format operations select the corresponding parser/writer and preserve caller stream ownership. EDS-to-DCF conversion is owned by the EDS operation layer.
Canonical Domain Models
The central boundary is a typed in-memory CANopen model rather than raw document conversion. EDS/XDD map to ElectronicDataSheet; DCF/XDC map to DeviceConfigurationFile; CPJ maps to network/project topology. All device formats expose an editable object dictionary, including objects, sub-objects, lists, typed values, device information, and commissioning.
• src/EdsDcfNet/Models/ICanOpenFileModel.cs
• src/EdsDcfNet/Models/ObjectDictionary.cs
• src/EdsDcfNet/Models/ElectronicDataSheet.cs
• src/EdsDcfNet/Models/DeviceConfigurationFile.cs
• src/EdsDcfNet/Models/NodelistProject.cs
XDD/XDC additionally carry CiA 311 application-process structures.
Input Parsing Pipeline
Format readers translate external text/XML into the canonical models. INI-oriented EDS/DCF/CPJ parsing shares reader and section infrastructure; XML-oriented XDD/XDC parsing uses a secure XML boundary and specialized parsers for device, communication, and application-process sections.
• src/EdsDcfNet/Parsers/CanOpenReaderBase.cs
• src/EdsDcfNet/Parsers/IniParser.cs
• src/EdsDcfNet/Parsers/EdsReader.cs
• src/EdsDcfNet/Parsers/XddReader.cs
• src/EdsDcfNet/Parsers/SecureXmlParser.cs
CanOpenFileOptions governs cross-format input-size constraints, providing a denial-of-service boundary for untrusted input.
Model Editing, Conversion, and Value Semantics
Consumers mutate the model directly. Object-dictionary extensions support indexed lookup, category/PDO queries, and typed parameter reads/writes. Value conversion maps CANopen data types to .NET values and enforces representable ranges. EDS-to-DCF conversion creates a commissioned configuration from a device description.
• src/EdsDcfNet/Extensions/ObjectDictionaryExtensions.cs
• src/EdsDcfNet/Utilities/CanOpenValueConverter.cs
• src/EdsDcfNet/Utilities/ValueConverter.cs
• src/EdsDcfNet/CanOpenNodeId.cs
Validation and Write Guard
Validation is separate from parsing and serialization: it checks commissioning constraints, device metadata, object-list consistency, and object/sub-object validity, returning path-based issues. Write calls optionally invoke this guard and throw ModelValidationException; async paths support cancellation.
• src/EdsDcfNet/Validation/CanOpenModelValidator.cs
• src/EdsDcfNet/Validation/ValidationIssue.cs
• src/EdsDcfNet/CanOpenWriteGuard.cs
• src/EdsDcfNet/CanOpenWriteOptions.cs
Serialization and External Boundaries
Writers serialize canonical models to DS 306 INI-like files or CiA 311 XML. File/stream output is UTF-8 without BOM. Writer failures are translated into format-specific exceptions, with section/element context where available.
• src/EdsDcfNet/Writers/IniWriterBase.cs
• src/EdsDcfNet/Writers/EdsWriter.cs
• src/EdsDcfNet/Writers/DcfWriter.cs
• src/EdsDcfNet/Writers/XddWriter.cs
• src/EdsDcfNet/Writers/XdcWriter.cs
The only material external interoperability targets are CANopen files and the NuGet distribution channel; CI/release automation runs through GitHub Actions and semantic-release.
Main entry points: FormatCanOpenOperations.cs Format Operations · CanOpenFile.cs CanOpenFile · IniParser.cs INI Readers · ElectronicDataSheet.cs Device File Models
Components 20
Public API
- CanOpenFile · Canonical sync and async file, stream, and string API.
src/EdsDcfNet/CanOpenFile.cs - Format Operations · Selects format readers/writers and retains caller stream ownership.
src/EdsDcfNet/FormatCanOpenOperations.cs - EDS Operations · Owns EDS-to-DCF conversion.
src/EdsDcfNet/EdsCanOpenOperations.cs - Read Limits · Cross-format size limits provide the untrusted-input boundary.
src/EdsDcfNet/CanOpenFileOptions.cs
Canonical Models
- Device File Models · EDS/XDD descriptions and DCF/XDC configurations.
src/EdsDcfNet/Models/ElectronicDataSheet.cs - DCF Model
src/EdsDcfNet/Models/DeviceConfigurationFile.cs - Object Dictionary · Typed objects, sub-objects, lists, values, metadata, and commissioning.
src/EdsDcfNet/Models/ObjectDictionary.cs - Network Project · CPJ network and project topology.
src/EdsDcfNet/Models/NodelistProject.cs - Editing & Values · Provides dictionary queries and range-checked typed value conversion.
src/EdsDcfNet/Extensions/ObjectDictionaryExtensions.cs
Input Pipeline
- INI Readers · Shared INI infrastructure reads EDS, DCF, and CPJ.
src/EdsDcfNet/Parsers/IniParser.cs - XDD/XDC Readers · Specialized device, communication, and application-process parsing.
src/EdsDcfNet/Parsers/XddReader.cs - Secure XML Boundary
src/EdsDcfNet/Parsers/SecureXmlParser.cs
Validation & Output
- Model Validator · Returns path-based model and commissioning issues.
src/EdsDcfNet/Validation/CanOpenModelValidator.cs - Write Guard · Optionally validates and raises ModelValidationException before output.
src/EdsDcfNet/CanOpenWriteGuard.cs - INI Writers · Writes EDS and DCF UTF-8 files.
src/EdsDcfNet/Writers/EdsWriter.cs - XDD/XDC Writers · Writes XML device descriptions and configurations.
src/EdsDcfNet/Writers/XddWriter.cs
Other components
- Consumer .NET Process · Applications use the library in-process.
- Usage Example
examples/EdsDcfNet.Examples/Program.cs - CANopen Files · EDS, DCF, CPJ, XDD, and XDC input/output.
- NuGet Distribution
Connections 24
- Consumer .NET Process → CanOpenFile: uses
- Usage Example → CanOpenFile: demonstrates
- CanOpenFile → Format Operations: delegates format I/O
- CanOpenFile → EDS Operations: exposes EDS operations
- CanOpenFile → Read Limits: applies limits
- Format Operations → INI Readers: reads DS 306
- Format Operations → XDD/XDC Readers: reads CiA 311
- Secure XML Boundary → XDD/XDC Readers: secures XML input
- INI Readers → Device File Models: maps EDS/DCF
- INI Readers → Network Project: maps CPJ
- XDD/XDC Readers → Device File Models: maps XDD/XDC
- Device File Models → Object Dictionary: exposes
- DCF Model → Object Dictionary: contains
- Editing & Values → Object Dictionary: edits and queries
- EDS Operations → DCF Model: converts EDS to
- Format Operations → Write Guard: guards writes
- Write Guard → Model Validator: invokes
- Format Operations → INI Writers: writes DS 306
- Format Operations → XDD/XDC Writers: writes CiA 311
- INI Writers → CANopen Files: serializes
- XDD/XDC Writers → CANopen Files: serializes
- CANopen Files → INI Readers: input
- CANopen Files → Secure XML Boundary: XML input
- NuGet Distribution → Consumer .NET Process: delivers library