PMBus seeds OUTPUT_VOLTAGE/OUTPUT_ENABLE from the device and resyncs after NVM restore; MicroHAPS init now restores PMBus from NVM
PMBus cache refreshed after NVM restore; odd-length hex register input accepted; MTP write delay no longer spent on RESTORE_USER_ALL
ESH10000662 PSU refinements: output-enable persistence, separate temperature channel, POUT dropped, scoped acquisition with per-channel sample count
and output clamps
PMBus PowerSupply output-capability registers for ESH10000533/556/662; ESH10000533 drops CH1/CH2 IOUT_OC_WARN_LIMIT cal rows, STATUS_* registers
stay visible
CRPS current derived from MFR_POUT_MAX; CRPS GUI capabilities; crps.csv marks MFR_MAX_TEMP_1/2 non-volatile
Devices
MAX6650 fan control: tach/prescaler auto-ranging and RPM scaling fixed, real FAN_RPM_MAX, hysteresis, linear curve, open-loop drive, manual bring-up
channels
New MPM54304 native I2C device (MP5470 quad buck) and TMP236 analog temperature transfer function
AD5593R: standalone temperature measurement with rolling average; reads chunked to the 8192-byte i2c-dev limit
MCP47FXBX: per-channel debug logging, updates pushed regardless of ValueChanged
New B12N-PANEL extension module (AD5593R + MPM54304 behind the connector mux)
MicroHAPS / HCI
Deterministic cold-start via PSM-probe gate, faster JTAG, power cycle restored (required to bring rails to voltage)
Stray XVC reaped before FTDI bring-up; redundant HCI-shim retry dropped; I2C recovery and FTDI handle release
Batched I2C scan restored
Platform / firmware
Short bus reads (I2C/SPI) now fail loudly instead of silently truncating — in both webapiclient and webapiclient-python
BootConfig atomic write with self-heal on empty/corrupt
mDNS hostname pinned to the static IP (fixes dual-IP avahi self-conflict)
systemd journal capped at boot to prevent rootfs exhaustion
MCP2221A udev rule installed at boot
Disposable modules now disposed on service reset / engine reload
AGENT MINI (ESH10000597 R1): ADC monitor scaling correction, PCF8523 RTC removed; temporary SPI1 GPIO test pins added and then removed
HciGpioAlias.csv regenerated; sdl1020.csv unit fixes (power V→W, resistance V→ohm)
WebApiClient packaging: PackageLicenseExpression (MIT) plus repository/project URLs
5.15.0
Release
CRPS power supply
Advertise PowerSupply capability registers to the GUI: OUTPUT_MAX/MIN_SETVOLTAGE, OUTPUT_MAX/MIN_CURRENTLIMIT, OUTPUT_VOLTAGE/CURRENTLIMIT_SETTABLE.
Max output current now derived from the device's MFR_POUT_MAX rating ÷ 12 V instead of a hardcoded figure.
MFR_MAX_TEMP_1/2 marked non-volatile (cached instead of re-read on every access).
MicroHAPS
I2C bus recovery (clock SCL until SDA releases, then START/STOP) on board-I2C open and before every scan — fixes a stuck/half-clocked bus on bring-up.
FTDI D2XX handle now released on the finalizer path, so an FT4232H interface is no longer stranded after a module reload.
MCP2221A hidraw udev rule installed at boot so the non-root service can open the CRPS USB-HID bridge without manual provisioning.
PowerSupply framework (PMBus)
Output bound/settability capabilities advertised on all PMBus PowerSupply instruments, gated on the handler having configured limits.
Light Table PSU (ESH10000662)
Now exposed as two PowerSupply instruments (CH1/CH2) with the full capability set, OUTPUT_ENABLE (drives EN + OUT lines), and READ_VOUT/IOUT/TEMPERATURE.
Scoped per-channel ADC acquisition — a single VMON read no longer triggers the slow IMON acquisition; #Samples governs IMON only.
READ_POUT dropped (unreliable when the current clamps and VMON collapses).
5.14.0
Release
🆕 New Features
Extension: MicroHAPS Handler (MicroHAPS / FT4232H) — new
New MicroHapsHandler extension added to the solution
FTDI/I²C/JTAG bring-up with a JTAG arbiter and HCI merge
HCI throughput improvements, speed negotiation, and channel-surface cleanup
Auto-detaches the ftdi_sio kernel driver at boot and exposes a raw board I²C channel
Releases FT4232H interfaces on unload (fixes a reload failure)
Extension: Snowball — new
New Snowball extension (Lattice CPLD GPIO expander over delegated I²C), backed by a new SnowballCpld device in DeviceLibrary
CRPS (PMBus power supply)
Migrated the handler to Smdn.Devices.Mcp2221A (removed the old MCP2221IO dependency)
GPIO on/off control and fixed-output voltage handling
VOUT_COMMAND now reported as a fixed 12 V setpoint
Curated device register map attached to the PowerSupply instrument (PAGED); telemetry registers marked Volatile
Module: ESH10000662 (Light Table PSU)
Added a NumericResultChannel wired to the ADC for sampled acquisition
Added an ADC die-temperature channel
Added a configurable NUMBER_OF_SAMPLES counter channel (range 100–10000, default 1000), applied to the next acquisition pass
Acquisition now uses the new TrimmedMean result type with a 10% trim ratio
IMONx now reports 0 when its converter is disabled (reading is unreliable while off)
Reported analog/temperature values rounded to 1 decimal
Device: AD5593R / AD5592R (AD559x)
New TrimmedMean acquisition result type with a configurable TrimRatio — discards the most mean-deviating samples before averaging to reject outliers
New devices
APDS9306 (light sensor) added to DeviceLibrary
🐛 Bug Fixes
CRPS: fixed a stack overflow in PMBus GetStatus
ESH10000662 calibration: guards against missing calibration keys (no more NullReferenceException); zeroes outputs after a calibration is applied so engineering setpoints don't shift
Module lifecycle: modules are now disposed on unload so they release hardware resources
PMBus: the general meter instrument is no longer created when nothing attaches to it
Deploy: web services are now restarted (not started) on redeploy so fresh binaries load
Cleared build warnings (unused catch vars, dead flag)
5.13.0
Release
Release Date: Type: Feature Release
Now supports USB port enable/disable (see boot.config)
Audit endpoint in the webapi reveals who connected when
Guard for ratiometric values outside 0-1 (clamps to edges)
Cleanup for docker NICs (not shown)
5.12.0
Release
Release Date: Type: Bug fix
• Fix nmcli privilege errors when running as accordion user — The application now runs all network manager commands (nmcli, ip, arping, etc.) via sudo, resolving Insufficient privileges errors introduced when the process was moved from running as root to the accordion user
• Use which for binary detection — Replaced command -v (shell builtin, unreliable under sudo's restricted PATH) with which when checking for required binaries like nmcli
• Graceful handling of blank service entries in boot.config — Service entries with an empty serviceFile are now skipped with a warning instead of passing an empty string to systemctl, which caused Too few arguments errors
• Fix accordion.service systemd unit — Moved StartLimitBurst, StartLimitIntervalSec, and StartLimitAction from [Service] to [Unit] where they belong, eliminating systemd warnings on startup
5.11.0
Release
Release Date: Type: Feature Release
Firmware-ready for LED Zeppelin project
Fixed recursion bug when resetting the system.
Fixed overflow bug in PMBUS
5.10.0
Release
Release Date: Type: Feature Release
🆕 New Features
Calibration API
New REST endpoints for calibration management:
GET /api/calibration/channels — list all calibration channels
GET /api/calibration/table — read the current calibration table
POST /api/calibration/table — write/apply a new calibration table
Alias / NetName interoperability — all resource read, write and transact endpoints now accept either a channel's Alias or its NetName interchangeably, making scripts portable across hardware revisions
.NET Client (AccordionQ2.WebApiClient 5.10.0 on NuGet)
Added CalibrationGroup with full calibration models and client registration
Added CalibrationGroup API documentation
Python Client (accordionq2 5.10.0 on PyPI)
Added CalibrationGroup with full calibration models and documentation
Migrated version scheme to setuptools-scm (version is now derived from git tag automatically)
UART Configuration
UartTransactionRequest now accepts numeric fields (BaudRate, etc.) as strings for flexible JSON serialisation
Added a default DeviceName fallback for UART transactions
PortName removed from UartTransactionRequest — port is resolved server-side from DeviceName
Full UART device configuration exposed: port, baud rate, bus type, flow control, parity
Module: ESH10000590 (Precision Source)
Split single DataBus into separate ADC bus and DAC bus for independent routing
Bus signal names renamed from MPIOxx → ADCxx / DACxx
Added NumericResultChannel wired to all ADC inputs; sample rate is applied to the ADS124S08 before acquisition
Added DigitalChannelDAC_GAIN to control AD5675R DoubleDacGain at runtime
Added MultiplexerChannelADC_GAIN to control ADS124S08 PGA gain (8 steps: GAIN_1 … GAIN_128)
Module: ESH10000662 (Light Table PSU)
Added virtual DigitalChannelHIGH_RANGE — when set to true, enables 0–5 V (2×VREF) range on both ADC and DAC of the AD5593R and immediately rewrites all DAC outputs with the correct codes for the new reference voltage
Device: AD5675R / AD567x_Base
DoubleDacGain can now be hot-switched at runtime without losing current channel voltages — all DAC outputs are rewritten automatically
Fixed: REF_SETUP register is now written during Reset() so the gain configuration is applied to hardware at startup
Device: ADS124S08
Implemented GetNumericResults for sequential per-channel acquisition
Fixed: PGA gain factor, conversion timing, and reported sample rate are now correct
🐛 Bug Fixes
Calibration
ESH10000556:OUTPUT_CURRENTLIMIT readback no longer returns a value affected by calibration Gain/Offset — the user-set value is now stored in the channel object on write and returned directly on read (matching OUTPUT_VOLTAGE behaviour)
ESH10000590:LoadCalibrationTable now uses StripFullNetName for keys so CSV files with short position-independent names are applied correctly (was silently no-op on every write-back)
ESH10000590:ApplyCalibrationValues now checks for key existence and logs an error instead of throwing NullReferenceException on missing keys
AD5593R / AD5592R / AD567x: DAC output values that calculate below 0 V due to a positive calibration offset are now clamped to 0 V with a warning log instead of throwing ArgumentOutOfRangeException — setting 0 on a channel with a positive offset no longer faults
HAL / Host
CommHandler: verbose communication logging disabled (ShouldLog = false) to reduce log noise
HardwareAbstractionImpl: FirmwareRevision now delegates to HostInformation rather than duplicating the logic
HostInformation: FirmwareRevision now uses an absolute path, handles empty results gracefully, and correctly strips the .version extension from the filename
⚙️ Infrastructure
CI: WebApiClient tests now exclude Integration and Performance categories that require live hardware
CI: WebApiClient build targets project files explicitly and uses the .NET 10 runner
5.9.0
Release
Release Date: Type: Feature Release
New/Improved
Changed how the UART transaction works through the WebApi
5.8.0
Release
Release Date: Type: Feature Release
Bug Fixes
Concurrent access could sometimes interfere with each other
5.7.0
Release
Release Date: April 22, 2026
Type: Feature Release
Bug Fixes
Accordion service in 5.6.0 had a faulty parameter, preventing start of the service.
5.6.0
Revoked!
Release Date: April 20, 2026
Type: Feature Release
Bug Fixes
WebAPI — First call after hardware reconnect returns 503 (accordionq2) Fixed a race condition in WaitForConnectionAsync(TimeSpan) where the old completed TaskCompletionSource was captured before the disconnect event had a chance to reset it. The first WebAPI call after a hardware restart would incorrectly fast-path through the wait and immediately return 503. The fix loops briefly until the TCS is properly reset before awaiting reconnection.
New Features / Changes
ESH10000534 — PoE RESTART_CLASSIFICATION channel (accordionuno) Added a RESTART_CLASSIFICATION digital output channel to the PoE module. Writing to it triggers a re-run of PoE classification (detect/power-enable/detect-class sequences). Also refactored PoE initialisation: SetRelay(POLARITY.NORMAL) is now called on successful init, and poe1 is nulled out on failure to allow clean retry.
Infrastructure / Internal
Protocol server — IPv4-only binding (protocolserver)
Both ProtocolServer and ProtocolClient now explicitly disable DualMode and bind to IPAddress.Any (IPv4) instead of IPv6Any. This resolves connectivity issues on targets where IPv6 dual-stack is not available.
TPS23881 — Register read logging enabled; dependency bumps (devicelibrary) Register reads now log at Info(log4net.ILog, object, string, int) level for diagnostics. Package versions bumped: CsvHelper 33.1.0, Iot.Device.Bindings 4.2.0, UnitsNet 5.75.0.
5.4.0
Release
Release Date: April 19, 2026
Type: Feature Release
NET10
Fixes for PoE R4, FE R4
Fixes for Accordion M1
5.2.0
Release
Release Date: April 12, 2026
Type: Feature Release
Fixes for communication issues
Added swagger + node red
Fully async
Added mDNS broadcasting
Support for Accordion M1
Bug fixes
4.1.1
Release
Release Date: March 5, 2026
Type: Feature Release
🎯 Overview
Release 4.1.1 introduces a revolutionary dual-connection network fallback system that dramatically improves network reliability and reduces failover time from over 100 seconds to just 10-12 seconds. This release also includes comprehensive diagnostic tools and complete documentation to support field deployment and troubleshooting.
✨ New Features
Dual-Connection Network Fallback
Fast Failover: Reduced DHCP timeout from 100+ seconds to 10-12 seconds
21 diagnostic sections covering all network aspects
Timestamped log files for support and troubleshooting
Includes NetworkManager logs, connection details, routing, DNS, and connectivity tests
🐛 Bug Fixes
Manual Connection Address Handling: Fixed NetworkManager limitation where manual connections must have at least one address during creation
Address Update Logic: Implemented atomic replacement strategy to avoid "cannot be empty" errors when updating static IP addresses
Timestamp Border Formatting: Fixed alignment in diagnostic script headers
📚 Documentation
New Documentation
README.md: Comprehensive project documentation with quick start guide, network architecture overview, and troubleshooting
NETWORK_FALLBACK_IMPLEMENTATION.md: Detailed technical documentation of dual-connection architecture, including configuration steps and expected behaviors
DIAGNOSTIC_SCRIPTS_README.md: Complete guide for using diagnostic tools with examples and troubleshooting workflows
Configuration Standards
.gitattributes: Enforces LF line endings for shell scripts across platforms
.vscode/settings.json: Consistent development environment configuration
🔧 Technical Improvements
Line Ending Management: Cross-platform compatibility for shell scripts (LF enforced)
Dependency Reduction: Replaced nslookup with ping for DNS testing, reducing package requirements
ARP Conflict Detection: Maintains arping-based conflict detection for static IP configuration
📊 Network States
With DHCP Server (Typical Deployment)
Active Connection: ESharp-eth0-DHCP
IP Addresses:
- 192.168.0.222/24 (Static, configured)
- 192.168.0.XXX/24 (DHCP, dynamic)
Gateway: From DHCP server
Internet: Available via DHCP gateway
Without DHCP Server (Direct Connection Mode)
Active Connection: ESharp-eth0-Direct
IP Addresses:
- 192.168.0.222/24 (Static only)
Gateway: None
Internet: Local subnet only
Failover Time: ~10-12 seconds from DHCP attempt
🚀 Deployment Impact
Performance
90% reduction in network failover time (100s → 10-12s)
Improved reliability with automatic fallback
Zero-downtime network reconfiguration
Operations
Simplified troubleshooting with diagnostic scripts
Color-coded status output for quick visual assessment
Comprehensive logs for support escalation
Self-documenting network configuration
Field Support
Quick network check can be run by field technicians without sudo
Full diagnostics capture all necessary information for remote support