Drmn' Trance Vibrator Technical Resources

The Basics: Using Drmn' Trance Vibe with a PC

If using the Drmn' Trance Vibe with a general-purpose PC (Windows, Mac, Linux), you may need to install a driver. Since there are several possible approaches to this on each OS, you should consult the README of the program(s) you'll be using to control the vibe; they should indicate which driver the program is written for. Generally, the following are commonly used:

If installing drivers for Windows, it's a good idea to take this time to plug the Trance Vibrator into each USB port in turn and follow the driver install prompts, so you don't get hounded for drivers again in the future. For technical reasons described here, Windows requires a separate instance of the driver for each port. For privacy reasons, the Drmn' Trance Vibe does not and will not contain a unique machine-readable Serial Number*.

* Drmn Trance Vibe V2 technically have a serial number, but it is hand-written on the board. You can see it, the computer can't.

Controlling the Vibe / Developing Trance Vibe Applications

The Trance Vibrator may be controlled using any USB1.1 or USB2.0 compliant host, using any language that can interface with the USB port. The vibe follows the simple "Rez" protocol. Please refer to the OpenDildonics.org Trance Vibrator page for detailed documentation of the Rez protocol. This page also has links to several open-source interface programs that can be used as examples (or starting points) for writing your own custom interface application. Please note that in newfangled 64-bit Microsoft OSes (Vista x64, Windows 7), the use of a device driver has been deprecated in favor of the OS' built-in user-mode WinUSB interface. Due to the advent of mandatory driver signature enforcement, the normal libusb-win32 driver approach cannot be used on these OSes without annoying workarounds. Some options are to provide a separate x64 build, or to detect the OS and select between libusb-win32 or WinUSB accordingly. (Sorry folks, that's a pain in the ass, but you know who to thank.)

Kyle Machulis has written libtrancevibe, an open-source, cross-platform interface library for Windows and Mac OSX / Linux. At the time of this writing, binaries are only available for OSX (although you can build your own from source). It will still need the appropriate libusb(-win32) for your platform installed, but your app should then be portable without changing your Trance Vibe interfacing code.

I have a GUI test utility written for Windows available, including source code. This is a c++ program using the open-source libusb-win32 library to talk to the port with no kernel/driver programming required.

Internal circuitry limits the maximum current the device can draw to about 500mA, the maximum a single bus-powered device is allowed to draw under the USB specifications. The Drmn' Trance Vibe's descriptors request the full 500mA from the port. To remain compliant with these specifications, the USB Host should not command operation of the motor if the power request is denied or the Host is otherwise unable or unwilling to supply the requested power (a situation that could arise on small laptops or palmtops running from battery power). V1 and V2 both comply fully to the Rez protocol, and the firmware is nearly identical (there are slight variations to account for different oscillator speeds and I/O pin numbering, so if you need to reload it for whatever reason, make sure you use the right one).

Protocol

The TranceVibrator has a USB Vendor ID (VID) of 0x0B49 and Product ID (PID) of 0x064F. Scanning the bus for this VID/PID combination is the only reliable way to identify all compatible devices (Drmn' Vibe, the original ASCII Trance Vibe, other future implementations, etc.) Other descriptors, notably the Manufacturer and Product strings, can be used to differentiate exact devices if necessary. The USB communication protocol of the TranceVibrator is very simple: commands are sent as an 8-byte Control Transfer on Endpoint 0; Request type = Vendor and Recipient = Interface. The only known command is to set the vibration intensity, a 1-byte unsigned value. The specific format of this command is:

bRequest: 0x00
wValue: Both bytes set to (unsigned char) vibration level
wIndex: Low byte is lower nibble of vibration level; high byte 0x03 always.
Count: 0x00 (no data phase)

Ex: setting vibration level to 0x42

bRequest: 0x00
wValue: 0x4242
wIndex: 0x0302
Count: 0x0000

Schematics, Boards and Firmware

There are now two versions of the Drmn' Trance Vibe, with their own design files and firmware. Follow the appropriate link below for the version you have.

V1

V2


Back to the Trance Vibrator project page!
Email: drmn4ea @ that google-y moogley mail place