Releases: daqifi/daqifi-core
v0.17.0
What's Changed
- chore: Bump the minor-and-patch group with 2 updates by @dependabot[bot] in #131
- fix: add delays and channelMask to StartSdCardLoggingAsync, preserve download extension by @tylerkron in #130
- feat: add JSON and CSV SD card log file parsers by @tylerkron in #132
- fix: surface SCPI -200 errors from InitializeAsync instead of silently discarding them by @tylerkron in #133
Full Changelog: v0.16.0...v0.17.0
v0.16.0
What's Changed
- fix: add interface-settle delay and retry for SD LIST operations by @tylerkron in #121
- fix: send defensive stop command before SD card operations by @tylerkron in #125
- fix: optimize ExecuteTextCommandAsync for SD card operations by @tylerkron in #126
- feat: Add multi-format SD card logging support (Protobuf, JSON, TestData) by @tylerkron in #128
- fix: isolate ParseFileAsync test to prevent parallel CI race by @tylerkron in #129
Full Changelog: v0.15.1...v0.16.0
v0.15.1
What's Changed
- fix: scan all messages for device config in SD card files by @tylerkron in #117
Full Changelog: v0.15.0...v0.15.1
v0.15.0 — SD Card File Management & Bootloader Protocol
Highlights
This release completes the SD card file management story and adds the PIC32 bootloader protocol layer. You can now list, download, delete, and format SD card files entirely through the core library, and parse .bin log files offline with full timestamp reconstruction.
New Features
📥 SD Card File Download (#115)
DownloadSdCardFileAsynconISdCardOperations/DaqifiStreamingDevice— downloads a file from the device SD card over USB/serialSdCardFileReceiverhandles raw byte streaming with__END_OF_FILE__marker detection (including markers split across chunk boundaries)ExecuteRawCaptureAsynconDaqifiDevicetemporarily pauses the protobuf consumer for direct stream access- Two overloads: write to any
Stream, or auto-save to a temp file - Progress reporting via
IProgress<SdCardTransferProgress> - Validates USB connection, stops streaming, and restores LAN interface automatically
📄 SD Card File Parser (#113)
SdCardFileParserreads varint32-prefixed protobuf.binfiles (same format as live streaming and SD logging)- Extracts device configuration (port counts, timestamp frequency, calibration, firmware info) from status messages
- Reconstructs absolute timestamps with uint32 rollover handling
- Streams samples via
IAsyncEnumerable<SdCardLogEntry>for memory-efficient processing of large files
🗑️ SD Card Delete & Format (#114)
DeleteSdCardFileAsyncandFormatSdCardAsynconISdCardOperations/DaqifiStreamingDevice- 8 new SCPI commands: delete, format, max file size, benchmark, stream interface control
StreamInterfaceenum (Usb,WiFi,SdCard,All) for routing data streams- Connection and logging state guards with filename validation
🔧 PIC32 Bootloader Protocol (#109)
- Transport-agnostic bootloader protocol layer ported from the desktop app
Pic32BootloaderMessageProducer— SOH/EOT framing, DLE escaping, CRC-16Pic32BootloaderMessageConsumer— response decodingIntelHexParser— HEX file parsing with protected memory range filteringIBootloaderProtocolinterface for dependency injection
Breaking Changes
None — all new APIs are additive.
Test Coverage
- 649 tests pass on both
net8.0andnet9.0 - SD card download tested end-to-end with real hardware over USB serial
Full Changelog: v0.14.0...v0.15.0
v0.14.0
What's Changed
- feat: Add SD card operations to core library by @tylerkron in #99
Full Changelog: v0.13.0...v0.14.0
v0.13.0
What's Changed
- feat: Ensure StreamMessageConsumer fully encapsulates protobuf for external consumers by @tylerkron in #104
Full Changelog: v0.12.0...v0.13.0
v0.12.0
What's Changed
- chore: Bump the minor-and-patch group with 1 update by @dependabot[bot] in #100
- feat: Add NetworkAddressHelper for protobuf network address decoding by @tylerkron in #103
Full Changelog: v0.11.0...v0.12.0
v0.11.0
What's Changed
- feat: Add serial connection support to DaqifiDeviceFactory by @tylerkron in #96
- feat: SerialDeviceFinder probes ports to identify DAQiFi devices by @tylerkron in #98
Full Changelog: v0.10.0...v0.11.0
v0.10.0 - Happy-Path Connect API
What's New
DaqifiDeviceFactory - Simplified Device Connections
Connect to DAQiFi devices with a single call instead of manually constructing transports:
// Before (5+ steps)
var transport = new TcpStreamTransport(host, port);
await transport.ConnectAsync(retryOptions);
var device = new DaqifiDevice("name", transport);
device.Connect();
await device.InitializeAsync();
// After (1 step)
using var device = await DaqifiDeviceFactory.ConnectTcpAsync(host, port);New Features
-
DaqifiDeviceFactory- Static factory class for simplified connectionsConnectTcpAsync(host, port)- Connect by hostname or IPConnectFromDeviceInfoAsync(deviceInfo)- Connect from discovery result- Sync versions available:
ConnectTcp(),ConnectFromDeviceInfo()
-
DeviceConnectionOptions- Configure connection behaviorDeviceName- Custom device identifierConnectionRetry- Retry options for unreliable networksInitializeDevice- Auto-run initialization sequence- Presets:
Default,Fast,Resilient
Documentation
- Updated README with connection examples
- New
docs/DEVICE_INTERFACES.mdwith comprehensive API guide - Removed obsolete migration notes
Quality
- 31 unit tests for the new factory API
- Port validation (1-65535) with clear error messages
- Proper resource cleanup on connection failure
ConfigureAwait(false)for library best practices
Usage Examples
// Simple connection
using var device = await DaqifiDeviceFactory.ConnectTcpAsync("192.168.1.100", 9760);
// With resilient options for unreliable networks
using var device = await DaqifiDeviceFactory.ConnectTcpAsync(
"192.168.1.100", 9760,
DeviceConnectionOptions.Resilient);
// From discovery
var devices = await finder.DiscoverAsync(TimeSpan.FromSeconds(5));
using var device = await DaqifiDeviceFactory.ConnectFromDeviceInfoAsync(devices.First());
// Stream data
device.MessageReceived += (s, e) => Console.WriteLine(e.Message.Data);
device.Send(ScpiMessageProducer.StartStreaming(100));Breaking Changes
None - this release is fully backwards compatible.
Full Changelog: v0.9.2...v0.10.0
v0.9.2
What's Changed
- Fix protobuf stream parsing for length-delimited messages by @tylerkron in #93
Full Changelog: v0.9.1...v0.9.2