▲ third-party integrators · MDM · clients
stable public contract
core
Integration API Layer
the only thing outsiders touch
Semi-Integrated Interface stable
start / cancel / status / result. The contract third parties build against — never changes when devices or acquirers do.
startTransaction()getResult()
MDM Integration core+hooks
Surfaces reader firmware / RKI / RRC / config to the Headwind-managed host, so device and reader management live in one pane.
device_updateFirmwaredevice_startRKIdevice_rrc*
calls canonical operations only
core
Transaction Engine
speaks canonical — never raw TLV
Contactless State Machine ~20%
Orchestrates start → async callback events → online auth → completion. Owns cancel / reset / timeout. The beating heart.
ctls_startTransactionctls_displayOnlineAuthResultdevice_resetTransaction
Canonical Model ~15%
Normalizes IDTEMVData TLV into one internal representation. The engine speaks only this — the seam that makes reuse real.
IDTEMVDatacreateFastEMVData
Observability ~8%
PCI-secure logging, event stream, audit trail. Feeds Velo downstream. No PAN/track data ever persisted.
log_setSaveLogEnablelog_setVerboseLoggingEnable
canonical ⇄ TLV translation boundary
◆ The Seam
Above this line: pure canonical, device- and acquirer-agnostic. Below & beside it: everything that varies. Keeping this line clean is the entire reuse thesis — and the two go/no-go checkpoints test exactly this.
configure on-device kernel · drive lifecycle
core
Configuration & Key Management
pushes parameters into the on-reader kernel
Parameter Loader ~12%
AID application data, terminal data, config groups, transaction parameters — pushed to the kernel, then read back & check-value verified.
ctls_setApplicationDatactls_setTerminalDatactls_setConfigurationGroupemv_setTransactionParameters
Cryptography & Keys ~10%
CAPK lifecycle, CRL, remote key injection, CA certs, KSN retrieval. Online-auth crypto handshake into kernel completion.
ctls_setCAPKemv_setCRLdevice_startRKIdevice_loadCertCAdevice_getKSNemv_authenticateTransaction
thin HAL — wrap & normalize, do not drive
boundary
Hardware Abstraction (thin HAL)
the SDK is most of the HAL
IDT_NEO2 Wrapper ~10%
Connect / lifecycle / transport behind one stable internal interface. Wraps the async OnReceiverListener callback model.
device_connectdevice_setPollModedevice_setNEOGenOnReceiverListener
Device Specifics variable
VP3350 first, Kiosk V second. Per-device quirks kept here, never in the core. Checkpoint B proves this stays contained.
device_setDeviceTypedevice_getProductType
USB / BLE / RS232 / audio
▼ ID TECH reader — L1 hardware + L2 kernel in firmware (we never touch it)