Buttplug sex toy control library
at master 75 lines 1.9 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 crate::device::{ 9 hardware::{Hardware, HardwareCommand, HardwareWriteCmd}, 10 protocol::{ 11 ProtocolHandler, 12 ProtocolIdentifier, 13 ProtocolInitializer, 14 generic_protocol_initializer_setup, 15 }, 16}; 17use async_trait::async_trait; 18use buttplug_core::{errors::ButtplugDeviceError, util::sleep}; 19use buttplug_server_device_config::{ 20 Endpoint, 21 ProtocolCommunicationSpecifier, 22 ServerDeviceDefinition, 23 UserDeviceIdentifier, 24}; 25use std::{sync::Arc, time::Duration}; 26use uuid::{Uuid, uuid}; 27 28generic_protocol_initializer_setup!(CowgirlCone, "cowgirl-cone"); 29 30const COWGIRL_CONE_PROTOCOL_UUID: Uuid = uuid!("3054b443-eca7-41a6-8ba1-b93a646636a4"); 31 32#[derive(Default)] 33pub struct CowgirlConeInitializer {} 34 35#[async_trait] 36impl ProtocolInitializer for CowgirlConeInitializer { 37 async fn initialize( 38 &mut self, 39 hardware: Arc<Hardware>, 40 _: &ServerDeviceDefinition, 41 ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> { 42 hardware 43 .write_value(&HardwareWriteCmd::new( 44 &[COWGIRL_CONE_PROTOCOL_UUID], 45 Endpoint::Tx, 46 vec![0xaa, 0x56, 0x00, 0x00], 47 false, 48 )) 49 .await?; 50 sleep(Duration::from_millis(3000)).await; 51 Ok(Arc::new(CowgirlCone::default())) 52 } 53} 54 55#[derive(Default)] 56pub struct CowgirlCone {} 57 58impl ProtocolHandler for CowgirlCone { 59 fn handle_output_vibrate_cmd( 60 &self, 61 _feature_index: u32, 62 feature_id: Uuid, 63 speed: u32, 64 ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 65 Ok(vec![ 66 HardwareWriteCmd::new( 67 &[feature_id], 68 Endpoint::Tx, 69 vec![0xf1, 0x01, speed as u8, 0x00], 70 false, 71 ) 72 .into(), 73 ]) 74 } 75}