4.2 KiB
InterfaceOutsideToGCI
High-Level Overview
Purpose
Public API facade for external applications.
Architecture
External App ↓ InterfaceOutsideToGCI ↓ InterfaceGCIToLaatzen ↓ Meter
Purpose
InterfaceOutsideToGCI is the public-facing API entry point of Genesis Cordonel Interface (GCI).
The class exposes a simplified and controlled interface intended for external applications while hiding internal implementation details.
Responsibilities:
- input validation
- public API exposure
- request model mapping
- forwarding calls into internal GCI services
- status notifications
- preadjustment workflow access
Architecture Position
External Application
↓
InterfaceOutsideToGCI
↓
InterfaceGCIToLaatzen
↓
ApiWorker
↓
MeterBatch
↓
GenesisMeter
This layer intentionally acts as a facade and should contain minimal business logic.
Design Goals
The API layer exists to:
- expose stable external contracts
- isolate external consumers from internal changes
- centralize validation
- simplify integration
- hide internal meter implementation details
Request Flow
Typical operation flow:
External caller
↓
parameter validation
↓
model mapping
↓
InterfaceGCIToLaatzen
↓
worker execution
↓
meter communication
Slot Management
Supports:
- slot initialization
- slot update
- slot cleanup
- slot information retrieval
Methods:
- InitSlotAsync()
- UpdateSlotAsync()
- GetSlotAsync()
- GetAllSlotsAsync()
- CleanSlotAsync()
- CleanAllSlotsAsync()
Port Detection
Supports automatic communication port detection.
Available operations:
DetectRequestPortAsync()
Attempts PCB communication through request channel.
DetectStreamingPortAsync()
Attempts streaming communication detection.
Purpose:
- automatic setup
- communication diagnostics
- hardware discovery
Meter Lifecycle
Supported lifecycle operations:
Initialize
↓
Login
↓
Connect
↓
Read/Write
↓
Disconnect
↓
Clean
Methods:
- LoginOneSlotAsync()
- ConnectOneSlotAsync()
- DisconnectAsync()
Register Access
Provides firmware register access.
ReadRegisterAsync()
Reads register values from meter firmware.
WriteRegisterAsync()
Writes register values.
Optional behavior:
- storeToDevice
- refreshSystemState
Password Management
Supports runtime password changes.
Methods:
- SetPasswordAsync()
- SetMeterPasswordAsync()
Validation:
- slot id required
- password cannot be empty
PCB Operations
Supports meter PCB identification.
Methods:
- GetPcbIdAsync()
Purpose:
- hardware identification
- diagnostics
- meter pairing
Debug Support
Provides runtime diagnostics.
Methods:
- GetWorkerDebugStatuses()
- GetMeterBatchDebugStatuses()
Exposes:
- worker queues
- activity states
- slot status
- connection state
Slot Selection Support
Supports selection state management.
Methods:
- SetSlotSelected()
- IsSlotSelected()
- GetSelectedSlots()
Purpose:
Used by UI and batch operations.
Meter Batch Notifications
Event:
MeterBatchStatusChanged
Purpose:
Notify external consumers whenever meter batch state changes.
Typical usage:
api.MeterBatchStatusChanged += UpdateUi;
PreAdjustment Support
Exposes standalone preadjustment workflow execution.
Supported processes:
- Detect
- Preparation
- Amplitude Test
- Temperature Calibration
- Offset Test
- Completion
Execution flow:
Detect
↓
Preparation
↓
Amplitude Test
↓
Temperature Calibration
↓
Offset Test
↓
Completion
Threading
Public operations are asynchronous.
Pattern:
await api.ConnectOneSlotAsync(slot);
Internally:
API
↓
InterfaceGCIToLaatzen
↓
ApiWorker
↓
slot-specific execution
This prevents concurrent access conflicts.
Notes
Important constraints:
- API should not contain business logic
- validation belongs here
- execution belongs to internal GCI
- external applications should use this layer only