Releases: newton5555/LLRPCSharp
Release list
LLRPCSharp v2.0.5
LLRPCSharp 2.0.5 Release Notes
Release Date: 2026-08-31
正式版(非预览)。
Reader inventory takeover
- Added
LlrpReader.PrepareInventoryTakeoverAsync(ResourceTakeoverPolicy.ReplaceAll)
for applications that must explicitly silence an already-running inventory before
querying or deploying a replacement. - The new entry point requires
ReplaceAlland uses LLRP identifier-zero deletion
for all standard ROSpec and AccessSpec resources; the defaultPreserveForeign
workflow remains non-destructive toward foreign resources. - Managed
StartInventoryAsyncandApplySettingsAsyncnow preflight after the
selected cleanup phase, so an exclusive takeover does not query the resource graph
before the device has been silenced.
Diagnostics and compatibility
- Increased the default high-level request timeout from 10 to 30 seconds for slower
readers while keeping connection and frame-assembly timers unchanged. - Timeout exceptions now include the request message ID, request type, expected
response type, and a clear missing-response diagnosis. - Added regression coverage for cleanup ordering, explicit takeover policy enforcement,
and timeout diagnostics.
Package boundary
LlrpSdk,LlrpSdk.Extensions.Impinj,LlrpSdk.Extensions.Zebra, and
LlrpDevice.Virtual.Hostingare published at version2.0.5.
Verification
- The release build and automated tests are required to pass in the release workflow
before the packages are published. - Physical-reader verification is run against the available reader and recorded
separately in the reader interoperability evidence.
Full Changelog: v2.0.4...v2.0.5
LLRPCSharp v2.0.4
LLRPCSharp 2.0.4 Release Notes
Release Date: 2026-08-27
正式版(非预览)。
Reader configuration safety
- GPO output updates now remain configuration-only and no longer redeploy the
managed inventory resource just because an output state changes. - Idempotent cleanup recognizes the missing-resource responses used by both
common LLRP 1.0.1 readers and Zebra readers. - Added regression coverage proving that GPO updates do not delete the SDK's
ROSpec or AccessSpec.
Compatibility and package boundary
- LLRP 1.0.1, 1.1, and 2.0 SDK baselines remain available.
LlrpDevice.Virtual.Hostingremains the public virtual-device entry point.- The SDK packages
LlrpSdk,LlrpSdk.Extensions.Impinj,
LlrpSdk.Extensions.Zebra, andLlrpDevice.Virtual.Hostingare published at
version2.0.4.
Verification
- The release build and automated tests are required to pass in the release
workflow before the packages are published. - Physical-reader verification is run against the available reader and is
recorded separately in the reader interoperability evidence.
Full Changelog: v2.0.3...v2.0.4
LLRPCSharp v2.0.3
LLRPCSharp 2.0.3 Release Notes
Release Date: 2026-08-22
正式版(非预览)。
Managed and expert resource control
- Separates managed desired state from the reader's observed resource snapshot,
so raw/expert operations no longer silently overwrite the managed intent. - Adds explicit resource takeover policy: managed deployment preserves foreign
ROSpec/AccessSpec resources by default and supports an opt-inReplaceAll
policy when full ownership is required. - Unifies the managed and expert SDK control planes while preserving the existing
managed Reader lifecycle and resource services.
Compatibility and package boundary
- LLRP 1.0.1, 1.1, and 2.0 SDK baselines remain available.
LlrpDevice.Virtual.Hostingremains the public virtual-device entry point.- The SDK packages
LlrpSdk,LlrpSdk.Extensions.Impinj,
LlrpSdk.Extensions.Zebra, andLlrpDevice.Virtual.Hostingare published at
version2.0.3.
Verification
- Release build and automated tests are required to pass in the release workflow
before the package is published. - Physical-reader verification remains subject to the available hardware and is
recorded separately in the reader interoperability evidence.
Full Changelog: v2.0.1...v2.0.3
LLRPCSharp v2.0.1
LLRPCSharp 2.0.1 Release Notes
Release Date: 2026-08-20
正式版(非预览)。
Capability-aware reader defaults
GetDefaultSettingsAsync()now builds the standard RF baseline from the connected
reader's advertised capabilities instead of relying on a fixed generic shape.- The baseline selects usable antennas, the first RF mode and receive sensitivity,
the highest advertised transmit power, and the first usable hop/channel entry. - Impinj, Zebra, and Seuic extensions can layer verified model/firmware defaults on
top of that baseline; unknown profiles remain conservative and do not invent vendor
parameters. - The verified Impinj R420 profile now contributes typed reader defaults and enables
optional report fields only when the capability catalog confirms them.
Compatibility and package boundary
- LLRP 1.0.1, 1.1, and 2.0 SDK baselines remain compatible with 2.0.0.
LlrpDevice.Virtual.Hostingremains the public virtual-device entry point; the
package version is2.0.1.- The SDK packages
LlrpSdk,LlrpSdk.Extensions.Impinj,
LlrpSdk.Extensions.Zebra, andLlrpDevice.Virtual.Hostingare published at
version2.0.1.
Verification
- SDK Release build: 0 warnings, 0 errors; automated tests: 525/525 passed, 0 skipped.
- Seuic UF40
192.168.41.148hardware verification passed with an explicit LLRP 1.0.1
policy and Seuic extension: 32 unique tags were received on antenna 1 in 10 seconds;
managed resources were cleared and no tags or reader configuration were written. - The Impinj R420
192.168.40.87was not used for this release smoke because its antenna
was disconnected; its connection and capability reads remained healthy but produced no
tag report.
Full Changelog: v2.0.0...v2.0.1
LLRPCSharp v2.0.0
LLRPCSharp 2.0.0 Release Notes
Release Date: 2026-08-19
正式版(非预览)。
Public virtual-device hosting package
- 将
LlrpDevice.Virtual.Hosting定为虚拟设备服务的对外顶层 NuGet 包。 IVirtualDeviceHost、VirtualDeviceHostOptions、VirtualDeviceProfiles和
VirtualLlrpDeviceHost.Create(...)组成应用侧稳定入口;客户端不需要直接引用
LlrpDevice.Server、LlrpDevice.Virtual或设备端协议项目。- Hosting 包内置标准 LLRP 1.0.1 与 Impinj R420 profile,并携带其设备端实现和协议运行时,
便于 WPF、CLI 与自动化测试以单一包接入。 - 原有低层 Hosting 类型保留为迁移兼容路径;新应用应优先使用 Hosting-level API。
SDK and device capabilities
- 保持 LLRP 1.0.1、1.1 和 2.0 协议/SDK 基线,以及 Impinj、Zebra 扩展包。
- 保持通用 LLRP Device Server、确定性 Virtual Device、标准 Tag Access、生命周期、
客户端连接和报文观察能力。 LlrpVirtualDevice.Cli继续复用同一 Hosting facade,标准设备和 Impinj R420 模拟设备
的启动配置保持兼容。
Verification
- SDK Release 构建:0 警告、0 错误;自动化测试:523/523 通过。
- Impinj R420
192.168.40.87的 2.0.0 Release 冒烟通过:LLRP 1.0.1、Impinj 扩展、
能力/配置读取和标签报告均正常,测试后完成托管资源清理。 - 平台的 NuGet 模式 Release 构建:0 警告、0 错误;自动化测试:382/382 通过;主客户端
与 Virtual Device Studio 的win-x64自包含单文件发布均成功。
Package boundary
- 直接面向应用的虚拟设备服务包:
LlrpDevice.Virtual.Hosting。 LlrpDevice.Server、LlrpDevice.Virtual、LlrpDevice.Virtual.Impinj和底层协议程序集
是 Hosting 的实现组成;需要扩展能力时再使用相应的 SDK/扩展包。
Full Changelog: v1.5.0...v2.0.0
LLRPCSharp v1.5.0
LLRPCSharp 1.5.0 Release Notes
Release Date: 2026-08-18
正式版(非预览)。
Virtual Device SDK 与 CLI
- 完成单台 Virtual Device 的 SDK/Hosting 生命周期门面,支持创建、启动、停止、
重启和状态观察。 - 完成通用 LLRP Device Server 与确定性 Virtual Device 的 1.0.1 设备闭环,覆盖
ROSpec、AccessSpec、报告、事件、Hold/Release 和标准 Tag Access。 - 增加独立的
LlrpVirtualDevice.Cli,与客户端LlrpCli分离,支持版本化设备配置、
能力档案、寻卡数据源和run/live工作流。 - 改进 Virtual Device 的标签采样行为,使盘点报告更接近实际设备的多轮采样特征。
CLI 与诊断
- 增强 pcapng 报文解码路径,支持 Live Shell 和离线工具按消息类型筛选。
- 统一客户端 CLI 与 Virtual Device CLI 的职责边界,保持协议版本显式选择。
- CLI 重定向到脚本或 CI 时自动关闭 ANSI 控制码,保证摘要输出稳定可解析。
修复与兼容性
- 修正 Impinj 配置索引的 base-1 语义。
- 完善 LLRP 1.0.1 Virtual Device 能力档案和默认 RF/标签数据源。
验证
- Release 构建:0 警告、0 错误。
- 自动化测试:519/519 通过,0 失败、0 跳过。
- Impinj R420(192.168.40.87,固件 6.4.1.240):LLRP 1.0.1 连接、能力/配置读取和
inventory 标签报告验证通过。
已知限制
- LLRP 2.0 真实设备互操作仍未完成完整验收。
- Zebra 扩展仍有部分字段需要逐参数真机抓包标定。
Full Changelog: v1.4.0...v1.5.0
LLRPCSharp v1.4.0
LLRPCSharp 1.4.0 Release Notes
Release Date: 2026-08-14
正式版(非预览)。
CLI 改造 (WP1-WP8)
版本/厂商对齐 (WP1)
- --llrp 增加 2.0(修 2->Force20 错映射,补别名 101/11/20)
- --vendor 增加 zebra
- Helpers.CreateRegistry() 注册 1.0.1/1.1/2.0 + Impinj + Zebra 全模块
- encode 加 --llrp 版本感知,消息目录单源(Helpers.CreateEncodeMessage)
- banner 版本号取程序集版本
Settings 收缩 (WP2)
- 子命令 7->5:show/validate/apply/edit/save
- 移除 defaults/load(不保留别名),apply --defaults --yes 吸收原 defaults
- ManagedSettingsWorkflow.DeployAsync 消除双校验
一段式盘点 (WP3)
- inventory start --defaults|--settings 部署+启动一段式
- 与 one-shot inventory 共用 DeployAsync 核心
Manual 命令 (WP4)
- resources manual enter/exit -> manual on/off/status
- ManualModeGuard.TryAutoExitManualModeAsync:托管调用自动 off(有资源确认/无资源静默)
- manual on 自动 sync 前置
Tag Sequence 结构化 (WP5)
- tag sequence 支持 --read/--write/--erase/--lock/--kill 结构化旗标(保留 --op 兼容)
消重 (WP6)
- D1:删除死代码 LlrpFrameAnalyzer.cs(从未接线)
- D2:TagAccessCliRequest.ParseHex 统一到 Helpers.ParseHex
- D3:standalone 与 Live Shell 的 inspect/decode/validate 合并到 OfflineProtocolTool 共享核
- D4:encode 消息目录单源(Helpers.CreateEncodeMessage)
编辑器增强 (WP7)
- E2:能力交叉引用(编辑 RF 索引时就地显示 reader.Capabilities 表)
- E1:厂商扩展泛化(Impinj + Zebra 分支,删除硬编码 is ImpinjReaderExtension)
- E4:内联校验(population/ReportEveryN 加 .Validate)
- E3:变更 diff 预览(RenderReviewDiff)
- E5:事件开关改 MultiSelectionPrompt 一次勾选
- E6:导航增强(编号菜单 + Discard 未保存确认)
- E7:JSON 导入(ImportJson 加载+校验)
文档同步 (WP8)
- docs/status.md、docs/roadmap.md、docs/guides/cli-user-guide.md、docs/architecture/llrpcli-optimization-plan.md 全部同步
新增根级在线一次性命令
- llrp status -- 连接 -> 身份/协商/扩展 -> 断开,默认 JSON
- llrp caps -- 连接 -> GET_READER_CAPABILITIES -> 断开,默认 JSON
- 均支持 --llrp/--vendor/--output json|table
Zebra 真机修复
- 修 MotoTagPhase(subtype 709)/BrandIDCheckStatus(712) 的 reserved 位数
(PDF 多算 16/24 位,实机 payload 分别为 2/1 字节) - definitions/extensions/zebra.yml 修正 + regenerate(2 个 codec 文件)
- Zebra 报告能力闭环验证:开 EnablePhase -> 报告带 MotoTagPhase -> SDK 投影 zebra.phase
- 8 个 Zebra 能力参数全部强类型解码
- 设备确认为 LLRP 1.0.1(GET_SUPPORTED_VERSION 回 M_UnsupportedVersion)
LiveSmoke 诊断增强
- --dump-frames:始终 dump 所有帧 hex + 版本字段
- --zebra-include-phase/--zebra-include-zone:开启 Zebra 报告参数
- Zebra 报告扩展打印(DescribeZebraReportExtensions)
文档
- 新增 docs/references/zebra/llrp-1.0.1-definition-drift.md:Zebra ICG 与 yml 定义偏差汇总
- 新增 docs/architecture/cli-dedup-d1-d3-plan.md:D1/D3 消重执行计划
- 新增 docs/architecture/llrpcli-remaining-workplan.md:WP4 收尾 + WP7 详细计划
- 更新 docs/acceptance/reader-interoperability.md:Impinj + Zebra 真机证据
验证
- 全解决方案构建 0 警告 0 错误
- LlrpCli.Tests 32/32 通过(含 5 个新增测试)
- 全部测试项目通过
- 真机验证:Impinj R420 (192.168.40.87) + Zebra FX9600 (192.168.40.88)
已知限制
- Zebra 定义的 reserved 位数与官方 ICG 存在系统性偏移,仅部分参数经实机字节级验证
- LLRP 2.0 真机互操作未验证
Full Changelog: v1.3.0...v1.4.0
LLRPCSharp v1.3.0
LLRPCSharp 1.3.0 Release Notes
Release Date: 2026-08-12
正式版(非预览): NuGet 包版本与 GitHub Release 均不标记 prerelease。
新能力
- CLI Live Shell 增强 Reader 配置检查能力:
status会展示更完整的 Reader
配置、ROSpec 和 AccessSpec 信息,便于人工测试时直接确认设备当前状态。 - CLI Settings 与 Inventory 流程继续保持简洁入口,补充现有设备配置检查、
settings 应用和 inventory 启动之间的操作说明。 - SDK 托管 Inventory 增加配置归一化路径,减少不同 Reader 固件对 ROSpec
可选字段和默认值处理差异带来的启动失败。
修复与兼容性
- 加固
InventorySession报告分发:托管盘点报告在 Reader 省略可选
ROSpecID时仍可被当前 session 正确接收。 - 改善 ROSpec 兼容性:应用层设置会经过统一归一化后再编译为 1.0.1 / 1.1
协议对象,降低跨设备行为差异。 - Virtual Reader 增补配置与报告模拟能力,用于覆盖真实设备上暴露出的边界场景。
- CI / Release workflow 明确只运行自动化和虚拟测试项目,不在远端执行
LlrpSdk.Hardware.Tests真机验收。
文档
- 更新 CLI 用户手册,说明 Live Shell 中
status、caps、settings、
inventory的推荐使用路径。 - 更新 SDK API 文档,补充托管 Inventory 与 Reader 配置行为说明。
- 同步
docs/status.md、showcase 和架构文档中的当前能力边界。
验证
- 解决方案构建与自动化测试需在发布前通过。
- 发布前仍需执行本地真机冒烟:
dotnet run --project tools/LlrpSdk.LiveSmoke -- <real-reader-ip> --inventory
Full Changelog: v1.2.1...v1.3.0
LLRPCSharp v1.2.1
LLRPCSharp 1.2.1 Release Notes
Release Date: 2026-08-11
正式版(非预览): NuGet 包版本与 GitHub Release 均不标记 prerelease。
🐛 修复
- 修复 Reader 级配置查询与回写时丢失
RFTransmitter.HopTableID的问题。
AntennaConfigurationSettings.HopTableId现在会从设备快照完整映射,并在
SET_READER_CONFIG时按原值写回;LLRP 1.0.1 与 1.1 Adapter 行为一致。 - 增加标准 LLRP 读写器的回写一致性测试,覆盖查询、应用和再次查询的跳频表、
信道及发射功率字段。 - CLI Settings 保持无草稿的简化流程,新增
settings apply <file> --yes和
settings defaults --yes,应用设置后仍需单独执行inventory start。
✅ 验证
- 解决方案构建与自动化测试通过。
- 标准 LLRP 设备
192.168.40.88真机验证通过:查询 Reader 级天线配置后以
相同值回写,HopTableID、ChannelIndex和TransmitPower保持一致。 - 标准 LLRP 设备真机盘点冒烟通过,收到标签并完成托管 ROSpec 清理。
Full Changelog: v1.2.0...v1.2.1
LLRPCSharp v1.2.0
LLRPCSharp 1.2.0 Release Notes
Release Date: 2026-08-07
正式版(非预览):NuGet 包版本与 GitHub Release 均不标记 prerelease。
✨ 新能力(LLRP 1.0.1 完成度收尾)
CLOSE_CONNECTION接收侧:消息泵识别设备主动关闭,best-effort 回
CLOSE_CONNECTION_RESPONSE,ConnectionChanged携带
DeviceInitiatedClose,应用可区分"设备主动关闭"与"网络故障"。ENABLE_EVENTS_AND_REPORTS重连放行:重连后若设备配置了
HoldEventsAndReportsUponReconnect=true,SDK 在状态同步后发送 ENABLE
释放被挂起的事件/报告(内部逻辑,不新增公开 API);Impinj R430 真机验证。- LLRP 标准能力门控投影到
ReaderCapabilities:SupportsClientRequestOpSpec(客户端请求式访问):R430 固件 6.4.1.240
实测拒绝ClientRequestOpSpec,SDK 不接线、仅提供门控CanDoRfSurvey(RF 调查):R430 实测 false,Impinj 设备普遍不支持
ReaderExceptionOccurred事件:暴露 Reader 内部异常(ReaderExceptionEvent,
Message + ROSpec/SpecIndex/天线/AccessSpec 上下文),1.0.1/1.1 均接线。TagReport.PcBits:投影C1G2_PC(EPC 长度/编码类型信息,变长 EPC
场景必需),配合IncludePcBits请求。
🛠 测试与工具
- 修复
LlrpNet.ProtocolGenerator.Tests本地卡死:子进程管道从
ReadToEndAsync+ 同步WaitForExit改为事件驱动排空,9 个测试 5 秒通过
(此前本地整套测试跑不完)。 LlrpSdk.Hardware.Tests新增真机用例:hold=true 重连报告恢复
(Impinj R430,固件 6.4.1.240 验证通过)。- 探针工具
tools/LlrpSdk.Probe.ClientRequestOp:实测 CLIENT_REQUEST_OP
支持矩阵,可换 IP 复测其他型号。
📚 Documentation
- 新增
docs/coverage/llrp101-sdk-coverage.md:LLRP 1.0.1 SDK 完成度审计
(协议层 42 消息 / 111 参数全覆盖;SDK 层 42/42 有业务路径或已定案)。 - 新增
docs/coverage/impinj-extension-coverage.md:Impinj 扩展完成度
(消息级 4/4;参数级 47/104 有 SDK 路径;R420 固件 6.4.1.240 验收基准)。 docs/status.md/docs/roadmap.md:同步完成度结论与剩余待办。
⚠️ 注意事项
- 版本号 1.2.0 为产品版本(正式版),与 LLRP 1.0.1 协议版本号无关。
- 本版为 dev 分支合并后的首个正式版;无已知破坏性 API 变更。
Full Changelog: v0.9.0...v1.2.0