D2: E87 wire messages (S3F17/F18 + F23/F24 + F25/F26 + F27/F28)

Adds the Carrier Management wire surface that drives the FSMs from D1:

  S3F17 / S3F18  CarrierAction (host issues ProceedWithCarrier /
                 CancelCarrier / BindCarrierID / etc.; CommandParameter
                 list is reused from S2F41).
  S3F23 / S3F24  PortGroupChangeReport (equipment notifies host of port
                 group composition changes).
  S3F25 / S3F26  CarrierTransfer (host instructs source -> target port
                 transfer).
  S3F27 / S3F28  CancelCarrier (host cancels an outstanding carrier op).

Two new ack enums in messages_helpers.hpp:
  CarrierActionAck — CAACK byte; covers the common error responses
                     (CarrierIDUnknown, Inaccessible, ActionInProgress).
  PortGroupAck     — PGACK byte (Accept / Error).

Round-trip tests for all four pairs.  Server-side dispatch + the
CarrierStore + LoadPortStore that the FSMs key into land in D3/D4.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-08 00:11:35 +02:00
parent 94c26c0771
commit 5f1444c756
3 changed files with 174 additions and 0 deletions
+18
View File
@@ -171,4 +171,22 @@ enum class MapDataAck : uint8_t { // S12F8 MAPER
AbortNoMap = 3,
};
// E87 §10.2 carrier-action ack code (CAACK). Same byte used by S3F18,
// S3F26 (carrier transfer), and S3F28 (cancel carrier).
enum class CarrierActionAck : uint8_t {
Accept = 0,
Invalid = 1,
ParameterInvalid = 2,
CarrierIDUnknown = 3,
CarrierActionInvalid = 4,
CarrierInaccessible = 5,
CarrierActionInProgress = 6,
};
// E87 §10.4 port-group change ack code.
enum class PortGroupAck : uint8_t {
Accept = 0,
Error = 1,
};
} // namespace secsgem::gem