stpihkal icon indicating copy to clipboard operation
stpihkal copied to clipboard

Add documentation for Twerking Butt

Open blackspherefollower opened this issue 5 years ago • 0 comments

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

blackspherefollower avatar Sep 12 '19 14:09 blackspherefollower