# cue-sdk
A high level rust wrapper for the native [iCUE SDK](https://github.com/CorsairOfficial/cue-sdk).
If you are looking for low-level (and unsafe) access, check out the parent crate
for this repository [cue-sdk-sys](https://github.com/scottroemeschke/cue-sdk-sys).
# Quick Start
Make sure you set the required environment variables for the [cue-sdk-sys](https://crates.io/crates/cue-sdk-sys)
dependency crate.
If you need the binaries, the easiest place to get them is on the [Github Releases Page](https://github.com/CorsairOfficial/cue-sdk).
Since we can't build them from scratch (not open source) you have to get them yourself.
This version of the crate is built against version [3.0.55](https://github.com/CorsairOfficial/cue-sdk/releases/tag/v3.0.355)
of the iCUE SDK.
# Example Code
```rust
use cue_sdk::led::LedColor;
use cue_sdk::initialize;
let sdk = initialize()
.expect("failed to initialize sdk");
let mut devices = sdk.get_all_devices().expect("failed to get all devices");
let new_color = LedColor { red: 200, green: 20, blue: 165 };
for d in &mut devices {
//print some info
println!("Device: {:?} at index {:?} has led count: ${:?}",
d.device_info.model, d.device_index, d.leds.len());
// set the first led in every device to our `new_color` color
d.leds.first_mut().unwrap().update_color_buffer(new_color);
}
//flush the colors buffer (send to device hardware)
sdk.flush_led_colors_update_buffer_sync()
.expect("failed to flush led buffer");
```
You can note from the following example, most "write" operations can fail
for a variety of reasons including but not limited to:
- device state changes (devices have been unplugged/plugged in)
- ffi interfacing (pointer derefs, etc) fail due to undocumented breaking changes in the iCUE SDK,
or a bug in the crate code
- another client has requested exclusive access
# Examples
For additional examples see the [example code](https://github.com/scottroemeschke/cue-sdk-rust)
and run examples with `cargo run --example {example_name}`.