Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions crates/buttplug_server/src/device/protocol_impl/kiiroo_spot_v2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// Buttplug Rust Source Code File - See https://buttplug.io for more info.
//
// Copyright 2016-2026 Nonpolynomial Labs LLC. All rights reserved.
//
// Licensed under the BSD 3-Clause license. See LICENSE file in the project root
// for full license information.

use crate::device::{
hardware::{Hardware, HardwareCommand, HardwareReadCmd, HardwareWriteCmd},
protocol::{ProtocolHandler, generic_protocol_setup},
};
use buttplug_core::{
errors::ButtplugDeviceError,
message::{self, InputReadingV4, InputTypeReading, InputValue},
};
use buttplug_server_device_config::Endpoint;
use futures::{FutureExt, future::BoxFuture};
use std::{default::Default, sync::Arc};
use uuid::Uuid;

generic_protocol_setup!(KiirooSpotV2, "kiiroo-spot-v2");

#[derive(Default)]
pub struct KiirooSpotV2 {}

impl ProtocolHandler for KiirooSpotV2 {
fn handle_output_vibrate_cmd(
&self,
_feature_index: u32,
feature_id: Uuid,
speed: u32,
) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> {
Ok(vec![
HardwareWriteCmd::new(
&[feature_id],
Endpoint::Tx,
vec![0x01, speed as u8, speed as u8, 0x03, 0xe8, 0xff],
true,
)
.into(),
])
}

fn handle_battery_level_cmd(
&self,
device_index: u32,
device: Arc<Hardware>,
feature_index: u32,
feature_id: Uuid,
) -> BoxFuture<'_, Result<InputReadingV4, ButtplugDeviceError>> {
debug!("Trying to get battery reading.");
let msg = HardwareReadCmd::new(feature_id, Endpoint::RxBLEBattery, 20, 0);
let fut = device.read_value(&msg);
async move {
let hw_msg = fut.await?;
let data = hw_msg.data();
let battery_reading = message::InputReadingV4::new(
device_index,
feature_index,
InputTypeReading::Battery(InputValue::new(data[0])),
);
debug!("Got battery reading: {}", data[0]);
Ok(battery_reading)
}
.boxed()
}
}
7 changes: 7 additions & 0 deletions crates/buttplug_server/src/device/protocol_impl/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ pub mod kgoal_boost;
pub mod kiiroo_powershot;
pub mod kiiroo_prowand;
pub mod kiiroo_spot;
pub mod kiiroo_spot_v2;
pub mod kiiroo_v2;
pub mod kiiroo_v21;
pub mod kiiroo_v21_initialized;
Expand Down Expand Up @@ -114,6 +115,7 @@ pub mod thehandy_v3;
pub mod tryfun;
pub mod tryfun_blackhole;
pub mod tryfun_meta2;
pub mod umove;
pub mod utimi;
pub mod vibcrafter;
pub mod vibratissimo;
Expand Down Expand Up @@ -246,6 +248,10 @@ pub fn get_default_protocol_map() -> HashMap<String, Arc<dyn ProtocolIdentifierF
&mut map,
kiiroo_spot::setup::KiirooSpotIdentifierFactory::default(),
);
add_to_protocol_map(
&mut map,
kiiroo_spot_v2::setup::KiirooSpotV2IdentifierFactory::default(),
);
add_to_protocol_map(
&mut map,
kiiroo_v2::setup::KiirooV2IdentifierFactory::default(),
Expand Down Expand Up @@ -549,6 +555,7 @@ pub fn get_default_protocol_map() -> HashMap<String, Arc<dyn ProtocolIdentifierF
&mut map,
tcode_v03::setup::TCodeV03IdentifierFactory::default(),
);
add_to_protocol_map(&mut map, umove::setup::UmoveIdentifierFactory::default());
add_to_protocol_map(&mut map, utimi::setup::UtimiIdentifierFactory::default());
add_to_protocol_map(
&mut map,
Expand Down
12 changes: 3 additions & 9 deletions crates/buttplug_server/src/device/protocol_impl/ossm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// Licensed under the BSD 3-Clause license. See LICENSE file in the project root
// for full license information.

use crate::device::hardware::{HardwareEvent, HardwareReadCmd, HardwareSubscribeCmd};
use crate::device::hardware::{HardwareEvent, HardwareSubscribeCmd};
use crate::device::{
hardware::{Hardware, HardwareCommand, HardwareWriteCmd},
protocol::{
Expand All @@ -17,21 +17,16 @@ use crate::device::{
};
use async_trait::async_trait;
use buttplug_core::errors::ButtplugDeviceError;
use buttplug_core::util::sleep;
use buttplug_server_device_config::{
Endpoint,
ProtocolCommunicationSpecifier,
ServerDeviceDefinition,
UserDeviceIdentifier,
};
use futures_util::FutureExt;
use serde_json::ser::State;
use std::collections::HashMap;
use std::ops::Index;
use std::str::from_utf8;
use std::sync::atomic::{AtomicBool, AtomicU8, Ordering};
use std::sync::{Arc, RwLock};
use std::time::{Duration, Instant};
use std::sync::Arc;
use std::sync::atomic::{AtomicU8, Ordering};
use tokio::select;
use uuid::{Uuid, uuid};

Expand Down Expand Up @@ -105,7 +100,6 @@ impl ProtocolInitializer for OSSMInitializer {
hardware
.subscribe(&HardwareSubscribeCmd::new(OSSM_PROTOCOL_UUID, Endpoint::Rx))
.await?;
let state = Arc::new(RwLock::new(String::new()));

buttplug_core::spawn!("OssmStateReader", ossm_statereader(hardware.clone(),));

Expand Down
Loading