Skip to content

Releases: daqifi/daqifi-core

v0.17.0

18 Feb 04:19
33bdeea

Choose a tag to compare

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

13 Feb 20:45
45b95d3

Choose a tag to compare

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

07 Feb 06:27
39d4774

Choose a tag to compare

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

06 Feb 18:55
1baa78e

Choose a tag to compare

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)

  • DownloadSdCardFileAsync on ISdCardOperations / DaqifiStreamingDevice — downloads a file from the device SD card over USB/serial
  • SdCardFileReceiver handles raw byte streaming with __END_OF_FILE__ marker detection (including markers split across chunk boundaries)
  • ExecuteRawCaptureAsync on DaqifiDevice temporarily 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)

  • SdCardFileParser reads varint32-prefixed protobuf .bin files (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)

  • DeleteSdCardFileAsync and FormatSdCardAsync on ISdCardOperations / DaqifiStreamingDevice
  • 8 new SCPI commands: delete, format, max file size, benchmark, stream interface control
  • StreamInterface enum (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-16
  • Pic32BootloaderMessageConsumer — response decoding
  • IntelHexParser — HEX file parsing with protected memory range filtering
  • IBootloaderProtocol interface for dependency injection

Breaking Changes

None — all new APIs are additive.

Test Coverage

  • 649 tests pass on both net8.0 and net9.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

04 Feb 21:30
bcab70c

Choose a tag to compare

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

04 Feb 04:27
2ad0ecf

Choose a tag to compare

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

03 Feb 04:26
344e47f

Choose a tag to compare

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

26 Jan 22:20
3803041

Choose a tag to compare

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

19 Jan 20:52
71a17fb

Choose a tag to compare

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 connections

    • ConnectTcpAsync(host, port) - Connect by hostname or IP
    • ConnectFromDeviceInfoAsync(deviceInfo) - Connect from discovery result
    • Sync versions available: ConnectTcp(), ConnectFromDeviceInfo()
  • DeviceConnectionOptions - Configure connection behavior

    • DeviceName - Custom device identifier
    • ConnectionRetry - Retry options for unreliable networks
    • InitializeDevice - Auto-run initialization sequence
    • Presets: Default, Fast, Resilient

Documentation

  • Updated README with connection examples
  • New docs/DEVICE_INTERFACES.md with 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

19 Jan 20:05
af25ee3

Choose a tag to compare

What's Changed

  • Fix protobuf stream parsing for length-delimited messages by @tylerkron in #93

Full Changelog: v0.9.1...v0.9.2