pub struct HidUsage { /* private fields */ }Expand description
Decoded ZMK HID usage values used in typed behavior APIs. Lossless decoded ZMK HID usage value (base usage + modifiers).
Implementations§
Source§impl HidUsage
impl HidUsage
Sourcepub fn from_encoded(encoded: u32) -> Self
pub fn from_encoded(encoded: u32) -> Self
Decode from ZMK’s encoded usage format.
ZMK encodes as:
- bits 31:24: modifiers
- bits 23:16: usage page
- bits 15:00: usage id
If page is 0, ZMK treats it as keyboard page (0x07).
Examples found in repository?
examples/basic_example.rs (line 111)
66fn run_example<T: Read + Write>(mut client: StudioClient<T>) -> Result<(), Box<dyn Error>> {
67 let info = client.get_device_info()?;
68 println!("Device: {}", info.name);
69 println!("Lock: {:?}", client.get_lock_state()?);
70
71 let behavior_ids = client.list_all_behaviors()?;
72 println!("Behavior count: {}", behavior_ids.len());
73 if let Some(first_behavior_id) = behavior_ids.first().copied() {
74 let details = client.get_behavior_details(first_behavior_id)?;
75 println!("First behavior: {} ({})", details.id, details.display_name);
76 }
77
78 let keymap = match client.get_keymap() {
79 Ok(keymap) => keymap,
80 Err(ClientError::Meta(_)) => {
81 println!("Keymap request denied (likely locked); press `&studio_unlock` then rerun.");
82 return Ok(());
83 }
84 Err(err) => return Err(Box::new(err)),
85 };
86 println!("Layers: {}", keymap.layers.len());
87
88 let layouts = client.get_physical_layouts()?;
89 println!(
90 "Physical layouts: {} (active index: {})",
91 layouts.layouts.len(),
92 layouts.active_layout_index
93 );
94
95 let Some(first_layer) = keymap.layers.first() else {
96 return Ok(());
97 };
98 if first_layer.bindings.is_empty() {
99 return Ok(());
100 }
101
102 let layer_id = first_layer.id;
103 let key_position = 0;
104
105 let before = client.get_key_at(layer_id, key_position)?;
106 println!("Before: {before:?}");
107
108 client.set_key_at(
109 layer_id,
110 key_position,
111 Behavior::KeyPress(HidUsage::from_encoded(Keycode::A.to_hid_usage())),
112 )?;
113 let after = client.get_key_at(layer_id, key_position)?;
114 println!("After: {after:?}");
115
116 // Change management APIs.
117 let has_changes = client.check_unsaved_changes()?;
118 println!("Unsaved changes: {has_changes}");
119 if has_changes {
120 client.discard_changes()?;
121 }
122
123 Ok(())
124}pub fn from_parts(page: u16, id: u16, modifiers: u8) -> Self
pub fn to_hid_usage(self) -> u32
pub fn page(self) -> u16
pub fn id(self) -> u16
pub fn modifiers(self) -> u8
pub fn base(self) -> Self
pub fn known_keycode(self) -> Option<Keycode>
pub fn known_base_keycode(self) -> Option<Keycode>
pub fn modifier_labels(self) -> Vec<&'static str>
Trait Implementations§
impl Copy for HidUsage
impl Eq for HidUsage
impl StructuralPartialEq for HidUsage
Auto Trait Implementations§
impl Freeze for HidUsage
impl RefUnwindSafe for HidUsage
impl Send for HidUsage
impl Sync for HidUsage
impl Unpin for HidUsage
impl UnsafeUnpin for HidUsage
impl UnwindSafe for HidUsage
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more