Buttplug sex toy control library

feat: Add support for Kiiroo Keon (Wifi)

authored by

blackspherefollower and committed by qdot.tngl.sh 03cfd400 8899252a

+154 -2
+45
crates/buttplug_server/src/device/protocol_impl/kiiroo_v3.rs
··· 1 + // Buttplug Rust Source Code File - See https://buttplug.io for more info. 2 + // 3 + // Copyright 2016-2025 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 + 8 + use crate::device::{ 9 + hardware::{Hardware, HardwareCommand, HardwareWriteCmd}, 10 + protocol::{ 11 + generic_protocol_initializer_setup, 12 + ProtocolHandler, 13 + ProtocolIdentifier, 14 + ProtocolInitializer, 15 + }, 16 + protocol_impl::kiiroo_v21::KiirooV21, 17 + }; 18 + use async_trait::async_trait; 19 + use buttplug_core::errors::ButtplugDeviceError; 20 + use buttplug_server_device_config::{ 21 + DeviceDefinition, 22 + ProtocolCommunicationSpecifier, 23 + UserDeviceIdentifier, 24 + }; 25 + use std::sync::{ 26 + atomic::{AtomicU8, Ordering}, 27 + Arc, 28 + }; 29 + use uuid::{uuid, Uuid}; 30 + 31 + generic_protocol_initializer_setup!(KiirooV3, "kiiroo-v3"); 32 + 33 + #[derive(Default)] 34 + pub struct KiirooV3Initializer {} 35 + 36 + #[async_trait] 37 + impl ProtocolInitializer for KiirooV3Initializer { 38 + async fn initialize( 39 + &mut self, 40 + hardware: Arc<Hardware>, 41 + _: &DeviceDefinition, 42 + ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> { 43 + Ok(Arc::new(KiirooV21::default())) 44 + } 45 + }
+5
crates/buttplug_server/src/device/protocol_impl/mod.rs
··· 36 36 pub mod kiiroo_prowand; 37 37 pub mod kiiroo_spot; 38 38 pub mod kiiroo_v2; 39 + pub mod kiiroo_v3; 39 40 pub mod kiiroo_v21; 40 41 pub mod kiiroo_v21_initialized; 41 42 pub mod kiiroo_v2_vibrator; ··· 241 242 add_to_protocol_map( 242 243 &mut map, 243 244 kiiroo_v2::setup::KiirooV2IdentifierFactory::default(), 245 + ); 246 + add_to_protocol_map( 247 + &mut map, 248 + kiiroo_v3::setup::KiirooV3IdentifierFactory::default(), 244 249 ); 245 250 add_to_protocol_map( 246 251 &mut map,
+66 -1
crates/buttplug_server_device_config/build-config/buttplug-device-config-v4.json
··· 1 1 { 2 2 "version": { 3 3 "major": 4, 4 - "minor": 69 4 + "minor": 70 5 5 }, 6 6 "protocols": { 7 7 "activejoy": { ··· 8813 8813 "features": [], 8814 8814 "id": "bd9c7fa4-214b-4871-8373-c5266ace0b90", 8815 8815 "name": "Kiiroo V2.1 Initialized Device" 8816 + } 8817 + }, 8818 + "kiiroo-v3": { 8819 + "communication": [ 8820 + { 8821 + "btle": { 8822 + "names": [ 8823 + "KEON WIFI", 8824 + "Keon Wifi" 8825 + ], 8826 + "services": { 8827 + "00001900-0000-1000-8000-00805f9b34fb": { 8828 + "rx": "00001903-0000-1000-8000-00805f9b34fb", 8829 + "tx": "00001800-0000-1000-8000-00805f9b34fb" 8830 + } 8831 + } 8832 + } 8833 + } 8834 + ], 8835 + "configurations": [ 8836 + { 8837 + "features": [ 8838 + { 8839 + "feature-type": "PositionWithDuration", 8840 + "id": "f4ee99e7-1a14-4315-9870-3990bca7ff94", 8841 + "output": { 8842 + "PositionWithDuration": { 8843 + "step-range": [ 8844 + 0, 8845 + 99 8846 + ] 8847 + } 8848 + } 8849 + }, 8850 + { 8851 + "description": "Battery Level", 8852 + "feature-type": "Battery", 8853 + "id": "90319514-ff68-40ae-805d-54ce392a60bd", 8854 + "input": { 8855 + "Battery": { 8856 + "input-commands": [ 8857 + "Read" 8858 + ], 8859 + "value-range": [ 8860 + [ 8861 + 0, 8862 + 100 8863 + ] 8864 + ] 8865 + } 8866 + } 8867 + } 8868 + ], 8869 + "id": "62ba81c4-0ada-41be-b49d-d53426cdc277", 8870 + "identifier": [ 8871 + "KEON WIFI", 8872 + "Keon Wifi" 8873 + ], 8874 + "name": "Kiiroo Keon" 8875 + } 8876 + ], 8877 + "defaults": { 8878 + "features": [], 8879 + "id": "b3b6151e-79b8-4aac-a777-0de6b9f2d893", 8880 + "name": "Kiiroo V3 Device" 8816 8881 } 8817 8882 }, 8818 8883 "kizuna": {
+37
crates/buttplug_server_device_config/device-config-v4/protocols/kiiroo-v3.yml
··· 1 + defaults: 2 + name: Kiiroo V3 Device 3 + features: [] 4 + id: b3b6151e-79b8-4aac-a777-0de6b9f2d893 5 + configurations: 6 + - identifier: 7 + - KEON WIFI 8 + - Keon Wifi 9 + name: Kiiroo Keon 10 + features: 11 + - feature-type: PositionWithDuration 12 + id: f4ee99e7-1a14-4315-9870-3990bca7ff94 13 + output: 14 + PositionWithDuration: 15 + step-range: 16 + - 0 17 + - 99 18 + - feature-type: Battery 19 + description: Battery Level 20 + id: 90319514-ff68-40ae-805d-54ce392a60bd 21 + input: 22 + Battery: 23 + value-range: 24 + - - 0 25 + - 100 26 + input-commands: 27 + - Read 28 + id: 62ba81c4-0ada-41be-b49d-d53426cdc277 29 + communication: 30 + - btle: 31 + names: 32 + - KEON WIFI 33 + - Keon Wifi 34 + services: 35 + 00001900-0000-1000-8000-00805f9b34fb: 36 + tx: 00001800-0000-1000-8000-00805f9b34fb 37 + rx: 00001903-0000-1000-8000-00805f9b34fb
+1 -1
crates/buttplug_server_device_config/device-config-v4/version.yaml
··· 1 1 version: 2 2 major: 4 3 - minor: 69 3 + minor: 70