# Changelog - FD2 All notable changes for FD2. > Releases before 25.08.02 were reconstructed from repository history because > project release tags and automated changelog generation did not yet exist. > Their dates use the best available version-changing commit or release commit. ## [26.08.01] - 2026-08-27 ### Added - [FD2/Authorization] Add a channel-wide option to control authorization re-arming after no-flow transactions - [FD2/Deer] Add operational Deer dispenser protocol support for serial and DBOX channels ### Changed - [FD2/Logging] Prevent idle log writing from delaying communication threads - [FD2/Tatsuno] Auto-detect the Tatsuno model as standard, 775, or hydrogen instead of using a binary 775 layout flag - [FD2/Kraus] Improve Kraus MICON capability detection, pricing, presets, totals, and DBOX communication ### Fixed - [FD2/Comms] Recover stale idle communication channels without interrupting active transactions - [FD2/Bennett] Preserve Bennett sale data when the armed state drops during a sale - [FD2/Kraus] Complete stopped no-flow authorizations after handle-down - [FD2/Wayne] Complete stopped no-flow authorizations after handle-down - [FD2/Tokheim] Correct TCS selection clearing, fill-up authorizations, MOP detection, and totals batching - [FD2/Conexxus] Keep transaction result prompts visible before requesting card removal - [FD2/Conexxus] Treat Bennett application-selection processing errors as blocked applications - [FD2/Wayne] Resend all configured prices before every Wayne authorization - [FD2/Conexxus] Prevent contactless reader reopen and false approval after POS handoff - [FD2/Authorization] Preserve authorization state across pump protocols during no-flow handle-down and preset recovery - [FD2/Wayne] Default fill-up authorization to cash, apply the supported preset limit, and skip sale and price reads when no hose is selected - [FD2/Wayne] Deauthorize confirmed no-flow handle-down transactions and end authorization when the nozzle is returned ## [26.07.08] - 2026-07-27 ### Changed - [FD2/DBOX] Add per-exchange latency and result diagnostics for DBOX communications ### Fixed - [FD2/Gilbarco] Correct protocol detection, totals completion, and stale end-of-transaction handling - [FD2/Conexxus] Replace stale reader sessions safely and keep the listener available after client disconnects ## [26.07.07] - 2026-07-20 ### Added - [FD2/Config] Add English, Spanish, and French localization to the configuration tool and help - [FD2/Dispenser] Add a configurable drive-away force stop that requires the nozzle to be lowered before resume ### Changed - [FD2/Release] Exclude version-only entries from release notes - [FD2/Config] Update configuration help for all current settings, protocols, validation, and workflows ### Fixed - [FD2/Bennett] Report Bennett sale prices and totalizers correctly during completed-sale pickup - [FD2/PCC] Return large PCC sale totals without rejecting valid responses - [FD2/Conexxus] Keep Conexxus prompts within valid IDs and wait for definition confirmation before display - [FD2/Kraus] Correct Kraus startup totals, preset overrun detection, and deauthorization cleanup - [FD2/Bennett] Keep Bennett startup and payout cleanup running when optional paid-out status commands are unsupported - [FD2/AMP] Stabilize AMP authorization, payout reset, pricing, and retained-sale handling ## [26.07.06] - 2026-07-15 ### Added - [FD2/price-signs] Add validated price delivery, display controls, and delivery status for supported price-sign protocols - [FD2/test-utility] Add OmegaJr diagnostics and price-sign testing workflows ### Changed - [FD2/Config] Add verified price-sign defaults and reject unsupported configuration combinations ### Fixed - [FD2/Dispenser] Keep pump-side polling stable while price commands add or remove dispensers ## [26.07.05] - 2026-07-14 ### Added - [FD2/Conexxus] Add Conexxus printer discovery and last displayed message reporting - [FD2/POS] Add PCC printer properties and expanded error reporting commands ### Changed - [FD2/Comms] Share dispenser protocol behaviors across serial and DBOX transports ### Fixed - [FD2/Comms] Improve DBOX framing, response handling, and disconnect recovery - [FD2/AMP] Prevent AMP sales cleared by the POS from being reported again ## [26.07.04] - 2026-07-09 ### Added - [FD2/IFSF] Implement IFSF XML POS handler support for authorization, fuel point control, live status responses, price changes, and price sign mode updates - [FD2/Config] Add PAM5000 POS protocol defaults to the configuration tool ### Changed - [FD2/POS] Clean backlog protocol handling across PCC, PAM, HyperPIB, serial defaults, and dispenser blend support ### Fixed - [FD2/Comms] Log dispenser connection state changes and tighten offline command handling ## [26.07.03] - 2026-07-09 ### Changed - [FD2/Build] Migrate the solution target framework and build requirement from .NET 9 to .NET 10 ### Fixed - [FD2/Gilbarco] Suppress repeated no-change end-of-transaction snapshots so stale FEOT data cannot block normal polling - [FD2/Comms] Mark channel dispensers offline on DBOX transport disconnect and reject queued control commands while offline ## [26.07.01] - 2026-07-02 ### Added - [FD2/Conexxus] Add separate production and testing EMV default data bundles - [FD2/Carwash] Add Ryko car wash startup and status support with shared result models - [FD2/transport] Add reusable serial transport behaviors for car wash integrations ### Changed - [FD2/Conexxus] Refine Conexxus reader processing and startup behavior - [FD2/PCC] Update PCC handling for current reader and EMV flows - [FD2/Integration] Reuse OLE bridge socket connections and normalize fueling-position command formatting ### Fixed - [FD2/Logging] Log FuelDirect socket fueling-position numbers with two digits - [FD2/Gilbarco] Require repeated over-limit reads before triggering overrun protection - [FD2/Gilbarco] Treat idle after active fueling as sale completion ## [26.06.05] - 2026-06-30 ### Added - [FD2/Integration] Add a legacy FuelDirect OLE bridge package for FD2 socket deployments - [FD2/Conexxus] Add Bennett and Wayne contactless integration, including startup configuration, application and key loading, reader status handling, and transaction completion - [FD2/Conexxus] Add a configurable manual magnetic-stripe fallback soft key with reader-side cancel and exit handling ### Changed - [FD2/install] Add installer packaging and simulator protocol support - [FD2/Conexxus] Load prompts early, display the reader startup message, separate contact and contactless application loading, and skip unsupported startup commands after repeated timeouts - [FD2/Conexxus] Reduce duplicate startup logging while preserving response details needed for reader validation ### Fixed - [FD2/Gilbarco] Prevent Gilbarco stop requests during re-arm from sending authorization or resume commands - [FD2/Conexxus] Correct TLV parsing and contactless AID default-data handling so supported tap applications can load and proceed - [FD2/Conexxus] Prevent disconnected readers from repeatedly retrying failed startup sends ## [26.06.04] - 2026-06-22 ### Changed - [FD2/Tokico] Follow the same poll/select pattern as Tatsuno - [FD2/Build] Add Release build code signing support for FD2 executables - [FD2/SMC] Reduce preliminary diagnostic logging after initial testing - [FD2/Gilbarco] Correct the deauthorization command sequence for NEL dispensers ### Fixed - [FD2/Build] Sign FD2 assemblies during Release builds so digital signature details appear on DLL outputs - [FD2/Tokheim] Improve authorization and price update compatibility with legacy Tokheim dispensers - [FD2/Tatsuno] Improve product-to-hose price and totals handling for legacy-compatible Tatsuno dispensers - [FD2/Gilbarco] Correct the extended-status request ## [26.06.02] - 2026-06-11 ### Added - [FD2/Gilbarco] Add NEL dispenser validation to preserve the correct deauthorization sequence in edge cases ### Changed - [FD2/Generic] Allow generic transports to use separate ports for multiple pump simulators ### Fixed - [FD2/PCC] Correct `!FE` response construction and separate channels to reduce response length ## [26.06.01] - 2026-06-02 ### Added - [FD2/AMP] Add the configuration path and use the correct headers ### Changed - [FD2/Gilbarco] Apply hose locking consistently whether or not hose testing is configured ### Fixed - [FD2/SMC] Correct the checksum calculation ## [26.04.02] - 2026-04-10 ### Added - [FD2/Channel] Add a separate connection for file transfers - [FD2/Gilbarco] Require a valid sale-data read before completing a sale ### Changed - [FD2/PCC] Build a set of binary packets for the `*V` command - [FD2/Bennett] Make status parsing more robust when the pump has not cleared its displays ## [26.04.01] - 2026-04-07 ### Added - [FD2/Bennett] Add status-change messages - [FD2/Bennett] Add a state-of-charge query for hydrogen dispensers - [FD2/Channel] Add watchdog tolerance for Tatsuno recovery - [FD2/Tatsuno] Poll-only recovery flow for desync and startup conditions - [FD2/Tatsuno] Startup CRC handling for TEXT 00 reply - [FD2/Bennett] Startup configuration now sets non-sticky grade-bit behavior - [FD2/Tokheim] Full startup configuration validation with model, hose, and decimal verification - [FD2/Tokheim] Startup clears hose, MOP, and selection state for TCS family dispensers - [FD2/Tokheim] Stable sale read validation before completing end-of-transaction - [FD2/Tokheim] Explicit selection clear at end-of-sale to restore idle display state ### Changed - [FD2/PCC] Update the PCC version number - [FD2/Wayne] Logging now follows CommonLogging pattern - [FD2/Tatsuno] Behavior now handles all polling, startup, and recovery - [FD2/Tatsuno] Startup sequence handled entirely in behavior (TEXT 00) - [FD2/Tatsuno] Command handling filters and repolls based on expected response types - [FD2/Tatsuno] Transport retries disabled; recovery maintained on active session - [FD2/Tatsuno] RX/TX logging aligned to logical payloads without extra chatter - [FD2/Bennett] End-of-transaction totals detection now validates across all hoses and avoids incorrect hose reassignment - [FD2/Bennett] Totals mode now falls back to legacy when totals are detected on unexpected hose - [FD2/Tokheim] Processing loop aligned with standard pump-side flow and logging behavior - [FD2/Tokheim] Authorization flow now validates status codes and enforces proper preconditions - [FD2/Tokheim] End-of-transaction flow now performs full completion sequence including AE/Deactivate handling - [FD2/Tokheim] Driveaway and stop logic refined to match active sale conditions and prevent false triggers ### Fixed - [FD2/Tatsuno] Correct status-change logging - [FD2/Channel] Restore channel behavior - [FD2/Tatsuno] Price commands no longer fail when poll returns no data - [FD2/Tatsuno] ACK handling enforces proper select and data completion rules - [FD2/PCCProtocol] Multi-hose lock parsing now accepts hex nibbles and rejects invalid protocol values - [FD2/Bennett] Multi-hose lock parsing now normalizes packed decimal values and prevents hose conflicts - [FD2/Bennett] Sale hose now resets correctly when no sale is active on startup - [FD2/Tokheim] Multi-hose lock handling now prevents single-hose conflicts and normalizes mask usage - [FD2/Tokheim] Cross-hose totals detection now correctly rebinds sale hose and pricing ## [26.03.04] - 2026-03-30 ### Added - [FD2/Gilbarco] Detect dispenser capabilities through startup command validation - [FD2/Bennett] Add startup feature probing with expanded and read-by-type commands, including alternative-fuel subtype support - [FD2/Bennett] Add structured parsing for dispenser status and specification error codes - [FD2/CommonLogging] Add options for consistent logging across protocols - [FD2/PMC] Add startup software and version validation - [FD2/PMC] Align end-of-sale handling with other pump-side protocols - [FD2/Transports] Add a REST API transport for API-based protocols - [FD2/AMP] Add an AMP protocol for AMP-compatible dispensers - [FD2/Transport] Add a byte queue for validating delayed loopback reception - [FD2/Transports] Separate transport behaviors to manage protocol-specific wire requirements ### Changed - [FD2/Transports] Use models for transport selection - [FD2/Gilbarco] Improve command 6 mode detection - [FD2/Gilbarco] Standardize logging with readable errors and function names - [FD2/Bennett] Require totals-mode identification before completing startup configuration - [FD2/Bennett] Fail startup when paid-out or idle-state validation cannot resolve the dispenser configuration - [FD2/Gilbarco] Suppress status change 0 because it reports an error in the previous message rather than a dispenser status - [FD2/Wayne] Allow expected minor framing variations in dispenser communication ### Fixed - [FD2/Kraus] Clear the stopped bit when a state transition becomes stuck - [FD2/Kraus] Configure the Kraus four-channel transport correctly - [FD2/SMC] Align the Develco SMC structure with known working implementations - [FD2/PMC] Accept 21- and 22-byte totals responses - [FD2/Gilbarco] Correct volume authorization in six-digit mode - [FD2/Gilbarco] Correct transport behavior when entering data mode - [FD2/Gilbarco] Recognize and parse all supported running-dollar response lengths - [FD2/Gilbarco] Correct the separated Gilbarco transport behavior ## [26.02.02] - 2026-03-10 ### Fixed - [FD2/DboxTransport] Prevent a possible race condition during disconnect and reconnect - [FD2/Gilbarco] Retain the stop state when a dispenser reports handle-up or idle instead of status C ## [26.02.01] - 2026-02-09 ### Changed - [FD2/Comms] Add initialization state to prevent startup from becoming stuck - [FD2/Comms] Wait until every dispenser has been checked and logged off before tearing down a channel - [FD2/Gilbarco] Refine hose-lock handling during fill-up authorization ## [26.01.03] - 2026-01-28 ### Changed - [FD2/Gilbarco] Validate command acceptance with a status check and accept responses that report no error ### Fixed - [FD2/Gilbarco] Correct preset handling when digit mode is invalid ## [26.01.02] - 2026-01-21 ### Changed - [FD2/Comms] Make the watchdog more tolerant during startup - [FD2/Gilbarco] Use 64-bit values for meter data from seven-digit dispensers ## [26.01.01] - 2026-01-14 ### Added - [FD2/Comms] Add a way to specify that no response is expected - [FD2/Docs] Add internal documentation - [FD2/Gilbarco] Add start-of-flow validation - [FD2/Global] Add cash or credit selection for fill-ups - [FD2/Bennett] Add serial baud-rate and parity settings for Bennett dispensers - [FD2/Bennett] Track sale start and completion for self-recovery - [FD2/Bennett] Filter commands that may not be supported by a dispenser model or version - [FD2/Bennett] Exit overrun protection when the dispenser is no longer off-hook ### Changed - [FD2/PCC] Update the PCC version and date - [FD2/Comms] Give each transport type its own interface and implementation - [FD2/Gilbarco] Improve function-level logging - [FD2/Comms] Send complete frames instead of chunks - [FD2/Comms] Improve receive-buffer management - [FD2/PMC] Ignore empty replies to one-byte commands that may be missed by faster PMC processors - [FD2/Comms] Separate DBOX communication logic to match device behavior ### Fixed - [FD2/Gilbarco] Ignore retained sale amounts during the first fuel-flow validation - [FD2/Logging] Correct internal logging - [FD2/Comms] Correct duplicated receive-drain logic - [FD2/Comms] Restore serial communication establishment - [FD2/Comms] Match legacy communication timing - [FD2/Bennett] Enforce the four-hose limit without querying nonexistent hoses ## [25.11.02] - 2025-11-07 ### Added - [FD2/Wayne] Add sale PPU revalidation even when the hose remains correct throughout the sale - [FD2/Kraus] Add support for the four-channel board - [FD2/Wayne] Add validation before falling back to non-BCD mode ### Fixed - [FD2/DispenserChannel] Initialize dispenser flags during setup ## [25.11.01] - 2025-11-04 ### Added - [FD2/PCC] Support commands with or without an explicitly specified hose - [FD2/Kraus] Add sale-end lock states ### Changed - [FD2/PCC] Define hose mappings when sending all hose prices in one message - [FD2/Conexxus] Separate connection management, processing, parsing, and command construction - [FD2/Conexxus] Refactor readers for asynchronous operation and separated responsibilities ### Fixed - [FD2/Wayne] Interpret non-BCD pulse counts at three decimal places before truncating to the configured precision - [FD2/PCC] Correct parsing for new `!F` commands - [FD2/PCC] Handle missing dispensers and hoses safely ## [25.10.03] - 2025-10-27 ### Added - [FD2/Dispenser] Add validation for hoses with pending price changes - [FD2/PCC] Add an option to receive all hose PPUs from the POS in one message - [FD2/PCC] Add commands to retrieve configuration and zipped logs - [FD2/Tatsuno] Add the legacy Tatsuno implementation - [FD2/Tokico] Add a specification-based Tokico implementation - [FD2/Kraus] Add stronger sale-completion validation - [FD2/PCC] Add channel-separated extended status for available dispensers - [FD2/Kraus] Force disarming when the dispenser reports collect - [FD2/ATG] Add INCON support through the TSA protocol - [FD2/SMC] Add the initial documented SMC pump-side implementation ### Changed - [FD2/Tatsuno] Port legacy communication behavior ### Fixed - [FD2/Kraus] Prevent duplicate sale-ready reporting after handle manipulation - [FD2/Kraus] Correct parsed-delta handling after handle manipulation - [FD2/Kraus] Correct end-of-sale behavior and edge-case handling - [FD2/Kraus] Pause and resend the preset when the dispenser reports pumping without a sale ### Removed - [FD2/Licensing] Remove temporary-license creation during initial startup ## [25.10.02] - 2025-10-15 ### Added - [FD2/Configuration] Add FuelDirect Socket to the configuration tool - [FD2/Wayne] Add an iGem2 detection command - [FD2/Wayne] Add variable-blend discovery and record blend ratios per dispenser - [FD2/DART] Add initial DART scaffolding and transport support ### Changed - [FD2/Wayne] Query positions 0 through 6 when available-position discovery fails - [FD2/Wayne] Derive hose mapping from available positions to prevent blend-index misalignment ### Removed - [FD2/Wayne] Remove unused functions ## [25.10.01] - 2025-10-07 ### Added - [FD2/Kraus] Add overrun detection - [FD2/Kraus] Disarm, restore the preset, and re-arm after unstable handle movement ### Fixed - [FD2/Kraus] Correct totals handling - [FD2/Kraus] Correct control handling - [FD2/Kraus] Improve dispenser communication reliability ## [25.09.05] - 2025-10-03 ### Added - [FD2/Licensing] Add mapped error codes for more precise licensing diagnostics - [FD2/Wayne] Revalidate configuration when hoses are added after initial setup - [FD2/Wayne] Log the complete startup configuration process and failure reason - [FD2/Wayne] Add dynamic hose and grade translation - [FD2/Wayne] Add blend-slot discovery - [FD2/Wayne] Parse the valid-hose bitmask and populate available positions - [FD2/Wayne] Add hose and blend discovery during startup ### Changed - [FD2/Wayne] Map single-hose locks consistently with multi-hose locks for SC82 dispensers - [FD2/Logging] Use a per-file semaphore to coordinate log writing - [FD2/dispenser] Refactor pump configuration for clearer control flow and tolerant blend queries - [FD2/Wayne] Resolve Wayne hose, internal hose, and blend indexes with fallbacks and logging - [FD2/Wayne] Normalize fixed- and variable-blend indexes consistently ### Fixed - [FD2/Wayne] Correct the order of operations - [FD2/Logs] Include the version in previously unversioned logs - [FD2/dispenser] Correct hose-lift mapping so the lifted hose matches the physical position - [FD2/Wayne] Correct internal and Wayne hose-number offsets - [FD2/Wayne] Guard against invalid indexes and missing blend data - [FD2/Wayne] Deduplicate available positions and log invalid hose indexes ## [25.09.04] - 2025-09-25 ### Added - [FD2/Generic] Add hose-lock and multi-hose-lock management to the pump simulator - [FD2/Docs] Add Wayne documentation - [FD2/PumpSim] Add multi-hose-lock support - [FD2/Conexxus] Add per-reader transaction tracing ### Changed - [FD2/DispenserChannel] Normalize lines for VB6 compatibility - [FD2/Tokheim] Align status, arm, and flow checks with Wayne and legacy FuelDirect - [FD2/Kraus] Align status, arm, and flow checks with Wayne and legacy FuelDirect - [FD2/Folders] Move source files into related folders - [FD2/logs] Split Conexxus logs into per-remote-IP files - [FD2/startup] Decouple reader startup from heartbeats ### Fixed - [FD2/Conexxus] Handle disconnects and reconnects without excessive CPU usage - [FD2/FDSocket] Handle messages containing hose-lock and multi-hose-lock values - [FD2/Wayne] Correct arming and re-arming for non-BCD dispensers - [FD2/POS] Restore the previous connection behavior - [FD2/FDSocket] Correct multi-hose-lock management - [FD2/Wayne] Allow handle changes while a non-BCD dispenser is armed and paused - [FD2/Dispenser] Validate hose locks for BCD and non-BCD dispensers - [FD2/FDSocketHandler] Correct multi-hose locks, displayed prices, and dispenser-information mapping - [FD2/Wayne] Re-pause and re-arm non-BCD dispensers after a hose change - [FD2/GDM] Prevent deauthorization while fuel is flowing - [FD2/FDSocket] Align socket behavior with the original developer guide - [FD2/Conexxus] Disable fallback by default - [FD2/GRM] Remove sync-over-async startup behavior that could deadlock channel initialization - [FD2/queues] Correct dequeue and clear operations to target the intended queues ## [25.09.01] - 2025-09-04 ### Fixed - [FD2/Startup] Add startup guards and precise failure logging - [FD2/Protocol] Add POS socket command builders ## [25.08.03] - 2025-09-01 ### Added - [FD2/FuelDirectSocket] Add an OLE-compatible socket handler with pricing, authorization, sale payout, control, system-version, error-queue, and live-sale commands ### Fixed - [FD2/Wayne] Preserve the correct sale price when the initially reported hose differs from the final sale hose ## [25.08.02] - 2025-08-29 ### Added - [FD2/Docs] Add per-project changelog hooks, workflow, and initial structure ## [25.08.01] - 2025-08-17 Maintenance release; no additional user-facing changes were identifiable from the available history. ## [25.07.02] - 2025-08-11 ### Added - [FD2/Conexxus] Display an offline message and close the reader when its dispenser is unavailable ### Changed - [FD2/POS] Begin asynchronous POS-channel processing and remove superseded socket code - [FD2/Bennett] Update protocol handling and supporting documentation ### Fixed - [FD2/Pricing] Validate dispenser price changes before applying them ## [25.07.01] - 2025-07-04 ### Fixed - [FD2/Wayne] Correct BCD value conversion used by Wayne sale processing - [FD2/Conexxus] Back off reader connection attempts to avoid aggressive retry loops ## [25.06.02] - 2025-06-04 ### Changed - [FD2/Logging] Expand controller diagnostics for dispenser troubleshooting ## [25.06.01] - 2025-06-02 ### Fixed - [FD2/Wayne] Re-establish lost communication automatically and retain the correct sale price - [FD2/Bennett] Preserve off-hook state and allow configured fallback reader behavior ## [25.05.06] - 2025-05-15 ### Changed - [FD2/Dispenser] Debounce dispenser state transitions to reduce unstable input changes ## [25.05.04] - 2025-05-07 ### Fixed - [FD2/FlowRate] Reset flow-rate state correctly between sales - [FD2/Gilbarco] Ignore a previous sale amount temporarily returned at the start of a new sale ## [25.05.02] - 2025-05-06 ### Added - [FD2/Gilbarco] Store high- and low-feed data and support preset confirmation on compatible dispensers ### Changed - [FD2/Authorization] Add protocol timing before sending authorization commands ### Fixed - [FD2/Dispenser] Clear retained sale amounts on authorization so overrun protection does not stop a new sale incorrectly ## [25.03.03] - 2025-03-17 ### Added - [FD2/Licensing] Add a recovery tool for clearing unusable local license data - [FD2/Wayne] Add configurable BCD sale reads with automatic pulse-count fallback ### Changed - [FD2/Dispenser] Centralize additional hose details in the dispenser model - [FD2/Logging] Allow dispenser communication logging to be configured ### Fixed - [FD2/Generic] Send deauthorization correctly and preserve cash or credit MOP selection - [FD2/Wayne] Correct volume calculation for affected calibration factors - [FD2/PCC] Correct grade locking and large totals handling ## [25.03.01] - 2025-03-06 ### Added - [FD2/Gilbarco] Add NEL hydrogen dispenser support - [FD2/Licensing] Expand license validation and test coverage ### Changed - [FD2/Dispenser] Move shared hose state and totals handling into the dispenser model - [FD2/Logging] Include fueling-position context consistently in dispenser logs ### Fixed - [FD2/Updater] Correct update queries - [FD2/Everbrite] Correct price-sign decimal handling ## [25.02.02] - 2025-02-23 ### Added - [FD2/Dispenser] Add structured hose information to dispenser diagnostics ### Changed - [FD2/IFSF] Expand price-scheduling and list handling backed by the database ## [25.02.01] - 2025-02-23 ### Added - [FD2/IFSF] Add database-backed scheduled price changes ### Fixed - [FD2/Authorization] Reject a new authorization while the previous sale is still being processed - [FD2/PAM] Correct protocol parsing and command handling - [FD2/Wayne] Strengthen end-of-transaction validation ## [25.01.03] - 2025-02-12 ### Fixed - [FD2/Authorization] Prevent authorization until the pending sale has completed processing ## [25.01.02] - 2025-01-20 ### Fixed - [FD2/Logging] Prevent missing-decimal diagnostics from flooding logs and increasing memory use - [FD2/Gilbarco] Correct retained state during sale transitions - [FD2/Wayne] Correct sale-state validation ## [25.01.01] - 2025-01-17 ### Added - [FD2Configuration/Readers] Add reader-channel configuration - [FD2/Startup] Enforce a single running controller instance ### Fixed - [FD2/PCC] Correct F1 response construction and checksum generation - [FD2/Bennett] Apply totals validation consistently ## [24.12.04] - 2024-12-19 ### Added - [FD2Configuration] Add an initial Windows configuration editor - [FD2Configuration/Readers] Begin reader configuration support - [FD2/Installer] Package controller configuration and shared utilities ### Fixed - [FD2/Wayne] Correct slow-flow and non-BCD calculations - [FD2/Bennett] Clear stop state after overrun protection ## [24.12.03] - 2024-12-08 ### Added - [FD2/VR350] Add Veeder-Root VR350 tank-gauge support - [FD2/PCC] Add ATG report responses ## [24.12.02] - 2024-12-05 ### Changed - [FD2/Storage] Move controller data to the shared application-data location - [FD2/Licensing] Update license storage and recovery behavior ## [24.12.01] - 2024-12-04 ### Added - [FD2/Database] Add asynchronous SQLite and MySQL support - [FD2/ATG] Add tank configuration and delivery retrieval ### Changed - [FD2/build] Migrate the controller to .NET 9 - [FD2/Wayne] Add slow-flow handling ### Fixed - [FD2/Dispenser] Correct initial dispenser creation and loading ## [24.11.10] - 2024-11-27 ### Changed - [FD2/Logging] Prefix channel logs with one consistent controller version - [FD2/PMC] Complete pending communication and diagnostic handling - [FD2/Wayne] Add an additional hose-shift validation ### Fixed - [FD2/Comms] Read ASCII protocol data with the correct encoding ## [24.11.08] - 2024-11-22 ### Added - [FD2/Configuration] Allow dispenser settings to inherit completely from channel defaults ### Fixed - [FD2/Wayne] Preserve and log the sale hose while a hose transition is being resolved ## [24.11.07] - 2024-11-20 ### Fixed - [FD2/PMC] Correct communication and end-of-transaction handling - [FD2/Bennett] Prevent the dispenser from remaining stuck in stopped state - [FD2/PCC] Restore missing protocol references ## [24.11.06] - 2024-11-18 ### Fixed - [FD2/POS] Apply POS-channel decimal places correctly ## [24.11.05] - 2024-11-18 ### Changed - [FD2/Dispenser] Rework end-of-transaction sale retrieval - [FD2/PMC] Update protocol state and totals handling ### Fixed - [FD2/Dispenser] Retrieve the hose before finalizing a sale when no hose was previously available ## [24.11.04] - 2024-11-13 ### Changed - [FD2/Logging] Include the controller version in runtime logs ### Fixed - [FD2/Bennett] Re-establish communication after an extended outage - [FD2/Gilbarco] Avoid repeated stop processing when an armed dispenser has not started fueling ## [24.11.02] - 2024-11-08 ### Changed - [FD2/Comms] Limit retry loops and cancel failed communication tasks cleanly - [FD2/POS] Improve socket connection lifecycle management ## [24.10.05] - 2024-11-06 ### Fixed - [FD2/Bennett] Correct single-display dispenser handling - [FD2/Configuration] Load channel defaults before applying dispenser overrides ## [24.10.04] - 2024-11-05 ### Changed - [FD2/Configuration] Store settings reliably and apply channel defaults before dispenser-level overrides - [FD2/Storage] Serialize dispenser JSON updates asynchronously ### Fixed - [FD2/Licensing] Continue license validation when the expected local file is missing - [FD2/Bennett] Remove an incompatible extra totals check at end of sale ## [24.10.02] - 2024-10-23 ### Added - [FD2/Gilbarco] Add protection against ghost sales - [FD2/Bennett] Add protection against ghost sales ### Changed - [FD2/Licensing] Add redundant license storage and online time validation ### Fixed - [FD2/Wayne] Validate totals during sale completion - [FD2/Conexxus] Clear reader keys correctly ## [24.10.01] - 2024-10-04 ### Changed - [FD2/Bennett] Improve hose and grade mapping ### Fixed - [FD2/Bennett] Correct grade handling ## [24.09.02] - 2024-09-11 ### Changed - [FD2/Gilbarco] Strengthen hose-test state handling ### Fixed - [FD2/Generic] Report sale volume correctly - [FD2/PCC] Handle ten-digit extended values ## [24.09.01] - 2024-09-09 ### Fixed - [FD2/PCC] Remove an invalid `R` marker from read-price responses - [FD2/PCC] Handle the documented `E` authorization field ## [24.08.04] - 2024-08-29 ### Added - [FD2/PriceSigns] Add tested PWM, Gilbarco Passport, Bever, Verifone-compatible, Everbrite, Novyc, and Numeritex drivers - [FD2/Startup] Enforce a single application instance by application identifier - [FD2/Security] Add one-way protection for reader track data ### Fixed - [FD2/Bennett] Detect dispenser decimal places - [FD2/Readers] Return failure for unfinished amount-setting commands ## [24.08.03] - 2024-08-22 ### Changed - [FD2/Conexxus] Move reader connections to managed thread-pool workers - [FD2/POS] Move socket clients to managed workers to avoid unbounded connection threads ### Fixed - [FD2/Dispenser] Create a missing hose when a queued command races dispenser creation - [FD2/PCC] Use dispenser defaults when request decimal places are omitted - [FD2/PCC] Format read-price commands correctly ## [24.08.02] - 2024-08-14 ### Added - [FD2/PriceSigns] Add the price-sign simulator and generic price-sign protocol ### Fixed - [FD2/Wayne] Correct sale-in-progress handling for affected Colombian installations ## [24.08.01] - 2024-08-01 ### Changed - [FD2/Bennett] Refactor totals parsing and complete the initial dispenser implementation - [FD2/Gilbarco] Require detected decimal settings instead of relying on defaults - [FD2/Wayne] Correct decimal detection order ### Added - [FD2/Bennett] Add overrun protection ## [24.07.02] - 2024-07-31 ### Added - [FD2/Bennett] Complete CL and RS-485 dispenser support - [FD2/PumpSimulator] Add Bennett simulator bindings ### Fixed - [FD2/Dispenser] Add an additional guard before clearing sale amounts for a new sale ## [24.07.01] - 2024-07-05 ### Changed - [FD2/Bennett] Distinguish cash and credit price tiers ### Fixed - [FD2/Bennett] Correct tier selection and end-of-sale reauthorization ## [24.06.04] - 2024-06-27 ### Added - [FD2/Gilbarco] Auto-detect enhanced protocol support and optional command 6 and 7 data - [FD2/Gilbarco] Read decimal settings through special-function commands - [FD2/Wayne] Read decimal settings from the dispenser - [FD2/Dispenser] Detect preset overflow and force a stop ### Fixed - [FD2/Authorization] Stop the authorization sequence after any protocol step times out ## [24.06.03] - 2024-06-13 ### Fixed - [FD2/Gilbarco] Recover startup when a dispenser remains armed after power loss ## [24.06.02] - 2024-06-12 ### Added - [FD2/Licensing] Detect and report bootleg installations - [FD2/FlowRate] Add shared and Bennett flow-rate reporting - [FD2/Gilbarco] Add configurable leading-digit handling ### Changed - [FD2/Gilbarco] Select totals commands from BCD capability and simplify pulse-count handling ### Fixed - [FD2/Gilbarco] Correct price and totals sequencing, running-volume calculation, stop/resume loops, and zero-sale completion - [FD2/DriveAway] Avoid false drive-away state after preset completion or an explicit stop - [FD2/Bennett] Correct startup communication and sale-state handling ## [24.03.13] - 2024-03-13 ### Added - [FD2/IFSF] Add simulator commands and automated protocol test cases - [FD2/Pricing] Add feed-stock pricing and dispenser price verification ### Changed - [FD2/Authorization] Distinguish cash and credit pricing through authorization ### Fixed - [FD2/Logging] Include MOP and hose context consistently ## [24.03.01] - 2024-03-04 ### Added - [FD2/Installer] Add controller installation and update packaging - [FD2/Conexxus] Add the initial production reader integration - [FD2/Bennett] Add CL and RS-485 communication with totals support - [FD2/Tokheim] Add the initial Tokheim pump-side implementation - [FD2/IFSF] Add mode, product, configuration, limit, and price-management commands - [FD2/PriceSigns] Add initial Bever, PWM, Gilbarco, and other sign protocols - [FD2/EMV] Add Global Payments and Datawire integration foundations - [FD2/PAM1000] Add pump totals, authorization, stop, and dispenser-type handling - [FD2/ATG] Add Veeder-Root and HyperPIB command foundations - [FD2/Mannatec] Add the Mannatec dispenser protocol ### Changed - [FD2/Gilbarco] Improve hose-price validation and Ethernet timing - [FD2/Wayne] Request totals for all sale payouts - [FD2/build] Migrate FD2 to .NET 8 ### Fixed - [FD2/Wayne] Correct BCD presets, totals, staggered-sale processing, and deauthorization without a sale - [FD2/Gilbarco] Correct blender pricing, authorization, totals, and end-of-sale processing ## [23.11.10] - 2023-12-07 ### Added - [FD2/Conexxus] Add the initial Conexxus reader implementation - [FD2/Wayne] Add validated Wayne protocol support and supporting documentation - [FD2/Updater] Add package download and extraction ### Changed - [FD2/Dispenser] Make queued dispenser additions and removals safe across controller loops ### Fixed - [FD2/Mechanical] Remove invalid hoses and correct communication logging ## [23.11.05] - 2023-11-08 ### Changed - [FD2/Logging] Add dispenser-thread and access-lock lifecycle diagnostics ### Fixed - [FD2/Gilbarco] Correct multi-hose locking - [FD2/Gilbarco] Prevent stopped hose tests from reauthorizing a dispenser ## [23.11.04] - 2023-11-07 ### Changed - [FD2/Logging] Support three-digit global fueling-position identifiers - [FD2/Storage] Remove unused dispenser JSON files after configuration changes - [FD2/PCC] Serialize dispenser access for pump-control commands ### Fixed - [FD2/GUI] Return pump information for positions above the first channel - [FD2/Gilbarco] Correct deauthorization with the handle down and sale retrieval on later channels - [FD2/PCC] Set F1 hose bits only while the hose is off-hook ## [23.11.03] - 2023-11-06 ### Changed - [FD2/DBOX] Preserve receive ordering in communication logs - [FD2/PCC] Return numeric MOP values in sale reports - [FD2/Logging] Use millisecond timestamps and global dispenser identifiers ### Fixed - [FD2/Gilbarco] Preserve sale hose, prevent false resume logging, retain drive-away state, and parse totals prices correctly ## [23.11.02] - 2023-11-02 ### Changed - [FD2/Gilbarco] Include PPU details in totals logs and expect the correct one-byte status response ## [23.11.01] - 2023-11-02 ### Added - [FD2/Gilbarco] Add totals, hose-test, special-function, unit-type, drive-away, and flow diagnostics ### Fixed - [FD2/Dispenser] Prevent concurrent pump creation or deletion from blocking the POS - [FD2/Gilbarco] Correct cash fill-up MOP selection and reauthorization after deauthorization ## [23.10.05] - 2023-11-01 ### Added - [FD2/PCC] Add the F1 dispenser-status command ### Changed - [FD2/Gilbarco] Retry communication before declaring a dispenser offline ### Fixed - [FD2/GUI] Resolve pump information by fueling position - [FD2/Storage] Fall back to the backup when the primary JSON file is empty - [FD2/Gilbarco] Correct drive-away detection for presets and sale startup ## [23.10.04] - 2023-10-31 ### Added - [FD2/Bennett] Add the initial Bennett pump-side implementation - [FD2/Logging] Add default communication logs and move logs and JSON files under `PIE_Data` - [FD2/Dispenser] Add serialized dispenser access for POS commands ### Changed - [FD2/Gilbarco] Request all-hose totals once, enable hose testing by default, and speed single-byte polling ### Fixed - [FD2/Gilbarco] Correct volume presets, unit-type detection, and totals polling during active sales ## [23.10.01] - 2023-10-19 ### Added - [FD2/Gilbarco] Add the Gilbarco pump-side protocol, pricing, hose tests, special functions, and DBOX communication - [FD2/PMC] Add PMC dispenser support and preset configuration - [FD2/Mechanical] Add the mechanical pump-side protocol - [FD2/Wayne] Add the initial Wayne pump-side implementation - [FD2/PCC] Add extended POS commands and multi-hose-lock authorization ### Changed - [FD2/Dispenser] Centralize channel defaults and poll only dispensers that can communicate - [FD2/DBOX] Match legacy per-protocol timeouts and log invalid received data ### Fixed - [FD2/Gilbarco] Correct authorization hose selection, byte order, totals parsing, and running sale values - [FD2/PMC] Correct preset-mode and volume-preset handling ## [23.08.01] - 2023-08-08 ### Added - [FD2/Generic] Add a complete generic dispenser lifecycle for simulation - [FD2/CommonLogging] Add shared dispenser-event logging and optional console output - [FD2/HyperPIB] Add the initial HyperPIB handler skeleton ### Fixed - [FD2/Generic] Correct authorization without a lifted handle and repeated deauthorization handling - [FD2/PCC] Apply configured sale-report limits ## [23.07.01] - 2023-07-14 ### Added - [FD2/Core] Add the initial headless FD2 controller and GUI shell - [FD2/PCC] Add the initial PCC POS protocol handler - [FD2/PAM] Add the initial PAM POS protocol handler - [FD2/Configuration] Add XML configuration loading - [FD2/PumpSimulator] Add the initial pump simulator project