steeloxide 0.1.0

A rust library for interacting with SteelSeries devices.
Documentation

// (c) ato
// 
// `mouse/packet/polling.rs`
// 
// This is used for changing the polling/refresh rate of the mouse. (125 - 1000)
// The header was also obtained straight from Wireshark w USBPcap

use crate::{Result, mouse::{packet::MousePacket, polling_rate::PollingRate}};

use std::io::Write;
pub const POLLING_PACKET_HEADER: [u8; 3] = [0x00, 0x04, 0x00];

#[derive(Clone)]
pub struct PollingPacket(pub PollingRate);

impl From<u16> for PollingPacket {
    fn from(value: u16) -> Self {
        Self(PollingRate(value))
    }
}

impl MousePacket for PollingPacket {
    fn serialize(&self) -> Result<Vec<u8>> {
        let mut buffer = Vec::with_capacity(3 + 1);
        
        let _ = buffer.write(&POLLING_PACKET_HEADER)?;
        let _ = buffer.write(&[self.0.encode()?])?;

        Ok(buffer)
    }
}