B2: HostHandler status + subscription senders

Adds the five GEM event-subscription primitives the host needs to drive
the equipment's data-collection lifecycle (E30 §6.11):

  S1F3/F4    selected status data
  S1F11/F12  status variable namelist
  S2F33/F34  define reports
  S2F35/F36  link event reports
  S2F37/F38  enable/disable events

Each is a one-line wrapper over the codegen builders + Connection's
send_request, surfacing the codegen-generated DefineReportEntry /
LinkEventEntry structs to callers behind a {id, [vids]} pair API.

This is the minimum surface a host needs to walk a fresh equipment
through "define report -> link CEID -> enable" and start receiving
S6F11 event reports — the same pattern the existing demo client does
inline.  B3 lands the RCMD / recipe / job / terminal senders that
build on top.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 22:50:37 +02:00
parent 63bb0cf933
commit 95ebcc3aac
2 changed files with 61 additions and 0 deletions
+25
View File
@@ -71,6 +71,31 @@ class HostHandler : public std::enable_shared_from_this<HostHandler> {
// S1F15/F16 Request Offline. Counterpart to go_remote().
void go_offline(ReplyHandler cb);
// ---- Status + subscription senders (B2) -------------------------------
// S1F3/F4 Selected Status Data: empty `svids` requests every SVID.
void send_selected_status(const std::vector<uint32_t>& svids, ReplyHandler cb);
// S1F11/F12 Status Variable Namelist: empty `svids` requests every name.
void send_status_namelist(const std::vector<uint32_t>& svids, ReplyHandler cb);
// S2F33/F34 Define Report. `reports[i] = {rptid, [vids]}`; an empty
// rptid list per request resets that report (per E30 §6.11).
void send_define_reports(
uint32_t dataid,
const std::vector<std::pair<uint32_t, std::vector<uint32_t>>>& reports,
ReplyHandler cb);
// S2F35/F36 Link Event Reports. `links[i] = {ceid, [rptids]}`.
void send_link_event_reports(
uint32_t dataid,
const std::vector<std::pair<uint32_t, std::vector<uint32_t>>>& links,
ReplyHandler cb);
// S2F37/F38 Enable/Disable Events. Empty `ceids` = all.
void send_enable_events(bool enable, const std::vector<uint32_t>& ceids,
ReplyHandler cb);
// ---- Low-level: forward a primary verbatim ----------------------------
void send_request(secs2::Message msg, ReplyHandler cb);