Update livoxGen1 stimbuffapi

This commit is contained in:
2025-10-01 13:46:29 -04:00
parent b771856330
commit b69572eee7
3 changed files with 87 additions and 72 deletions
+6 -6
View File
@@ -11,13 +11,13 @@ or entire screens managed by the Xorg server.
The general format of a DAP spec for the `xcb` stim-buff-api with the `xorg` provider The general format of a DAP spec for the `xcb` stim-buff-api with the `xorg` provider
is: is:
``` ```
sensor-type|dev-identifier|stim-iface-api|xcb(stim-buff-api-params)|xorg(provider-params)|deviceSelector sensor-type|dev-identifier|quale-iface-api|xcb(stim-buff-api-params)|xorg(provider-params)|deviceSelector
``` ```
* `sensor-type` is always either '`+idev`' (interoceptor), '`+edev`' * `sensor-type` is always either '`+idev`' (interoceptor), '`+edev`'
(extrospector), or '`+adev`' (actuator). (extrospector), or '`+adev`' (actuator).
* `dev-identifier` is a user-defined name for this specific device instance. * `dev-identifier` is a user-defined name for this specific device instance.
* `stim-iface-api` is the name of the StimIface library that should be used to * `quale-iface-api` is the name of the StimIface library that should be used to
process the data from the stim buffer. process the data from the stim buffer.
* `stim-buff-api` is `xcb` in this case, and the `stim-buff-api-params` in parentheses may be * `stim-buff-api` is `xcb` in this case, and the `stim-buff-api-params` in parentheses may be
omitted, in which case the parentheses will be empty, but the parentheses omitted, in which case the parentheses will be empty, but the parentheses
@@ -98,25 +98,25 @@ xcb(dev-string)|My\ Exact\ Window\ Name
### To attach a specific window by name (substring match): ### To attach a specific window by name (substring match):
``` ```
+edev|my-window|visual-stimiface|xcb(dev-substring)|xorg(display=0|screen=0)|my-window +edev|my-window|visual-qualeiface|xcb(dev-substring)|xorg(display=0|screen=0)|my-window
``` ```
This will attach to a window whose name contains "my-window" as a substring. This will attach to a window whose name contains "my-window" as a substring.
### To attach a specific window by exact name: ### To attach a specific window by exact name:
``` ```
+edev|my-window|visual-stimiface|xcb(dev-string)|xorg(display=0|screen=0)|My\ Exact\ Window\ Name +edev|my-window|visual-qualeiface|xcb(dev-string)|xorg(display=0|screen=0)|My\ Exact\ Window\ Name
``` ```
This will attach to a window whose name exactly matches "My Exact Window Name". This will attach to a window whose name exactly matches "My Exact Window Name".
### To attach a specific window by numeric ID: ### To attach a specific window by numeric ID:
``` ```
+edev|my-window|visual-stimiface|xcb(dev-id)|xorg(display=0|screen=0)|123456 +edev|my-window|visual-qualeiface|xcb(dev-id)|xorg(display=0|screen=0)|123456
``` ```
This will attach to a window with the numeric ID `123456`. This will attach to a window with the numeric ID `123456`.
### To attach the entire screen: ### To attach the entire screen:
``` ```
+edev|my-screen|visual-stimiface|xcb()|xorg(display=0|screen=0)|all +edev|my-screen|visual-qualeiface|xcb()|xorg(display=0|screen=0)|all
``` ```
This will attach to the entire screen `0` of display `0`. This will attach to the entire screen `0` of display `0`.
+31 -31
View File
@@ -23,11 +23,11 @@ perceptual inputs -- like your own sense organs. For example, if you attach a
camera as a sensor, salmanoff will experience it in the same way that you camera as a sensor, salmanoff will experience it in the same way that you
experience the visual sense data from your eyes. experience the visual sense data from your eyes.
## StimIface (Stimulus Interface): ## QualeIface (Quale Interface):
A StimIface is a **Stim**ulus **I**nter**face** library that connects to a A QualeIface is a **Quale** **I**nter**face** library that connects to a
particular stim buffer and allows the mind to process the stim features particular stim buffer and allows the mind to process the stim features
presented in the device's stim buffers. StimIface libraries replace the presented in the device's stim buffers. QualeIface libraries replace the
previous notion of an implexor. They provide the interface between raw device previous notion of an implexor. They provide the interface between raw device
data and the mind's processing capabilities. data and the mind's processing capabilities.
@@ -35,7 +35,7 @@ data and the mind's processing capabilities.
The general format of a DAP specification is: The general format of a DAP specification is:
``` ```
sensor-type|dev-identifier|stim-iface-api|stim-buff-api(api-params)|provider(provider-params)|dev-selector sensor-type|dev-identifier|quale-iface-api|stim-buff-api(api-params)|provider(provider-params)|dev-selector
``` ```
* `sensor-type` is always either '`+idev`' (interoceptor), '`+edev`' * `sensor-type` is always either '`+idev`' (interoceptor), '`+edev`'
@@ -44,7 +44,7 @@ sensor-type|dev-identifier|stim-iface-api|stim-buff-api(api-params)|provider(pro
This represents a logical device that can be accessed through multiple This represents a logical device that can be accessed through multiple
providers and may expose multiple stim features. In a sense it's like a providers and may expose multiple stim features. In a sense it's like a
sense organ or sense modality. sense organ or sense modality.
* `stim-iface-api` is the name of the StimIface library that should be used to * `quale-iface-api` is the name of the QualeIface library that should be used to
process the data from the stim buffer. This replaces the previous implexor process the data from the stim buffer. This replaces the previous implexor
concept. concept.
* `stim-buff-api` is the interface that provides access to a specific stim * `stim-buff-api` is the interface that provides access to a specific stim
@@ -66,7 +66,7 @@ If there's more than one parameter item in a list of `stim-buff-api-params` or
`provider-params`, then the individual items in a list of `stim-buff-api-param` or `provider-params`, then the individual items in a list of `stim-buff-api-param` or
`provider-params` should be separated by the h-bar character (`|`). E.g: `provider-params` should be separated by the h-bar character (`|`). E.g:
``` ```
+edev|soundcard0|audio-stimiface|alsa-audio(shmem|param2|param3)|alsa()|cardname +edev|soundcard0|audio-qualeiface|alsa-audio(shmem|param2|param3)|alsa()|cardname
``` ```
Each parameter must be in one of these forms: Each parameter must be in one of these forms:
@@ -78,9 +78,9 @@ Each parameter must be in one of these forms:
The `stim-buff-api-params` should **never** include options related to the The `stim-buff-api-params` should **never** include options related to the
stim buffer's type or format. The `stim-buff-api` must read and infer such stim buffer's type or format. The `stim-buff-api` must read and infer such
configuration details from the `stim-iface-api` portion of the DAP spec, and configuration details from the `quale-iface-api` portion of the DAP spec, and
configure itself accordingly to enable connection by the specified configure itself accordingly to enable connection by the specified
stim-iface library in the way that it has been configured. quale-iface library in the way that it has been configured.
`stim-buff-api-params` are for options that are: `stim-buff-api-params` are for options that are:
- Device-specific (not modality-wide) - Device-specific (not modality-wide)
@@ -148,33 +148,33 @@ required to effectuate the stim-buff controls.
### To attach a particular window from a window manager: ### To attach a particular window from a window manager:
``` ```
+edev|my-window|visual-stimiface|wayland()|wayland(server-socket)|window0 +edev|my-window|visual-qualeiface|wayland()|wayland(server-socket)|window0
``` ```
Connect to the Wayland server that's listening on `server-socket`, using the Connect to the Wayland server that's listening on `server-socket`, using the
`wayland` stim-buff-api. Ask that Wayland server to give salmanoff read-access to all of `wayland` stim-buff-api. Ask that Wayland server to give salmanoff read-access to all of
the frames composited into the window buffer for `window0`. Use salmanoff's the frames composited into the window buffer for `window0`. Use salmanoff's
`visual-stimiface` to process the visual data from that `window0`'s compositor buffer. `visual-qualeiface` to process the visual data from that `window0`'s compositor buffer.
### To attach a window manager's entire rendered desktop: ### To attach a window manager's entire rendered desktop:
``` ```
+edev|my-desktop|visual-stimiface|wayland()|wayland(listen-socket)|all +edev|my-desktop|visual-qualeiface|wayland()|wayland(listen-socket)|all
``` ```
In most cases, this is basically the same as attempting to attach all of the In most cases, this is basically the same as attempting to attach all of the
underlying GFX server's output. underlying GFX server's output.
Connect to the Wayland server that's listening on `listen-socket`, using the Connect to the Wayland server that's listening on `listen-socket`, using the
`wayland` stim-buff-api. Ask that Wayland server to give salmanoff read-access to the `wayland` stim-buff-api. Ask that Wayland server to give salmanoff read-access to the
entire compositor framebuffer. Use salmanoff's `visual-stimiface` to process the visual data from entire compositor framebuffer. Use salmanoff's `visual-qualeiface` to process the visual data from
that Wayland server's compositor buffer. that Wayland server's compositor buffer.
### To attach all of an Xorg server's gfx output to all screens: ### To attach all of an Xorg server's gfx output to all screens:
``` ```
+edev|my-xorg-display|visual-stimiface|x11()|xorg(listen-socket)|all +edev|my-xorg-display|visual-qualeiface|x11()|xorg(listen-socket)|all
``` ```
Connect to the Xorg server that's listening on `listen-socket`, using the `x11` Connect to the Xorg server that's listening on `listen-socket`, using the `x11`
stim-buff-api. Ask that Xorg server to let Salmanoff read out all of the frames written stim-buff-api. Ask that Xorg server to let Salmanoff read out all of the frames written
out to all screens. Use salmanoff's `visual-stimiface` to process the visual data from the out to all screens. Use salmanoff's `visual-qualeiface` to process the visual data from the
server's gfx framebuffer. server's gfx framebuffer.
In most cases, this is basically the same as attempting to attach all of the In most cases, this is basically the same as attempting to attach all of the
@@ -186,11 +186,11 @@ WM's output.
### To attach all of an Xorg server's gfx output to a particular screen: ### To attach all of an Xorg server's gfx output to a particular screen:
``` ```
+edev|my-screen|visual-stimiface|x11()|xorg(listen-socket)|:0 +edev|my-screen|visual-qualeiface|x11()|xorg(listen-socket)|:0
``` ```
Connect to the Xorg server that's listening on `listen-socket`, using the `x11` Connect to the Xorg server that's listening on `listen-socket`, using the `x11`
stim-buff-api. Ask that Xorg server to let Salmanoff read out all of the frames written stim-buff-api. Ask that Xorg server to let Salmanoff read out all of the frames written
out to display `:0`. Use salmanoff's `visual-stimiface` to process the visual data from display out to display `:0`. Use salmanoff's `visual-qualeiface` to process the visual data from display
`:0`'s framebuffer. `:0`'s framebuffer.
* Implementation note: * Implementation note:
@@ -199,30 +199,30 @@ out to display `:0`. Use salmanoff's `visual-stimiface` to process the visual da
### To attach a camera device by connecting directly to its Linux driver: ### To attach a camera device by connecting directly to its Linux driver:
``` ```
+edev|my-camera|visual-stimiface|v4l()|linux()|/dev/video0 +edev|my-camera|visual-qualeiface|v4l()|linux()|/dev/video0
``` ```
We specify that we want to use the `linux` kernel's loaded driver to connect We specify that we want to use the `linux` kernel's loaded driver to connect
to communicate with `/dev/video0`, via the `Video4Linux` stim-buff-api. We want salmanoff to communicate with `/dev/video0`, via the `Video4Linux` stim-buff-api. We want salmanoff
to use the `visual-stimiface` library to process the visual data from `/dev/video0`'s stim buffer. to use the `visual-qualeiface` library to process the visual data from `/dev/video0`'s stim buffer.
If `/dev/video0` is already consumed by another process, this may likely fail. If `/dev/video0` is already consumed by another process, this may likely fail.
### To attach a microphone that's managed by ALSA server: ### To attach a microphone that's managed by ALSA server:
``` ```
+edev|my-microphone|audio-stimiface|alsa-mic(shmem)|alsa()|cardname +edev|my-microphone|audio-qualeiface|alsa-mic(shmem)|alsa()|cardname
``` ```
Connect to the ALSA server via `shmem`, using the `alsa-mic` stim-buff-api. Request access to Connect to the ALSA server via `shmem`, using the `alsa-mic` stim-buff-api. Request access to
the microphone function of the sound card with the name `cardname`. Use the the microphone function of the sound card with the name `cardname`. Use the
`audio-stimiface` library to process the audio data from `cardname`'s microphone stim buffer. `audio-qualeiface` library to process the audio data from `cardname`'s microphone stim buffer.
### To attach a thermal sensor managed by Linux: ### To attach a thermal sensor managed by Linux:
``` ```
+idev|my-thermal|thermal-stimiface|thermal-zone()|linux()|/sys/class/thermal_zone0 +idev|my-thermal|thermal-qualeiface|thermal-zone()|linux()|/sys/class/thermal_zone0
``` ```
Use the `thermal-zone` SysFS stim-buff-api provided by `linux` to connect to the sensor Use the `thermal-zone` SysFS stim-buff-api provided by `linux` to connect to the sensor
`/sys/class/thermal_zone0`. Use the `thermal-stimiface` library to process the thermal data from `/sys/class/thermal_zone0`. Use the `thermal-qualeiface` library to process the thermal data from
`thermal_zone0`'s heat stim buffer. `thermal_zone0`'s heat stim buffer.
## Multiple Provider Examples: ## Multiple Provider Examples:
@@ -232,9 +232,9 @@ Use the `thermal-zone` SysFS stim-buff-api provided by `linux` to connect to the
The same physical sound card `soundcard0` can be accessed through different providers: The same physical sound card `soundcard0` can be accessed through different providers:
``` ```
+edev|soundcard0|audio-stimiface|alsa-audio()|alsa()|card0 +edev|soundcard0|audio-qualeiface|alsa-audio()|alsa()|card0
||| +edev|soundcard0|audio-stimiface|direct-file-ops()|linux()|/dev/snd/pcmC0D0p ||| +edev|soundcard0|audio-qualeiface|direct-file-ops()|linux()|/dev/snd/pcmC0D0p
||| +idev|soundcard0|audio-stimiface|alsa-mic()|alsa()|card0 ||| +idev|soundcard0|audio-qualeiface|alsa-mic()|alsa()|card0
``` ```
This shows: This shows:
@@ -247,9 +247,9 @@ This shows:
A camera device `camera0` might expose different data streams: A camera device `camera0` might expose different data streams:
``` ```
+edev|camera0|visual-stimiface|v4l-rgb()|linux()|/dev/video0 +edev|camera0|visual-qualeiface|v4l-rgb()|linux()|/dev/video0
||| +edev|camera0|visual-stimiface|v4l-yuv()|linux()|/dev/video0 ||| +edev|camera0|visual-qualeiface|v4l-yuv()|linux()|/dev/video0
||| +idev|camera0|thermal-stimiface|v4l-thermal()|linux()|/dev/video0 ||| +idev|camera0|thermal-qualeiface|v4l-thermal()|linux()|/dev/video0
``` ```
This shows the same camera device providing: This shows the same camera device providing:
@@ -287,7 +287,7 @@ Separate individual DAP specifications with two consecutive h-bar
characters (`||`), characters (`||`),
like this: like this:
``` ```
+edev|my-window|visual-stimiface|wayland()|wayland(server-socket)|window0 +edev|my-window|visual-qualeiface|wayland()|wayland(server-socket)|window0
|| +edev|my-xorg-display|visual-stimiface|x11()|xorg(listen-socket)|all || +edev|my-xorg-display|visual-qualeiface|x11()|xorg(listen-socket)|all
|| +idev|my-thermal|thermal-stimiface|thermal-zone()|linux()|/sys/class/thermal_zone0 || +idev|my-thermal|thermal-qualeiface|thermal-zone()|linux()|/sys/class/thermal_zone0
``` ```
+50 -35
View File
@@ -2,11 +2,20 @@
## Overview ## Overview
The LivoxGen1Lidar DAP specification defines how to attach to Livox Gen1 LiDAR devices and access their various data streams using a unified stim-buff-api with mode-based parameter selection. The LivoxGen1Lidar DAP specification describes how to attach to Livox Gen1
LiDAR devices and access their various data streams. The Livox Gen1 LiDAR
presents multiple stim features, each with its own dedicated stim-buff-api.
## Stim-Buff-API Structure ## Stim-Buff-API Structure
The LivoxGen1Lidar DAP uses a unified stim-buff-api name `livoxGen1` with mode-based parameters to specify which data interface to present. The LivoxGen1Lidar DAP uses multiple stim-buff-api names, one for each stim feature it presents:
* `livoxGen1-pcloud` - Point cloud coordinate data
* `livoxGen1-pcloudIntensity` - Point cloud intensity/reflectivity data
* `livoxGen1-gyro` - Gyroscope data from internal IMU
* `livoxGen1-accel` - Accelerometer data from internal IMU
Each stim-buff-api is designed to work with specific stim-iface libraries that understand the data format and processing requirements for that particular stim feature.
## DAP Specifications ## DAP Specifications
@@ -16,21 +25,11 @@ The LivoxGen1Lidar DAP uses a unified stim-buff-api name `livoxGen1` with mode-b
**Syntax**: **Syntax**:
``` ```
+idev | avia0 | structural-stimiface | livoxGen1(mode=pointCloudIntensity) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39 +idev | avia0 | pcloudIntensity | livoxGen1-pcloudIntensity(data-rate-hz=10) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
``` ```
**Alternative Syntax** (all equivalent): **Stim-Buff-API**: `livoxGen1-pcloudIntensity`
``` **Quale-Iface-API**: `pcloudIntensity` - Processes intensity/reflectivity data from point clouds
+idev | avia0 | structural-stimiface | livoxGen1(stim=pcloudIntensity) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
+idev | avia0 | structural-stimiface | livoxGen1(affordance=pCloudI) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
```
**Mode Parameter Values** (synonymous):
- `pointCloudIntensity`
- `pcloudIntensity`
- `pCloudIntensity`
- `pCloudI`
- `pcloudI`
### 2. Point Cloud Coordinate Data Device (Extrospector) ### 2. Point Cloud Coordinate Data Device (Extrospector)
@@ -38,15 +37,21 @@ The LivoxGen1Lidar DAP uses a unified stim-buff-api name `livoxGen1` with mode-b
**Syntax**: **Syntax**:
``` ```
+edev | avia0 | structural-stimiface | livoxGen1(mode=pcloud,format=xyz) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39 +edev | avia0 | pcloud(format=xyz) | livoxGen1-pcloud(data-rate-hz=10) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
``` ```
**Mode Parameter Values** (synonymous): **Alternative Format Examples**:
- `pcloud` ```
- `pCloud` +edev | avia0 | pcloud(format=spherical) | livoxGen1-pcloud(data-rate-hz=10) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
- `pointCloud` +edev | avia0 | pcloud(format=spherical-cartesian) | livoxGen1-pcloud(data-rate-hz=10) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
+edev | avia0 | pcloud(format=dual-cartesian) | livoxGen1-pcloud(data-rate-hz=10) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
+edev | avia0 | pcloud(format=dual-spherical) | livoxGen1-pcloud(data-rate-hz=10) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
```
**Format Parameter** (for point cloud modes): **Stim-Buff-API**: `livoxGen1-pcloud`
**Quale-Iface-API**: `pcloud` - Processes spatial coordinate data from point clouds
**Format Parameter Values** (for pcloud quale-iface-api):
- `xyz`: Standard Cartesian coordinates (X, Y, Z) - `xyz`: Standard Cartesian coordinates (X, Y, Z)
- `spherical`: Raw spherical coordinates - `spherical`: Raw spherical coordinates
- `spherical-cartesian`: Spherical coordinates converted to Cartesian - `spherical-cartesian`: Spherical coordinates converted to Cartesian
@@ -62,11 +67,11 @@ The LivoxGen1Lidar DAP uses a unified stim-buff-api name `livoxGen1` with mode-b
**Syntax**: **Syntax**:
``` ```
+idev | avia0 | gyro-stimiface | livoxGen1(mode=gyro) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39 +idev | avia0 | gyro | livoxGen1-gyro(data-rate-hz=100) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
``` ```
**Mode Parameter Values**: **Stim-Buff-API**: `livoxGen1-gyro`
- `gyro` **Quale-Iface-API**: `gyro` - Processes gyroscope angular velocity data
### 4. IMU Accelerometer Data Device (Interoceptor) ### 4. IMU Accelerometer Data Device (Interoceptor)
@@ -74,11 +79,11 @@ The LivoxGen1Lidar DAP uses a unified stim-buff-api name `livoxGen1` with mode-b
**Syntax**: **Syntax**:
``` ```
+idev | avia0 | accel-stimiface | livoxGen1(mode=accel) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39 +idev | avia0 | accel | livoxGen1-accel(data-rate-hz=100) | livoxProto1(handshake-timeout-ms=1000,retry-delay-ms=3000,smo-ip=192.168.1.50,smo-subnet-nbits=24) | 3JEDK380010Z39
``` ```
**Mode Parameter Values**: **Stim-Buff-API**: `livoxGen1-accel`
- `accel` **Quale-Iface-API**: `accel` - Processes accelerometer linear acceleration data
## Provider Parameters ## Provider Parameters
@@ -124,16 +129,26 @@ The `livoxProto1` provider accepts the following parameters:
## Parameter Summary ## Parameter Summary
### Mode/Stim/Affordance Parameter Values ### Stim-Buff-API Names
| Data Type | Mode Values | Description | | Stim Feature | Stim-Buff-API | Quale-Iface-API | Description |
|-----------|-------------|-------------| |--------------|---------------|----------------|-------------|
| Point Cloud Intensity | `pointCloudIntensity`, `pcloudIntensity`, `pCloudIntensity`, `pCloudI`, `pcloudI` | Light intensity/reflectivity data | | Point Cloud Intensity | `livoxGen1-pcloudIntensity` | `pcloudIntensity` | Light intensity/reflectivity data |
| Point Cloud Coordinates | `pcloud`, `pCloud`, `pointCloud` | Spatial coordinate data | | Point Cloud Coordinates | `livoxGen1-pcloud` | `pcloud` | Spatial coordinate data |
| Gyroscope | `gyro` | Angular velocity measurements | | Gyroscope | `livoxGen1-gyro` | `gyro` | Angular velocity measurements |
| Accelerometer | `accel` | Linear acceleration measurements | | Accelerometer | `livoxGen1-accel` | `accel` | Linear acceleration measurements |
### Format Parameter Values (for point cloud modes) ### Stim-Buff-API Parameters
Each stim-buff-api accepts device-specific parameters:
| Parameter | Description | Example |
|-----------|-------------|---------|
| `data-rate-hz` | Data sampling rate in Hz | `data-rate-hz=10` |
### Quale-Iface-API Parameters
The `pcloud` quale-iface-api accepts format parameters:
| Format | Description | | Format | Description |
|--------|-------------| |--------|-------------|