DAPSpec: Add params to quale-iface-api

We add params to the quale iface (soon to be renamed to cologex-api).
This allows us to eventually set the history length for stimbuffs.
This commit is contained in:
2025-11-01 00:57:04 -04:00
parent 9cf1398f5c
commit e824685c19
5 changed files with 48 additions and 35 deletions
+1 -1
View File
@@ -1 +1 @@
+edev|avia0|structural-qualeiface|livoxGen1()|livoxProto1()|3JEDK380010Z39 +edev|avia0|structural-qualeiface()|livoxGen1()|livoxProto1()|3JEDK380010Z39
+1 -1
View File
@@ -1 +1 @@
+edev|win0|visual-qualeiface|xcb(dev-substring)|xorg(display=1|screen=0)|mut +edev|win0|visual-qualeiface()|xcb(dev-substring)|xorg(display=1|screen=0)|mut
+25 -24
View File
@@ -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|quale-iface-api|stim-buff-api(api-params)|provider(provider-params)|dev-selector sensor-type|dev-identifier|quale-iface-api(quale-iface-api-params)|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`'
@@ -46,7 +46,8 @@ sensor-type|dev-identifier|quale-iface-api|stim-buff-api(api-params)|provider(pr
sense organ or sense modality. sense organ or sense modality.
* `quale-iface-api` is the name of the QualeIface 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. The `quale-iface-api-params` in parentheses may be omitted, in which
case the parentheses will be empty, but the parentheses must always be written out.
* `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
buffer from the device. A single device may have multiple stim buffers buffer from the device. A single device may have multiple stim buffers
(e.g., audio output, microphone input, different data streams). The (e.g., audio output, microphone input, different data streams). The
@@ -60,13 +61,13 @@ sensor-type|dev-identifier|quale-iface-api|stim-buff-api(api-params)|provider(pr
* `dev-selector` is the idiosyncratic label/name used by the `provider` to * `dev-selector` is the idiosyncratic label/name used by the `provider` to
identify the specific device you want to attach via that `provider`. identify the specific device you want to attach via that `provider`.
## `stim-buff-api-params` and `provider-params`: ## `quale-iface-api-params`, `stim-buff-api-params` and `provider-params`:
If there's more than one parameter item in a list of `stim-buff-api-params` or If there's more than one parameter item in a list of `quale-iface-api-params`,
`provider-params`, then the individual items in a list of `stim-buff-api-param` or `stim-buff-api-params`, or `provider-params`, then the individual items in a
`provider-params` should be separated by the h-bar character (`|`). E.g: list should be separated by the h-bar character (`|`). E.g:
``` ```
+edev|soundcard0|audio-qualeiface|alsa-audio(shmem|param2|param3)|alsa()|cardname +edev|soundcard0|audio-qualeiface(param1|param2)|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:
@@ -148,7 +149,7 @@ 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-qualeiface|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
@@ -157,7 +158,7 @@ the frames composited into the window buffer for `window0`. Use salmanoff's
### To attach a window manager's entire rendered desktop: ### To attach a window manager's entire rendered desktop:
``` ```
+edev|my-desktop|visual-qualeiface|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.
@@ -169,7 +170,7 @@ 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-qualeiface|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`
@@ -186,7 +187,7 @@ 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-qualeiface|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
@@ -199,7 +200,7 @@ out to display `:0`. Use salmanoff's `visual-qualeiface` to process the visual d
### 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-qualeiface|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
@@ -209,7 +210,7 @@ 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-qualeiface|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
@@ -218,7 +219,7 @@ the microphone function of the sound card with the name `cardname`. Use the
### To attach a thermal sensor managed by Linux: ### To attach a thermal sensor managed by Linux:
``` ```
+idev|my-thermal|thermal-qualeiface|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
@@ -232,9 +233,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-qualeiface|alsa-audio()|alsa()|card0 +edev|soundcard0|audio-qualeiface()|alsa-audio()|alsa()|card0
||| +edev|soundcard0|audio-qualeiface|direct-file-ops()|linux()|/dev/snd/pcmC0D0p || +edev|soundcard0|audio-qualeiface()|direct-file-ops()|linux()|/dev/snd/pcmC0D0p
||| +idev|soundcard0|audio-qualeiface|alsa-mic()|alsa()|card0 || +idev|soundcard0|audio-qualeiface()|alsa-mic()|alsa()|card0
``` ```
This shows: This shows:
@@ -247,9 +248,9 @@ This shows:
A camera device `camera0` might expose different data streams: A camera device `camera0` might expose different data streams:
``` ```
+edev|camera0|visual-qualeiface|v4l-rgb()|linux()|/dev/video0 +edev|camera0|visual-qualeiface()|v4l-rgb()|linux()|/dev/video0
||| +edev|camera0|visual-qualeiface|v4l-yuv()|linux()|/dev/video0 || +edev|camera0|visual-qualeiface()|v4l-yuv()|linux()|/dev/video0
||| +idev|camera0|thermal-qualeiface|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:
@@ -274,7 +275,7 @@ your actuator device.
The general format for an actuator's device attachment specification follows the same pattern: The general format for an actuator's device attachment specification follows the same pattern:
``` ```
+adev|dev-identifier|wilzor-algorithm|stim-buff-api(api-params)|provider(provider-params)|dev-selector +adev|dev-identifier|wilzor-algorithm(quale-iface-api-params)|stim-buff-api(api-params)|provider(provider-params)|dev-selector
``` ```
Where `wilzor-algorithm` is the specific wilzor algorithm needed to control the actuator device. Where `wilzor-algorithm` is the specific wilzor algorithm needed to control the actuator device.
@@ -287,7 +288,7 @@ Separate individual DAP specifications with two consecutive h-bar
characters (`||`), characters (`||`),
like this: like this:
``` ```
+edev|my-window|visual-qualeiface|wayland()|wayland(server-socket)|window0 +edev|my-window|visual-qualeiface()|wayland()|wayland(server-socket)|window0
|| +edev|my-xorg-display|visual-qualeiface|x11()|xorg(listen-socket)|all || +edev|my-xorg-display|visual-qualeiface()|x11()|xorg(listen-socket)|all
|| +idev|my-thermal|thermal-qualeiface|thermal-zone()|linux()|/sys/class/thermal_zone0 || +idev|my-thermal|thermal-qualeiface()|thermal-zone()|linux()|/sys/class/thermal_zone0
``` ```
+11 -1
View File
@@ -35,6 +35,7 @@ public:
std::string deviceIdentifier; std::string deviceIdentifier;
char sensorType; char sensorType;
std::string qualeIfaceApi; std::string qualeIfaceApi;
std::vector<std::pair<std::string,std::string>> qualeIfaceApiParams;
std::string stimBuffApi; std::string stimBuffApi;
std::vector<std::pair<std::string,std::string>> stimBuffApiParams; std::vector<std::pair<std::string,std::string>> stimBuffApiParams;
std::string provider; std::string provider;
@@ -46,7 +47,16 @@ public:
std::ostringstream os; std::ostringstream os;
os << "Device Identifier: " << deviceIdentifier os << "Device Identifier: " << deviceIdentifier
<< ", Sensor Type: " << sensorType << ", Sensor Type: " << sensorType
<< ", QualeIface API: " << qualeIfaceApi << ", StimBuff API: " << stimBuffApi << ", QualeIface API: " << qualeIfaceApi << ", QualeIface API Params: (";
for (const auto& param : qualeIfaceApiParams)
{
os << param.first;
if (!param.second.empty()) {
os << "=" << param.second;
}
os << " ";
}
os << "), StimBuff API: " << stimBuffApi
<< ", StimBuff API Params: ("; << ", StimBuff API Params: (";
for (const auto& param : stimBuffApiParams) for (const auto& param : stimBuffApiParams)
{ {
@@ -106,18 +106,20 @@ extrospector_spec:
; ;
spec_body: spec_body:
STRING PIPE STRING PIPE STRING LPAREN opt_params RPAREN PIPE STRING LPAREN opt_params RPAREN PIPE STRING { STRING PIPE STRING LPAREN opt_params RPAREN PIPE STRING LPAREN opt_params RPAREN PIPE STRING LPAREN opt_params RPAREN PIPE STRING {
$$ = new smo::device::DeviceAttachmentSpec(); $$ = new smo::device::DeviceAttachmentSpec();
$$->deviceIdentifier = std::string($1); $$->deviceIdentifier = std::string($1);
$$->sensorType = '\0'; // This will be set by the parent rule $$->sensorType = '\0'; // This will be set by the parent rule
$$->qualeIfaceApi = std::string($3); $$->qualeIfaceApi = std::string($3);
$$->stimBuffApi = std::string($5); $$->qualeIfaceApiParams = std::move(*$5);
$$->stimBuffApiParams = std::move(*$7); $$->stimBuffApi = std::string($8);
$$->provider = std::string($10); $$->stimBuffApiParams = std::move(*$10);
$$->providerParams = std::move(*$12); $$->provider = std::string($13);
$$->deviceSelector = std::string($15); $$->providerParams = std::move(*$15);
delete $7; $$->deviceSelector = std::string($18);
delete $12; delete $5;
delete $10;
delete $15;
} }
; ;