Skip to main content

DeviceConfig

Struct DeviceConfig 

Source
pub struct DeviceConfig {
Show 16 fields pub gesture_owner: Option<GestureOwner>, pub identity: Option<DeviceIdentity>, pub bindings: BTreeMap<ButtonId, Binding>, pub per_app_bindings: BTreeMap<String, BTreeMap<ButtonId, Action>>, pub dpi_presets: Vec<u32>, pub dpi: Option<u32>, pub lighting: Option<Lighting>, pub light: Option<LightSettings>, pub smartshift: Option<SmartShift>, pub camera_controls: Option<CameraControls>, pub camera_profiles: BTreeMap<String, CameraControls>, pub camera_profile: Option<String>, pub invert_scroll: bool, pub scroll_resolution: Option<ScrollResolution>, pub host_switch_targets: Vec<String>, pub fn_lock: Option<bool>,
}
Expand description

Settings scoped to a single physical device.

Deserialization goes through RawDeviceConfig (#[serde(from)]) so pre-v2 files — which split bindings across button_bindings + gesture_bindings — fold into the unified Self::bindings map. Only bindings is ever serialized, so a migrated file self-heals to the v2 shape on its next save.

Fields§

§gesture_owner: Option<GestureOwner>

Which button owns the device’s single gesture role, once the user has chosen explicitly. Absent means “infer” (the dedicated HID++ gesture button owns gestures if present) — see Config::gesture_owner. Listed first so it serializes as a scalar ahead of the bindings sub-table.

§identity: Option<DeviceIdentity>

Last-known identity (name / kind / capabilities), captured while the device was online. Lets the UI render this device — with the right config panels — on a cold start before any probe, or while it sleeps. None for configs written before this field existed or by hand.

§bindings: BTreeMap<ButtonId, Binding>

Every rebindable button’s binding: a single Action, or — for the gesture button (and, later, any raw-XY-capable button) — a Binding::Gesture per-direction map.

§per_app_bindings: BTreeMap<String, BTreeMap<ButtonId, Action>>

Per-application binding overlays (P1.4). Keyed by bundle identifier (e.g. "com.microsoft.VSCode" on macOS). When the foreground app’s id matches a key here, those bindings take precedence; anything not listed falls through to bindings. Deliberately Action-valued (not Binding): a per-app override replaces the whole button with one action, never a per-direction gesture overlay.

§dpi_presets: Vec<u32>

Ordered list of DPI presets cycled through by Action::CycleDpiPresets and indexed by Action::SetDpiPreset. Empty means “no presets configured” — the cycle action becomes a no-op until the user adds at least one.

§dpi: Option<u32>

The sensor DPI the user committed for this device. Persisted because the value lives in device RAM and resets on a power cycle (#189); the agent re-applies it when the device reconnects. None until the user first changes DPI.

§lighting: Option<Lighting>

Per-device RGB lighting (static color + brightness + on/off). None until the user changes it, so it stays out of config.toml otherwise.

§light: Option<LightSettings>

Per-device standalone-light settings. Separate from Self::lighting, which is the existing HID++ keyboard RGB configuration.

§smartshift: Option<SmartShift>

Per-device SmartShift wheel configuration, re-applied on reconnect for the same reason as Self::dpi. None until the user changes it.

§camera_controls: Option<CameraControls>

Per-webcam UVC image controls (brightness/contrast/…). None until the user adjusts one, so it stays out of config.toml otherwise.

§camera_profiles: BTreeMap<String, CameraControls>

User-saved camera profiles (name → control snapshot). Built-in profiles (Default / Streaming / Video call) live in the GUI, not here.

§camera_profile: Option<String>

The camera profile last applied from the GUI, highlighted on reopen.

§invert_scroll: bool

Invert this device’s scroll-wheel direction relative to the OS setting (issue #126): on, a wheel tick scrolls the opposite way, so a user who keeps macOS “natural scrolling” for the trackpad can have a traditional “reverse” wheel on the mouse. Vertical only; the agent applies it through the device’s HID++ native wheel-inversion mode when supported. false (default) is the native direction, and is omitted from config.toml.

§scroll_resolution: Option<ScrollResolution>

Persisted HID++ 0x2121 wheel resolution. None leaves the device’s current resolution unmanaged and omits the field from config.toml.

§host_switch_targets: Vec<String>

Physical config keys of pointing devices that follow this keyboard’s host switch channel. The relationship is keyboard-initiated: pressing one of this device’s host keys switches every listed target first, then lets the keyboard leave the current host.

§fn_lock: Option<bool>

Keyboard Fn-lock state (HID++ fn inversion, 0x40a2/0x40a3): true means the F-row sends F1–F12 without holding Fn. The state lives in device RAM per host, so the agent re-applies it on reconnect like Self::dpi. None means “never set — leave the keyboard alone”.

Trait Implementations§

Source§

impl Clone for DeviceConfig

Source§

fn clone(&self) -> DeviceConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DeviceConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DeviceConfig

Source§

fn default() -> DeviceConfig

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for DeviceConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for DeviceConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more