Bump Daqifi.Core from 0.24.0 to 1.4.0 - #46
Merged
Conversation
--- updated-dependencies: - dependency-name: Daqifi.Core dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Daqifi.Core from 0.24.0 to 1.4.0.
Release notes
Sourced from Daqifi.Core's releases.
1.4.0
Verified end-to-end against a DAQiFi Nyquist (firmware 3.7.2) over USB: serial discovery, connect + populated init, 100 Hz streaming, SD card list/storage, and LAN chip info all pass. Full unit suite green (2,531 tests) on net9.0 and net10.0.
Highlights
IAsyncDisposable— connect and teardown now honor aCancellationToken, and devices can beawait using'd. (#341, #416)Features
DeviceCapabilitiesmerges the device's own live capability document, so what a device reports wins over compiled-in assumptions. (#390, #404)SendFailedevent instead of vanishing. (#413)Reliability & fixes
ConnectionStatus.Lostreachable. (#403)DeviceNotConnectedException. (#395, #402)ResetAllsemantics, and theVerifyingoverload. (#398, #405)LISTis no longer reported as an empty card. (#396, #400)IsEnabledtracks the device — protobuf field 22 is parsed. (#409, #411)Internal
DaqifiStreamingDeviceandFirmwareUpdateServicesplit into focused collaborators. (part of #344, #419, #422)Full Changelog: daqifi/daqifi-core@v1.3.0...v1.4.0
1.3.0
Verified end-to-end against a DAQiFi Nyquist (firmware 3.7.2) over USB: serial discovery, connect + populated init, 100 Hz streaming, SD card list/storage, diagnostics, and LAN chip info all pass. Full unit suite green (1,932 tests) on net9.0 and net10.0.
Highlights
IAsyncEnumerable<LiveSample>— consume decoded, calibrated samples withawait foreachinstead of wiring up event handlers and decoding protobuf yourself. (#334, #359)AllTransportsDeviceFinderplusDiscoverAndConnectAsyncfind a device over USB or WiFi in one call, and a new connected-device registry catches the same unit showing up on two transports. (#338, #354, #381)TimestampGapDetectorflags gaps in the device timestamp sequence so you can tell a clean capture from a lossy one. (#339, #353)DeviceFeatureplusSupports()let you ask a device what it can do instead of hard-coding firmware version checks. (#256, #389)Features
SetFriendlyNameAsyncfor renaming a device from code. (#355)StreamingFrequencyis validated before it reaches the device. (#336, #337, #349)ILogger(defaults toNullLogger). (#340, #360, #361)Firmware / bootloader
Reliability & fixes
CalBis now also exposed un-scaled byInternalScaleM, matching firmware's calibration math. (#387, #392)ClearBuffer, restoredCloneWINC flag, health telemetry, and channel-bounds/bipolar-scaling validation. (#297, #300, #328, #331, #332, #335, #346, #348, #350)Full Changelog: daqifi/daqifi-core@v1.2.0...v1.3.0
1.2.0
Verified end-to-end against a DAQiFi Nyquist (firmware 3.7.2) over USB: discovery, streaming (10 Hz–1 kHz), SD card list/storage/logging/download, diagnostics, LAN chip info, and firmware download all pass. Full unit suite green (1,524 tests) on net9.0 and net10.0.
Highlights
StatusMessageReceivedandStreamMessageReceivedevents let consumers subscribe to status vs. stream traffic without inspecting raw protobuf. (#323)DeviceMetadata.FriendlyName. (#313)InitializeAsyncretries transient SCPI errors and throws a typed exception on failure. (#295, #317)Features
SdCardFileParserFactory.TryDetectFormatandSupportedExtensionsfor format sniffing. (#318)SdCardLogEntry.HasDeviceTimestampto distinguish device- vs. host-stamped entries. (#321)DeviceMetadata.CopyFromandDeviceCapabilities.Clonefor snapshotting device state. (#319)WifiBridgeActivator.Deactivateto explicitly own the transparent-mode exit. (#315)Firmware / bootloader
JMP_TO_APPsoft-reset when the health check fails. (#312)LAN:APPLYonce on a-200LAN-not-initialized error to self-heal WiFi bring-up. (#203, #324)CheckWifiFirmwareStatusAsync. (#320)Reliability & fixes
WifiBridgeActivatorfrom uncancellableSerialPort.Open()hangs. (#326)IChannelinstances stable acrossPopulateChannelsFromStatus(no churn on re-populate). (#314)Full Changelog: daqifi/daqifi-core@v1.1.1...v1.2.0
1.1.1
What's Changed
Full Changelog: daqifi/daqifi-core@v1.1.0...v1.1.1
1.1.0
What's Changed
Full Changelog: daqifi/daqifi-core@v1.0.0...v1.1.0
1.0.0
🎉 1.0.0
This release marks the 1.0.0 milestone for
Daqifi.Core. The public API is now stable under semantic versioning — breaking changes will bump the major version. The library supports DAQiFi firmware v3.5.0+ (per ADR 0001), and it is the foundation the DAQiFi desktop application is migrating onto.What's new
📊 Decoded per-frame sample pipeline (#279)
Core now decodes each live stream-data frame into per-channel samples and raises
IChannel.SampleReceived, instead of only re-raising the rawDaqifiOutMessage. Consumers no longer have to hand-demux frames — channel ordering, calibration scaling, digital bit-unpacking, and rollover-aware timestamps all live in Core. Closes #242.AnalogInDataFloat) are used directly; WiFi raw ADC counts (AnalogInData) are scaled per channel viaIAnalogChannel.GetScaledValue. Digital bytes are bit-unpacked to per-channel high/low for input-direction channels.IDataSample.RawValue(raw ADC count,nullon the float path),IDataSample.DeviceTimestamp(raw device tick of the frame),SampleReceivedEventArgs.Channel, and anIChannel.SetActiveSample(IDataSample)overload.MessageReceivedconsumers are unchanged — the raw re-raise still fires first. Decoding runs only whileIsStreamingand is best-effort per frame, so a malformed frame can't tear down the stream.Validated end-to-end on a real Nyquist 1 over USB serial, exercising the calibration-scaling path with monotonic frame-aligned device timestamps.
🔌 Digital output, first-class (#280)
Digital output (
SetDioDirection/SetDioValue) existed in Core but was undocumented, unexposed over MCP, and unverified on hardware. It's now a first-class, hardware-validated capability — including a stream decode fix: digital stream bits are now indexed by channel number (bit N is pin N, matching how the firmware snapshots the whole DIO port), instead of by position in the enabled-channel list. Previously, enabling a subset of digital channels read the wrong pins — e.g. enabling only DIO 4 read pin 0's state.configure_digital_channels,set_digital_direction, andset_digital_output(auto-switches an input channel to output so one call drives a pin).list_channelsnow reportsOutputValuefor digital channels;get_device_statusreportsEnabledDigitalChannels.src/Daqifi.Mcp/README.md.Validated on a Nyquist 1 over USB with physical loopbacks — raw SCPI and Core end-to-end, including streaming a strict subset of digital channels (the exact scenario the old positional decode fails).
⚡ PWM output (#281)
Adds PWM output as a first-class, hardware-validated capability, building on #280.
SetPwmEnabled(channel, bool)andSetPwmDutyCycle(channel, 1–100)are per channel;SetPwmFrequency(6–50,000 Hz)is device-wide, because all PWM channels share one hardware timer — a per-channel frequency API would mislead.IDigitalChannelgainsIsPwmCapable(populated from the firmware board mask — channels 0, 3, 4, 5, 6, 7), plusIsPwmEnabled/PwmDutyCyclePercentbookkeeping that survives status refresh.set_pwm_output(duty + optional device-wide frequency + enable in one call) anddisable_pwm.list_channelsnow reportsPwmCapable/PwmEnabled.Validated on a Nyquist 1 over USB: commanded duty and frequency measured through a physically wired loopback from streamed samples (exactly 40 rising edges in 4 s at 10 Hz), including a live duty change and disable → drive-low handback.
Full Changelog: daqifi/daqifi-core@v0.28.0...v1.0.0
0.28.0
What's new
🤖 MCP server — drive a device from an AI agent (#277)
A new
Daqifi.Mcpproject ships a Model Context Protocol server so an AI agent (Claude Desktop/Code, Cursor, Codex, or any MCP-aware client) can control a DAQiFi Nyquist device end-to-end — no application code required. It's a thin, in-process layer overDaqifi.Core, distributed as adotnet tool.Tools:
discover_devices,connect_device,list_connected_devices,disconnect_device,get_device_status,list_channels,configure_analog_channels,set_sample_rate,start_sd_logging,stop_sd_logging.Scope is the basic control loop — discover, connect, configure analog channels + sample rate, and run on-device SD-card logging. (Live data streaming and SD file list/download are planned follow-ups.)
dotnet tool install -g Daqifi.Mcp, then point your client at thedaqifi-mcpcommand.--read-onlymode and a--max-sample-rate-hzclamp; the 1000 Hz hardware ceiling is always enforced.src/Daqifi.Mcp/README.md.Validated end-to-end against a real Nyquist 1 (firmware 3.6.2) over USB.
🔎 Discovery: echo-on devices are now found (#272, #268)
Serial discovery now resynchronizes the protobuf parser past echo/prompt noise, so devices with command echo enabled are discovered correctly instead of being skipped.
Also in this release
DaqifiDevice.GetChannelsSnapshot()— a lock-protected channel snapshot that is safe to enumerate off the device consumer thread (used by the MCP layer, and useful for any out-of-process consumer).Daqifi.Mcp.NET tool to NuGet, and theDaqifi.Corepush is idempotent (--skip-duplicate) so re-running a release no longer fails on already-published versions.Full Changelog: daqifi/daqifi-core@v0.27.0...v0.28.0
0.27.0
What's Changed
Full Changelog: daqifi/daqifi-core@v0.26.0...v0.27.0
0.26.0
What's new
HidLibraryTransport.ExclusiveAccess— opens a HID device exclusively (WindowsdwShareMode=0via HidSharp; macOS IOKitkIOHIDOptionsTypeSeizeDevice) so no other user-mode opener can touch it while the handle is held. Best-effort: a refused exclusive open falls back to a shared open. Enables grabbing and holding a sitting PIC32 HID bootloader and locking out other openers during a flash. (#274)Open() failure paths capture and chain both open causes and dispose leaked partial streams.
0.25.0
WiFi (WINC) flash lifecycle owned by Core (#270)
Core now owns the full WiFi-module flash lifecycle so consumers don't reimplement orchestration (closes the core of #269).
Highlights
Operation completed successfully, configurable viaWifiFlashSuccessMarker) — not from the unreliable exit code or a duration heuristic. This correctly fails the "tool couldn't open the port → returned in ~1s with no output" case,Programming device failed, and partial failures.PostLanDisconnectPortReleaseDelay), so the tool can actually open the COM port.WincBootPromptResponseDelay+ an injectableWifiBridgeActivationCallbackfired at the "Power cycle WINC" prompt (raw-serial specifics stay host-side).WifiFlashAttempts/WifiFlashRetryDelay); genuine programming failures are not retried.New
FirmwareUpdateServiceOptionsPostLanDisconnectPortReleaseDelay,WincBootPromptResponseDelay,WifiBridgeActivationCallback,WifiFlashAttempts,WifiFlashRetryDelay,WifiFlashSuccessMarker.Hardware-validated against a WINC1500 module. Full test suite green.
0.24.1
fix(discovery): disable echo before the serial identity probe so echo-on devices are found (#267)
Restores serial discovery of freshly-booted / never-connected (echo-on) DAQiFi devices, which v0.22.0–v0.24.0 silently dropped because the echoed SYSInfoPB? reply couldn't be framed by the protobuf parser.
Commits viewable in compare view.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)