SET 与 ACTION
头文件:<dlt698/protocol/apdu/mutation.hpp>,命名空间 dlt698::protocol::apdu。
SET
- Normal 恰含一项,NormalList 非空。
value必须是精确类型Data。库不替你把整数转成合适的协议类型。- 响应直接保存 DAR,按请求顺序一一对应。
ACTION
Warning
ActionResult::data 的三态
std::optional<model::Data> 区分三种情况,不要用 has_value() 之外的方式判断:
把后两种混为一谈会丢失"远端确实返回了一个 NULL"这个信息。
ACTION 调用完整 OMD,包含 mode 字节。Session 会检查模式字节是否与请求一致。
编解码入口
- 普通形式必须恰好一项,列表形式必须非空,否则返回错误。
- 编码响应时始终不附加 FollowReport。
- then-get 形式和带非空 FollowReport 的消息返回
unsupported_service。
DAR 的常见取值
各接口实际可能返回的取值见协议覆盖范围。
重试语义
库不会自动重试
SET 和 ACTION 有副作用。超时或取消只说明本地没有得到确定响应,不能证明远端没有执行。因此:
- 库不自动重试,也不自动回滚部分成功。
- 列表操作按顺序独立执行,部分成功不回滚。
async_release()也不保证远端未执行已发出的 SET/ACTION。
需要幂等保证或事务语义,得自己在应用层实现。