Skip to content

Commit 9263149

Browse files
committed
Add device scanning
1 parent 623345e commit 9263149

File tree

6 files changed

+113
-126
lines changed

6 files changed

+113
-126
lines changed

Cargo.lock

Lines changed: 35 additions & 103 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@ description = "VIA api implementation for QMK-based keyboards"
55
authors = ["Stephan Rumswinkel"]
66
repository = "https://github.com/srwi/qmk-via-api"
77
readme = "README.md"
8-
version = "0.2.1"
8+
version = "0.3.0"
99
edition = "2021"
1010

1111
[lib]
1212
name = "qmk_via_api"
1313
crate-type = ["cdylib", "lib"] # "cdylib" is necessary to produce a shared library for Python to import from.
1414

1515
[dependencies]
16-
hidapi = "2.6.1"
17-
itertools = "0.12.1"
18-
num_enum = "0.7.3"
19-
strum = "0.26.3"
20-
strum_macros = "0.26.3"
16+
hidapi = "2.6.3"
17+
itertools = "0.14.0"
18+
num_enum = "0.7.4"
19+
strum = "0.27.2"
20+
strum_macros = "0.27.2"
2121

2222
[dependencies.pyo3]
23-
version = "0.21.0"
23+
version = "0.26.0"
2424
features = ["abi3-py38"] # "abi3-py38" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.8.

README.md

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ cargo add qmk-via-api
2121
Usage example:
2222

2323
```rust
24-
use qmk_via_api::api::KeyboardApi;
25-
26-
const PRODUCT_VID: u16 = 0x594D;
27-
const PRODUCT_PID: u16 = 0x604D;
28-
const USAGE_PAGE: u16 = 0xff60;
24+
use qmk_via_api::{api::KeyboardApi, scan::scan_keyboards};
2925

3026
fn main() {
31-
let api = KeyboardApi::new(PRODUCT_VID, PRODUCT_PID, USAGE_PAGE).unwrap();
32-
println!("Protocol version: {:?}", api.get_protocol_version());
33-
println!("Layer count: {:?}", api.get_layer_count());
27+
if let Some(dev) = scan_keyboards().first() {
28+
let api = KeyboardApi::new(dev.vendor_id, dev.product_id, dev.usage_page).unwrap();
29+
println!("Protocol version: {:?}", api.get_protocol_version());
30+
println!("Layer count: {:?}", api.get_layer_count());
31+
} else {
32+
println!("No devices found");
33+
}
3434
}
3535
```
3636

@@ -46,15 +46,16 @@ Usage example:
4646

4747
```python
4848
import qmk_via_api
49+
from qmk_via_api import scan_keyboards
4950

50-
PRODUCT_VID = 0x594D
51-
PRODUCT_PID = 0x604D
52-
USAGE_PAGE = 0xff60
53-
54-
if __name__ == "__main__":
55-
api = qmk_via_api.KeyboardApi(PRODUCT_VID, PRODUCT_PID, USAGE_PAGE)
51+
devices = scan_keyboards()
52+
if devices:
53+
dev = devices[0]
54+
api = qmk_via_api.KeyboardApi(dev.vendor_id, dev.product_id, dev.usage_page)
5655
print(f"Protocol version {api.get_protocol_version()}")
5756
print(f"Layers count: {api.get_layer_count()}")
57+
else:
58+
print("No devices found")
5859
```
5960

6061
# License & Attribution

src/api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ impl FromStr for KeyboardValue {
5353
}
5454
}
5555

56-
#[pyclass]
56+
#[pyclass(unsendable)]
5757
pub struct KeyboardApi {
5858
device: hidapi::HidDevice,
5959
}

src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ use pyo3::prelude::*;
33
pub mod api;
44
pub mod api_commands;
55
pub mod keycodes;
6+
pub mod scan;
67
pub mod utils;
78

89
#[pymodule]
9-
fn qmk_via_api(_py: Python, m: &PyModule) -> PyResult<()> {
10+
fn qmk_via_api(_py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> {
1011
m.add_class::<api::KeyboardApi>()?;
12+
m.add_class::<scan::KeyboardDeviceInfo>()?;
13+
m.add_function(wrap_pyfunction!(scan::scan_keyboards, m)?)?;
1114
Ok(())
1215
}

0 commit comments

Comments
 (0)