Buttplug sex toy control library
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}