stpihkal
stpihkal copied to clipboard
Add documentation for Twerking Butt
BLE names:
- BODIKANG
- Twerking Butt
- TwerkingButt
Service UUID :00000a60-0000-1000-8000-00805f9b34fb Tx Characteristic UUID: 00000a66-0000-1000-8000-00805f9b34fb Rx Characteristic UUID: 00000a67-0000-1000-8000-00805f9b34fb
Interestingly, not only does the device apparently report the temperature but also the motor status: unknown if it shuts itself down or if it requires the app to tell it to do so. There's also mention of what I assume is a device named 'Masturband'. Maybe some unreleased wearable?
Tx looks like:
- a6:61:11:08:02:30:02:30:30:02:d0:07:00:00:00:00 (pattern mode? [3]=08, [4]=pattern00-09)
- a6:61:13:05:46:46:00:00:38:00:00:00:00:00:00:00 (audio mode?)
- a6:61:10:02:00:00:00:00:00:00:00:00:00:00:00:00 (stop twerk mode)
- a6:61:12:02:00:00:00:00:00:00:00:00:00:00:00:00 (stop audio mode)
Rx has 2 types (see byte 2 which is either 11 or 44):
- a6:61:44:27:00:00:39:00:00:00:00:00:fb:a7:01:00
- a6:61:11:00:74:3f:00:20:10:00:00:00:09:a3:01:00
The first format way map to [ ?, ?, ?, Temperature, Firmware version, Motor status, Hardware version ] The second format is unknown but more common, so could be the current motor status.
The first 3 bytes are the header [ Logo, DeviceId, Command ] The new 13 bytes are command data, but not all are used: padded with 0x00
Logo = 0xA6 (-90) DeviceId = 0x61 (97) for the TwerkingButt (or 0x62 (98) for the Masturband) Command =
- Bind = 0x07 (07) ( data = [ 0x01, 0... ] )
- Unbind = 0x07 (07) ( data = [ 0x02, 0... ] )
- GetInfo = 0x0A (10) ( data = [ 0... ] )
- Update = 0x31 (49) ( data = [ 0... ] )
TwekingButt specific Commands:
- Start Audio Mode = 0x12 (18) ( data = [ 0x01, 0... ] )
- Send Audio Command = 0x13 (19) ( data = special )
- Stop Audio Mode = 0x12 (18) ( data = [ 0x02, 0... ] )
- Start Twerk Mode = 0x10 (16) ( data = [ 0x01, 0... ] )
- Send Twerk Command = 0x11 (17) ( data = special )
- Stop Twerk Mode = 0x10 (16) ( data = [ 0x02, 0... ] )
- Force Settings Simple = 0x10 (66) ( data = [ 0xA0, 0... ] )
- Force Settings No Simple = 0x10 (66) ( data = [ 0xA1, 0... ] )
Twerk mode data (with header) looks like:
a6:61:11:08:02:30:02:30:30:02:d0:07:00:00:00:00
AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP
A-C are the header as expressed above. D is always 08 E-J are passed in variables K-L is a 32-bit int that's split across 2 bits (53255 ->0xd0 0x07)
Music mode data (with header) looks like:
a6:61:13:05:46:46:00:00:38:00:00:00:00:00:00:00
AA:BB:CC:DD:EE:FF:GG:HH:II:JJ:KK:LL:MM:NN:OO:PP
A-C are the header as expressed above. D is always 05 E-I are passed in variable
Response data: Header, Header, Header, Temperature, Firmware version, Motor status, Hardware version, random padding... Motor status is 0 = fine, 1 = need to pause, 2 = overheat