Releases: VitalyVorobyev/viva-genicam
Releases · VitalyVorobyev/viva-genicam
py-v0.2.5
Proper publication of pypi package
v0.2.3
Added
- Zenoh API v2
FeatureStatecontract -- newFeatureState,NumericRange, andCommandResultwire types expose live feature introspection (is_implemented / is_available / access_mode / numeric range / enum_available) per node;introspectqueryable wired intoviva-serviceandviva-service-u3v. LegacyNodeValueUpdatestays wire-compatible. See ADR-010. - GenApi predicate evaluation --
NodeMap::is_implemented,is_available,effective_access_mode, andavailable_enum_entriesevaluatepIsImplemented/pIsAvailable/pIsLocked/ per-enum-entry predicates via the existingresolve_numericmachinery (Integer / Boolean / SwissKnife / IntConverter / Converter / Enum providers all supported, with cycle detection) - Predicate refs on every
NodeDeclvariant --PredicateRefs(p_is_implemented/p_is_available/p_is_locked) parsed from<pIsImplemented>/<pIsAvailable>/<pIsLocked>and plumbed throughNodeMap::try_from_xmlwith proper dependency registration;Node::predicates()exposes the refs for external evaluators - Realistic predicate wiring in the fake GigE camera --
ExposureTime.pIsLocked←ExposureAuto != Off,Gain.pIsLocked←GainAuto != Off,AcquisitionFrameRate.pIsAvailable← newAcquisitionFrameRateEnableBoolean,PixelFormatentries gated by a newSensorTypeenum (Monochrome / BayerRG / Color)
Changed
DeviceHandle::get_feature_statenow reports liveis_implemented/is_available/access_mode/enum_availablefrom the predicate evaluators instead of hardcoded permissive defaults; each predicate call is guarded so a single bad formula doesn't break the whole feature snapshot
Fixed
- Float bit-pattern bug --
<FloatReg>and bare<Float>withLength in {4, 8}and no<Scale>/<Offset>now auto-infer IEEE 754 encoding. Before this fix,AcquisitionFrameRatecame back as1106247680(the f32 bit pattern of 30.0) andExposureTimeas4662219572839973000because float registers were always read as scaled i64. NewFloatEncoding(Ieee754 / ScaledInteger) +byte_orderonNodeDecl::Float;get_float/set_floatdispatch on encoding.
v0.2.2
Added
- Multi-platform release binaries -- release workflow now produces prebuilt
viva-camctlandviva-servicearchives for Linux x86_64, macOS aarch64 (Apple Silicon), and Windows x86_64; each archive bundles the binaries withREADME.md,LICENSE, andCHANGELOG.md, and aSHA256SUMS.txtis published alongside viva-camctlon crates.io -- the CLI is now published, socargo install viva-camctlworks
Changed
- Internal workspace dependency version requirements simplified from
"0.2.0"to"0.2"(semver-equivalent, but avoids a sweep on every patch bump) - Release workflow dropped the redundant
.cratepackaging step -- those archives are hosted on crates.io via the publish-crates workflow
Fixed
GigeRegisterIonow detects async context viaHandle::try_current()and wrapsblock_onintokio::task::block_in_placeonly when inside a runtime, preventing nested-runtime panics while preserving plain synchronous usage
v0.2.0
Added
- USB3 Vision streaming --
U3vFrameStreamasync frame iterator wrapping blocking bulk reads viaspawn_blocking,U3vStreamBuilderfor configuring U3V streams through the same pattern as GigE - USB3 Vision service --
viva-service-u3vnow supports real USB cameras (previously--fakeonly);U3vDeviceHandleis generic overT: UsbTransfer - USB3 Vision CLI --
viva-camctl stream-usbcommand for frame streaming from USB3 Vision cameras - FORCEIP command -- GVCP opcode 0x0004 for temporary IP assignment via broadcast (targets device by MAC address)
- Persistent IP configuration -- read/write bootstrap registers for persistent IP, subnet, and gateway;
enable_persistent_ip()method onGigeDevice - IP configuration CLI --
viva-camctl set-ipcommand with--force(FORCEIP) and persistent register modes - Reconnection with backoff --
DeviceHandle::refresh_connection()retries up to 5 times with exponential backoff (500ms base, 16s max) - GenApi node metadata --
NodeMetastruct withVisibility,Description,ToolTip,DisplayName,Representationfields; parsed from XML and exposed on all node types - Visibility filtering --
Visibilityenum (Beginner/Expert/Guru/Invisible),Representationenum (Linear/Logarithmic/HexNumber/etc.),NodeMap::nodes_at_visibility()for UI filtering U3vDevice::transport()-- public accessor for the shared USB transportArc<T>- Bayer 16-bit pixel formats --
PixelFormatenum now includes BayerGR16, BayerRG16, BayerGB16, BayerBG16 with correct PFNC codes;PixelFormat::from_name()for string-to-enum conversion PixelFormat::from_name()-- parse PFNC name strings (e.g. "RGB8", "Mono16", "BayerRG16") toPixelFormat
Changed
- MSRV raised from 1.85 to 1.88 (resolves
timecrate security advisory RUSTSEC-2026-0009) - Project tagline updated from "Ethernet-first" to "GigE Vision and USB3 Vision" reflecting dual-transport support
viva-service-u3vCargo.toml now enablesu3v-usbfeature for real USB support- Added
cargo deny check advisoriesto CI pipeline withdeny.tomlallow-list for zenoh transitive advisories
Fixed
- GitHub Pages deployment error ("Tag v0.1.0 not allowed to deploy") by removing wildcard tag trigger from
publish-docs.yml - SVG logo dot alignment and genicam text spacing for correct browser rendering
timecrate DoS vulnerability (RUSTSEC-2026-0009) by upgrading to 0.3.47
v0.1.0
Initial public release of the genicam-rs workspace.
Added
- viva-genicam -- High-level facade crate with
Camera<T>, discovery, streaming, events, and action commands - viva-gige -- GigE Vision transport layer: GVCP discovery, GenCP register I/O, GVSP streaming with resend and reassembly
- viva-genapi -- In-memory GenApi node map with typed feature access (Integer, Float, Enum, Boolean, Command, SwissKnife, Converter, String)
- viva-genapi-xml -- GenICam XML parsing into an intermediate representation with async XML fetch
- viva-gencp -- Transport-agnostic GenCP protocol encode/decode
- viva-u3v -- USB3 Vision transport: bootstrap registers, GenCP-over-USB control, and bulk streaming
- viva-pfnc -- Pixel Format Naming Convention (PFNC) tables and helpers
- viva-sfnc -- Standard Feature Naming Convention (SFNC) string constants
- viva-zenoh-api -- Shared Zenoh API payload types (no Zenoh dependency)
- viva-service -- Zenoh bridge exposing GenICam cameras as network services
Protocol Features
- GVCP discovery (broadcast and unicast)
- GenCP register read/write with retry and backoff
- GVSP streaming with frame reassembly
- Packet resend with bitmap tracking and exponential backoff
- Automatic packet size negotiation from MTU
- Multicast stream support (IGMP join/leave)
- GVCP event channel with timestamp mapping
- Action commands with scheduled execution
- Chunk data parsing (timestamp, exposure time, gain, line status)
- Extended ID support (64-bit block IDs, 32-bit packet IDs per GigE Vision 2.0+)
Testing
viva-fake-gige-- In-process fake GigE Vision camera for self-contained integration testing (no external dependencies required)viva-fake-u3v-- In-process fake USB3 Vision camera for testing