Buttplug sex toy control library
at master 62 lines 1.7 kB view raw
1// Buttplug Rust Source Code File - See https://buttplug.io for more info. 2// 3// Copyright 2016-2024 Nonpolynomial Labs LLC. All rights reserved. 4// 5// Licensed under the BSD 3-Clause license. See LICENSE file in the project root 6// for full license information. 7 8use super::{form_lovense_command, form_vibrate_command}; 9use crate::device::{ 10 hardware::{Hardware, HardwareCommand}, 11 protocol::{ProtocolHandler, ProtocolKeepaliveStrategy}, 12}; 13use buttplug_core::{errors::ButtplugDeviceError, message::InputReadingV4}; 14use futures::future::BoxFuture; 15use std::sync::Arc; 16use uuid::Uuid; 17 18#[derive(Default)] 19pub struct LovenseMax {} 20 21impl ProtocolHandler for LovenseMax { 22 fn keepalive_strategy(&self) -> ProtocolKeepaliveStrategy { 23 super::keepalive_strategy() 24 } 25 26 fn handle_output_vibrate_cmd( 27 &self, 28 _feature_index: u32, 29 feature_id: Uuid, 30 speed: u32, 31 ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 32 form_vibrate_command(feature_id, speed) 33 } 34 35 fn handle_output_oscillate_cmd( 36 &self, 37 _feature_index: u32, 38 feature_id: Uuid, 39 speed: u32, 40 ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 41 form_vibrate_command(feature_id, speed) 42 } 43 44 fn handle_output_constrict_cmd( 45 &self, 46 _feature_index: u32, 47 feature_id: Uuid, 48 level: u32, 49 ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 50 form_lovense_command(feature_id, &format!("Air:Level:{level};")) 51 } 52 53 fn handle_battery_level_cmd( 54 &self, 55 device_index: u32, 56 device: Arc<Hardware>, 57 feature_index: u32, 58 feature_id: Uuid, 59 ) -> BoxFuture<'static, Result<InputReadingV4, ButtplugDeviceError>> { 60 super::handle_battery_level_cmd(device_index, device, feature_index, feature_id) 61 } 62}