pvxs-server

Implement PV Access servers in C++ using PVXS SharedPV and Source channels.

1|1|Updated Apr 14, 2026
One-click install
npx skills add https://github.com/BCDA-APS/opencode-skills --skill pvxs-server
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: pvxs-server
Source: https://github.com/BCDA-APS/opencode-skills/tree/main/pvxs-server
Command: npx skills add https://github.com/BCDA-APS/opencode-skills --skill pvxs-server

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

This Skill helps you implement EPICS PV Access server behavior by providing the PVXS patterns for safely constructing PV values, handling GET/PUT/RPC operations, and managing monitors.

Core Features & Use Cases

  • SharedPV server endpoints: Create mailbox/read-only SharedPV instances, open initial values, and post marked-field updates to notify subscribers.
  • Low-level dynamic PV hosting: Implement a custom server::Source with onSearch/onCreate to serve dynamic channel names via Source interface.
  • Full callback lifecycle: Handle onPut/onRPC plus onFirstConnect/onLastDisconnect, and implement subscription setup with MonitorSetupOp/MonitorControlOp including flow control and queued update posting.

Quick Start

Use pvxs-server to have an AI generate a minimal PVXS PV Access server in C++ that exposes one SharedPV, validates PUT input, and replies to GET/PUT requests correctly.

Frequently Asked Questions about pvxs-server

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I implement a PV Access server in C++ using PVXS?

To implement a PV Access server in C++ with PVXS, construct typed pvxs::Value payloads and register SharedPV or Source-backed channels to handle client GET, PUT, and RPC interactions for static or dynamically named PVs.

How do I handle PUT operations and reply to clients in a PVXS SharedPV server?

PVXS SharedPV handling uses mailbox-style onPut callbacks where you validate input and apply correct ExecOp reply or error semantics to return the operation status back to the PV Access client.

How do I serve dynamically named PVs with a PVXS server Source?

Serve dynamic PVs in PVXS by implementing a custom server::Source interface with onSearch and onCreate callbacks, allowing you to host dynamically named channels instead of pre-registered static SharedPV instances.

How does PVXS manage thread-safe monitor subscriptions and flow control?

PVXS manages monitor subscriptions through MonitorSetupOp and MonitorControlOp interfaces, providing flow control and queued update posting with serialized per-channel callback execution guarantees for thread-safe subscriber notifications.

What is the difference between SharedPV and Source-backed channels in PVXS?

PVXS SharedPV instances create mailbox or read-only server endpoints for static channels, while Source-backed channels use a custom server::Source with onSearch and onCreate to dynamically resolve and host channel names requested by clients.

How do I post updates to subscribers in a PVXS PV Access server?

Post updates to PVXS subscribers by opening an initial SharedPV value and calling post with marked-field updates, which notifies connected monitors while maintaining thread-safe execution guarantees.