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 108)
63fn run_example<T: Read + Write>(mut client: StudioClient<T>) -> Result<(), Box<dyn Error>> {
64 let info = client.get_device_info()?;
65 println!("Device: {}", info.name);
66 println!("Lock: {:?}", client.get_lock_state()?);
67
68 let behavior_ids = client.list_all_behaviors()?;
69 println!("Behavior count: {}", behavior_ids.len());
70 if let Some(first_behavior_id) = behavior_ids.first().copied() {
71 let details = client.get_behavior_details(first_behavior_id)?;
72 println!("First behavior: {} ({})", details.id, details.display_name);
73 }
74
75 let keymap = match client.get_keymap() {
76 Ok(keymap) => keymap,
77 Err(ClientError::Meta(_)) => {
78 println!("Keymap request denied (likely locked); press `&studio_unlock` then rerun.");
79 return Ok(());
80 }
81 Err(err) => return Err(Box::new(err)),
82 };
83 println!("Layers: {}", keymap.layers.len());
84
85 let layouts = client.get_physical_layouts()?;
86 println!(
87 "Physical layouts: {} (active index: {})",
88 layouts.layouts.len(),
89 layouts.active_layout_index
90 );
91
92 let Some(first_layer) = keymap.layers.first() else {
93 return Ok(());
94 };
95 if first_layer.bindings.is_empty() {
96 return Ok(());
97 }
98
99 let layer_id = first_layer.id;
100 let key_position = 0;
101
102 let before = client.get_key_at(layer_id, key_position)?;
103 println!("Before: {before:?}");
104
105 client.set_key_at(
106 layer_id,
107 key_position,
108 Behavior::KeyPress(HidUsage::from_encoded(Keycode::A.to_hid_usage())),
109 )?;
110 let after = client.get_key_at(layer_id, key_position)?;
111 println!("After: {after:?}");
112
113 // Change management APIs.
114 let has_changes = client.check_unsaved_changes()?;
115 println!("Unsaved changes: {has_changes}");
116 if has_changes {
117 client.discard_changes()?;
118 }
119
120 Ok(())
121}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