diff --git a/include/secsgem/gem/host_handler.hpp b/include/secsgem/gem/host_handler.hpp index a22f417..2a5e370 100644 --- a/include/secsgem/gem/host_handler.hpp +++ b/include/secsgem/gem/host_handler.hpp @@ -71,6 +71,31 @@ class HostHandler : public std::enable_shared_from_this { // 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& svids, ReplyHandler cb); + + // S1F11/F12 Status Variable Namelist: empty `svids` requests every name. + void send_status_namelist(const std::vector& 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>>& reports, + ReplyHandler cb); + + // S2F35/F36 Link Event Reports. `links[i] = {ceid, [rptids]}`. + void send_link_event_reports( + uint32_t dataid, + const std::vector>>& links, + ReplyHandler cb); + + // S2F37/F38 Enable/Disable Events. Empty `ceids` = all. + void send_enable_events(bool enable, const std::vector& ceids, + ReplyHandler cb); + // ---- Low-level: forward a primary verbatim ---------------------------- void send_request(secs2::Message msg, ReplyHandler cb); diff --git a/src/gem/host_handler.cpp b/src/gem/host_handler.cpp index 1861042..cfd36de 100644 --- a/src/gem/host_handler.cpp +++ b/src/gem/host_handler.cpp @@ -81,6 +81,42 @@ void HostHandler::go_offline(ReplyHandler cb) { send_request(s1f15_request_offline(), std::move(cb)); } +void HostHandler::send_selected_status(const std::vector& svids, + ReplyHandler cb) { + send_request(s1f3_selected_status_request(svids), std::move(cb)); +} + +void HostHandler::send_status_namelist(const std::vector& svids, + ReplyHandler cb) { + send_request(s1f11_status_namelist_request(svids), std::move(cb)); +} + +void HostHandler::send_define_reports( + uint32_t dataid, + const std::vector>>& reports, + ReplyHandler cb) { + std::vector entries; + entries.reserve(reports.size()); + for (const auto& [rptid, vids] : reports) entries.push_back({rptid, vids}); + send_request(s2f33_define_report(dataid, entries), std::move(cb)); +} + +void HostHandler::send_link_event_reports( + uint32_t dataid, + const std::vector>>& links, + ReplyHandler cb) { + std::vector entries; + entries.reserve(links.size()); + for (const auto& [ceid, rptids] : links) entries.push_back({ceid, rptids}); + send_request(s2f35_link_event_report(dataid, entries), std::move(cb)); +} + +void HostHandler::send_enable_events(bool enable, + const std::vector& ceids, + ReplyHandler cb) { + send_request(s2f37_enable_event(enable, ceids), std::move(cb)); +} + void HostHandler::send_request(s2::Message msg, ReplyHandler cb) { conn_->send_request(std::move(msg), std::move(cb)); }