Skip to main content

Syncbot Protocol

Introduction

The Syncbot is a BLE-connected automated masturbator. It uses a single characteristic for both Tx and Rx. The data bytes (stroke, rotation, grip) are XOR-encrypted with a key embedded in each packet.

BLE Profile

ble_names:
- "V"
services:
- uuid: "0000ffe0-0000-1000-8000-00805f9b34fb"
characteristics:
- uuid: "0000ffe1-0000-1000-8000-00805f9b34fb"
properties: [write, notify]
role: both
description: "Command and response"

Tx Message Format

All messages are 19 bytes.

Connection Initialization

f0 c8 2c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e4

Command Submission

Example: f0 c9 57 51 95 fd 21 00 c2 57 d1 c2 97 60 00 00 00 00 b7

ByteFieldDescription
0SignatureAlways 0xF0
1SignatureAlways 0xC9
2Stroke (encrypted)0 (pull) – 255 (push)
3Rotation (encrypted)0 (CCW) – 255 (CW); 128 = neutral
4Grip (encrypted)38 (CCW) – 216 (CW); 128 = neutral
5Unused (encrypted)???
6Checksum 1Sum of unencrypted bytes 2–5
7–13Encryption key + metadataSee encryption section
14–17NullAlways 0x00
18Checksum 2Sum of bytes 0–17 mod 256 (including encrypted values)

Encryption

Bytes 2–5 are XOR-encrypted. The encryption key is transmitted alongside the data in bytes 7–13 (exact positions unclear). Each packet can be decrypted independently using its embedded key.

Rx Message Format

ByteDescription
0–6???
7Status flags (bit 6 from MSB may indicate power source connection)
8Null?
9Frame ID
10–17???
18Checksum (sum of bytes 0–17 mod 256)

Notes

  • Checksum 1 (byte 6) uses unencrypted values; checksum 2 (byte 18) uses encrypted values.
  • Grip range is asymmetric around neutral (38–216 vs expected 0–255).
  • Power source detection via byte 7 status flags has not been confirmed.

Sources