Buttplug sex toy control library
at dev 2.0 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 buttplug_core::errors::ButtplugDeviceError; 9use buttplug_server_device_config::Endpoint; 10use buttplug_server_device_config::{ServerDeviceDefinition, UserDeviceIdentifier}; 11 12use crate::device::{ 13 hardware::{Hardware, HardwareCommand, HardwareWriteCmd}, 14 protocol::{ 15 ProtocolHandler, 16 ProtocolIdentifier, 17 ProtocolInitializer, 18 generic_protocol_initializer_setup, 19 }, 20}; 21use async_trait::async_trait; 22use buttplug_server_device_config::ProtocolCommunicationSpecifier; 23use std::sync::Arc; 24use uuid::{Uuid, uuid}; 25 26const AMORELIE_JOY_PROTOCOL_UUID: Uuid = uuid!("0968017b-96f8-44ae-b113-39080dd7ed5f"); 27 28generic_protocol_initializer_setup!(AmorelieJoy, "amorelie-joy"); 29 30#[derive(Default)] 31pub struct AmorelieJoyInitializer {} 32 33#[async_trait] 34impl ProtocolInitializer for AmorelieJoyInitializer { 35 async fn initialize( 36 &mut self, 37 hardware: Arc<Hardware>, 38 _: &ServerDeviceDefinition, 39 ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> { 40 hardware 41 .write_value(&HardwareWriteCmd::new( 42 &[AMORELIE_JOY_PROTOCOL_UUID], 43 Endpoint::Tx, 44 vec![0x03], 45 false, 46 )) 47 .await?; 48 Ok(Arc::new(AmorelieJoy::default())) 49 } 50} 51 52#[derive(Default)] 53pub struct AmorelieJoy {} 54 55impl ProtocolHandler for AmorelieJoy { 56 fn handle_output_vibrate_cmd( 57 &self, 58 _feature_index: u32, 59 feature_id: Uuid, 60 speed: u32, 61 ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 62 Ok(vec![ 63 HardwareWriteCmd::new( 64 &[feature_id], 65 Endpoint::Tx, 66 [ 67 0x01, // static header 68 0x01, // pattern (1 = steady), 69 speed as u8, // speed 0-100 70 ] 71 .to_vec(), 72 false, 73 ) 74 .into(), 75 ]) 76 } 77}