Skip to content

Commit 0e2ca55

Browse files
blackspherefollowerqdot
authored andcommitted
feat: Adding support for the Omobo ViVegg Vibrator (S6) and Kisstoy Lost (3 versions)
1 parent e973212 commit 0e2ca55

File tree

6 files changed

+376
-1
lines changed

6 files changed

+376
-1
lines changed

buttplug/buttplug-device-config/build-config/buttplug-device-config-v3.json

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13289,6 +13289,153 @@
1328913289
}
1329013290
]
1329113291
},
13292+
{
13293+
"identifier": [
13294+
"QCVW"
13295+
],
13296+
"name": "Kisstoy Lost (Vibrating)",
13297+
"features": [
13298+
{
13299+
"feature-type": "Vibrate",
13300+
"description": "Vibrate",
13301+
"actuator": {
13302+
"step-range": [
13303+
0,
13304+
100
13305+
],
13306+
"messages": [
13307+
"ScalarCmd"
13308+
]
13309+
}
13310+
},
13311+
{
13312+
"feature-type": "Vibrate",
13313+
"description": "Vibrate",
13314+
"actuator": {
13315+
"step-range": [
13316+
0,
13317+
100
13318+
],
13319+
"messages": [
13320+
"ScalarCmd"
13321+
]
13322+
}
13323+
},
13324+
{
13325+
"feature-type": "Battery",
13326+
"description": "Battery Level",
13327+
"sensor": {
13328+
"value-range": [
13329+
[
13330+
0,
13331+
100
13332+
]
13333+
],
13334+
"messages": [
13335+
"SensorReadCmd"
13336+
]
13337+
}
13338+
}
13339+
]
13340+
},
13341+
{
13342+
"identifier": [
13343+
"QCSW"
13344+
],
13345+
"name": "Kisstoy Lost (Sucking)",
13346+
"features": [
13347+
{
13348+
"feature-type": "Vibrate",
13349+
"description": "Vibrate",
13350+
"actuator": {
13351+
"step-range": [
13352+
0,
13353+
100
13354+
],
13355+
"messages": [
13356+
"ScalarCmd"
13357+
]
13358+
}
13359+
},
13360+
{
13361+
"feature-type": "Vibrate",
13362+
"description": "Vibrate",
13363+
"actuator": {
13364+
"step-range": [
13365+
0,
13366+
100
13367+
],
13368+
"messages": [
13369+
"ScalarCmd"
13370+
]
13371+
}
13372+
},
13373+
{
13374+
"feature-type": "Battery",
13375+
"description": "Battery Level",
13376+
"sensor": {
13377+
"value-range": [
13378+
[
13379+
0,
13380+
100
13381+
]
13382+
],
13383+
"messages": [
13384+
"SensorReadCmd"
13385+
]
13386+
}
13387+
}
13388+
]
13389+
},
13390+
{
13391+
"identifier": [
13392+
"QCPW"
13393+
],
13394+
"name": "Kisstoy Lost (Insertable)",
13395+
"features": [
13396+
{
13397+
"feature-type": "Vibrate",
13398+
"description": "Vibrate",
13399+
"actuator": {
13400+
"step-range": [
13401+
0,
13402+
100
13403+
],
13404+
"messages": [
13405+
"ScalarCmd"
13406+
]
13407+
}
13408+
},
13409+
{
13410+
"feature-type": "Vibrate",
13411+
"description": "Vibrate",
13412+
"actuator": {
13413+
"step-range": [
13414+
0,
13415+
100
13416+
],
13417+
"messages": [
13418+
"ScalarCmd"
13419+
]
13420+
}
13421+
},
13422+
{
13423+
"feature-type": "Battery",
13424+
"description": "Battery Level",
13425+
"sensor": {
13426+
"value-range": [
13427+
[
13428+
0,
13429+
100
13430+
]
13431+
],
13432+
"messages": [
13433+
"SensorReadCmd"
13434+
]
13435+
}
13436+
}
13437+
]
13438+
},
1329213439
{
1329313440
"identifier": [
1329413441
"TFG1"
@@ -13610,6 +13757,9 @@
1361013757
"G403",
1361113758
"G43A",
1361213759
"K12B",
13760+
"QCVW",
13761+
"QCSW",
13762+
"QCPW",
1361313763
"TFG1",
1361413764
"GK27",
1361513765
"GK25",
@@ -18256,6 +18406,39 @@
1825618406
}
1825718407
}
1825818408
]
18409+
},
18410+
"omobo": {
18411+
"defaults": {
18412+
"name": "Omobo ViVegg Vibrator",
18413+
"features": [
18414+
{
18415+
"feature-type": "Vibrate",
18416+
"actuator": {
18417+
"step-range": [
18418+
0,
18419+
100
18420+
],
18421+
"messages": [
18422+
"ScalarCmd"
18423+
]
18424+
}
18425+
}
18426+
]
18427+
},
18428+
"communication": [
18429+
{
18430+
"btle": {
18431+
"names": [
18432+
"S6"
18433+
],
18434+
"services": {
18435+
"0000ffb0-0000-1000-8000-00805f9b34fb": {
18436+
"tx": "0000ffb2-0000-1000-8000-00805f9b34fb"
18437+
}
18438+
}
18439+
}
18440+
}
18441+
]
1825918442
}
1826018443
}
1826118444
}

buttplug/buttplug-device-config/device-config-v3/buttplug-device-config-v3.yml

Lines changed: 106 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7558,6 +7558,90 @@ protocols:
75587558
- 100
75597559
messages:
75607560
- SensorReadCmd
7561+
- identifier:
7562+
- QCVW
7563+
name: Kisstoy Lost (Vibrating)
7564+
features:
7565+
- feature-type: Vibrate
7566+
description: Vibrate
7567+
actuator:
7568+
step-range:
7569+
- 0
7570+
- 100
7571+
messages:
7572+
- ScalarCmd
7573+
- feature-type: Vibrate
7574+
description: Vibrate
7575+
actuator:
7576+
step-range:
7577+
- 0
7578+
- 100
7579+
messages:
7580+
- ScalarCmd
7581+
- feature-type: Battery
7582+
description: Battery Level
7583+
sensor:
7584+
value-range:
7585+
- - 0
7586+
- 100
7587+
messages:
7588+
- SensorReadCmd
7589+
- identifier:
7590+
- QCSW
7591+
name: Kisstoy Lost (Sucking)
7592+
features:
7593+
- feature-type: Vibrate
7594+
description: Vibrate
7595+
actuator:
7596+
step-range:
7597+
- 0
7598+
- 100
7599+
messages:
7600+
- ScalarCmd
7601+
- feature-type: Vibrate
7602+
description: Vibrate
7603+
actuator:
7604+
step-range:
7605+
- 0
7606+
- 100
7607+
messages:
7608+
- ScalarCmd
7609+
- feature-type: Battery
7610+
description: Battery Level
7611+
sensor:
7612+
value-range:
7613+
- - 0
7614+
- 100
7615+
messages:
7616+
- SensorReadCmd
7617+
- identifier:
7618+
- QCPW
7619+
name: Kisstoy Lost (Insertable)
7620+
features:
7621+
- feature-type: Vibrate
7622+
description: Vibrate
7623+
actuator:
7624+
step-range:
7625+
- 0
7626+
- 100
7627+
messages:
7628+
- ScalarCmd
7629+
- feature-type: Vibrate
7630+
description: Vibrate
7631+
actuator:
7632+
step-range:
7633+
- 0
7634+
- 100
7635+
messages:
7636+
- ScalarCmd
7637+
- feature-type: Battery
7638+
description: Battery Level
7639+
sensor:
7640+
value-range:
7641+
- - 0
7642+
- 100
7643+
messages:
7644+
- SensorReadCmd
75617645
# Type 2
75627646
- identifier:
75637647
- TFG1
@@ -7780,6 +7864,9 @@ protocols:
77807864
- G403
77817865
- G43A
77827866
- K12B
7867+
- QCVW
7868+
- QCSW
7869+
- QCPW
77837870
# Type 2
77847871
- TFG1
77857872
- GK27
@@ -10467,4 +10554,22 @@ protocols:
1046710554
- 火箭X7
1046810555
services:
1046910556
0000ae00-0000-1000-8000-00805f9b34fb:
10470-
tx: 0000ae01-0000-1000-8000-00805f9b34fb
10557+
tx: 0000ae01-0000-1000-8000-00805f9b34fb
10558+
omobo:
10559+
defaults:
10560+
name: Omobo ViVegg Vibrator
10561+
features:
10562+
- feature-type: Vibrate
10563+
actuator:
10564+
step-range:
10565+
- 0
10566+
- 100
10567+
messages:
10568+
- ScalarCmd
10569+
communication:
10570+
- btle:
10571+
names:
10572+
- S6
10573+
services:
10574+
0000ffb0-0000-1000-8000-00805f9b34fb:
10575+
tx: 0000ffb2-0000-1000-8000-00805f9b34fb

buttplug/src/server/device/protocol/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ pub mod nextlevelracing;
9191
pub mod nexus_revo;
9292
pub mod nintendo_joycon;
9393
pub mod nobra;
94+
pub mod omobo;
9495
pub mod patoo;
9596
pub mod picobong;
9697
pub mod pink_punch;
@@ -486,6 +487,7 @@ pub fn get_default_protocol_map() -> HashMap<String, Arc<dyn ProtocolIdentifierF
486487
nintendo_joycon::setup::NintendoJoyconIdentifierFactory::default(),
487488
);
488489
add_to_protocol_map(&mut map, nobra::setup::NobraIdentifierFactory::default());
490+
add_to_protocol_map(&mut map, omobo::setup::OmoboIdentifierFactory::default());
489491
add_to_protocol_map(&mut map, patoo::setup::PatooIdentifierFactory::default());
490492
add_to_protocol_map(
491493
&mut map,
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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::{
9+
core::{errors::ButtplugDeviceError, message::Endpoint},
10+
server::device::{
11+
hardware::{HardwareCommand, HardwareWriteCmd},
12+
protocol::{generic_protocol_setup, ProtocolHandler},
13+
},
14+
};
15+
16+
generic_protocol_setup!(Omobo, "omobo");
17+
18+
#[derive(Default)]
19+
pub struct Omobo {}
20+
21+
impl ProtocolHandler for Omobo {
22+
fn keepalive_strategy(&self) -> super::ProtocolKeepaliveStrategy {
23+
super::ProtocolKeepaliveStrategy::RepeatLastPacketStrategy
24+
}
25+
26+
fn handle_scalar_vibrate_cmd(
27+
&self,
28+
_index: u32,
29+
scalar: u32,
30+
) -> Result<Vec<HardwareCommand>, ButtplugDeviceError> {
31+
Ok(vec![HardwareWriteCmd::new(
32+
Endpoint::Tx,
33+
vec![0xa1, 0x04, 0x04, 0x01, scalar as u8, 0xff, 0x55],
34+
true,
35+
)
36+
.into()])
37+
}
38+
}

0 commit comments

Comments
 (0)