Buttplug sex toy control library

chore: Fix protocol and config issues after PR #784 rebase

Meant to compile as I went along, oops.

+153 -198
+1 -1
crates/buttplug_server/src/device/protocol_impl/galaku.rs
··· 107 async fn initialize( 108 &mut self, 109 hardware: Arc<Hardware>, 110 - _: &ServerDeviceDefinition, 111 ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> { 112 let mut protocol = Galaku::default(); 113 protocol.is_caiping_pump_device = false;
··· 107 async fn initialize( 108 &mut self, 109 hardware: Arc<Hardware>, 110 + def: &ServerDeviceDefinition, 111 ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> { 112 let mut protocol = Galaku::default(); 113 protocol.is_caiping_pump_device = false;
+18 -23
crates/buttplug_server/src/device/protocol_impl/hismith_mini.rs
··· 184 feature_id: Uuid, 185 speed: i32, 186 ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 187 - Ok(vec![ 188 - HardwareWriteCmd::new( 189 - &[feature_id], 190 - Endpoint::Tx, 191 - vec![0xCC, 0x03, speed as u8, speed as u8 + 3], 192 - false, 193 - ).into(), 194 - HardwareWriteCmd::new( 195 - &vec![HISMITH_MINI_ROTATE_DIRECTIOM_UUID], 196 - Endpoint::Tx, 197 - vec![0xCC, 0x01, if clockwise { 0xc0 } else {0xc1}, if clockwise { 0xc1 } else {0xc2}], 198 - false, 199 - ).into(), 200 - ]) 201 - } 202 - 203 - fn handle_output_spray_cmd(&self, _feature_index: u32, feature_id: Uuid, _level: u32) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 204 Ok(vec![ 205 HardwareWriteCmd::new( 206 &[feature_id], 207 Endpoint::Tx, 208 - vec![ 209 - 0xCC, 210 - 0x03, 211 - speed.unsigned_abs() as u8, 212 - speed.unsigned_abs() as u8 + 3, 213 - ], 214 false, 215 ) 216 .into(), ··· 223 if speed >= 0 { 0xc0 } else { 0xc1 }, 224 if speed >= 0 { 0xc1 } else { 0xc2 }, 225 ], 226 false, 227 ) 228 .into(),
··· 184 feature_id: Uuid, 185 speed: i32, 186 ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 187 Ok(vec![ 188 HardwareWriteCmd::new( 189 &[feature_id], 190 Endpoint::Tx, 191 + vec![0xCC, 0x03, speed.unsigned_abs() as u8, speed.unsigned_abs() as u8 + 3], 192 false, 193 ) 194 .into(), ··· 201 if speed >= 0 { 0xc0 } else { 0xc1 }, 202 if speed >= 0 { 0xc1 } else { 0xc2 }, 203 ], 204 + false, 205 + ) 206 + .into(), 207 + ]) 208 + } 209 + 210 + fn handle_output_spray_cmd( 211 + &self, 212 + _feature_index: u32, 213 + feature_id: Uuid, 214 + _level: u32, 215 + ) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> { 216 + Ok(vec![ 217 + HardwareWriteCmd::new( 218 + &[feature_id], 219 + Endpoint::Tx, 220 + vec![0xcc, 0x0b, 0x01, 0x0c], 221 false, 222 ) 223 .into(),
+2 -2
crates/buttplug_server/src/device/protocol_impl/kiiroo_v3.rs
··· 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 }; ··· 36 async fn initialize( 37 &mut self, 38 _: Arc<Hardware>, 39 - _: &DeviceDefinition, 40 ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> { 41 Ok(Arc::new(KiirooV21::default())) 42 }
··· 18 use async_trait::async_trait; 19 use buttplug_core::errors::ButtplugDeviceError; 20 use buttplug_server_device_config::{ 21 + ServerDeviceDefinition, 22 ProtocolCommunicationSpecifier, 23 UserDeviceIdentifier, 24 }; ··· 36 async fn initialize( 37 &mut self, 38 _: Arc<Hardware>, 39 + _: &ServerDeviceDefinition, 40 ) -> Result<Arc<dyn ProtocolHandler>, ButtplugDeviceError> { 41 Ok(Arc::new(KiirooV21::default())) 42 }
+53 -71
crates/buttplug_server_device_config/build-config/buttplug-device-config-v4.json
··· 1 { 2 "version": { 3 "major": 4, 4 - "minor": 94 5 }, 6 "protocols": { 7 "activejoy": { ··· 2297 { 2298 "features": [ 2299 { 2300 - "description": "vibrate", 2301 "id": "dc4348f2-7788-4b63-96f8-80ed74e4f9c2", 2302 "output": { 2303 - "vibrate": { 2304 "value": [ 2305 0, 2306 100 ··· 4400 { 4401 "features": [ 4402 { 4403 - "feature-type": "Spray", 4404 "id": "c24a6b8c-6665-4cf6-95f8-51140f9788b4", 4405 "output": { 4406 - "Spray": { 4407 - "step-range": [ 4408 0, 4409 1 4410 ] ··· 7784 { 7785 "features": [ 7786 { 7787 - "feature-type": "Oscillate", 7788 "id": "12f36e6d-e9ce-439c-b6f5-3f80a4f4b47d", 7789 "output": { 7790 - "Oscillate": { 7791 - "step-range": [ 7792 0, 7793 255 7794 ] ··· 7796 } 7797 }, 7798 { 7799 - "feature-type": "Vibrate", 7800 "id": "94025679-badf-49bb-a247-1dab022d9204", 7801 "output": { 7802 - "Vibrate": { 7803 - "step-range": [ 7804 0, 7805 255 7806 ] ··· 7960 "defaults": { 7961 "features": [ 7962 { 7963 - "feature-type": "Vibrate", 7964 "id": "8829c78b-420c-42e0-bc3e-280f84c89362", 7965 "output": { 7966 - "Vibrate": { 7967 - "step-range": [ 7968 0, 7969 100 7970 ] ··· 7972 } 7973 }, 7974 { 7975 - "feature-type": "Vibrate", 7976 "id": "019e23e5-bcba-41c8-913d-03a7da63feee", 7977 "output": { 7978 - "Vibrate": { 7979 - "step-range": [ 7980 0, 7981 100 7982 ] ··· 7985 }, 7986 { 7987 "description": "Battery Level", 7988 - "feature-type": "Battery", 7989 "id": "eba92a5d-4284-4170-b5e9-3e0700e4529e", 7990 "input": { 7991 - "Battery": { 7992 - "input-commands": [ 7993 "Read" 7994 ], 7995 - "value-range": [ 7996 [ 7997 0, 7998 100 ··· 8382 } 8383 }, 8384 { 8385 - "feature-type": "Vibrate", 8386 "id": "1e1fb78c-a3bd-4782-8a96-684bbbaa4670", 8387 "output": { 8388 - "Vibrate": { 8389 - "step-range": [ 8390 0, 8391 100 8392 ] ··· 8994 { 8995 "features": [ 8996 { 8997 - "feature-type": "PositionWithDuration", 8998 "id": "f4ee99e7-1a14-4315-9870-3990bca7ff94", 8999 "output": { 9000 - "PositionWithDuration": { 9001 - "step-range": [ 9002 0, 9003 99 9004 ] ··· 9007 }, 9008 { 9009 "description": "Battery Level", 9010 - "feature-type": "Battery", 9011 "id": "90319514-ff68-40ae-805d-54ce392a60bd", 9012 "input": { 9013 - "Battery": { 9014 - "input-commands": [ 9015 "Read" 9016 ], 9017 - "value-range": [ 9018 [ 9019 0, 9020 100 ··· 11864 { 11865 "features": [ 11866 { 11867 - "feature-type": "Vibrate", 11868 "id": "8deea69f-ea53-46bb-80ae-51dd5d49bba9", 11869 "output": { 11870 - "Vibrate": { 11871 - "step-range": [ 11872 0, 11873 255 11874 ] ··· 11876 } 11877 }, 11878 { 11879 - "feature-type": "Oscillate", 11880 "id": "5ae8bb6f-6280-4a8d-9e08-a3d5e5fb89a8", 11881 "output": { 11882 - "Oscillate": { 11883 - "step-range": [ 11884 0, 11885 255 11886 ] ··· 11897 { 11898 "features": [ 11899 { 11900 - "feature-type": "Vibrate", 11901 "id": "4dd378c8-a91b-400e-846b-f16e81ac5690", 11902 "output": { 11903 - "Vibrate": { 11904 - "step-range": [ 11905 0, 11906 255 11907 ] ··· 11909 } 11910 }, 11911 { 11912 - "feature-type": "Vibrate", 11913 "id": "c04a2518-81a2-49cb-8a0a-1a5b9c163737", 11914 "output": { 11915 - "Vibrate": { 11916 - "step-range": [ 11917 0, 11918 255 11919 ] ··· 11930 { 11931 "features": [ 11932 { 11933 - "feature-type": "Vibrate", 11934 "id": "e04ad6f5-278e-4acc-b6fa-711954c2e1ab", 11935 "output": { 11936 - "Vibrate": { 11937 - "step-range": [ 11938 0, 11939 255 11940 ] ··· 11942 } 11943 }, 11944 { 11945 - "feature-type": "Oscillate", 11946 "id": "8a4f2884-887f-46e3-9a36-c0b91b1b1363", 11947 "output": { 11948 - "Oscillate": { 11949 - "step-range": [ 11950 0, 11951 255 11952 ] ··· 11954 } 11955 }, 11956 { 11957 - "feature-type": "Constrict", 11958 "id": "389aa8b8-2550-462c-bd4f-1158c0981606", 11959 "output": { 11960 - "Constrict": { 11961 - "step-range": [ 11962 0, 11963 54 11964 ] ··· 16645 { 16646 "features": [ 16647 { 16648 - "feature-type": "Constrict", 16649 "id": "4464ae6b-20bc-4c99-9e63-bfda99b7c8cc", 16650 "output": { 16651 - "Constrict": { 16652 - "step-range": [ 16653 0, 16654 100 16655 ] ··· 17033 "features": [ 17034 { 17035 "description": "Wearer Vibrator", 17036 - "feature-type": "Vibrate", 17037 "id": "968f7306-6997-4b76-a40f-acbb431d9582", 17038 "output": { 17039 - "Oscillate": { 17040 - "step-range": [ 17041 0, 17042 20 17043 ] ··· 17046 }, 17047 { 17048 "description": "Receiver Vibrator", 17049 - "feature-type": "Vibrate", 17050 "id": "018009d0-b5bf-4f97-a13d-909d0e74fabc", 17051 "output": { 17052 - "Vibrate": { 17053 - "step-range": [ 17054 0, 17055 20 17056 ] ··· 17059 }, 17060 { 17061 "description": "Wearer Clitoral Vibrators", 17062 - "feature-type": "Vibrate", 17063 "id": "018009d0-b5bf-4f97-a13d-909d0e74fabc", 17064 "output": { 17065 - "Vibrate": { 17066 - "step-range": [ 17067 0, 17068 20 17069 ] ··· 17232 { 17233 "features": [ 17234 { 17235 - "feature-type": "Oscillate", 17236 "id": "15cf412a-594b-4238-bbe0-7e9693233430", 17237 "output": { 17238 - "Vibrate": { 17239 - "step-range": [ 17240 0, 17241 99 17242 ] ··· 17253 { 17254 "features": [ 17255 { 17256 - "feature-type": "Oscillate", 17257 "id": "cc1f8c5c-40ff-4d44-91ca-4520042cf723", 17258 "output": { 17259 - "Vibrate": { 17260 - "step-range": [ 17261 0, 17262 99 17263 ]
··· 1 { 2 "version": { 3 "major": 4, 4 + "minor": 95 5 }, 6 "protocols": { 7 "activejoy": { ··· 2297 { 2298 "features": [ 2299 { 2300 + "description": "Oscillate", 2301 "id": "dc4348f2-7788-4b63-96f8-80ed74e4f9c2", 2302 "output": { 2303 + "oscillate": { 2304 "value": [ 2305 0, 2306 100 ··· 4400 { 4401 "features": [ 4402 { 4403 "id": "c24a6b8c-6665-4cf6-95f8-51140f9788b4", 4404 "output": { 4405 + "spray": { 4406 + "value": [ 4407 0, 4408 1 4409 ] ··· 7783 { 7784 "features": [ 7785 { 7786 "id": "12f36e6d-e9ce-439c-b6f5-3f80a4f4b47d", 7787 "output": { 7788 + "oscillate": { 7789 + "value": [ 7790 0, 7791 255 7792 ] ··· 7794 } 7795 }, 7796 { 7797 "id": "94025679-badf-49bb-a247-1dab022d9204", 7798 "output": { 7799 + "vibrate": { 7800 + "value": [ 7801 0, 7802 255 7803 ] ··· 7957 "defaults": { 7958 "features": [ 7959 { 7960 "id": "8829c78b-420c-42e0-bc3e-280f84c89362", 7961 "output": { 7962 + "vibrate": { 7963 + "value": [ 7964 0, 7965 100 7966 ] ··· 7968 } 7969 }, 7970 { 7971 "id": "019e23e5-bcba-41c8-913d-03a7da63feee", 7972 "output": { 7973 + "vibrate": { 7974 + "value": [ 7975 0, 7976 100 7977 ] ··· 7980 }, 7981 { 7982 "description": "Battery Level", 7983 "id": "eba92a5d-4284-4170-b5e9-3e0700e4529e", 7984 "input": { 7985 + "battery": { 7986 + "input_commands": [ 7987 "Read" 7988 ], 7989 + "value_range": [ 7990 [ 7991 0, 7992 100 ··· 8376 } 8377 }, 8378 { 8379 "id": "1e1fb78c-a3bd-4782-8a96-684bbbaa4670", 8380 "output": { 8381 + "vibrate": { 8382 + "value": [ 8383 0, 8384 100 8385 ] ··· 8987 { 8988 "features": [ 8989 { 8990 "id": "f4ee99e7-1a14-4315-9870-3990bca7ff94", 8991 "output": { 8992 + "position_with_duration": { 8993 + "duration": [ 8994 + 0, 8995 + 100000 8996 + ], 8997 + "position": [ 8998 0, 8999 99 9000 ] ··· 9003 }, 9004 { 9005 "description": "Battery Level", 9006 "id": "90319514-ff68-40ae-805d-54ce392a60bd", 9007 "input": { 9008 + "battery": { 9009 + "input_commands": [ 9010 "Read" 9011 ], 9012 + "value_range": [ 9013 [ 9014 0, 9015 100 ··· 11859 { 11860 "features": [ 11861 { 11862 "id": "8deea69f-ea53-46bb-80ae-51dd5d49bba9", 11863 "output": { 11864 + "vibrate": { 11865 + "value": [ 11866 0, 11867 255 11868 ] ··· 11870 } 11871 }, 11872 { 11873 "id": "5ae8bb6f-6280-4a8d-9e08-a3d5e5fb89a8", 11874 "output": { 11875 + "sscillate": { 11876 + "value": [ 11877 0, 11878 255 11879 ] ··· 11890 { 11891 "features": [ 11892 { 11893 "id": "4dd378c8-a91b-400e-846b-f16e81ac5690", 11894 "output": { 11895 + "vibrate": { 11896 + "value": [ 11897 0, 11898 255 11899 ] ··· 11901 } 11902 }, 11903 { 11904 "id": "c04a2518-81a2-49cb-8a0a-1a5b9c163737", 11905 "output": { 11906 + "vibrate": { 11907 + "value": [ 11908 0, 11909 255 11910 ] ··· 11921 { 11922 "features": [ 11923 { 11924 "id": "e04ad6f5-278e-4acc-b6fa-711954c2e1ab", 11925 "output": { 11926 + "vibrate": { 11927 + "value": [ 11928 0, 11929 255 11930 ] ··· 11932 } 11933 }, 11934 { 11935 "id": "8a4f2884-887f-46e3-9a36-c0b91b1b1363", 11936 "output": { 11937 + "oscillate": { 11938 + "value": [ 11939 0, 11940 255 11941 ] ··· 11943 } 11944 }, 11945 { 11946 "id": "389aa8b8-2550-462c-bd4f-1158c0981606", 11947 "output": { 11948 + "constrict": { 11949 + "value": [ 11950 0, 11951 54 11952 ] ··· 16633 { 16634 "features": [ 16635 { 16636 "id": "4464ae6b-20bc-4c99-9e63-bfda99b7c8cc", 16637 "output": { 16638 + "constrict": { 16639 + "value": [ 16640 0, 16641 100 16642 ] ··· 17020 "features": [ 17021 { 17022 "description": "Wearer Vibrator", 17023 "id": "968f7306-6997-4b76-a40f-acbb431d9582", 17024 "output": { 17025 + "oscillate": { 17026 + "value": [ 17027 0, 17028 20 17029 ] ··· 17032 }, 17033 { 17034 "description": "Receiver Vibrator", 17035 "id": "018009d0-b5bf-4f97-a13d-909d0e74fabc", 17036 "output": { 17037 + "vibrate": { 17038 + "value": [ 17039 0, 17040 20 17041 ] ··· 17044 }, 17045 { 17046 "description": "Wearer Clitoral Vibrators", 17047 "id": "018009d0-b5bf-4f97-a13d-909d0e74fabc", 17048 "output": { 17049 + "vibrate": { 17050 + "value": [ 17051 0, 17052 20 17053 ] ··· 17216 { 17217 "features": [ 17218 { 17219 "id": "15cf412a-594b-4238-bbe0-7e9693233430", 17220 "output": { 17221 + "vibrate": { 17222 + "value": [ 17223 0, 17224 99 17225 ] ··· 17236 { 17237 "features": [ 17238 { 17239 "id": "cc1f8c5c-40ff-4d44-91ca-4520042cf723", 17240 "output": { 17241 + "vibrate": { 17242 + "value": [ 17243 0, 17244 99 17245 ]
+2 -2
crates/buttplug_server_device_config/device-config-v4/protocols/fredorch.yml
··· 11 - 0 12 - 100000 13 # Disable Oscillate for now 14 - # Oscillate: 15 - # step-range: 16 # - 0 17 # - 20 18 id: cbd6a5b5-50c0-4fb5-93e3-408fd027ff4d
··· 11 - 0 12 - 100000 13 # Disable Oscillate for now 14 + # oscillate: 15 + # value: 16 # - 0 17 # - 20 18 id: cbd6a5b5-50c0-4fb5-93e3-408fd027ff4d
+3 -4
crates/buttplug_server_device_config/device-config-v4/protocols/hismith-mini.yml
··· 165 - '4002' 166 name: Sinloli Piupiu 167 features: 168 - - feature-type: Spray 169 - id: c24a6b8c-6665-4cf6-95f8-51140f9788b4 170 output: 171 - Spray: 172 - step-range: 173 - 0 174 - 1 175 id: ae9c755d-a11f-43c3-9cce-1c3797788434
··· 165 - '4002' 166 name: Sinloli Piupiu 167 features: 168 + - id: c24a6b8c-6665-4cf6-95f8-51140f9788b4 169 output: 170 + spray: 171 + value: 172 - 0 173 - 1 174 id: ae9c755d-a11f-43c3-9cce-1c3797788434
+6 -8
crates/buttplug_server_device_config/device-config-v4/protocols/joyhub-v5.yml
··· 41 - J-Perseus 42 name: JoyHub Perseus 43 features: 44 - - feature-type: Oscillate 45 - id: 12f36e6d-e9ce-439c-b6f5-3f80a4f4b47d 46 output: 47 - Oscillate: 48 - step-range: 49 - 0 50 - 255 51 - - feature-type: Vibrate 52 - id: 94025679-badf-49bb-a247-1dab022d9204 53 output: 54 - Vibrate: 55 - step-range: 56 - 0 57 - 255 58 id: c31f74b8-c859-47ab-8b1c-66745cb11355
··· 41 - J-Perseus 42 name: JoyHub Perseus 43 features: 44 + - id: 12f36e6d-e9ce-439c-b6f5-3f80a4f4b47d 45 output: 46 + oscillate: 47 + value: 48 - 0 49 - 255 50 + - id: 94025679-badf-49bb-a247-1dab022d9204 51 output: 52 + vibrate: 53 + value: 54 - 0 55 - 255 56 id: c31f74b8-c859-47ab-8b1c-66745cb11355
+10 -13
crates/buttplug_server_device_config/device-config-v4/protocols/kiiroo-powershot.yml
··· 1 defaults: 2 name: Kiiroo PowerShot 3 features: 4 - - feature-type: Vibrate 5 - id: 8829c78b-420c-42e0-bc3e-280f84c89362 6 output: 7 - Vibrate: 8 - step-range: 9 - 0 10 - 100 11 - - feature-type: Vibrate 12 - id: 019e23e5-bcba-41c8-913d-03a7da63feee 13 output: 14 - Vibrate: 15 - step-range: 16 - 0 17 - 100 18 - - feature-type: Battery 19 - description: Battery Level 20 id: eba92a5d-4284-4170-b5e9-3e0700e4529e 21 input: 22 - Battery: 23 - value-range: 24 - - 0 25 - 100 26 - input-commands: 27 - Read 28 id: 1929575e-bc47-4db8-bee2-f9fc60c438b5 29 communication:
··· 1 defaults: 2 name: Kiiroo PowerShot 3 features: 4 + - id: 8829c78b-420c-42e0-bc3e-280f84c89362 5 output: 6 + vibrate: 7 + value: 8 - 0 9 - 100 10 + - id: 019e23e5-bcba-41c8-913d-03a7da63feee 11 output: 12 + vibrate: 13 + value: 14 - 0 15 - 100 16 + - description: Battery Level 17 id: eba92a5d-4284-4170-b5e9-3e0700e4529e 18 input: 19 + battery: 20 + value_range: 21 - - 0 22 - 100 23 + input_commands: 24 - Read 25 id: 1929575e-bc47-4db8-bee2-f9fc60c438b5 26 communication:
+3 -4
crates/buttplug_server_device_config/device-config-v4/protocols/kiiroo-v2-vibrator.yml
··· 82 value: 83 - 0 84 - 100 85 - - feature-type: Vibrate 86 - id: 1e1fb78c-a3bd-4782-8a96-684bbbaa4670 87 output: 88 - Vibrate: 89 - step-range: 90 - 0 91 - 100 92 id: d78facf3-706c-44ec-98e8-c4e7baba5966
··· 82 value: 83 - 0 84 - 100 85 + - id: 1e1fb78c-a3bd-4782-8a96-684bbbaa4670 86 output: 87 + vibrate: 88 + value: 89 - 0 90 - 100 91 id: d78facf3-706c-44ec-98e8-c4e7baba5966
+10 -9
crates/buttplug_server_device_config/device-config-v4/protocols/kiiroo-v3.yml
··· 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:
··· 8 - Keon Wifi 9 name: Kiiroo Keon 10 features: 11 + - id: f4ee99e7-1a14-4315-9870-3990bca7ff94 12 output: 13 + position_with_duration: 14 + position: 15 - 0 16 - 99 17 + duration: 18 + - 0 19 + - 100000 20 + - description: Battery Level 21 id: 90319514-ff68-40ae-805d-54ce392a60bd 22 input: 23 + battery: 24 + value_range: 25 - - 0 26 - 100 27 + input_commands: 28 - Read 29 id: 62ba81c4-0ada-41be-b49d-d53426cdc277 30 communication:
+24 -32
crates/buttplug_server_device_config/device-config-v4/protocols/luvmazer.yml
··· 23 - TKLM-W003-BT-RX 24 name: Luvmazer Cat Paw 25 features: 26 - - feature-type: Vibrate 27 - id: 8deea69f-ea53-46bb-80ae-51dd5d49bba9 28 output: 29 - Vibrate: 30 - step-range: 31 - 0 32 - 255 33 - - feature-type: Oscillate 34 - id: 5ae8bb6f-6280-4a8d-9e08-a3d5e5fb89a8 35 output: 36 - Oscillate: 37 - step-range: 38 - 0 39 - 255 40 - #- feature-type: Inflate 41 - # id: 4a0abbbd-75b6-4034-8012-2be2f1442c1c 42 # output: 43 - # Inflate: 44 - # step-range: 45 # - 0 46 # - 1 47 id: 54723a02-4d77-4d58-90ee-1e692768db9d ··· 49 - TKLM-C003-BT 50 name: Luvmazer Cock Ring 51 features: 52 - - feature-type: Vibrate 53 - id: 4dd378c8-a91b-400e-846b-f16e81ac5690 54 output: 55 - Vibrate: 56 - step-range: 57 - 0 58 - 255 59 - - feature-type: Vibrate 60 - id: c04a2518-81a2-49cb-8a0a-1a5b9c163737 61 output: 62 - Vibrate: 63 - step-range: 64 - 0 65 - 255 66 id: 3f3cb905-d570-41dc-80ed-720762770093 ··· 68 - TKLM-C004-BT 69 name: Luvmazer Interstellar 70 features: 71 - - feature-type: Vibrate 72 - id: e04ad6f5-278e-4acc-b6fa-711954c2e1ab 73 output: 74 - Vibrate: 75 - step-range: 76 - 0 77 - 255 78 - - feature-type: Oscillate 79 - id: 8a4f2884-887f-46e3-9a36-c0b91b1b1363 80 output: 81 - Oscillate: 82 - step-range: 83 - 0 84 - 255 85 - - feature-type: Constrict 86 - id: 389aa8b8-2550-462c-bd4f-1158c0981606 87 output: 88 - Constrict: 89 - step-range: 90 - 0 91 - 54 92 id: d76d8d49-beca-49f3-931e-5a040b463111
··· 23 - TKLM-W003-BT-RX 24 name: Luvmazer Cat Paw 25 features: 26 + - id: 8deea69f-ea53-46bb-80ae-51dd5d49bba9 27 output: 28 + vibrate: 29 + value: 30 - 0 31 - 255 32 + - id: 5ae8bb6f-6280-4a8d-9e08-a3d5e5fb89a8 33 output: 34 + sscillate: 35 + value: 36 - 0 37 - 255 38 + #- id: 4a0abbbd-75b6-4034-8012-2be2f1442c1c 39 # output: 40 + # inflate: 41 + # value: 42 # - 0 43 # - 1 44 id: 54723a02-4d77-4d58-90ee-1e692768db9d ··· 46 - TKLM-C003-BT 47 name: Luvmazer Cock Ring 48 features: 49 + - id: 4dd378c8-a91b-400e-846b-f16e81ac5690 50 output: 51 + vibrate: 52 + value: 53 - 0 54 - 255 55 + - id: c04a2518-81a2-49cb-8a0a-1a5b9c163737 56 output: 57 + vibrate: 58 + value: 59 - 0 60 - 255 61 id: 3f3cb905-d570-41dc-80ed-720762770093 ··· 63 - TKLM-C004-BT 64 name: Luvmazer Interstellar 65 features: 66 + - id: e04ad6f5-278e-4acc-b6fa-711954c2e1ab 67 output: 68 + vibrate: 69 + value: 70 - 0 71 - 255 72 + - id: 8a4f2884-887f-46e3-9a36-c0b91b1b1363 73 output: 74 + oscillate: 75 + value: 76 - 0 77 - 255 78 + - id: 389aa8b8-2550-462c-bd4f-1158c0981606 79 output: 80 + constrict: 81 + value: 82 - 0 83 - 54 84 id: d76d8d49-beca-49f3-931e-5a040b463111
+3 -4
crates/buttplug_server_device_config/device-config-v4/protocols/sensee-v2.yml
··· 129 - "qingnan#16" 130 name: "Qingnan #16" 131 features: 132 - - feature-type: Constrict 133 - id: 4464ae6b-20bc-4c99-9e63-bfda99b7c8cc 134 output: 135 - Constrict: 136 - step-range: 137 - 0 138 - 100 139 id: 00dc1d7e-9ede-4ae5-95f6-bd70363de806
··· 129 - "qingnan#16" 130 name: "Qingnan #16" 131 features: 132 + - id: 4464ae6b-20bc-4c99-9e63-bfda99b7c8cc 133 output: 134 + constrict: 135 + value: 136 - 0 137 - 100 138 id: 00dc1d7e-9ede-4ae5-95f6-bd70363de806
+9 -12
crates/buttplug_server_device_config/device-config-v4/protocols/sexverse-v2.yml
··· 47 - NBQ-B619RX 48 name: Duopeak Saphette 49 features: 50 - - feature-type: Vibrate 51 - description: Wearer Vibrator 52 id: 968f7306-6997-4b76-a40f-acbb431d9582 53 output: 54 - Oscillate: 55 - step-range: 56 - 0 57 - 20 58 - - feature-type: Vibrate 59 - description: Receiver Vibrator 60 id: 018009d0-b5bf-4f97-a13d-909d0e74fabc 61 output: 62 - Vibrate: 63 - step-range: 64 - 0 65 - 20 66 - - feature-type: Vibrate 67 - description: Wearer Clitoral Vibrators 68 id: 018009d0-b5bf-4f97-a13d-909d0e74fabc 69 output: 70 - Vibrate: 71 - step-range: 72 - 0 73 - 20 74 id: 0e1f9fe7-22d9-4afb-9fe5-192b8e5508c3
··· 47 - NBQ-B619RX 48 name: Duopeak Saphette 49 features: 50 + - description: Wearer Vibrator 51 id: 968f7306-6997-4b76-a40f-acbb431d9582 52 output: 53 + oscillate: 54 + value: 55 - 0 56 - 20 57 + - description: Receiver Vibrator 58 id: 018009d0-b5bf-4f97-a13d-909d0e74fabc 59 output: 60 + vibrate: 61 + value: 62 - 0 63 - 20 64 + - description: Wearer Clitoral Vibrators 65 id: 018009d0-b5bf-4f97-a13d-909d0e74fabc 66 output: 67 + vibrate: 68 + value: 69 - 0 70 - 20 71 id: 0e1f9fe7-22d9-4afb-9fe5-192b8e5508c3
+6 -8
crates/buttplug_server_device_config/device-config-v4/protocols/sexverse-v4.yml
··· 17 - BC1847 18 name: Sexverse Black Knight 19 features: 20 - - feature-type: Oscillate 21 - id: 15cf412a-594b-4238-bbe0-7e9693233430 22 output: 23 - Vibrate: 24 - step-range: 25 - 0 26 - 99 27 id: 774c0fd8-d2a5-415c-b0b0-90d244be0a05 ··· 29 - BC1847 30 name: Sexverse Dark Knight 31 features: 32 - - feature-type: Oscillate 33 - id: cc1f8c5c-40ff-4d44-91ca-4520042cf723 34 output: 35 - Vibrate: 36 - step-range: 37 - 0 38 - 99 39 id: 99333be9-450f-4092-b776-dd4de1eff244
··· 17 - BC1847 18 name: Sexverse Black Knight 19 features: 20 + - id: 15cf412a-594b-4238-bbe0-7e9693233430 21 output: 22 + vibrate: 23 + value: 24 - 0 25 - 99 26 id: 774c0fd8-d2a5-415c-b0b0-90d244be0a05 ··· 28 - BC1847 29 name: Sexverse Dark Knight 30 features: 31 + - id: cc1f8c5c-40ff-4d44-91ca-4520042cf723 32 output: 33 + vibrate: 34 + value: 35 - 0 36 - 99 37 id: 99333be9-450f-4092-b776-dd4de1eff244
+1 -1
crates/buttplug_server_device_config/device-config-v4/version.yaml
··· 1 version: 2 major: 4 3 - minor: 94
··· 1 version: 2 major: 4 3 + minor: 95
+1 -1
crates/buttplug_tests/tests/test_device_config.rs
··· 213 { 214 "description": "Test Speed", 215 "actuator": { 216 - "step-range": [ 217 10 218 ], 219 "messages": [
··· 213 { 214 "description": "Test Speed", 215 "actuator": { 216 + "value": [ 217 10 218 ], 219 "messages": [
+1 -3
crates/buttplug_tests/tests/util/device_test/device_test_case/config/lovense_ridge_user_config_invalid_range.json
··· 17 "base_id": "c8633234-07a4-4ad9-961d-a4d777b32be7", 18 "features": [ 19 { 20 - "feature-type": "Oscillate", 21 "description": "Fucking Machine Oscillation Speed", 22 "output": { 23 "oscillate": { 24 - "step_range": [ 25 0, 26 30 27 ], ··· 35 "id": "56d94863-b321-428b-8b68-bac0197556e2" 36 }, 37 { 38 - "feature-type": "Battery", 39 "description": "Battery Level", 40 "input": { 41 "battery": {
··· 17 "base_id": "c8633234-07a4-4ad9-961d-a4d777b32be7", 18 "features": [ 19 { 20 "description": "Fucking Machine Oscillation Speed", 21 "output": { 22 "oscillate": { 23 + "value": [ 24 0, 25 30 26 ], ··· 34 "id": "56d94863-b321-428b-8b68-bac0197556e2" 35 }, 36 { 37 "description": "Battery Level", 38 "input": { 39 "battery": {